Changeset 389cc8 for src/molecule.cpp


Ignore:
Timestamp:
Jul 21, 2010, 1:09:30 PM (15 years ago)
Author:
Tillmann Crueger <crueger@…>
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:
574ddc1
Parents:
6f43ab
Message:

Used the formual class instead of single variables inside molecule

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/molecule.cpp

    r6f43ab r389cc8  
    4949molecule::molecule(const periodentafel * const teil) :
    5050  Observable("molecule"),
    51   elemente(teil),  MDSteps(0),  BondCount(0), ElementCount(0), NoNonHydrogen(0), NoNonBonds(0),
     51  elemente(teil),  MDSteps(0),  BondCount(0), NoNonHydrogen(0), NoNonBonds(0),
    5252  NoCyclicBonds(0), BondDistance(0.),  ActiveFlag(false), IndexNr(-1),
    53   formula(this,boost::bind(&molecule::calcFormula,this),"formula"),
    5453  AtomCount(this,boost::bind(&molecule::doCountAtoms,this),"AtomCount"), last_atom(0),  InternalPointer(atoms.begin())
    5554{
    5655
    57   // other stuff
    58   for(int i=MAX_ELEMENTS;i--;)
    59     ElementsInMolecule[i] = 0;
    6056  strcpy(name,World::getInstance().getDefaultName().c_str());
    6157};
     
    10298
    10399const std::string molecule::getFormula(){
    104   return *formula;
     100  return formula.toString();
    105101}
    106102
     
    118114  }
    119115  return sstr.str();
     116}
     117
     118unsigned int molecule::getElementCount(){
     119  return formula.getElementCount();
     120}
     121
     122bool molecule::hasElement(const element *element) const{
     123  return formula.hasElement(element);
     124}
     125
     126bool molecule::hasElement(atomicNumber_t Z) const{
     127  return formula.hasElement(Z);
     128}
     129
     130bool molecule::hasElement(const string &shorthand) const{
     131  return formula.hasElement(shorthand);
    120132}
    121133
     
    210222    pointer->sort = &pointer->nr;
    211223    if (pointer->type != NULL) {
    212       if (ElementsInMolecule[pointer->type->Z] == 0)
    213         ElementCount++;
    214       ElementsInMolecule[pointer->type->Z]++; // increase number of elements
     224      formula += pointer->type;
    215225      if (pointer->type->Z != 1)
    216226        NoNonHydrogen++;
     
    651661
    652662  // copy values
    653   copy->CountElements();
    654663  if (hasBondStructure()) {  // if adjaceny list is present
    655664    copy->BondDistance = BondDistance;
     
    774783  ASSERT(pointer, "Null pointer passed to molecule::RemoveAtom().");
    775784  OBSERVE;
    776   if (ElementsInMolecule[pointer->type->Z] != 0)  { // this would indicate an error
    777     ElementsInMolecule[pointer->type->Z]--;  // decrease number of atom of this element
    778   } else
    779     DoeLog(1) && (eLog()<< Verbose(1) << "Atom " << pointer->getName() << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl);
    780   if (ElementsInMolecule[pointer->type->Z] == 0)  // was last atom of this element?
    781     ElementCount--;
     785  formula-=pointer->type;
    782786  RemoveBonds(pointer);
    783787  erase(pointer);
     
    793797  if (pointer == NULL)
    794798    return false;
    795   if (ElementsInMolecule[pointer->type->Z] != 0)  // this would indicate an error
    796     ElementsInMolecule[pointer->type->Z]--; // decrease number of atom of this element
    797   else
    798     DoeLog(1) && (eLog()<< Verbose(1) << "Atom " << pointer->getName() << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl);
    799   if (ElementsInMolecule[pointer->type->Z] == 0)  // was last atom of this element?
    800     ElementCount--;
     799  formula-=pointer->type;
    801800  erase(pointer);
    802801  return true;
     
    871870{
    872871  int ElementNo[MAX_ELEMENTS], AtomNo[MAX_ELEMENTS];
    873   CountElements();
    874872
    875873  for (int i=0;i<MAX_ELEMENTS;++i) {
     
    898896{
    899897  int ElementNo[MAX_ELEMENTS], AtomNo[MAX_ELEMENTS];
    900   CountElements();
    901898
    902899  if (output == NULL) {
     
    940937bool molecule::Checkout(ofstream * const output)  const
    941938{
    942   return elemente->Checkout(output, ElementsInMolecule);
     939  return formula.checkOut(output);
    943940};
    944941
     
    998995};
    999996
    1000 /** Brings molecule::ElementCount and molecule::ElementsInMolecule up-to-date.
    1001  */
    1002 void molecule::CountElements()
    1003 {
    1004   for(int i=MAX_ELEMENTS;i--;)
    1005     ElementsInMolecule[i] = 0;
    1006   ElementCount = 0;
    1007 
    1008   SetIndexedArrayForEachAtomTo ( ElementsInMolecule, &element::Z, &Increment, 1);
    1009 
    1010   for(int i=MAX_ELEMENTS;i--;)
    1011     ElementCount += (ElementsInMolecule[i] != 0 ? 1 : 0);
    1012 };
    1013 
    1014997/** Determines whether two molecules actually contain the same atoms and coordination.
    1015998 * \param *out output stream for debugging
     
    10301013  /// first count both their atoms and elements and update lists thereby ...
    10311014  //Log() << Verbose(0) << "Counting atoms, updating list" << endl;
    1032   CountElements();
    1033   OtherMolecule->CountElements();
    10341015
    10351016  /// ... and compare:
     
    10411022    } else Log() << Verbose(4) << "AtomCounts match: " << getAtomCount() << " == " << OtherMolecule->getAtomCount() << endl;
    10421023  }
    1043   /// -# ElementCount
     1024  /// -# Formula
    10441025  if (result) {
    1045     if (ElementCount != OtherMolecule->ElementCount) {
    1046       DoLog(4) && (Log() << Verbose(4) << "ElementCount don't match: " << ElementCount << " == " << OtherMolecule->ElementCount << endl);
     1026    if (formula != OtherMolecule->formula) {
     1027      DoLog(4) && (Log() << Verbose(4) << "Formulas don't match: " << formula << " == " << OtherMolecule->formula << endl);
    10471028      result = false;
    1048     } else Log() << Verbose(4) << "ElementCount match: " << ElementCount << " == " << OtherMolecule->ElementCount << endl;
    1049   }
    1050   /// -# ElementsInMolecule
    1051   if (result) {
    1052     for (flag=MAX_ELEMENTS;flag--;) {
    1053       //Log() << Verbose(5) << "Element " <<  flag << ": " << ElementsInMolecule[flag] << " <-> " << OtherMolecule->ElementsInMolecule[flag] << "." << endl;
    1054       if (ElementsInMolecule[flag] != OtherMolecule->ElementsInMolecule[flag])
    1055         break;
    1056     }
    1057     if (flag < MAX_ELEMENTS) {
    1058       DoLog(4) && (Log() << Verbose(4) << "ElementsInMolecule don't match." << endl);
    1059       result = false;
    1060     } else Log() << Verbose(4) << "ElementsInMolecule match." << endl;
     1029    } else Log() << Verbose(4) << "Formulas match: " << formula << " == " << OtherMolecule->formula << endl;
    10611030  }
    10621031  /// then determine and compare center of gravity for each molecule ...
Note: See TracChangeset for help on using the changeset viewer.