Ignore:
Timestamp:
Jul 14, 2014, 11:16:23 AM (11 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:
2a03b0
Parents:
c73e35 (diff), a61dbb (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'Fragmentation_Automation_wo_JobMarket' into stable

Conflicts:

src/Actions/ActionQueue.cpp
src/Actions/FragmentationAction/FragmentationAction.cpp
src/Actions/PotentialAction/FitParticleChargesAction.cpp

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/PotentialAction/FitParticleChargesAction.cpp

    rc73e35 rd8821e  
    4747#include <boost/foreach.hpp>
    4848#include <algorithm>
     49#include <functional>
    4950#include <iostream>
    5051#include <string>
     
    128129    return Action::failure;
    129130  }
     131
     132  // average partial charges over all fragments
    130133  HomologyContainer::const_iterator iter = range.first;
    131134  if (!iter->second.containsGrids) {
     
    133136    return Action::failure;
    134137  }
    135   const Fragment &fragment = iter->second.fragment;
    136 //  const double &energy = iter->second.energy;
    137 //  const SamplingGrid &charge = iter->second.charge_distribution;
    138   const SamplingGrid &potential = iter->second.potential_distribution;
    139 
    140   // then we extract positions from fragment
    141   PartialNucleiChargeFitter::positions_t positions;
    142   Fragment::positions_t fragmentpositions = fragment.getPositions();
    143   positions.reserve(fragmentpositions.size());
    144   BOOST_FOREACH( Fragment::position_t pos, fragmentpositions) {
    145     positions.push_back( Vector(pos[0], pos[1], pos[2]) );
    146   }
    147   PartialNucleiChargeFitter fitter(potential, positions, params.radius.get());
    148   fitter();
    149   PartialNucleiChargeFitter::charges_t return_charges = fitter.getSolutionAsCharges_t();
     138  PartialNucleiChargeFitter::charges_t averaged_charges;
     139  averaged_charges.resize(iter->second.fragment.getCharges().size(), 0.);
     140  size_t NoFragments = 0;
     141  for (;
     142      iter != range.second; ++iter, ++NoFragments) {
     143    if (!iter->second.containsGrids) {
     144      ELOG(2, "This HomologyGraph does not contain sampled grids,\ndid you forget to add '--store-grids 1' to AnalyseFragmentResults.");
     145      return Action::failure;
     146    }
     147    const Fragment &fragment = iter->second.fragment;
     148  //  const double &energy = iter->second.energy;
     149  //  const SamplingGrid &charge = iter->second.charge_distribution;
     150    const SamplingGrid &potential = iter->second.potential_distribution;
     151    if ((potential.level == 0)
     152        || ((potential.begin[0] == potential.end[0])
     153            && (potential.begin[1] == potential.end[1])
     154            && (potential.begin[2] == potential.end[2]))) {
     155      ELOG(1, "Sampled grid contains grid made of zero points.");
     156      return Action::failure;
     157    }
     158
     159    // then we extract positions from fragment
     160    PartialNucleiChargeFitter::positions_t positions;
     161    Fragment::positions_t fragmentpositions = fragment.getPositions();
     162    positions.reserve(fragmentpositions.size());
     163    BOOST_FOREACH( Fragment::position_t pos, fragmentpositions) {
     164      positions.push_back( Vector(pos[0], pos[1], pos[2]) );
     165    }
     166    PartialNucleiChargeFitter fitter(potential, positions, params.radius.get());
     167    fitter();
     168    PartialNucleiChargeFitter::charges_t return_charges = fitter.getSolutionAsCharges_t();
     169    std::transform(
     170        return_charges.begin(), return_charges.end(),
     171        averaged_charges.begin(),
     172        averaged_charges.begin(),
     173        std::plus<PartialNucleiChargeFitter::charge_t>());
     174  }
     175  std::transform(averaged_charges.begin(),averaged_charges.end(),
     176      averaged_charges.begin(),
     177      std::bind1st(std::multiplies<PartialNucleiChargeFitter::charge_t>(),1./NoFragments)
     178  );
     179
    150180
    151181  // output fitted charges
    152   LOG(0, "STATUS: We have fitted the following charges " << return_charges << ".");
     182  LOG(0, "STATUS: We have fitted the following charges " << averaged_charges
     183      << ", averaged over " << NoFragments << " fragments.");
    153184
    154185  return Action::success;
Note: See TracChangeset for help on using the changeset viewer.