Ignore:
Timestamp:
Feb 25, 2013, 5:28:58 PM (13 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, 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:
1f3b2a
Parents:
d94e7e
git-author:
Frederik Heber <heber@…> (11/26/12 22:23:13)
git-committer:
Frederik Heber <heber@…> (02/25/13 17:28:58)
Message:

FunctionArgument now contains charges, too, and rewrote Extractors accordingly.

  • gatherDistancesFromFragment is now what we mostly want: Returns exactly the arguments in the way we specify.
  • PairPotential_AngleUnitTest now has gives additional types to potential's cstor.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/FunctionApproximation/Extractors.cpp

    rd94e7e r691be4  
    5252FunctionModel::arguments_t
    5353Extractors::gatherAllDistanceArguments(
    54     const Fragment::positions_t &positions,
     54    const Fragment::positions_t& positions,
     55    const Fragment::charges_t& charges,
    5556    const size_t globalid)
    5657{
     
    6869      const Vector secondtemp((*secondpositer)[0],(*secondpositer)[1],(*secondpositer)[2]);
    6970      arg.distance = firsttemp.distance(secondtemp);
     71      arg.types = std::make_pair(
     72          charges[ std::distance(positions.begin(), firstpositer) ],
     73          charges[ std::distance(positions.begin(), secondpositer) ]
     74          );
    7075      arg.indices = std::make_pair(
    7176          std::distance(
     
    8489FunctionModel::arguments_t
    8590Extractors::gatherAllSymmetricDistanceArguments(
    86     const Fragment::positions_t &positions,
     91    const Fragment::positions_t& positions,
     92    const Fragment::charges_t& charges,
    8793    const size_t globalid)
    8894{
     
    100106      const Vector secondtemp((*secondpositer)[0],(*secondpositer)[1],(*secondpositer)[2]);
    101107      arg.distance = firsttemp.distance(secondtemp);
     108      arg.types = std::make_pair(
     109          charges[ std::distance(positions.begin(), firstpositer) ],
     110          charges[ std::distance(positions.begin(), secondpositer) ]
     111          );
    102112      arg.indices = std::make_pair(
    103113          std::distance(
     
    114124}
    115125
    116 Fragment::positions_t Extractors::_detail::gatherPositionsFromCharges(
    117     const Fragment::positions_t &positions,
    118     const Fragment::charges_t &charges,
    119     const chargeiters_t targets
     126Fragment::positions_t Extractors::_detail::gatherPositionsFromTargets(
     127    const Fragment::positions_t& positions,
     128    const Fragment::charges_t& charges,
     129    const chargeiters_t &targets
    120130    )
    121131{
     
    129139  }
    130140  return filtered_positions;
     141}
     142
     143FunctionModel::arguments_t Extractors::_detail::gatherDistancesFromTargets(
     144    const Fragment::positions_t& positions,
     145    const Fragment::charges_t& charges,
     146    const chargeiters_t &targets,
     147    const size_t globalid
     148    )
     149{
     150  Fragment::positions_t filtered_positions;
     151  Fragment::charges_t filtered_charges;
     152  for (chargeiters_t::const_iterator firstpairiter = targets.begin();
     153      firstpairiter != targets.end(); ++firstpairiter) {
     154    Fragment::positions_t::const_iterator positer = positions.begin();
     155    const size_t steps = std::distance(charges.begin(), *firstpairiter);
     156    std::advance(positer, steps);
     157    filtered_positions.push_back(*positer);
     158    filtered_charges.push_back(**firstpairiter);
     159  }
     160  return Extractors::gatherAllSymmetricDistanceArguments(
     161      filtered_positions,
     162      filtered_charges,
     163      globalid);
    131164}
    132165
     
    218251}
    219252
    220 Fragment::positions_t
    221 Extractors::gatherPositionOfTuples(
    222     const Fragment& fragment,
     253Extractors::chargeiters_t
     254Extractors::_detail::gatherTargetsFromFragment(
     255    const Fragment::charges_t& charges,
    223256    const Fragment::charges_t elements
    224     ) {
    225   const Fragment::charges_t charges = fragment.getCharges();
     257    )
     258{
    226259  /// The main problem here is that we have to know how many same
    227260  /// elements (but different atoms!) we are required to find. Hence,
     
    248281      ++chargeiter)
    249282    ASSERT( *chargeiter != charges.end(),
    250         "Extractors::gatherDistanceOfTuples() - we have not found enough targets?!");
     283        "Extractors::gatherTargetsFromFragment() - we have not found enough targets?!");
    251284#endif
     285
     286  return targets;
     287}
     288
     289Fragment::positions_t
     290Extractors::gatherPositionsFromFragment(
     291    const Fragment::positions_t positions,
     292    const Fragment::charges_t charges,
     293    const Fragment::charges_t& elements
     294    )
     295{
     296  // 1.-3. gather correct charge positions
     297  chargeiters_t targets =
     298      Extractors::_detail::gatherTargetsFromFragment(charges, elements);
    252299  // 4. convert position_t to Vector
    253   return Extractors::_detail::gatherPositionsFromCharges(
    254           fragment.getPositions(),
     300  return Extractors::_detail::gatherPositionsFromTargets(
     301          positions,
    255302          charges,
    256303          targets);
     304}
     305
     306FunctionModel::arguments_t
     307Extractors::gatherDistancesFromFragment(
     308    const Fragment::positions_t positions,
     309    const Fragment::charges_t charges,
     310    const Fragment::charges_t& elements,
     311    const size_t globalid
     312    )
     313{
     314  // 1.-3. gather correct charge positions
     315  chargeiters_t targets =
     316      Extractors::_detail::gatherTargetsFromFragment(charges, elements);
     317  // 4. convert position_t to Vector
     318  return Extractors::_detail::gatherDistancesFromTargets(
     319          positions,
     320          charges,
     321          targets,
     322          globalid);
    257323}
    258324
Note: See TracChangeset for help on using the changeset viewer.