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"
24 // конструктор класса для инициализации
27 // конструктор класса для полноценной инициализации данных
28 domainType(const std::vector< size_t > &index, const std::vector< RVec > &reference,
29 const int windowSize, const int domainMinimumSize,
30 const int domainSearchAlgorythm, const int timeStepBetweenWindowStarts,
31 const unsigned int sliceNum, const double epsilon, const double delta,
32 const std::string outPutFileName);
34 // set numeric values to "-1" / string value to "" - if you want default settings
35 // функция заполнения необходимыми данными для вычисления структурных доменов
36 void setDefaults(const std::vector< size_t > &index, const std::vector< RVec > &reference,
37 const int windowSize, const int domainMinimumSize,
38 const int domainSearchAlgorythm, const int timeStepBetweenWindows,
39 const unsigned int sliceNum, const double epsilon, const double delta,
40 const std::string outPutFileName);
42 // фукнция обновления данных для выделения структурных доменов
43 void update(const std::vector< std::vector< RVec > > &frame, const int frameNumber);
47 FRIEND_TEST(domainTests, domainTest_setDefaults);
48 FRIEND_TEST(domainTests, domainTest_setGraph);
49 FRIEND_TEST(domainTests, domainTest_deleteDomainFromGraph);
50 FRIEND_TEST(domainTests, domainTest_searchDomainSizes);
51 FRIEND_TEST(domainTests, domainTest_getDomains);
52 FRIEND_TEST(domainTests, domainTest_print);
54 // узел матрицы связности: число вхождений в один домен, вектор между элементами в референсной структуре, флаг для проверки
55 // последние два пункта технически можно перевычеслять при каждом обращении, что сократит размер ячейки с 20 байт до 4
56 // но замедлит скорость работы программы, возможно стоит проверить на больших структурах
61 // таблица векторных соотношений в референсной структуре
62 std::vector< std::vector< RVec > > refTable;
64 std::vector< size_t > structIndex; // must be presented
65 // рабочие окна -> рассматриваемые основные последовательности -> матрица соотношений в структуре всё на всё
66 std::vector< std::vector< std::vector< std::vector< node > > > > graph;
68 std::vector< std::vector< size_t > > domains;
69 // размеры доменов для каждой основной последовательности
70 std::vector< std::vector< int > > domsizes;
71 // размер рассматриваемого окна в последовательных фреймах траектории
72 int window {1000}; // selectable
73 // счётчик эффективных последовательных обновлений структуры graph
75 // минимальный рассматриваемый размер домена - осмысленно брать 4+
76 int dms {4}; // selectable
77 // какой из алгоритмов выделения использовать 0 - от максимального домена к меньшим / 1 - самый большой домен (первый из равных) / 2 - от минимального домена к большим
78 int dsa {0}; // selectable
79 // константа допустимых тепловых колебаний относительно центра домена, находящегося в конкретном атоме структуры
80 double eps {0.2}; // selectable
81 // константа допустимой входимости атома в выделяемый домен, призвана сгладить резкую границу константы eps
82 double dlt {0.95}; // selectable
83 // шаг между началами рассматриваемых окон на траектории в фреймах
84 int ts {window / 10}; // selectable
85 // название выходного файла для записи доменов, так же происходит создание selectionList для выделенных доменов
86 std::string outPut = "default.ndx"; // selectable
88 // инициализация матриц соотношений в структуре
89 void setGraph(std::vector< std::vector< node > > &smallGraph);
91 // "зануление" элементов матриц вошедших в домен
92 void deleteDomainFromGraph(const std::vector< size_t > &domain);
94 // подсчёт размеров всех потенциально возможных доменов и проверка на наличие домена для выделения
95 bool searchDomainSizes();
97 // функция выделения доменов
100 // функция печати ndx и selectionList файлов
101 void print(int currentFrame);
106 #endif // DOMAINTYPE_H