Ignore:
Timestamp:
Oct 14, 2013, 11:42:03 PM (11 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:
fe0cb8
Parents:
fb9f6d
git-author:
Frederik Heber <heber@…> (09/24/13 12:32:02)
git-committer:
Frederik Heber <heber@…> (10/14/13 23:42:03)
Message:

FIX: CyclicStructureAnalysis did not work correctly.

  • many errors with local variables that probably should have been in the class.
  • we use OtherAtom in subsequent RetrieveCycleMembers() but we have not given CyclicBFSFromRootToRoot() its ref.
  • the idea now is to use first get all cycles (CyclicBFSFromRootToRoot(). RetrieveCycleMembers()) and then to assign all remaining atoms via AssignRingSizetoNonCycleMembers() with BFSToNextCycle() where we make use of locality property of BFS.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Graph/DepthFirstSearchAnalysis.cpp

    rfb9f6d r8dbcaf  
    130130    return false;
    131131  }
    132   bond::ptr Binder = BackEdgeStack.front();
    133   bond::ptr FirstBond = Binder; // mark the first bond, so that we don't loop through the stack indefinitely
    134   atom *Walker = NULL, *OtherAtom = NULL;
     132  std::deque<bond::ptr > MyBackEdgeStack = BackEdgeStack;
    135133
    136134  do { // go through all bonds and push local ones
     135    const bond::ptr &Binder = MyBackEdgeStack.front(); // loop the stack for next item
     136    MyBackEdgeStack.pop_front();
     137    LOG(3, "INFO: Current candidate edge " << *Binder << ".");
    137138    const ListOfLocalAtoms_t::const_iterator leftiter = ListOfLocalAtoms.find(Binder->leftatom->getNr());
    138139    ASSERT( leftiter != ListOfLocalAtoms.end(),
    139140        "DepthFirstSearchAnalysis::PickLocalBackEdges() - could not find atom id "
    140141        +toString(Binder->leftatom->getNr())+" in ListOfLocalAtoms.");
    141     Walker = leftiter->second; // get one atom in the reference molecule
     142    atom * const Walker = leftiter->second; // get one atom in the reference molecule
    142143    if (Walker != NULL) { // if this Walker exists in the subgraph ...
    143144      const BondList& ListOfBonds = Walker->getListOfBonds();
     
    145146          Runner != ListOfBonds.end();
    146147          ++Runner) {
    147         OtherAtom = (*Runner)->GetOtherAtom(Walker);
     148        atom * const OtherAtom = (*Runner)->GetOtherAtom(Walker);
    148149        const ListOfLocalAtoms_t::const_iterator rightiter = ListOfLocalAtoms.find((*Runner)->rightatom->getNr());
    149150        if (OtherAtom == rightiter->second) { // found the bond
     
    154155      }
    155156    }
    156     ASSERT(!BackEdgeStack.empty(), "DepthFirstSearchAnalysis::PickLocalBackEdges() - ReferenceStack is empty!");
    157     Binder = BackEdgeStack.front(); // loop the stack for next item
    158     LOG(3, "Current candidate edge " << Binder << ".");
    159   } while (FirstBond != Binder);
     157  } while (!MyBackEdgeStack.empty());
    160158
    161159  return status;
Note: See TracChangeset for help on using the changeset viewer.