- swithced to prefix "++"
authorAnatoly <Titov_AI@pnpi.nrcki.ru>
Wed, 14 Oct 2020 11:08:02 +0000 (14:08 +0300)
committerAnatoly <Titov_AI@pnpi.nrcki.ru>
Wed, 14 Oct 2020 11:08:02 +0000 (14:08 +0300)
- some stylistic changes
- changed quotes

src/domains.cpp
src/domaintests.cpp
src/domaintype.cpp
src/domaintype.h

index a03015f7ec5edf9b01714caf881de3122fbf7491..235b30a3d377a83c488966406e5d57736f8a99e4 100644 (file)
@@ -173,7 +173,7 @@ Domains::initAnalysis(const TrajectoryAnalysisSettings &settings,
 {
     // считывание индекса
     index.resize(0);
-    for (ArrayRef< const int >::iterator ai {selec.atomIndices().begin()}; (ai < selec.atomIndices().end()); ai++) {
+    for (ArrayRef< const int >::iterator ai {selec.atomIndices().begin()}; (ai < selec.atomIndices().end()); ++ai) {
         index.push_back(static_cast< size_t >(*ai));
     }
 
@@ -193,9 +193,9 @@ Domains::initAnalysis(const TrajectoryAnalysisSettings &settings,
     // создание пар для фитирования структур
     fitPairs.resize(0);
     fitPairs.resize(bone);
-    for (size_t i {0}; i < bone; i++) {
+    for (size_t i {0}; i < bone; ++i) {
         fitPairs[i].resize(0);
-        for (size_t j {0}; j < domain_min_size; j++) {
+        for (size_t j {0}; j < domain_min_size; ++j) {
             fitPairs[i].push_back(std::make_pair(j + i, j + i));
         }
     }
@@ -211,7 +211,7 @@ void
 Domains::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc, TrajectoryAnalysisModuleData *pdata)
 {
     // считывания текущего фрейма траектории
-    for (size_t i {0}; i < index.size(); i++) {
+    for (size_t i {0}; i < index.size(); ++i) {
         trajectory[i] = fr.x[index[i]];
     }
 
@@ -222,7 +222,7 @@ Domains::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc, TrajectoryAnal
 
     // фитирование каждой копии
     #pragma omp parallel for ordered schedule(dynamic) firstprivate(reference)
-    for (size_t i = 0; i < bone; i++) {
+    for (size_t i = 0; i < bone; ++i) {
         MyFitNew(reference, tsTemp[i], fitPairs[i], 0.000'001);
     }
     #pragma omp barrier
index d5295f0bf71ca55158ef98a68a2b0ea5829b9ec0..ce634c28133b3adf47fa45dbb11a49c4cce17dfb 100644 (file)
@@ -63,7 +63,7 @@ TEST( fitTests, fitTest_ApplyFit)
     std::vector< std::pair< size_t, size_t > > testPairs;
     testPairs.resize(0);
 
-    for (size_t i {0}; i < 27; i++) {
+    for (size_t i {0}; i < 27; ++i) {
         testFrame1.push_back(x1 * static_cast< float >(i % 3) + y1 * static_cast< float >((i % 9) / 3) + z1 * static_cast< float >(i / 9));
         testFrame2.push_back(x2 * static_cast< float >(i % 3) + y2 * static_cast< float >((i % 9) / 3) + z2 * static_cast< float >(i / 9));
         testPairs.push_back(std::make_pair(i, i));
@@ -94,7 +94,7 @@ TEST( fitTests, fitTest_ApplyFit)
     CalcMid(testFrame1, testFrame3, mid1, mid2, testPairs);
     ASSERT_NEAR((mid1 - mid2).norm(), 0., 0.000001);
     double testF {0};
-    for (size_t i {0}; i < testFrame1.size(); i++) {
+    for (size_t i {0}; i < testFrame1.size(); ++i) {
         testF += F(testFrame1[i].toDVec(), testFrame3[i].toDVec(), angl);
     }
     ASSERT_NEAR(testF, 0., 0.000001);
@@ -111,7 +111,7 @@ TEST( fitTests, fitTest_CalcMid)
     std::vector< std::pair< size_t, size_t > > testPairs;
     testPairs.resize(0);
 
-    for (size_t i {0}; i < 27; i++) {
+    for (size_t i {0}; i < 27; ++i) {
         testFrame1.push_back(x1 * static_cast< float >(i % 3) + y1 * static_cast< float >((i % 9) / 3) + z1 * static_cast< float >(i / 9));
         testFrame2.push_back(x2 * static_cast< float >(i % 3) + y2 * static_cast< float >((i % 9) / 3) + z2 * static_cast< float >(i / 9));
         testPairs.push_back(std::make_pair(i, i));
@@ -131,7 +131,7 @@ void myFitNewRoutine(const std::vector< RVec > &fr1, std::vector< RVec > fr2, co
     MyFitNew(fr1, fr2, testPairs, prc);
     tF = 0;
     DVec angl(0., 0., 0.);
-    for (size_t i {0}; i < fr1.size(); i++) {
+    for (size_t i {0}; i < fr1.size(); ++i) {
         tF += F(fr1[i].toDVec(), fr2[i].toDVec(), angl);
     }
 }
@@ -153,7 +153,7 @@ TEST( fitTests, fitTest_MyFitNew)
      * optimal 3x3x3 cubes fitting
     */
 
-    for (size_t i {0}; i < 27; i++) {
+    for (size_t i {0}; i < 27; ++i) {
         testFrame1.push_back(x1 * static_cast< float >(i % 3) + y1 * static_cast< float >((i % 9) / 3) + z1 * static_cast< float >(i / 9));
         testFrame2.push_back(testFrame1.back() + a);
         testPairs.push_back(std::make_pair(i, i));
@@ -208,7 +208,7 @@ TEST( fitTests, fitTest_MyFitNew)
 
     testFrame1.resize(0);
     testFrame2.resize(0);
-    for (size_t i {0}; i < 27; i++) {
+    for (size_t i {0}; i < 27; ++i) {
         testFrame1.push_back(x2 * static_cast< float >(i % 3) + y2 * static_cast< float >((i % 9) / 3) + z2 * static_cast< float >(i / 9));
         testFrame2.push_back(x3 * static_cast< float >(i % 3) + y3 * static_cast< float >((i % 9) / 3) + z3 * static_cast< float >(i / 9));
     }
@@ -273,7 +273,7 @@ TEST( domainTests, domainTest_setDefaults)
     testRef.resize(0);
 
     RVec testA(0., 0., 0.), testB(1., 1., 1.);
-    for (size_t i {0}; i < 100; i++) {
+    for (size_t i {0}; i < 100; ++i) {
         testIndex.push_back(i);
         testRef.push_back(testA + testB * static_cast< float >(i));
     }
@@ -293,8 +293,8 @@ TEST( domainTests, domainTest_setDefaults)
     ASSERT_EQ(testDomain.structIndex, testIndex);
 
     ASSERT_EQ(testDomain.refTable.size(), testRef.size());
-    for (size_t j {0}; j < testRef.size(); j++) {
-        for (size_t i {0}; i < testRef.size(); i++) {
+    for (size_t j {0}; j < testRef.size(); ++j) {
+        for (size_t i {0}; i < testRef.size(); ++i) {
             ASSERT_NEAR(testDomain.refTable[j][i].norm(), (testRef[i] - testRef[j]).norm(), 0.000'01);
         }
     }
@@ -317,16 +317,16 @@ TEST( domainTests, domainTest_update)
     testTraj2.resize(0);
     testTraj3.resize(0);
     RVec testA(1, 2, 3), testB(1, 0, 0), testC(0, 1, 0);
-    for (size_t i0 {0}; i0 < 1000; i0++) {
+    for (size_t i0 {0}; i0 < 1000; ++i0) {
         testTraj1.resize(testTraj1.size() + 1);
         testTraj2.resize(testTraj2.size() + 1);
         testTraj3.resize(testTraj3.size() + 1);
-        for (size_t i1 {0}; i1 < 10; i1++) {
+        for (size_t i1 {0}; i1 < 10; ++i1) {
             testTraj1.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB);
             testTraj2.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB);
             testTraj3.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB + static_cast< float >(i0) * testC);
         }
-        for (size_t i1 {0}; i1 < 10; i1++) {
+        for (size_t i1 {0}; i1 < 10; ++i1) {
             testTraj1.back().push_back(static_cast< float >(i1) * testA - static_cast< float >(i0) * testB);
             testTraj2.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testC);
             testTraj3.back().push_back(static_cast< float >(i1) * testA + static_cast< float >(i0) * testB - static_cast< float >(i0) * testC);
@@ -336,7 +336,7 @@ TEST( domainTests, domainTest_update)
     testIndex.resize(0);
     std::vector< RVec > testRef;
     testRef.resize(0);
-    for (size_t i {0}; i < 20; i++) {
+    for (size_t i {0}; i < 20; ++i) {
         testIndex.push_back(i);
         testRef.push_back(static_cast< float >(i % 10) * testA);
     }
@@ -355,7 +355,7 @@ TEST( domainTests, domainTest_update)
     testDomain3.setDefaults(testIndex, testRef, testWindowSize, testDomainMinimumSize, testDomainSearchAlgorythm, testTimeStepBetweenWindows, testSliceNum, testEpsilon, testDelta, testOutPutFileName3);
 
     std::vector< std::vector< RVec > > testTemp1, testTemp2, testTemp3;
-    for (size_t i {0}; i < 1000; i++) {
+    for (size_t i {0}; i < 1000; ++i) {
         testTemp1.resize(0);
         testTemp2.resize(0);
         testTemp3.resize(0);
@@ -396,7 +396,7 @@ TEST( domainTests, domainTest_getDomains)
     testRef.resize(0);
 
     RVec testA(0, 0, 0), testB(1, 1, 1);
-    for (size_t i {0}; i < 100; i++) {
+    for (size_t i {0}; i < 100; ++i) {
         testIndex.push_back(i);
         testRef.push_back(testA + testB * static_cast< float >(i));
     }
@@ -414,10 +414,10 @@ TEST( domainTests, domainTest_getDomains)
 
     testDomain.graph.resize(1);
     testDomain.graph.front().resize(testSliceNum);
-    for (size_t i1 {0}; i1 < testSliceNum; i1++) {
+    for (size_t i1 {0}; i1 < testSliceNum; ++i1) {
         testDomain.setGraph(testDomain.graph.front()[i1]);
-        for (size_t i2 {0}; i2 < testIndex.size(); i2++) {
-            for (size_t i3 {0}; i3 < testIndex.size(); i3++) {
+        for (size_t i2 {0}; i2 < testIndex.size(); ++i2) {
+            for (size_t i3 {0}; i3 < testIndex.size(); ++i3) {
                 testDomain.graph.front()[i1][i2][i3].num = 4;
             }
         }
@@ -425,13 +425,13 @@ TEST( domainTests, domainTest_getDomains)
     testDomain.getDomains();
     ASSERT_EQ(testDomain.domains.size(), 0);
 
-    for (int i0 {0}; i0 < 3; i0++) {
+    for (int i0 {0}; i0 < 3; ++i0) {
         testDomain.graph.resize(1);
         testDomain.graph.front().resize(testSliceNum);
-        for (size_t i1 {0}; i1 < testSliceNum; i1++) {
+        for (size_t i1 {0}; i1 < testSliceNum; ++i1) {
             testDomain.setGraph(testDomain.graph.front()[i1]);
-            for (size_t i2 {0}; i2 < testIndex.size(); i2++) {
-                for (size_t i3 {0}; i3 < testIndex.size(); i3++) {
+            for (size_t i2 {0}; i2 < testIndex.size(); ++i2) {
+                for (size_t i3 {0}; i3 < testIndex.size(); ++i3) {
                     testDomain.graph.front()[i1][i2][i3].num = 100;
                 }
             }
index 1841698c5ece6a8d218bf985ef2063476aa6004a..c929d59d520c292785c8b69bd8c5f492fbfd2169 100644 (file)
@@ -3,42 +3,37 @@
 // деструктор класса
 domainType::~domainType() {}
 
-// конструктор класса для инициализации
-domainType::domainType() {}
-
 // конструктор класса для полноценной инициализации данных
 domainType::domainType(const std::vector< size_t > &index, const std::vector< RVec > &reference,
                     const int windowSize, const int domainMinimumSize,
                     const int domainSearchAlgorythm, const int timeStepBetweenWindowStarts,
                     const unsigned int sliceNum, const double epsilon, const double delta,
-                    const std::string outPutFileName) {
+                    const std::string &outPutFileName) {
     setDefaults(index, reference, windowSize, domainMinimumSize, domainSearchAlgorythm, timeStepBetweenWindowStarts, sliceNum, epsilon, delta, outPutFileName);
 }
 
-// set numeric values to "-1" / string value to "" - if you want default settings
-// функция заполнения необходимыми данными для вычисления структурных доменов
+// функция заполнения необходимых данных для вычисления структурных доменов
 void domainType::setDefaults(const std::vector< size_t > &index, const std::vector< RVec > &reference,
                         const int windowSize, const int domainMinimumSize,
                         const int domainSearchAlgorythm, const int timeStepBetweenWindows,
                         const unsigned int sliceNum, const double epsilon, const double delta,
-                        const std::string outPutFileName) {
+                        const std::string &outPutFileName) {
     graph.resize(0);
     structIndex = index;
     refTable.resize(reference.size());
-    for (size_t i {0}; i < reference.size(); i++) {
+    for (size_t i {0}; i < reference.size(); ++i) {
         refTable[i].resize(0);
-        for (size_t j {0}; j < reference.size(); j++) {
+        for (size_t j {0}; j < reference.size(); ++j) {
             refTable[i].push_back(reference[i] - reference[j]);
         }
     }
-    // слава шиве, слава индусам... зачем столько ифов?
-    if (epsilon != -1) { eps = epsilon; }
-    if (delta != -1) { dlt = delta; }
-    if (windowSize != -1) { window = windowSize; }
-    if (domainMinimumSize != -1) { dms = domainMinimumSize; }
-    if (domainSearchAlgorythm != -1) { dsa = domainSearchAlgorythm; }
-    if (timeStepBetweenWindows != -1) { ts = timeStepBetweenWindows; }
-    if (outPutFileName != "") { outPut = outPutFileName; }
+    epsilon > 0 ? eps = epsilon : eps = 0.2;
+    delta > 0 && delta <= 1 ? dlt = delta : dlt = 0.95;
+    windowSize > 0 ? window = windowSize : window = 1000;
+    domainMinimumSize > 3 ? dms = domainMinimumSize : dms = 4;
+    domainSearchAlgorythm > -1 && domainSearchAlgorythm < 3 ? dsa = domainSearchAlgorythm : dsa = 0;
+    timeStepBetweenWindows > 0 ? ts = timeStepBetweenWindows : ts = window / 10;
+    outPutFileName.size() > 0 ? outPut = outPutFileName : outPut = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
     domsizes.resize(0);
     domsizes.resize(sliceNum);
     updateCount = 0;
@@ -46,7 +41,7 @@ void domainType::setDefaults(const std::vector< size_t > &index, const std::vect
 
 // фукнция обновления данных для выделения структурных доменов
 void domainType::update(const std::vector< std::vector< RVec > > &frame, const int frameNumber) {
-    // ��ромакс считает с нуля, проверял; инициализируем новое "окно"
+    // ��нициализируем новое "окно", громакс считает кадры с нуля
     if (frameNumber % ts == 0) {
         graph.resize(graph.size() + 1);
         graph.back().resize(structIndex.size() - static_cast< size_t >(dms) + 1);
@@ -54,18 +49,18 @@ void domainType::update(const std::vector< std::vector< RVec > > &frame, const i
             setGraph(i);
         }
     }
-    // заполняем структуру данных для структурных доменов
+    // заполняем матрицы данных для структурных доменов для всех текущих "окон"
     for (auto &i : graph) {
         #pragma omp parallel for
-        for (size_t j = 0; j < i.size(); j++) {
-            for (size_t k1 {0}; k1 < i[j].size(); k1++) {
-                for (size_t k2 {k1}; k2 < i[j].size(); k2++) {
+        for (size_t j = 0; j < i.size(); ++j) {
+            for (size_t k1 {0}; k1 < i[j].size(); ++k1) {
+                for (size_t k2 {k1}; k2 < i[j].size(); ++k2) {
                     if ((frame[j][k1] - frame[j][k2] - refTable[k1][k2]).norm() <= static_cast< float >(eps)) {
                         if (k1 != k2) {
-                            i[j][k1][k2].num++;
-                            i[j][k2][k1].num++;
+                            ++i[j][k1][k2].num;
+                            ++i[j][k2][k1].num;
                         } else {
-                            i[j][k1][k2].num++;
+                            ++i[j][k1][k2].num;
                         }
                     }
                 }
@@ -73,9 +68,9 @@ void domainType::update(const std::vector< std::vector< RVec > > &frame, const i
         }
         #pragma omp barrier
     }
-    // считаем число эффективных обновлений
+    // обновляем число эффективных обновлений
     if (graph.size() > 0) {
-        updateCount++;
+        ++updateCount;
     }
     // в случае, если число обновлений равно размеру окна, выделяем на нём домены
     if (updateCount == window) {
@@ -88,10 +83,10 @@ void domainType::update(const std::vector< std::vector< RVec > > &frame, const i
 void domainType::setGraph(std::vector< std::vector< node > > &smallGraph) {
     smallGraph.resize(0);
     smallGraph.resize(refTable.size());
-    for (size_t i {0}; i < refTable.size(); i++) {
+    for (size_t i {0}; i < refTable.size(); ++i) {
         smallGraph[i].resize(0);
         smallGraph[i].resize(refTable.size());
-        for (size_t j {0}; j < refTable.size(); j++) {
+        for (size_t j {0}; j < refTable.size(); ++j) {
             smallGraph[i][j].num = 0;
             smallGraph[i][j].check = false;
         }
@@ -102,7 +97,7 @@ void domainType::setGraph(std::vector< std::vector< node > > &smallGraph) {
 void domainType::deleteDomainFromGraph(const std::vector< size_t > &domain) {
     for (auto &i : graph.front()) {
         for (const auto &j : domain) {
-            for (size_t k {0}; k < i.size(); k++) {
+            for (size_t k {0}; k < i.size(); ++k) {
                 i[j][k].check = false;
                 i[k][j].check = false;
             }
@@ -113,13 +108,13 @@ void domainType::deleteDomainFromGraph(const std::vector< size_t > &domain) {
 // подсчёт размеров всех потенциально возможных доменов и проверка на наличие домена для выделения
  bool domainType::searchDomainSizes() {
     bool flag {false};
-    for (size_t i {0}; i < graph.front().size(); i++) {
+    for (size_t i {0}; i < graph.front().size(); ++i) {
         domsizes[i].resize(0); // необходимо переопределять память
         domsizes[i].resize(graph.front()[i].size(), 0);
-        for (size_t j {0}; j < graph.front()[i].size(); j++) {
+        for (size_t j {0}; j < graph.front()[i].size(); ++j) {
             for (const auto &k : graph.front()[i][j]) {
                 if (k.check) {
-                    domsizes[i][j]++;
+                    ++domsizes[i][j];
                 }   
             }
             if ((!flag) && (domsizes[i][j] >= dms)) {
@@ -143,20 +138,17 @@ void domainType::getDomains() {
         }
     }
     domains.resize(0);
-    // итеративное выделение доменов одним из двух(пока что) способов
-    // в случае если цикл запустился, то гарантированно имеется домен для выделения
+    // итеративное выделение доменов одним из трёх способов
     while (searchDomainSizes()) {
         size_t t1 {0}, t2 {0};
-        for (size_t i {0}; i < domsizes.size(); i++) {
-            for (size_t j {0}; j < domsizes[i].size(); j++) {
+        for (size_t i {0}; i < domsizes.size(); ++i) {
+            for (size_t j {0}; j < domsizes[i].size(); ++j) {
+                // вынуждены выделять первый домен из равных по кол-ву элементов
                 if ((dsa == 0) && (domsizes[i][j] > domsizes[t1][t2])) {
-                    // из-за физических ограничений по памяти в общем случае нельзя хранить всю подноготную данных на
-                    // основе которых было полученно "вхождение" атомов в домен, потому мы только знаем, что размер
-                    // совпадает, а сказать который из двух стабильнее нельзя, либо нужно придумать что-то новое
                     t1 = i;
                     t2 = j;
                 }
-                if ((dsa == 2) && ((domsizes[i][j] < domsizes[t1][t2]) || ((domsizes[i][j] >= dms) && (domsizes[t1][t2] < dms)))) {
+                if ((dsa == 2) && (domsizes[i][j] >= dms) && ((domsizes[i][j] < domsizes[t1][t2]) || (domsizes[t1][t2] < dms))) {
                     t1 = i;
                     t2 = j;
                 }
@@ -164,7 +156,7 @@ void domainType::getDomains() {
         }
         // выделяем найдённый домен
         domains.resize(domains.size() + 1);
-        for (size_t i {0}; i < graph.front()[t1][t2].size(); i++) {
+        for (size_t i {0}; i < graph.front()[t1][t2].size(); ++i) {
             if (graph.front()[t1][t2][i].check) {
                 domains.back().push_back(i);
             }
@@ -173,12 +165,12 @@ void domainType::getDomains() {
         if (dsa == 1) {
             break;
         }
-        // удаляем ��го из матриц
+        // удаляем ��ыделенный домен из матриц
         deleteDomainFromGraph(domains.back());
     }
-    // удаляем рассматриваемое окно из вектора
+    // удаляем рассматриваемое окно
     graph.erase(graph.begin());
-    // смещаем счётчик обновлений для следующего окна, std::max для случая если окна не пересекаются
+    // смещаем счётчик обновлений для следующего окна
     updateCount = std::max(0, window - ts);
 }
 
@@ -189,15 +181,15 @@ void domainType::print(int currentFrame) {
     }
     FILE *ndxFile {std::fopen(outPut.c_str(), "a+")}, *slFile {std::fopen(("selectionList-" + outPut.substr(0, outPut.size() - 4)).c_str(), "a+")};
     short int writeCount {0};
-    for (size_t i {0}; i < domains.size(); i++) {
+    for (size_t i {0}; i < domains.size(); ++i) {
         // domain - стартовая позиция в фреймах - номер домена - минимальный размер домена -
         // константа тепловых колебаний (отклонения) - константа входимости (отклонения)
         std::fprintf(ndxFile, "[domain-stPos-%06d-num-%03lu-dms-%03d-epsi-%04.3f-delta-%04.3f]\n", currentFrame - window + 1, i + 1, dms, eps, dlt);
         std::fprintf(slFile, "group %cdomain-stPos-%06d-num-%03lu-dms-%03d-epsi-%04.3f-delta-%04.3f%c;\n", '"', currentFrame - window + 1, i + 1, dms, eps, dlt, '"');
         writeCount = 0;
         std::printf("\n");
-        for (size_t j {0}; j < domains[i].size(); j++) {
-            writeCount++;
+        for (size_t j {0}; j < domains[i].size(); ++j) {
+            ++writeCount;
             if (writeCount > 20) {
                 writeCount -= 20;
                 std::fprintf(ndxFile, "\n");
index 7eaab0ea0ae802579cee99ebda03f98126052868..4309dbabd5d8b6e45f7b55f83e93a70dc0a1fc12 100644 (file)
@@ -12,6 +12,7 @@
 #include <omp.h>
 #include <vector>
 #include <cstdio>
+#include <chrono>
 
 using namespace gmx;
 
@@ -22,14 +23,14 @@ class domainType {
         ~domainType();
 
         // конструктор класса для инициализации
-        domainType();
+        domainType() = default;
 
         // конструктор класса для полноценной инициализации данных
         domainType(const std::vector< size_t > &index, const std::vector< RVec > &reference,
                     const int windowSize, const int domainMinimumSize,
                     const int domainSearchAlgorythm, const int timeStepBetweenWindowStarts,
                     const unsigned int sliceNum, const double epsilon, const double delta,
-                    const std::string outPutFileName);
+                    const std::string &outPutFileName);
 
         // set numeric values to "-1" / string value to "" - if you want default settings
         // функция заполнения необходимыми данными для вычисления структурных доменов
@@ -37,7 +38,7 @@ class domainType {
                         const int windowSize, const int domainMinimumSize,
                         const int domainSearchAlgorythm, const int timeStepBetweenWindows,
                         const unsigned int sliceNum, const double epsilon, const double delta,
-                        const std::string outPutFileName);
+                        const std::string &outPutFileName);
 
         // фукнция обновления данных для выделения структурных доменов
         void update(const std::vector< std::vector< RVec > > &frame, const int frameNumber);