4 #include <gromacs/trajectoryanalysis.h>
5 #include <gromacs/trajectoryanalysis/topologyinformation.h>
6 //#include "/home/titov_ai/Develop/gromacs-original/src/gromacs/trajectoryanalysis/topologyinformation.h"
8 #include "gtest/gtest.h"
25 // конструктор класса для инициализации
26 domainType() = default;
28 // конструктор класса для полноценной инициализации данных
29 domainType(const std::vector< size_t > &index, const std::vector< RVec > &reference,
30 const int windowSize, const int domainMinimumSize,
31 const int domainSearchAlgorythm, const int timeStepBetweenWindowStarts,
32 const unsigned int sliceNum, const double epsilon, const double delta,
33 const std::string &outPutFileName);
35 // set numeric values to "-1" / string value to "" - if you want default settings
36 // функция заполнения необходимыми данными для вычисления структурных доменов
37 void setDefaults(const std::vector< size_t > &index, const std::vector< RVec > &reference,
38 const int windowSize, const int domainMinimumSize,
39 const int domainSearchAlgorythm, const int timeStepBetweenWindows,
40 const unsigned int sliceNum, const double epsilon, const double delta,
41 const std::string &outPutFileName);
43 // фукнция обновления данных для выделения структурных доменов
44 void update(const std::vector< std::vector< RVec > > &frame, const int frameNumber);
48 FRIEND_TEST(domainTests, domainTest_setDefaults);
49 FRIEND_TEST(domainTests, domainTest_setGraph);
50 FRIEND_TEST(domainTests, domainTest_deleteDomainFromGraph);
51 FRIEND_TEST(domainTests, domainTest_searchDomainSizes);
52 FRIEND_TEST(domainTests, domainTest_getDomains);
53 FRIEND_TEST(domainTests, domainTest_print);
55 // узел матрицы связности: число вхождений в один домен, вектор между элементами в референсной структуре, флаг для проверки
56 // последние два пункта технически можно перевычеслять при каждом обращении, что сократит размер ячейки с 20 байт до 4
57 // но замедлит скорость работы программы, возможно стоит проверить на больших структурах
62 // таблица векторных соотношений в референсной структуре
63 std::vector< std::vector< RVec > > refTable;
65 std::vector< size_t > structIndex; // must be presented
66 // рабочие окна -> рассматриваемые основные последовательности -> матрица соотношений в структуре всё на всё
67 std::vector< std::vector< std::vector< std::vector< node > > > > graph;
69 std::vector< std::vector< size_t > > domains;
70 // размеры доменов для каждой основной последовательности
71 std::vector< std::vector< int > > domsizes;
72 // размер рассматриваемого окна в последовательных фреймах траектории
73 int window {1000}; // selectable
74 // счётчик эффективных последовательных обновлений структуры graph
76 // минимальный рассматриваемый размер домена - осмысленно брать 4+
77 int dms {4}; // selectable
78 // какой из алгоритмов выделения использовать 0 - от максимального домена к меньшим / 1 - самый большой домен (первый из равных) / 2 - от минимального домена к большим
79 int dsa {0}; // selectable
80 // константа допустимых тепловых колебаний относительно центра домена, находящегося в конкретном атоме структуры
81 double eps {0.2}; // selectable
82 // константа допустимой входимости атома в выделяемый домен, призвана сгладить резкую границу константы eps
83 double dlt {0.95}; // selectable
84 // шаг между началами рассматриваемых окон на траектории в фреймах
85 int ts {window / 10}; // selectable
86 // название выходного файла для записи доменов, так же происходит создание selectionList для выделенных доменов
87 std::string outPut = "default.ndx"; // selectable
89 // инициализация матриц соотношений в структуре
90 void setGraph(std::vector< std::vector< node > > &smallGraph);
92 // "зануление" элементов матриц вошедших в домен
93 void deleteDomainFromGraph(const std::vector< size_t > &domain);
95 // подсчёт размеров всех потенциально возможных доменов и проверка на наличие домена для выделения
96 bool searchDomainSizes();
98 // функция выделения доменов
101 // функция печати ndx и selectionList файлов
102 void print(int currentFrame);
107 #endif // DOMAINTYPE_H