Changeset a5551b for src/analysis_correlation.cpp
- Timestamp:
- Nov 4, 2009, 2:54:31 PM (16 years ago)
- Branches:
- Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
- Children:
- c9bce3e
- Parents:
- eecd33
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/analysis_correlation.cpp
reecd33 ra5551b 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.