Ignore:
Timestamp:
Feb 24, 2013, 12:58: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:
f68c68
Parents:
355af8
git-author:
Frederik Heber <heber@…> (10/15/12 05:17:21)
git-committer:
Frederik Heber <heber@…> (02/24/13 12:58:52)
Message:

Extracted namespace Extractors into own module.

  • placed gatherAllDistanceArguments() into subspace _detail inside this namespace.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/LevMartester.cpp

    r355af8 r8aa597  
    6262#include "Fragmentation/Homology/HomologyContainer.hpp"
    6363#include "Fragmentation/SetValues/Fragment.hpp"
     64#include "FunctionApproximation/Extractors.hpp"
    6465#include "FunctionApproximation/FunctionApproximation.hpp"
    6566#include "FunctionApproximation/FunctionModel.hpp"
     
    107108}
    108109
    109 FunctionModel::arguments_t
    110 gatherAllDistanceArguments(
    111     const Fragment::charges_t &charges,
    112     const Fragment::positions_t &positions,
    113     const size_t globalid)
    114 {
    115   FunctionModel::arguments_t result;
    116 
    117   // go through current configuration and gather all other distances
    118   Fragment::charges_t::const_iterator firstchargeiter = charges.begin();
    119   Fragment::positions_t::const_iterator firstpositer = positions.begin();
    120   for (;firstchargeiter != charges.end();
    121       ++firstchargeiter, ++firstpositer) {
    122     Fragment::charges_t::const_iterator secondchargeiter = charges.begin();//firstchargeiter;
    123     Fragment::positions_t::const_iterator secondpositer = positions.begin();//firstpositer;
    124     for (;
    125         secondchargeiter != charges.end();
    126         ++secondchargeiter, ++secondpositer) {
    127       if (firstchargeiter == secondchargeiter)
    128         continue;
    129       argument_t arg;
    130       const Vector firsttemp((*firstpositer)[0],(*firstpositer)[1],(*firstpositer)[2]);
    131       const Vector secondtemp((*secondpositer)[0],(*secondpositer)[1],(*secondpositer)[2]);
    132       arg.distance = firsttemp.distance(secondtemp);
    133       arg.indices = std::make_pair(
    134           std::distance(
    135               charges.begin(), firstchargeiter),
    136           std::distance(
    137               charges.begin(), secondchargeiter)
    138           );
    139       arg.globalid = globalid;
    140       result.push_back(arg);
    141     }
    142     ASSERT( secondpositer == positions.end(),
    143         "gatherAllDistanceArguments() - there are not as many positions as charges.");
    144   }
    145   ASSERT( firstpositer == positions.end(),
    146       "gatherAllDistanceArguments() - there are not as many positions as charges.");
    147 
    148   return result;
    149 }
    150110
    151111/** This function returns the elements of the sum over index "k" for an
     
    238198    return angle/divisor;
    239199}
    240 
    241 /** Namespace containing all simple extractor functions.
    242  *
    243  */
    244 namespace Extractors {
    245   /** Simple extractor of all unique pair distances of a given \a fragment.
    246    *
    247    * \param fragment fragment with all nuclei positions
    248    * \param index index refers to the index within the global set of configurations
    249    * \return vector of of argument_t containing all found distances
    250    */
    251   FunctionModel::arguments_t gatherAllDistances(
    252       const Fragment& fragment,
    253       const size_t index
    254       ) {
    255     // get distance out of Fragment
    256     const Fragment::charges_t charges = fragment.getCharges();
    257     const Fragment::positions_t positions = fragment.getPositions();
    258     return gatherAllDistanceArguments(charges, positions, index);
    259   }
    260 
    261   /** Gather first distance for the two matching charges.
    262    *
    263    * \param fragment fragment with all nuclei positions
    264    * \param index index refers to the index within the global set of configurations
    265    * \param firstelement first element of pair
    266    * \param secondelement second element of pair, order is reflected in indices of return argument_t
    267    * \return vector of of argument_t containing all found distances
    268    */
    269   FunctionModel::arguments_t gatherFirstDistance(
    270       const Fragment& fragment,
    271       const size_t index,
    272       const size_t firstelement,
    273       const size_t secondelement
    274       ) {
    275     const Fragment::charges_t charges = fragment.getCharges();
    276     const Fragment::positions_t positions = fragment.getPositions();
    277     typedef Fragment::charges_t::const_iterator chargeiter_t;
    278     std::vector< chargeiter_t > firstpair;
    279     firstpair.reserve(2);
    280     firstpair +=
    281         std::find(charges.begin(), charges.end(), firstelement),
    282         std::find(charges.begin(), charges.end(), secondelement);
    283     if ((firstpair[0] == charges.end()) || (firstpair[1] == charges.end())) {
    284       // complain if tuple not found
    285       ELOG(1, "Could not find pair " << firstelement << "," << secondelement
    286           << " in fragment " << fragment);
    287       return FunctionModel::arguments_t();
    288     }
    289     // convert position_t to Vector
    290     std::vector< std::pair<Vector, size_t> > DistancePair;
    291     for (std::vector<chargeiter_t>::const_iterator firstpairiter = firstpair.begin();
    292         firstpairiter != firstpair.end(); ++firstpairiter) {
    293       Fragment::positions_t::const_iterator positer = positions.begin();
    294       const size_t steps = std::distance(charges.begin(), *firstpairiter);
    295       std::advance(positer, steps);
    296       DistancePair.push_back(
    297           std::make_pair(Vector((*positer)[0], (*positer)[1], (*positer)[2]),
    298               steps));
    299     }
    300     // finally convert Vector pair to distance-like argument
    301     argument_t arg;
    302     arg.indices.first = DistancePair[0].second;
    303     arg.indices.second = DistancePair[1].second;
    304     arg.distance = DistancePair[0].first.distance(DistancePair[1].first);
    305     arg.globalid = index;
    306 
    307     return FunctionModel::arguments_t(1, arg);
    308   }
    309 
    310 }; /* namespace Extractors */
    311200
    312201/** This class encapsulates the training data for a given potential function
     
    633522      const Fragment::positions_t positions = fragment.getPositions();
    634523      FunctionModel::arguments_t args =
    635           gatherAllDistanceArguments(charges, positions, DistanceEnergyVector.first.size());
     524          Extractors::_detail::gatherAllDistanceArguments(positions, DistanceEnergyVector.first.size());
    636525      DistanceEnergyVector.first.push_back( args );
    637526      DistanceEnergyVector.second.push_back( FunctionModel::results_t(1,energy-EnergySum) );
Note: See TracChangeset for help on using the changeset viewer.