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 1990 by tim, Wed Feb 9 17:08:22 2005 UTC vs.
Revision 2031 by tim, Tue Feb 15 17:11:35 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 <    delta_ = 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 <
87 >    int nFrames = reader.getNFrames();
88 >    nProcessed_ = nFrames / step_ + 1;
89      for (int i = 0; i < nFrames; i += step_) {
90 <        reader->readFrame(i);
90 >        reader.readFrame(i);
91          currentSnapshot_ = info_->getSnapshotManager()->getCurrentSnapshot();
92  
93 <        if (evaluator1_->isDynamic()) {
94 <            seleMan1_.setSelectionSet(evaluator1_->evaluate());
93 >        if (evaluator1_.isDynamic()) {
94 >            seleMan1_.setSelectionSet(evaluator1_.evaluate());
95          }
96 <        if (evaluator2_->isDynamic()) {
97 <            seleMan2_.setSelectionSet(evaluator2_->evaluate());
96 >        if (evaluator2_.isDynamic()) {
97 >            seleMan2_.setSelectionSet(evaluator2_.evaluate());
98          }
99  
100 +        for (mol = info_->beginMolecule(mi); mol != NULL; mol = info_->nextMolecule(mi)) {
101 +
102 +            //change the positions of atoms which belong to the rigidbodies
103 +            for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) {
104 +                rb->updateAtoms();
105 +            }
106 +        }
107 +        
108          initalizeHistogram();
109  
110          StuntDouble* sd1;
111          int j;
112 <        for (sd1 = seleMan1_->beginSelected(j); sd1 != NULL; sd1 = seleMan1_->nextSelected(j)) {
112 >        for (sd1 = seleMan1_.beginSelected(j); sd1 != NULL; sd1 = seleMan1_.nextSelected(j)) {
113  
114              StuntDouble* sd2;
115              int k;
116 <            for (sd2 = seleMan2_->beginSelected(k); sd2 != NULL; sd2 = seleMan2_->nextSelected(k)) {
117 <                collectHistogram(sd1, sd2);
116 >            for (sd2 = seleMan2_.beginSelected(k); sd2 != NULL; sd2 = seleMan2_.nextSelected(k)) {
117 >                if (sd1 != sd2) {
118 >                    collectHistogram(sd1, sd2);
119 >                }
120              }            
121          }
122  
# Line 99 | Line 126 | void RadialDistrFunc::process() {
126  
127      postProcess();
128  
129 <    
129 >    writeRdf();
130   }
131  
132 + int RadialDistrFunc::getNRealPairs() {
133 +    if (evaluator1_.isDynamic() || evaluator2_.isDynamic()) {
134 +        //if one of the selection is static,  need to recompute it    
135 +
136 +        int nSelected1 = seleMan1_->getSelectionCount();
137 +        int nSelected2 = seleMan2_->getSelectionCount();
138 +
139 +        BitSet bs = seleMan1_.getSelectionSet();
140 +        bs &= seleMan2_.getSelectionSet();
141 +        int nIntersect = bs.countBits();
142 +
143 +        nRealPairs_ = nSelected1 * nSelected2 - (nIntersect +1) * nIntersect/2;
144 +    }
145 +
146 +    return nRealPairs_
147   }
148 +
149 + }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines