Changeset e1900f for molecuilder/src/analysis_correlation.cpp
- Timestamp:
- Nov 4, 2009, 2:54:31 PM (16 years ago)
- Children:
- c1b76e
- Parents:
- 4efdad
- File:
-
- 1 edited
-
molecuilder/src/analysis_correlation.cpp (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
molecuilder/src/analysis_correlation.cpp
r4efdad re1900f 14 14 #include "tesselationhelpers.hpp" 15 15 #include "vector.hpp" 16 #include "verbose.hpp" 16 17 17 18 … … 19 20 * Note given element order is unimportant (i.e. g(Si, O) === g(O, Si)) 20 21 * \param *out output stream for debugging 21 * \param *mol molecule with atoms22 * \param *molecules list of molecules structure 22 23 * \param *type1 first element or NULL (if any element) 23 24 * \param *type2 second element or NULL (if any element) 24 25 * \return Map of doubles with values the pair of the two atoms. 25 26 */ 26 PairCorrelationMap *PairCorrelation( const ofstream *out, const molecule * const mol, const element * const type1, const element * const type2 )27 PairCorrelationMap *PairCorrelation( ofstream * const out, MoleculeListClass * const &molecules, const element * const type1, const element * const type2 ) 27 28 { 28 29 PairCorrelationMap *outmap = NULL; 29 30 double distance = 0.; 30 31 31 if ( (mol == NULL)) {32 c out <<"No molecule given." << endl;32 if (molecules->ListOfMolecules.empty()) { 33 cerr << Verbose(1) <<"No molecule given." << endl; 33 34 return outmap; 34 35 } 35 36 outmap = new PairCorrelationMap; 36 atom *Walker = mol->start; 37 while (Walker->next != mol->end) { 38 Walker = Walker->next; 39 if ((type1 == NULL) || (Walker->type == type1)) { 40 atom *OtherWalker = mol->start; 41 while (OtherWalker->next != mol->end) { // only go up to Walker 42 OtherWalker = OtherWalker->next; 43 if (Walker->nr < OtherWalker->nr) 44 if ((type2 == NULL) || (OtherWalker->type == type2)) { 45 distance = Walker->node->Distance(OtherWalker->node); 46 //cout << "Inserting " << *Walker << " and " << *OtherWalker << endl; 47 outmap->insert ( pair<double, pair <atom *, atom*> > (distance, pair<atom *, atom*> (Walker, OtherWalker) ) ); 37 for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++) 38 if ((*MolWalker)->ActiveFlag) { 39 cerr << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl; 40 atom *Walker = (*MolWalker)->start; 41 while (Walker->next != (*MolWalker)->end) { 42 Walker = Walker->next; 43 *out << Verbose(3) << "Current atom is " << *Walker << "." << endl; 44 if ((type1 == NULL) || (Walker->type == type1)) { 45 for (MoleculeList::const_iterator MolOtherWalker = MolWalker; MolOtherWalker != molecules->ListOfMolecules.end(); MolOtherWalker++) 46 if ((*MolOtherWalker)->ActiveFlag) { 47 *out << Verbose(2) << "Current other molecule is " << *MolOtherWalker << "." << endl; 48 atom *OtherWalker = (*MolOtherWalker)->start; 49 while (OtherWalker->next != (*MolOtherWalker)->end) { // only go up to Walker 50 OtherWalker = OtherWalker->next; 51 *out << Verbose(3) << "Current otheratom is " << *OtherWalker << "." << endl; 52 if (Walker->nr < OtherWalker->nr) 53 if ((type2 == NULL) || (OtherWalker->type == type2)) { 54 distance = Walker->node->Distance(OtherWalker->node); 55 //*out << Verbose(1) <<"Inserting " << *Walker << " and " << *OtherWalker << endl; 56 outmap->insert ( pair<double, pair <atom *, atom*> > (distance, pair<atom *, atom*> (Walker, OtherWalker) ) ); 57 } 58 } 48 59 } 60 } 49 61 } 50 62 } 51 }52 63 53 64 return outmap; … … 56 67 /** Calculates the distance (pair) correlation between a given element and a point. 57 68 * \param *out output stream for debugging 58 * \param *mol molecule with atoms69 * \param *molecules list of molecules structure 59 70 * \param *type element or NULL (if any element) 60 71 * \param *point vector to the correlation point 61 72 * \return Map of dobules with values as pairs of atom and the vector 62 73 */ 63 CorrelationToPointMap *CorrelationToPoint( const ofstream *out, const molecule * const mol, const element * const type, const Vector *point )74 CorrelationToPointMap *CorrelationToPoint( ofstream * const out, MoleculeListClass * const &molecules, const element * const type, const Vector *point ) 64 75 { 65 76 CorrelationToPointMap *outmap = NULL; 66 77 double distance = 0.; 67 78 68 if ( (mol == NULL)) {69 cout <<"No molecule given." << endl;79 if (molecules->ListOfMolecules.empty()) { 80 *out << Verbose(1) <<"No molecule given." << endl; 70 81 return outmap; 71 82 } 72 83 outmap = new CorrelationToPointMap; 73 atom *Walker = mol->start; 74 while (Walker->next != mol->end) { 75 Walker = Walker->next; 76 if ((type == NULL) || (Walker->type == type)) { 77 distance = Walker->node->Distance(point); 78 outmap->insert ( pair<double, pair<atom *, const Vector*> >(distance, pair<atom *, const Vector*> (Walker, point) ) ); 84 for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++) 85 if ((*MolWalker)->ActiveFlag) { 86 *out << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl; 87 atom *Walker = (*MolWalker)->start; 88 while (Walker->next != (*MolWalker)->end) { 89 Walker = Walker->next; 90 *out << Verbose(3) << "Current atom is " << *Walker << "." << endl; 91 if ((type == NULL) || (Walker->type == type)) { 92 distance = Walker->node->Distance(point); 93 *out << Verbose(4) << "Current distance is " << distance << "." << endl; 94 outmap->insert ( pair<double, pair<atom *, const Vector*> >(distance, pair<atom *, const Vector*> (Walker, point) ) ); 95 } 96 } 79 97 } 80 }81 98 82 99 return outmap; … … 85 102 /** Calculates the distance (pair) correlation between a given element and a surface. 86 103 * \param *out output stream for debugging 87 * \param *mol molecule with atoms104 * \param *molecules list of molecules structure 88 105 * \param *type element or NULL (if any element) 89 106 * \param *Surface pointer to Tesselation class surface … … 91 108 * \return Map of doubles with values as pairs of atom and the BoundaryTriangleSet that's closest 92 109 */ 93 CorrelationToSurfaceMap *CorrelationToSurface( ofstream *out, const molecule * const mol, const element * const type, const Tesselation * const Surface, const LinkedCell *LC ) 94 { 95 110 CorrelationToSurfaceMap *CorrelationToSurface( ofstream * const out, MoleculeListClass * const &molecules, const element * const type, const Tesselation * const Surface, const LinkedCell *LC ) 111 { 96 112 CorrelationToSurfaceMap *outmap = NULL; 97 113 double distance = 0.; … … 99 115 Vector centroid; 100 116 101 if ((Surface == NULL) || (LC == NULL) || (mol == NULL)) {102 cout <<"No Tesselation, no LinkedCell or no molecule given." << endl;117 if ((Surface == NULL) || (LC == NULL) || (molecules->ListOfMolecules.empty())) { 118 *out << Verbose(1) <<"No Tesselation, no LinkedCell or no molecule given." << endl; 103 119 return outmap; 104 120 } 105 121 outmap = new CorrelationToSurfaceMap; 106 atom *Walker = mol->start; 107 while (Walker->next != mol->end) { 108 Walker = Walker->next; 109 if ((type == NULL) || (Walker->type == type)) { 110 triangle = Surface->FindClosestTriangleToPoint(out, Walker->node, LC ); 111 if (triangle != NULL) { 112 distance = DistanceToTrianglePlane(out, Walker->node, triangle); 113 outmap->insert ( pair<double, pair<atom *, BoundaryTriangleSet*> >(distance, pair<atom *, BoundaryTriangleSet*> (Walker, triangle) ) ); 122 for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++) 123 if ((*MolWalker)->ActiveFlag) { 124 *out << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl; 125 atom *Walker = (*MolWalker)->start; 126 while (Walker->next != (*MolWalker)->end) { 127 Walker = Walker->next; 128 *out << Verbose(3) << "Current atom is " << *Walker << "." << endl; 129 if ((type == NULL) || (Walker->type == type)) { 130 triangle = Surface->FindClosestTriangleToPoint(out, Walker->node, LC ); 131 if (triangle != NULL) { 132 distance = DistanceToTrianglePlane(out, Walker->node, triangle); 133 outmap->insert ( pair<double, pair<atom *, BoundaryTriangleSet*> >(distance, pair<atom *, BoundaryTriangleSet*> (Walker, triangle) ) ); 134 } 135 } 114 136 } 115 137 } 116 }117 138 118 139 return outmap; … … 135 156 * \param *map map to write 136 157 */ 137 void OutputCorrelation( ofstream * file, const BinPairMap * const map )158 void OutputCorrelation( ofstream * const file, const BinPairMap * const map ) 138 159 { 139 160 *file << "# BinStart\tCount" << endl; … … 147 168 * \param *map map to write 148 169 */ 149 void OutputPairCorrelation( ofstream * file, const PairCorrelationMap * const map )170 void OutputPairCorrelation( ofstream * const file, const PairCorrelationMap * const map ) 150 171 { 151 172 *file << "# BinStart\tAtom1\tAtom2" << endl; … … 159 180 * \param *map map to write 160 181 */ 161 void OutputCorrelationToPoint( ofstream * file, const CorrelationToPointMap * const map )182 void OutputCorrelationToPoint( ofstream * const file, const CorrelationToPointMap * const map ) 162 183 { 163 184 *file << "# BinStart\tAtom::x[i]-point.x[i]" << endl; … … 174 195 * \param *map map to write 175 196 */ 176 void OutputCorrelationToSurface( ofstream * file, const CorrelationToSurfaceMap * const map )197 void OutputCorrelationToSurface( ofstream * const file, const CorrelationToSurfaceMap * const map ) 177 198 { 178 199 *file << "# BinStart\tTriangle" << endl;
Note:
See TracChangeset
for help on using the changeset viewer.
