void MockAnalysisDataModule::Impl::checkReferencePoints( const AnalysisDataPointSetRef &points) { EXPECT_TRUE(frameChecker_.get() != NULL); if (frameChecker_.get() != NULL) { TestReferenceChecker checker( frameChecker_->checkCompound("DataValues", NULL)); checker.checkInteger(points.columnCount(), "Count"); if (checker.checkPresent(source_->dataSetCount() > 1, "DataSet")) { checker.checkInteger(points.dataSetIndex(), "DataSet"); } const int sourceColumnCount = source_->columnCount(points.dataSetIndex()); const bool bAllColumns = (points.firstColumn() == 0 && points.columnCount() == sourceColumnCount); if (checker.checkPresent(!bAllColumns, "FirstColumn")) { checker.checkInteger(points.firstColumn(), "FirstColumn"); checker.checkInteger(points.lastColumn(), "LastColumn"); } AnalysisDataValuesRef::const_iterator value; for (value = points.values().begin(); value != points.values().end(); ++value) { checkReferenceDataPoint(&checker, *value); } } }
AnalysisDataPointSetRef::AnalysisDataPointSetRef( const AnalysisDataPointSetRef &points, int firstColumn, int columnCount) : header_(points.header()), dataSetIndex_(points.dataSetIndex()), firstColumn_(0) { GMX_ASSERT(firstColumn >= 0, "Invalid first column"); GMX_ASSERT(columnCount >= 0, "Invalid column count"); if (points.lastColumn() < firstColumn || points.firstColumn() >= firstColumn + columnCount || columnCount == 0) { return; } AnalysisDataValuesRef::const_iterator begin = points.values().begin(); int pointsOffset = firstColumn - points.firstColumn(); if (pointsOffset > 0) { // Offset pointer if the first column is not the first in points. begin += pointsOffset; } else { // Take into account if first column is before the first in points. firstColumn_ = -pointsOffset; columnCount -= -pointsOffset; } // Decrease column count if there are not enough columns in points. AnalysisDataValuesRef::const_iterator end = begin + columnCount; if (pointsOffset + columnCount > points.columnCount()) { end = points.values().end(); } values_ = AnalysisDataValuesRef(begin, end); }
void AnalysisDataAverageModule::pointsAdded(const AnalysisDataPointSetRef &points) { if (impl_->bDataSets_) { const int dataSet = points.dataSetIndex(); for (int i = 0; i < points.columnCount(); ++i) { if (points.present(i)) { impl_->averagers_[0].addValue(dataSet, points.y(i)); } } } else { impl_->averagers_[points.dataSetIndex()].addPoints(points); } }
void AnalysisDataFrameAverageModule::pointsAdded(const AnalysisDataPointSetRef &points) { const int dataSet = points.dataSetIndex(); AnalysisDataStorageFrame &frame = impl_->storage_.currentFrame(points.frameIndex()); for (int i = 0; i < points.columnCount(); ++i) { if (points.present(i)) { // TODO: Consider using AnalysisDataFrameAverager const real y = points.y(i); const real delta = y - frame.value(dataSet); impl_->sampleCount_[dataSet] += 1; frame.value(dataSet) += delta / impl_->sampleCount_[dataSet]; } } }
void AnalysisDataLifetimeModule::pointsAdded(const AnalysisDataPointSetRef &points) { const int dataSet = points.dataSetIndex(); // This assumption is strictly not necessary, but this is how the // framework works currently, and makes the code below simpler. GMX_ASSERT(points.firstColumn() == 0 && points.lastColumn() == static_cast<int>(impl_->currentLifetimes_[dataSet].size()) - 1, "Point set should cover all columns"); for (int i = 0; i < points.columnCount(); ++i) { // TODO: Perhaps add control over how this is determined? const bool bPresent = points.present(i) && points.y(i) > 0.0; if (bPresent) { ++impl_->currentLifetimes_[dataSet][i]; } else if (impl_->currentLifetimes_[dataSet][i] > 0) { impl_->addLifetime(dataSet, impl_->currentLifetimes_[dataSet][i]); impl_->currentLifetimes_[dataSet][i] = 0; } } }