Changeset bfd839


Ignore:
Timestamp:
May 27, 2010, 9:17:11 AM (15 years ago)
Author:
Frederik Heber <heber@…>
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:
b32dbb
Parents:
f2f4ae
Message:

Changed and added counting of hydrogen bonds to menu.

  • CountHydrogenBonds() now receives two interface elements. This was needed to overcome double-couting in CSH-experiments.
  • Unit test CountHBonds has been changed accordingly, but not test for the new feature has been added.
  • case 'H' in builder.cpp is now used for counting hydrogen bonds not for giving help screen
  • option has been added to MeasureAtoms() menu

Signed-off-by: Frederik Heber <heber@…>

Location:
src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/Legacy/oldmenu.cpp

    rf2f4ae rbfd839  
    88
    99#include "Legacy/oldmenu.hpp"
     10#include "analysis_bonds.hpp"
    1011#include "analysis_correlation.hpp"
    1112#include "World.hpp"
     
    501502  Log() << Verbose(0) << " f - calculate temperature from current velocity" << endl;
    502503  Log() << Verbose(0) << " g - output all temperatures per step from velocities" << endl;
     504  Log() << Verbose(0) << " h - count the number of hydrogen bonds" << endl;
    503505  Log() << Verbose(0) << "all else - go back" << endl;
    504506  Log() << Verbose(0) << "===============================================" << endl;
     
    591593        output->close();
    592594        delete(output);
     595      }
     596      break;
     597    case 'h':
     598      {
     599        int Z1;
     600        cout << "Please enter first interface element: ";
     601        cin >> Z1;
     602        const element * InterfaceElement = World::getInstance().getPeriode()->FindElement(Z1);
     603        int Z2;
     604        cout << "Please enter second interface element: ";
     605        cin >> Z2;
     606        const element * InterfaceElement2 = World::getInstance().getPeriode()->FindElement(Z2);
     607        cout << endl << "There are " << CountHydrogenBridgeBonds(World::getInstance().getMolecules(), InterfaceElement, InterfaceElement2) << " hydrogen bridges with connections to " << (InterfaceElement != 0 ? InterfaceElement->name : "None") << " and " << (InterfaceElement2 != 0 ? InterfaceElement2->name : "None") << "." << endl;
    593608      }
    594609      break;
  • src/analysis_bonds.cpp

    rf2f4ae rbfd839  
    123123 * \param *molecules molecules to count bonds
    124124 * \param *InterfaceElement or NULL
    125  */
    126 int CountHydrogenBridgeBonds(MoleculeListClass *molecules, element * InterfaceElement = NULL)
     125 * \param *Interface2Element or NULL
     126 */
     127int CountHydrogenBridgeBonds(MoleculeListClass *molecules, const element * InterfaceElement = NULL, const element * Interface2Element = NULL)
    127128{
    128129  atom *Walker = NULL;
     
    132133  double Otherangle = 0.;
    133134  bool InterfaceFlag = false;
     135  bool Interface2Flag = false;
    134136  bool OtherHydrogenFlag = true;
    135137  for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin();MolWalker != molecules->ListOfMolecules.end(); MolWalker++) {
     
    151153              OtherHydrogens = 0;
    152154              InterfaceFlag = (InterfaceElement == NULL);
     155              Interface2Flag = (Interface2Element == NULL);
    153156              for (BondList::const_iterator BondRunner = Runner->ListOfBonds.begin(); BondRunner != Runner->ListOfBonds.end(); BondRunner++) {
    154157                atom * const OtherAtom = (*BondRunner)->GetOtherAtom(Runner);
     
    161164                }
    162165                InterfaceFlag = InterfaceFlag || (OtherAtom->type == InterfaceElement);
     166                Interface2Flag = Interface2Flag || (OtherAtom->type == Interface2Element);
    163167              }
    164168              DoLog(1) && (Log() << Verbose(1) << "Otherangle is " << Otherangle << " for " << OtherHydrogens << " hydrogens." << endl);
     
    174178                  break;
    175179              }
    176               if (InterfaceFlag && OtherHydrogenFlag) {
     180              if (InterfaceFlag && Interface2Flag && OtherHydrogenFlag) {
    177181                // on this element (Walker) we check for bond to hydrogen, i.e. part of water molecule
    178182                for (BondList::const_iterator BondRunner = Walker->ListOfBonds.begin(); BondRunner != Walker->ListOfBonds.end(); BondRunner++) {
  • src/analysis_bonds.hpp

    rf2f4ae rbfd839  
    3333void MinMeanMaxBondDistanceBetweenElements(const molecule *mol, element *type1, element *type2, double &Min, double &Mean, double &Max);
    3434
    35 int CountHydrogenBridgeBonds(MoleculeListClass * const molecules, element * InterfaceElement);
     35int CountHydrogenBridgeBonds(MoleculeListClass * const molecules, const element * InterfaceElement, const element * Interface2Element);
    3636int CountBondsOfTwo(MoleculeListClass * const molecules, const element * const first, const element * const second);
    3737int CountBondsOfThree(MoleculeListClass * const molecules, const element * const first, const element * const second, const element * const third);
  • src/builder.cpp

    rf2f4ae rbfd839  
    7070#include "molecule.hpp"
    7171#include "periodentafel.hpp"
     72#include "tesselationhelpers.hpp"
    7273#include "UIElements/UIFactory.hpp"
    7374#include "UIElements/MainWindow.hpp"
     
    15191520        switch(argv[argptr-1][1]) {
    15201521          case 'h':
    1521           case 'H':
    15221522          case '?':
    15231523            DoLog(0) && (Log() << Verbose(0) << "MoleCuilder suite" << endl << "==================" << endl << endl);
     
    15381538            DoLog(0) && (Log() << Verbose(0) << "\t-FF <MaxDistance> <xyz of filler> <dist_x> <dist_y> <dist_z> <epsilon> <randatom> <randmol> <DoRotate>\tFilling Box with water molecules." << endl);
    15391539            DoLog(0) && (Log() << Verbose(0) << "\t-g <file>\tParses a bond length table from the given file." << endl);
    1540             DoLog(0) && (Log() << Verbose(0) << "\t-h/-H/-?\tGive this help screen." << endl);
     1540            DoLog(0) && (Log() << Verbose(0) << "\t-h/-?\tGive this help screen." << endl);
     1541            DoLog(0) && (Log() << Verbose(0) << "\t-H\tCount Hydrogen bridge bonds." << endl);
    15411542            DoLog(0) && (Log() << Verbose(0) << "\t-I\t Dissect current system of molecules into a set of disconnected (subgraphs of) molecules." << endl);
    15421543            DoLog(0) && (Log() << Verbose(0) << "\t-j\t<path> Store all bonds to file." << endl);
     
    18171818                if (mol != NULL)
    18181819                  mol->ActiveFlag = true;
     1820              }
     1821              break;
     1822            case 'H':
     1823              if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (argv[argptr+1][0] == '-')) {
     1824                ExitFlag = 255;
     1825                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for calculating hydrogen bridge bonds: -H <Z1> <Z2>" << endl);
     1826                performCriticalExit();
     1827              } else {
     1828                if (ExitFlag == 0) ExitFlag = 1;
     1829                const element *elemental = periode->FindElement((const int) atoi(argv[argptr]));
     1830                const element *elemental2 = periode->FindElement((const int) atoi(argv[argptr+1]));
     1831                cout << endl << "There are " << CountHydrogenBridgeBonds(molecules, elemental, elemental2) << " hydrogen bridges with connections to " << (elemental != 0 ? elemental->name : "None") << " and " << (elemental2 != 0 ? elemental2->name : "None") << "." << endl;
     1832                argptr+=1;
    18191833              }
    18201834              break;
  • src/unittests/CountBondsUnitTest.cpp

    rf2f4ae rbfd839  
    167167  Translator  = Vector(3,0,0);
    168168  TestMolecule2->Translate(&Translator);
    169   CPPUNIT_ASSERT_EQUAL( 1 , CountHydrogenBridgeBonds(molecules, NULL) );
    170   CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, oxygen) );
     169  CPPUNIT_ASSERT_EQUAL( 1 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
     170  CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, oxygen, NULL) );
    171171  //OutputTestMolecule(TestMolecule2, "testmolecule2-1.xyz");
    172172  Translator = Vector(-3,0,0);
     
    176176  Translator = Vector(0,3,0);
    177177  TestMolecule2->Translate(&Translator);
    178   CPPUNIT_ASSERT_EQUAL( 1 , CountHydrogenBridgeBonds(molecules, NULL) );
     178  CPPUNIT_ASSERT_EQUAL( 1 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
    179179  //OutputTestMolecule(TestMolecule2, "testmolecule2-2.xyz");
    180180  Translator = Vector(0,-3,0);
     
    185185  TestMolecule2->Scale((const double ** const)&mirror);
    186186  TestMolecule2->Translate(&Translator);
    187   CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL) );
     187  CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
    188188  //OutputTestMolecule(TestMolecule2, "testmolecule2-3.xyz");
    189189  Translator = Vector(0,3,0);
     
    194194  Translator = Vector(2,1,0);
    195195  TestMolecule2->Translate(&Translator);
    196   CPPUNIT_ASSERT_EQUAL( 1 , CountHydrogenBridgeBonds(molecules, NULL) );
     196  CPPUNIT_ASSERT_EQUAL( 1 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
    197197  //OutputTestMolecule(TestMolecule2, "testmolecule2-4.xyz");
    198198  Translator = Vector(-2,-1,0);
     
    202202  Translator = Vector(0,0,3);
    203203  TestMolecule2->Translate(&Translator);
    204   CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL) );
     204  CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
    205205  //OutputTestMolecule(TestMolecule2, "testmolecule2-5.xyz");
    206206  Translator = Vector(0,0,-3);
     
    211211  TestMolecule2->Scale((const double ** const)&mirror);
    212212  TestMolecule2->Translate(&Translator);
    213   CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL) );
     213  CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
    214214  //OutputTestMolecule(TestMolecule2, "testmolecule2-6.xyz");
    215215  Translator = Vector(3,0,0);
     
    221221  TestMolecule2->Scale((const double ** const)&mirror);
    222222  TestMolecule2->Translate(&Translator);
    223   CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL) );
     223  CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
    224224  //OutputTestMolecule(TestMolecule2, "testmolecule2-7.xyz");
    225225  Translator = Vector(-3,0,0);
     
    232232  TestMolecule2->Translate(&Translator);
    233233  //OutputTestMolecule(TestMolecule2, "testmolecule2-8.xyz");
    234   CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL) );
     234  CPPUNIT_ASSERT_EQUAL( 0 , CountHydrogenBridgeBonds(molecules, NULL, NULL) );
    235235  Translator = Vector(0,-3,0);
    236236  TestMolecule2->Translate(&Translator);
Note: See TracChangeset for help on using the changeset viewer.