Changeset 2fd88d1 for src/Fragmentation


Ignore:
Timestamp:
May 18, 2016, 10:02:06 PM (9 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, 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_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, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, 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:
3004d2
Parents:
78202b
git-author:
Frederik Heber <heber@…> (03/11/16 00:38:44)
git-committer:
Frederik Heber <heber@…> (05/18/16 22:02:06)
Message:

AtomFragmentsMap now may return partial map on a vector of atoms with limited order.

Location:
src/Fragmentation
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Homology/AtomFragmentsMap.cpp

    r78202b r2fd88d1  
    4646
    4747void AtomFragmentsMap::insert(
    48     const Graph &_graph,
    49     size_t _MaxOrder)
     48    const Graph &_graph)
    5049{
    5150  /// create a map of atom to keyset (below equal MaxOrder)
     
    5554    const KeySet &keyset = keysetiter->first;
    5655    LOG(2, "DEBUG: Current keyset is " << keyset);
    57     if ((keyset.size() > _MaxOrder) || (keyset.empty()))
     56    if (keyset.empty())
    5857      continue;
    5958    for (KeySet::const_iterator keyiter = keyset.begin();
     
    7473}
    7574
     75AtomFragmentsMap::AtomFragmentsMap_t AtomFragmentsMap::getMap(
     76    const std::vector<atomId_t> &_candidates,
     77    size_t _MaxOrder) const
     78{
     79  typedef std::vector<atomId_t> candidates_t;
     80  AtomFragmentsMap_t fragmentmap;
     81  for (candidates_t::const_iterator candidateiter = _candidates.begin();
     82      candidateiter != _candidates.end(); ++candidateiter) {
     83    const atomId_t atomid = *candidateiter;
     84    const AtomFragmentsMap_t::const_iterator iter = atommap.find(atomid);
     85    ASSERT( iter != atommap.end(),
     86        "AtomFragmentsMap::getMap() - could not find atom "
     87        +toString(atomid)+" in lookup.");
     88    // due to MaxOrder we need to copy selectively and hence look at each KeySet in turn
     89    const keysets_t &keysets = iter->second;
     90    for (keysets_t::const_iterator keyiter = keysets.begin();
     91        keyiter != keysets.end(); ++keyiter) {
     92      const KeySet &keyset = *keyiter;
     93      if ((keyset.size() > _MaxOrder) || (keyset.empty()))
     94        continue;
     95      std::pair<AtomFragmentsMap_t::iterator, bool> inserter =
     96          fragmentmap.insert( std::make_pair(atomid, keysets_t(1, keyset) ));
     97      // ... or push to end
     98      if (inserter.second) {
     99        LOG(3, "DEBUG: Created new entry in lookup map.");
     100      } else {
     101        LOG(3, "DEBUG: Added keyset to present entry in lookup map.");
     102        inserter.first->second.push_back(keyset);
     103      }
     104    }
     105  }
     106  LOG(4, "DEBUG: Copied part of lookup map contains " << fragmentmap.size() << " keys.");
     107
     108  return fragmentmap;
     109}
     110
    76111CONSTRUCT_SINGLETON(AtomFragmentsMap)
    77112
  • src/Fragmentation/Homology/AtomFragmentsMap.hpp

    r78202b r2fd88d1  
    4444  //** Function to insert new fragments into storage container.
    4545  void insert(
    46       const Graph &_graph,
    47       size_t _MaxOrder);
     46      const Graph &_graph);
    4847
    4948  /** Function to clear the container.
     
    5756  typedef std::map<atomId_t, keysets_t> AtomFragmentsMap_t;
    5857
     58  /** Getter for full stored map.
     59   *
     60   * \return const ref to internal map
     61   */
    5962  const AtomFragmentsMap_t& getMap() const
    6063  { return atommap; }
    6164
     65  /** Getter to map cut down to given selection of atoms.
     66   *
     67   * \param _candidates subset of atoms
     68   * \param _MaxOrder constrain returned fragment list to contain at most this size
     69   * \return map with fragments for each of the candidates
     70   */
     71  AtomFragmentsMap_t getMap(
     72      const std::vector<atomId_t> &_candidates,
     73      size_t _MaxOrder) const;
    6274private:
    6375  //!> grant singleton pattern access to private cstor/dstor
  • src/Fragmentation/Interfragmenter.cpp

    r78202b r2fd88d1  
    171171{
    172172  AtomFragmentsMap& atomfragments_container = AtomFragmentsMap::getInstance();
    173   atomfragments_container.insert(TotalGraph, MaxOrder);
     173  atomfragments_container.insert(TotalGraph);
    174174  const atomkeyset_t &atomkeyset = atomfragments_container.getMap();
    175175
Note: See TracChangeset for help on using the changeset viewer.