48#include "applications/sequentialProps/SequentialAnalyzer.hpp"
55#include "utils/Revision.hpp"
56#include "utils/simError.h"
60 SequentialAnalyzer::SequentialAnalyzer(
SimInfo* info,
61 const std::string& filename,
62 const std::string& sele1,
63 const std::string& sele2) :
65 currentSnapshot_(NULL), dumpFilename_(filename), seleMan1_(info),
66 selectionScript1_(sele1), evaluator1_(info), seleMan2_(info),
67 selectionScript2_(sele2), evaluator2_(info), step_(1) {
70 evaluator1_.loadScriptString(selectionScript1_);
71 evaluator2_.loadScriptString(selectionScript2_);
74 if (!evaluator1_.isDynamic()) {
75 seleMan1_.setSelectionSet(evaluator1_.evaluate());
77 if (!evaluator2_.isDynamic()) {
78 seleMan2_.setSelectionSet(evaluator2_.evaluate());
82 void SequentialAnalyzer::doSequence() {
85 DumpReader reader(info_, dumpFilename_);
86 int nFrames = reader.getNFrames();
90 for (frame_ = 0; frame_ < nFrames; frame_ += step_) {
91 reader.readFrame(frame_);
92 currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot();
93 times_.push_back(currentSnapshot_->getTime());
95 if (evaluator1_.isDynamic()) {
96 seleMan1_.setSelectionSet(evaluator1_.evaluate());
98 if (evaluator2_.isDynamic()) {
99 seleMan2_.setSelectionSet(evaluator2_.evaluate());
109 void SequentialAnalyzer::writeSequence() {
110 std::ofstream ofs(outputFilename_.c_str(), std::ios::binary);
115 ofs <<
"# " << getSequenceType() <<
"\n";
116 ofs <<
"# OpenMD " << r.getFullRevision() <<
"\n";
117 ofs <<
"# " << r.getBuildDate() <<
"\n";
118 ofs <<
"# selection script1: \"" << selectionScript1_;
119 ofs <<
"\"\tselection script2: \"" << selectionScript2_ <<
"\"\n";
120 if (!paramString_.empty())
121 ofs <<
"# parameters: " << paramString_ <<
"\n";
123 ofs <<
"#time\tvalue\n";
125 for (
unsigned int i = 0; i < times_.size(); ++i) {
126 ofs << times_[i] <<
"\t" << values_[i] <<
"\n";
130 snprintf(painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
131 "SequentialAnalyzer::writeSequence Error: failed to open %s\n",
132 outputFilename_.c_str());
133 painCave.isFatal = 1;
One of the heavy-weight classes of OpenMD, SimInfo maintains objects and variables relating to the cu...
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.