void TrajectoryAnalyzer::analyze(Trajectory & trajectory, std::vector<std::shared_ptr<ProteinSegment>> & protein_segments, const double & temperature, const int ensemble_size) { std::vector<ProteinSegmentEnsemble> protein_segment_ensembles; LOGD << "Fitting protein segments with trajectory frames and computing force constants."; while (trajectory.has_next()) { for (std::shared_ptr<ProteinSegment> const & protein_segment : protein_segments) { protein_segment_ensembles.push_back(ProteinSegmentEnsemble(protein_segment)); } LOGD << "adding frames to protein segment ensembles"; int frame_nr = 0; while (trajectory.has_next() && ++frame_nr <= ensemble_size) { Frame frame = trajectory.get_next_frame(); #pragma omp parallel for for (size_t i = 0; i < protein_segment_ensembles.size(); i++) { protein_segment_ensembles[i].add_frame(frame); } LOGV_IF(frame_nr % 100 == 0) << "read " << frame_nr << " frames"; } LOGD << "read total number of " << frame_nr << " frames"; LOGD << "computing force constants for protein segment ensembles."; #pragma omp parallel for for (size_t i = 0; i < protein_segment_ensembles.size(); i++) { protein_segment_ensembles[i].compute_force_constant(temperature); } } LOGD << "Finished analyzing trajectory"; }