Ignore:
Timestamp:
Nov 8, 2012, 1:13:52 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:
3f6bbb
Parents:
c4fd03
git-author:
Frederik Heber <heber@…> (07/31/12 13:08:48)
git-committer:
Frederik Heber <heber@…> (11/08/12 13:13:52)
Message:

Split getBin into getLowerEndBin() and getHigherEndBin().

  • this functionality is required within the operator+=() and operator-=().
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Histogram/Histogram.cpp

    rc4fd03 r1c365e  
    101101    BinCreator_t BinCreator( *miniter, binwidth );
    102102    std::vector<Bin_t> vectorbins;
    103     // we need one extra bin for getBin()'s find to work properly
     103    // we need one extra bin for get...Bin()'s find to work properly
    104104    vectorbins.resize(CountBins+1, Bin_t( make_pair(0., 0.) ) );
    105105    std::generate( vectorbins.begin(), vectorbins.end(), BinCreator );
     
    111111    // 4. place each sample into bin
    112112    BOOST_FOREACH( double value, samples) {
    113       const Bins_t::iterator biniter = getBin(value);
     113      const Bins_t::iterator biniter = getLowerEndBin(value);
    114114      ASSERT( biniter != bins.end(),
    115115          "Histogram::Histogram() - cannot find bin for value from given samples.");
     
    139139}
    140140
    141 Histogram::Bins_t::iterator Histogram::getBin(const double _value)
     141Histogram::Bins_t::iterator Histogram::getLowerEndBin(const double _value)
    142142{
    143   // \note we may use equal_range as our bins are always sorted
     143  // lower bound returns key that is equal or greater
    144144  Bins_t::iterator iter = bins.lower_bound(_value);
    145   // if we are not on the boundary we have to step back by one
    146145  if (iter != bins.end()) {
    147     if (_value != iter->first)
    148       --iter;
     146    // if we are not on the boundary we always have to step back by one
     147    if (_value != iter->first) {
     148      if (iter != bins.begin()) {
     149          --iter;
     150      } else {
     151        iter = bins.end();
     152      }
     153    } else if (iter == --bins.end()) {
     154      // if we actually are on boundary of "last bin", set to end
     155      iter = bins.end();
     156    }
    149157  }
    150   // if we actually are on boundary of "last bin", set to end
    151   if ((_value == iter->first) && (iter == --bins.end()))
    152       iter = bins.end();
     158  return iter;
     159}
     160
     161Histogram::Bins_t::iterator Histogram::getHigherEndBin(const double _value)
     162{
     163  // upper bound return key that is strictly greater
     164  Bins_t::iterator iter = bins.upper_bound(_value);
     165  // if we are on the boundary we have to step back by one
     166  if (iter != bins.end())
     167    if (_value == iter->first)
     168      if (iter != bins.begin())
     169          --iter;
    153170
    154171  return iter;
Note: See TracChangeset for help on using the changeset viewer.