--- trunk/src/applications/staticProps/pAngle.cpp 2014/04/18 19:49:54 1988 +++ trunk/src/applications/staticProps/pAngle.cpp 2015/03/07 21:41:51 2071 @@ -54,10 +54,10 @@ namespace OpenMD { pAngle::pAngle(SimInfo* info, const std::string& filename, const std::string& sele1, int nthetabins) - : StaticAnalyser(info, filename), selectionScript1_(sele1), - evaluator1_(info), evaluator2_(info), seleMan1_(info), seleMan2_(info), - nThetaBins_(nthetabins), - doVect_(true), doOffset_(false) { + : StaticAnalyser(info, filename), doVect_(true), doOffset_(false), + selectionScript1_(sele1), seleMan1_(info), seleMan2_(info), + evaluator1_(info), evaluator2_(info), + nThetaBins_(nthetabins) { setOutputName(getPrefix(filename) + ".pAngle"); @@ -73,10 +73,10 @@ namespace OpenMD { pAngle::pAngle(SimInfo* info, const std::string& filename, const std::string& sele1, const std::string& sele2, int nthetabins) - : StaticAnalyser(info, filename), selectionScript1_(sele1), - selectionScript2_(sele2), evaluator1_(info), evaluator2_(info), - seleMan1_(info), seleMan2_(info), nThetaBins_(nthetabins), - doVect_(false), doOffset_(false) { + : StaticAnalyser(info, filename), doVect_(false), doOffset_(false), + selectionScript1_(sele1), selectionScript2_(sele2), + seleMan1_(info), seleMan2_(info), evaluator1_(info), evaluator2_(info), + nThetaBins_(nthetabins) { setOutputName(getPrefix(filename) + ".pAngle"); @@ -96,10 +96,10 @@ namespace OpenMD { pAngle::pAngle(SimInfo* info, const std::string& filename, const std::string& sele1, int seleOffset, int nthetabins) - : StaticAnalyser(info, filename), selectionScript1_(sele1), - evaluator1_(info), evaluator2_(info), seleMan1_(info), seleMan2_(info), - nThetaBins_(nthetabins), seleOffset_(seleOffset), - doVect_(false), doOffset_(true) { + : StaticAnalyser(info, filename), doVect_(false), doOffset_(true), + doOffset2_(false), selectionScript1_(sele1), + seleMan1_(info), seleMan2_(info), evaluator1_(info), evaluator2_(info), + seleOffset_(seleOffset), nThetaBins_(nthetabins) { setOutputName(getPrefix(filename) + ".pAngle"); @@ -111,6 +111,26 @@ namespace OpenMD { count_.resize(nThetaBins_); histogram_.resize(nThetaBins_); } + + pAngle::pAngle(SimInfo* info, const std::string& filename, + const std::string& sele1, int seleOffset, int seleOffset2, + int nthetabins) + : StaticAnalyser(info, filename), doVect_(false), doOffset_(true), + doOffset2_(true), selectionScript1_(sele1), + seleMan1_(info), seleMan2_(info), evaluator1_(info), evaluator2_(info), + seleOffset_(seleOffset), seleOffset2_(seleOffset2), + nThetaBins_(nthetabins) { + + setOutputName(getPrefix(filename) + ".pAngle"); + + evaluator1_.loadScriptString(sele1); + if (!evaluator1_.isDynamic()) { + seleMan1_.setSelectionSet(evaluator1_.evaluate()); + } + + count_.resize(nThetaBins_); + histogram_.resize(nThetaBins_); + } void pAngle::process() { Molecule* mol; @@ -162,9 +182,7 @@ namespace OpenMD { // only do this if the stunt double actually has a vector associated // with it if (sd1->isDirectional()) { - Vector3d vec = sd1->getA().getColumn(2); - RealType distance = r1.length(); - + Vector3d vec = sd1->getA().getColumn(2); vec.normalize(); r1.normalize(); RealType cosangle = dot(r1, vec); @@ -182,14 +200,23 @@ namespace OpenMD { // This will require careful rewriting if StaticProps is // ever parallelized. For an example, see // Thermo::getTaggedAtomPairDistance + Vector3d r1; - int sd2Index = sd1->getGlobalIndex() + seleOffset_; - sd2 = info_->getIOIndexToIntegrableObject(sd2Index); - - Vector3d r1 = CenterOfMass - sd1->getPos(); + if (doOffset2_) { + int sd1Aind = sd1->getGlobalIndex() + seleOffset2_; + StuntDouble* sd1A = info_->getIOIndexToIntegrableObject(sd1Aind); + r1 = CenterOfMass - sd1A->getPos(); + } else { + r1 = CenterOfMass - sd1->getPos(); + } + if (usePeriodicBoundaryConditions_) currentSnapshot_->wrapVector(r1); - + + + int sd2Index = sd1->getGlobalIndex() + seleOffset_; + sd2 = info_->getIOIndexToIntegrableObject(sd2Index); + Vector3d r2 = CenterOfMass - sd2->getPos(); if (usePeriodicBoundaryConditions_) currentSnapshot_->wrapVector(r1);