Changeset 220cf37 for src/analysis_bonds.cpp
- Timestamp:
- Nov 7, 2009, 12:25:32 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, Candidate_v1.7.0, 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:
- 9a7186
- Parents:
- b9947d
- git-author:
- Frederik Heber <heber@…> (11/07/09 12:18:56)
- git-committer:
- Frederik Heber <heber@…> (11/07/09 12:25:32)
- File:
-
- 1 edited
-
src/analysis_bonds.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
src/analysis_bonds.cpp
rb9947d r220cf37 6 6 */ 7 7 8 #include "analysis_bonds.hpp" 9 #include "atom.hpp" 10 #include "bond.hpp" 11 #include "log.hpp" 12 #include "molecule.hpp" 13 14 /** Calculates the min, mean and maximum bond counts for the given molecule. 15 * \param *mol molecule with atoms and atom::ListOfBonds 16 * \param &Min minimum count on return 17 * \param &Mean mean count on return 18 * \param &Max maximum count on return 19 */ 20 void GetMaxMinMeanBondCount(const molecule * const mol, double &Min, double &Mean, double &Max) 21 { 22 Min = 2e+6; 23 Max = -2e+5; 24 Mean = 0.; 25 26 atom *Walker = mol->start; 27 int AtomCount = 0; 28 while (Walker->next != mol->end) { 29 Walker = Walker->next; 30 const int count = Walker->ListOfBonds.size(); 31 if (Max < count) 32 Max = count; 33 if (Min > count) 34 Min = count; 35 Mean += count; 36 AtomCount++; 37 } 38 if (((int)Mean % 2) != 0) 39 eLog() << Verbose(1) << "Something is wrong with the bond structure, the number of bonds is not even!" << endl; 40 Mean /= (double)AtomCount; 41 }; 42 43 /** Calculates the min and max bond distance of all atoms of two given elements. 44 * \param *mol molecule with atoms 45 * \param *type1 one element 46 * \param *type2 other element 47 * \param &Min minimum distance on return, 0 if no bond between the two elements 48 * \param &Mean mean distance (i.e. sum of distance for matching element pairs, divided by number) on return, 0 if no bond between the two elements 49 * \param &Max maximum distance on return, 0 if no bond between the two elements 50 */ 51 void MinMeanMaxBondDistanceBetweenElements(const molecule *mol, element *type1, element *type2, double &Min, double &Mean, double &Max) 52 { 53 Min = 2e+6; 54 Mean = 0.; 55 Max = -2e+6; 56 57 int AtomNo = 0; 58 atom *Walker = mol->start; 59 while (Walker->next != mol->end) { 60 Walker = Walker->next; 61 if (Walker->type == type1) 62 for (BondList::const_iterator BondRunner = Walker->ListOfBonds.begin(); BondRunner != Walker->ListOfBonds.end(); BondRunner++) 63 if ((*BondRunner)->GetOtherAtom(Walker)->type == type2) { 64 const double distance = (*BondRunner)->GetDistanceSquared(); 65 if (Min > distance) 66 Min = distance; 67 if (Max < distance) 68 Max = distance; 69 Mean += sqrt(distance); 70 AtomNo++; 71 } 72 } 73 if (Max < 0) { 74 Max = Min = 0.; 75 } else { 76 Max = sqrt(Max); 77 Min = sqrt(Min); 78 Mean = Mean/(double)AtomNo; 79 } 80 };
Note:
See TracChangeset
for help on using the changeset viewer.
