#include <vector>
#include <cfloat>
#include <limits>
+#include <chrono>
#include <gromacs/trajectoryanalysis.h>
#include <gromacs/trajectoryanalysis/topologyinformation.h>
-//#include "/home/titov_ai/Develop/gromacs-original/src/gromacs/trajectoryanalysis/topologyinformation.h"
-
#include "gtest/gtest.h"
#include "newfit.h"
~correlationType();
// конструктор класса для инициализации
- correlationType();
-
- correlationType(const std::vector< RVec > &ref, int wnd, int taau, int tau_st, float crlUp, float effRad, int mod,
- const std::string &out, const std::vector< int > &indx,
- const std::vector< std::vector < std::vector < size_t > > > &sels,
- const std::vector< std::string > &rsNames);
-
- void setDefaults(const std::vector< RVec > &ref, int wnd, int taau, int tau_st, float crlUp, float effRad, int mod,
- const std::string &out, const std::vector< int > &indx,
- const std::vector< std::vector < std::vector < size_t > > > &sels,
- const std::vector< std::string > &rsNames);
-
+ correlationType() = default;
+
+ // конструктор класса с необходимыми параметрами
+ correlationType(const std::vector< RVec > &inputReference, const int inputWindow, const int inputTau,
+ const int inputTauStep, const float inputCrlUpBorder, const float inputEffRadius, const int inputMode,
+ const std::string &inputOutputName, const std::vector< size_t > &inputIndex,
+ const std::vector< std::vector < std::vector < size_t > > > &inputSelections,
+ const std::vector< std::string > &inputResNames);
+
+ // функция заполнения необходимых параметров
+ void setDefaults(const std::vector< RVec > &inputReference, const int inputWindow, const int inputTau,
+ const int inputTauStep, const float inputCrlUpBorder, const float inputEffRadius, const int inputMode,
+ const std::string &inputOutputName, const std::vector< size_t > &inputIndex,
+ const std::vector< std::vector < std::vector < size_t > > > &inputSelections,
+ const std::vector< std::string > &inputResNames);
+
+ // функция обновления данных для подсчёта корреляций
void update(int frame, const std::vector< RVec > &curFrame);
+ // функция считывания подсчитанных данных из класса
void readEval(size_t frameNum);
+ // функция вывода графов в виде стрелок в тектовом формате в файл
void printData();
private:
+ // тесты функций
FRIEND_TEST(corrTests, corrTests_setDefaults);
FRIEND_TEST(corrTests, corrTests_update);
FRIEND_TEST(corrTests, corrTests_trajectoryPartition);
FRIEND_TEST(corrTests, corrTests_graphCalculations);
FRIEND_TEST(corrTests, corrTests_graphBackBoneEvaluation);
+ // матрицы корреляций для каждого смещения [0:ТАУ]
std::vector< std::vector< std::vector< double > > > matrixes;
+ // кадры траектории для работы на окне + ТАУ
std::vector< std::vector< RVec > > trajectory;
+ // временное хранилище для траекторий, "глобальная" для оптимизации
std::vector< std::vector< std::vector< RVec > > > fitTrajectory;
+ // референсная структура данных
std::vector< RVec > reference;
+ // размер базового рассматриваемого окна
int window {1000}; // selectable
+ // глубина временного сдвига
int tau {window / 2}; // selectable
+ // шаг между начальными позициями окон
int tauStep {window / 10}; // selectable
+ // минимальное значение корреляции по модулю
float crlUpBorder {0.5}; // selectable
+ // радиус рассматриваемых взаимодействий
float effRadius {1.5}; // selectable
+ // режим работы "1" - подсчёт, "0" - считывание
int mode {0}; // selectable
+ // название выходного файла
std::string outputName = ""; // selectable
- std::vector< int > index;
+ // индекс структуры
+ std::vector< size_t > index;
+ // названия остатков
std::vector< std::string > resNames;
+ // группы атомов, потенциально структурные домены
std::vector< std::vector < std::vector < size_t > > > selections;
+ // номер подсчёта корреляций
int count {0};
-
+ // матрица корреляционных взаимодействий
std::vector< std::vector< std::pair< double, int > > > graph;
+ // графы взаимодействия
std::vector< std::vector< size_t > > subGraphPoints;
+ // рёбра графов взаимодействия
std::vector< std::vector< std::pair< size_t, size_t > > > subGraphRbr;
+ // остовные графы графов взаимодействия
std::vector< std::vector< std::vector< std::pair< size_t, size_t > > > > subGraphRouts;
+ // функция дополнения SELECTIONS до полного покрытия объекта
void trajectoryPartition();
+ // функция чтения/записи корреляций
void readWriteCorrelations(int rwMode);
+ // фитирование траектории на основе SELECTIONS и объеденение её воедино
inline void trajectoryFitting();
+ // инициализация матрицы корреляций
inline void matrixNullFitting();
+ // функция подсчёта корреляций
void correlationEval();
+ // функция нахождения графов взаимодействия
void graphCalculations(size_t tauStart, size_t tauEnd);
+ // вспомогательная функция сравнения
static bool myComparisonFunction (const std::pair< int, double > i, const std::pair< int, double > j);
+ // функция поиска остовных графов
void graphBackBoneEvaluation();
+ // функция вывода графов в текстовом виде в файл
void printOutputData();
};