ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/applications/staticProps/RadialDistrFunc.cpp
(Generate patch)

Comparing trunk/OOPSE-4/src/applications/staticProps/RadialDistrFunc.cpp (file contents):
Revision 1993 by tim, Thu Feb 10 14:15:52 2005 UTC vs.
Revision 2035 by tim, Tue Feb 15 19:36:07 2005 UTC

# Line 42 | Line 42
42   #include <algorithm>
43  
44   #include "RadialDistrFunc.hpp"
45 <
45 > #include "io/DumpReader.hpp"
46 > #include "primitives/Molecule.hpp"
47   namespace oopse {
48  
49 < RadialDistrFunc::        RadialDistrFunc(SimInfo* info, const std::string& filename, const std::string& sele1, const std::string& sele2, double len)
50 <        : info_(info), currentSnapshot_(NULL), dumpFilename_(filename), len_(len), nbins_(50), step_(1),
51 <          selectionScript1_(sele1), selectionScript2_(sele2), evaluator1_(info), evaluator2_(info){
49 > RadialDistrFunc::        RadialDistrFunc(SimInfo* info, const std::string& filename, const std::string& sele1, const std::string& sele2)
50 >        : info_(info), currentSnapshot_(NULL), dumpFilename_(filename), step_(1),
51 >          selectionScript1_(sele1), selectionScript2_(sele2), evaluator1_(info), evaluator2_(info), seleMan1_(info), seleMan2_(info){
52            
53      evaluator1_.loadScriptString(sele1);
54      evaluator2_.loadScriptString(sele2);
55  
56 <    if (!evaluator1_->isDynamic()) {
57 <            seleMan1_.setSelectionSet(evaluator1_->evaluate());
56 >    if (!evaluator1_.isDynamic()) {
57 >            seleMan1_.setSelectionSet(evaluator1_.evaluate());
58      }
59 <    if (!evaluator2_->isDynamic()) {
60 <            seleMan2_.setSelectionSet(evaluator2_->evaluate());
59 >    if (!evaluator2_.isDynamic()) {
60 >            seleMan2_.setSelectionSet(evaluator2_.evaluate());
61      }
62  
63 <    deltaR_ = len_ /nbins_;
63 >    if (!evaluator1_.isDynamic() && !evaluator2_.isDynamic()) {
64 >        //if all selections are static,  we can precompute the number of real pairs    
65 >
66 >        int nSelected1 = seleMan1_.getSelectionCount();
67 >        int nSelected2 = seleMan2_.getSelectionCount();
68 >
69 >        BitSet bs = seleMan1_.getSelectionSet();
70 >        bs &= seleMan2_.getSelectionSet();
71 >        int nIntersect = bs.countBits();
72 >
73 >        nRealPairs_ = nSelected1 * nSelected2 - (nIntersect +1) * nIntersect/2;
74 >    }
75 >    
76   }
77  
78   void RadialDistrFunc::process() {
79 <
79 >    Molecule* mol;
80 >    RigidBody* rb;
81 >    SimInfo::MoleculeIterator mi;
82 >    Molecule::RigidBodyIterator rbIter;
83 >    
84      preProcess();
85      
86      DumpReader reader(info_, dumpFilename_);    
87 <    int nFrames = reader->getNFrames();
88 <    nProcessed_ = nFrames / step_ + 1;
87 >    int nFrames = reader.getNFrames();
88 >    nProcessed_ = nFrames / step_;
89 >
90      for (int i = 0; i < nFrames; i += step_) {
91 <        reader->readFrame(i);
91 >        reader.readFrame(i);
92          currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot();
93  
94 <        if (evaluator1_->isDynamic()) {
95 <            seleMan1_.setSelectionSet(evaluator1_->evaluate());
94 >        if (evaluator1_.isDynamic()) {
95 >            seleMan1_.setSelectionSet(evaluator1_.evaluate());
96          }
97 <        if (evaluator2_->isDynamic()) {
98 <            seleMan2_.setSelectionSet(evaluator2_->evaluate());
97 >        if (evaluator2_.isDynamic()) {
98 >            seleMan2_.setSelectionSet(evaluator2_.evaluate());
99          }
100  
101 +        for (mol = info_->beginMolecule(mi); mol != NULL; mol = info_->nextMolecule(mi)) {
102 +
103 +            //change the positions of atoms which belong to the rigidbodies
104 +            for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) {
105 +                rb->updateAtoms();
106 +            }
107 +        }
108 +        
109          initalizeHistogram();
110  
111          StuntDouble* sd1;
112          int j;
113 <        for (sd1 = seleMan1_->beginSelected(j); sd1 != NULL; sd1 = seleMan1_->nextSelected(j)) {
113 >        for (sd1 = seleMan1_.beginSelected(j); sd1 != NULL; sd1 = seleMan1_.nextSelected(j)) {
114  
115              StuntDouble* sd2;
116              int k;
117 <            for (sd2 = seleMan2_->beginSelected(k); sd2 != NULL; sd2 = seleMan2_->nextSelected(k)) {
118 <                collectHistogram(sd1, sd2);
117 >            for (sd2 = seleMan2_.beginSelected(k); sd2 != NULL; sd2 = seleMan2_.nextSelected(k)) {
118 >                if (sd1 != sd2) {
119 >                    collectHistogram(sd1, sd2);
120 >                }
121              }            
122          }
123  
# Line 102 | Line 130 | void RadialDistrFunc::process() {
130      writeRdf();
131   }
132  
133 + int RadialDistrFunc::getNRealPairs() {
134 +    if (evaluator1_.isDynamic() || evaluator2_.isDynamic()) {
135 +        //if one of the selection is dynamic,  need to recompute it    
136 +
137 +        int nSelected1 = seleMan1_.getSelectionCount();
138 +        int nSelected2 = seleMan2_.getSelectionCount();
139 +
140 +        BitSet bs = seleMan1_.getSelectionSet();
141 +        bs &= seleMan2_.getSelectionSet();
142 +        int nIntersect = bs.countBits();
143 +
144 +        nRealPairs_ = nSelected1 * nSelected2 - (nIntersect +1) * nIntersect/2;
145 +    }
146 +
147 +    return nRealPairs_;
148   }
149 +
150 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines