return false;
}
-void print_domains(std::vector< std::vector< std::vector< unsigned int > > > pd_domains, std::vector< int > index, std::string fnNdx_, int dms, double epsi, double delta, int window) {
- FILE *fpNdx_;
- fpNdx_ = std::fopen(fnNdx_.c_str(), "w+");
+void print_domains(std::vector< std::vector< unsigned int > > pd_domains, std::vector< int > index, std::string fnNdx_, int dms, double epsi, double delta, int window, int st_pos) {
+ FILE *fpNdx_, *fpNdx2_;
+ fpNdx_ = std::fopen(fnNdx_.c_str(), "a+");
+ fpNdx2_ = std::fopen(("SelectionList-" + fnNdx_.substr(0, fnNdx_.size() - 4)).c_str(), "a+");
int write_count;
for (unsigned int i1 = 0; i1 < pd_domains.size(); i1++) {
- for (unsigned int i2 = 0; i2 < pd_domains[i1].size(); i2++) {
- std::fprintf(fpNdx_, "[domain-stPos-%3d-num-%3d-dms-%3d-epsi-%4.3f-delta-%4.3f]\n", static_cast< int >(i1) * window / tau_jump, i2 + 1, dms, epsi, delta);
+ std::fprintf(fpNdx_, "[domain-stPos-%06d-num-%03d-dms-%03d-epsi-%04.3f-delta-%04.3f]\n", static_cast< int >(st_pos) * window / tau_jump, i1 + 1, dms, epsi, delta);
+ std::fprintf(fpNdx2_, "group %cdomain-stPos-%06d-num-%03d-dms-%03d-epsi-%04.3f-delta-%04.3f%c;\n", '"', static_cast< int >(st_pos) * window / tau_jump, i1 + 1, dms, epsi, delta, '"');
write_count = 0;
- for (unsigned int j = 0; j < pd_domains[i1][i2].size(); j++) {
+ for (unsigned int j = 0; j < pd_domains[i1].size(); j++) {
write_count++;
if (write_count > 20) {
write_count -= 20;
std::fprintf(fpNdx_, "\n");
}
- std::fprintf(fpNdx_, "%5d ", index[pd_domains[i1][i2][j]] + 1);
- std::printf("%5d ", index[pd_domains[i1][i2][j]] + 1);
+ std::fprintf(fpNdx_, "%5d ", index[pd_domains[i1][j]] + 1);
+ std::printf("%5d ", index[pd_domains[i1][j]] + 1);
}
std::printf("\n\n");
std::fprintf(fpNdx_,"\n\n");
- }
}
std::fprintf(fpNdx_,"\n");
std::fclose(fpNdx_);
std::vector< std::vector< std::vector< std::vector< node > > > > graph;
- std::vector< std::vector< std::vector< unsigned int > > > domains;
+ //std::vector< std::vector< std::vector< unsigned int > > > domains;
+ std::vector< std::vector< unsigned int > > domains;
std::vector< std::vector< int > > domsizes;
std::vector< int > index;
reference.push_back(top.x().at(index[i]));
}
}
+ bone = static_cast< unsigned int >(index.size() - static_cast< unsigned int >(domain_min_size) + 1);
graph.resize(1);
+ graph.front().resize(bone);
+ //graph.resize(bone);
- bone = static_cast< unsigned int >(index.size() - static_cast< unsigned int >(domain_min_size) + 1);
- graph[0].resize(bone);
w_rls2.resize(bone);
for (unsigned int i = 0; i < bone; i++) {
w_rls2[i].resize(0);
for (unsigned int j = 0; j < static_cast< unsigned int >(domain_min_size); j++) {
w_rls2[i].push_back(std::make_pair(j + i, j + i));
}
- make_graph(index.size(), reference, graph[0][i]);
+ make_graph(index.size(), reference, graph.front()[i]);
+ //make_graph(index.size(), reference, graph[i]);
}
trajectory.resize(index.size());
+
+ std::vector< int > a;
+
+ /*for (int i = 0; i < 10; i++) {
+ a.push_back(i);
+ }
+ a.erase(a.begin());
+ for (int i = 0; i < 10; i++) {
+ std::cout << a[i] << " ";
+ }*/
}
void
}
}
+ int temp = graph.size() - tau_jump;
+
+ if (temp > 0) {
+ domains.resize(0);
+ std::vector< unsigned int > a;
+ a.resize(0);
+ domsizes.resize(0);
+ check_domains(delta, window, graph[0]);
+ std::cout << "finding domains' sizes\n";
+ find_domain_sizes(graph[0], domsizes);
+ while (check_domsizes(domsizes, domain_min_size)) {
+ domains.push_back(a);
+ if (DomainSearchingAlgorythm == 0) {
+ get_maxsized_domain(domains.back(), graph[0], domsizes);
+ } else if (DomainSearchingAlgorythm == 1) {
+ get_min_domain(domains.back(), graph[0], domsizes, domain_min_size);
+ }
+ std::cout << "new domain: " << domains.back().size() << " atoms\n";
+ delete_domain_from_graph(graph[0], domains.back());
+ domsizes.resize(0);
+ find_domain_sizes(graph[0], domsizes);
+ }
+ graph.erase(graph.begin());
+ graph.resize(graph.size() - 1);
+ std::cout << (frnr + 1) / (window / tau_jump) - tau_jump << " window's domains have been evaluated\n";
+ print_domains(domains, index, fnNdx_, domain_min_size, epsi, delta, window, (frnr + 1) / (window / tau_jump) - tau_jump); // see function for details | numbers from index
+ }
+
for (unsigned int i = 0; i < index.size(); i++) {
trajectory[i] = fr.x[index[i]];
}
frames++;
- #pragma omp parallel for ordered schedule(dynamic) shared(w_rls2, graph) firstprivate(trajectory, reference, epsi)
+ #pragma omp parallel for ordered schedule(dynamic) shared(w_rls2, graph) firstprivate(trajectory, reference, epsi, frnr, window)
for (unsigned int j = 0; j < bone; j++) {
std::vector < RVec > temp = trajectory;
MyFitNew(reference, temp, w_rls2[j], 0);
- for (unsigned int i = static_cast< unsigned int >(std::max(0, (frnr + 1) / (window / tau_jump) - tau_jump + 1)); i < graph.size(); i++) {
+ for (unsigned int i = 0; i < graph.size(); i++) {
update_graph(graph[i][j], temp, epsi);
}
}
#pragma omp barrier
- std::cout << "frame: " << frames << " analyzed\n";
+
+
+ std::cout << "frame: " << frnr << " analyzed\n";
}
void
Domains::finishAnalysis(int nframes)
{
- graph.resize(graph.size() - tau_jump);
+ /*graph.resize(graph.size() - tau_jump);
std::cout << "graph size: " << graph.size() << "\n";
frames -= 1;
for (unsigned int i = 0; i < graph.size(); i++) {
domsizes.resize(0);
domains[i].resize(0);
- check_domains(delta, frames, graph[i]);
+ check_domains(delta, window, graph[i]);
std::cout << "finding domains' sizes\n";
find_domain_sizes(graph[i], domsizes);
- /*for (int j1 = 0; j1 < domsizes.size(); j1++) {
- for (int j2 = 0; j2 < domsizes[j1].size(); j2++) {
- if (domsizes[j1][j2] != 0) {
- std::cout << domsizes[j1][j2] << " ";
- }
- }
- }*/
-
while (check_domsizes(domsizes, domain_min_size)) {
domains[i].push_back(a);
if (DomainSearchingAlgorythm == 0) {
domsizes.resize(0);
find_domain_sizes(graph[i], domsizes);
}
- }
+ std::cout << i * window / tau_jump << " window's domains have been evaluated\n";
+ }*/
}
void
Domains::writeOutput()
{
- std::cout << "making output file\n";
- print_domains(domains, index, fnNdx_, domain_min_size, epsi, delta, window); // see function for details | numbers from index
+ //std::cout << "making output file\n";
+ //print_domains(domains, index, fnNdx_, domain_min_size, epsi, delta, window); // see function for details | numbers from index
std::cout << "\n END \n";
}