Changeset 63e786


Ignore:
Timestamp:
Feb 24, 2013, 12:58:53 PM (12 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:
49f163
Parents:
c211f7
git-author:
Frederik Heber <heber@…> (10/19/12 07:08:23)
git-committer:
Frederik Heber <heber@…> (02/24/13 12:58:53)
Message:

Refactored realignElementTargets() out of gatherDistancesOfTuples().

Location:
src/FunctionApproximation
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/FunctionApproximation/Extractors.cpp

    rc211f7 r63e786  
    153153}
    154154
     155Extractors::chargeiters_t
     156Extractors::_detail::realignElementtargets(
     157    const elementtargets_t &elementtargets,
     158    const Fragment::charges_t elements,
     159    const elementcounts_t &elementcounts
     160    )
     161{
     162  chargeiters_t targets;
     163  elementcounts_t counts; // how many chargeiters of this element have been used
     164  targets.reserve(elements.size());
     165  for (Fragment::charges_t::const_iterator elementiter = elements.begin();
     166      elementiter != elements.end(); ++elementiter) {
     167    const element_t &element = *elementiter;
     168    count_t &count = counts[element]; // if not present, std::map creates instances with default of 0
     169#ifndef NDEBUG
     170    {
     171      elementcounts_t::const_iterator testiter = elementcounts.find(element);
     172      ASSERT( (testiter != elementcounts.end()) && (count < testiter->second),
     173          "Extractors::_detail::realignElementTargets() - we want to use more chargeiters for element "
     174          +toString(element)+" than we counted initially.");
     175    }
     176#endif
     177    elementtargets_t::const_iterator targetiter = elementtargets.find(element);
     178    ASSERT (targetiter != elementtargets.end(),
     179        "Extractors::_detail::realignElementTargets() - not enough chargeiters for element "
     180        +toString(element)+".");
     181    const chargeiters_t &chargeiters = targetiter->second;
     182    const chargeiter_t &chargeiter = chargeiters[count++];
     183    targets.push_back(chargeiter);
     184  }
     185  return targets;
     186}
     187
    155188Fragment::positions_t
    156189Extractors::gatherDistanceOfTuples(
     
    174207  // 3. we go again through elements and use one found target for each count
    175208  // in that order
    176   elementcounts_t counts; // how many chargeiters of this element have been used
    177   chargeiters_t targets;
    178   targets.reserve(elements.size());
    179   for (Fragment::charges_t::const_iterator elementiter = elements.begin();
    180       elementiter != elements.end(); ++elementiter) {
    181     const element_t &element = *elementiter;
    182     count_t &count = counts[element]; // if not present, std::map creates instances with default of 0
    183 #ifndef NDEBUG
    184     {
    185       elementcounts_t::const_iterator testiter = elementcounts.find(element);
    186       ASSERT( (testiter != elementcounts.end()) && (count < testiter->second),
    187           "Extractors::gatherDistanceOfTuples() - we want to use more chargeiters for element "
    188           +toString(element)+" than we counted initially.");
    189     }
    190 #endif
    191     elementtargets_t::iterator targetiter = elementtargets.find(element);
    192     ASSERT (targetiter != elementtargets.end(),
    193         "Extractors::gatherDistanceOfTuples() - not enough chargeiters for element "
    194         +toString(element)+".");
    195     chargeiters_t &chargeiters = targetiter->second;
    196     const chargeiter_t &chargeiter = chargeiters[count++];
    197     targets.push_back(chargeiter);
    198   }
     209  chargeiters_t targets =
     210      Extractors::_detail::realignElementtargets(elementtargets, elements, elementcounts);
     211
    199212#ifndef NDEBUG
    200213  // check all for debugging
  • TabularUnified src/FunctionApproximation/Extractors.hpp

    rc211f7 r63e786  
    8181        const elementcounts_t &elementcounts
    8282        );
     83
     84    /** Convert the alignment back to as it was in the original vector.
     85     *
     86     * We lost the information by storing it in a map. Hence, we need this
     87     * final step.
     88     *
     89     * \param elementtargets targets as they are in the map \a elementcounts
     90     * \param elements the original order of the elements
     91     * \param elementcounts the count per element for debugging checks
     92     * \return vector of targets in the order as they are in \a element
     93     */
     94    chargeiters_t realignElementtargets(
     95        const elementtargets_t &elementtargets,
     96        const Fragment::charges_t elements,
     97        const elementcounts_t &elementcounts
     98        );
    8399  }
    84100
Note: See TracChangeset for help on using the changeset viewer.