45#include "applications/dynamicProps/AngularVelocityAutoOutProductCorrFunc.hpp"
48#include "utils/Revision.hpp"
51 AngularVelocityAutoOutProductCorrFunc::AngularVelocityAutoOutProductCorrFunc(
52 SimInfo* info,
const std::string& filename,
const std::string& sele1,
53 const std::string& sele2) :
54 ObjectACF<Mat3x3d>(info, filename, sele1, sele2) {
56 "Angular Velocity - Angular Velocity Auto Outer Product Correlation "
58 setOutputName(
getPrefix(dumpFilename_) +
".waOutProdcorr");
60 angularVelocity_.resize(nFrames_);
61 sumAngularVelocity_ = V3Zero;
62 angularVelocityCount_ = 0;
63 propertyTemp = V3Zero;
66 int AngularVelocityAutoOutProductCorrFunc::computeProperty1(
int frame,
68 if (sd->isDirectional()) {
69 Mat3x3d momentInertia = sd->getI();
70 Vector3d angMom = sd->getJ();
71 Vector3d omega = momentInertia.inverse() * angMom;
75 painCave.errMsg, MAX_SIM_ERROR_MSG_LENGTH,
76 "The selection contains non-directional entities. Your selection should include\
77 Directional atoms and/or Rigid Bodies.\n");
82 angularVelocity_[frame].push_back(propertyTemp);
83 sumAngularVelocity_ += propertyTemp;
84 angularVelocityCount_++;
85 return angularVelocity_[frame].size() - 1;
88 Mat3x3d AngularVelocityAutoOutProductCorrFunc::calcCorrVal(
int frame1,
92 tmpMat_1 = outProduct(angularVelocity_[frame1][id1],
93 angularVelocity_[frame2][id2]);
95 tmpMat_2 = outProduct(angularVelocity_[frame2][id2],
96 angularVelocity_[frame1][id1]);
98 tmpMat_3 = 0.5 * (tmpMat_1 + tmpMat_2);
102 void AngularVelocityAutoOutProductCorrFunc::postCorrelate() {
104 sumAngularVelocity_ /= RealType(angularVelocityCount_);
106 Mat3x3d correlationOfAverages_ =
107 outProduct(sumAngularVelocity_, sumAngularVelocity_);
109 for (
unsigned int i = 0; i < nTimeBins_; ++i) {
111 histogram_[i] /= RealType(count_[i]);
115 histogram_[i] -= correlationOfAverages_;
117 histogram_[i] = M3Zero;
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.
std::string getPrefix(const std::string &str)