Changeset c98620 for src


Ignore:
Timestamp:
May 19, 2021, 7:06:29 PM (4 years ago)
Author:
Frederik Heber <frederik.heber@…>
Branches:
Candidate_v1.7.0, stable
Children:
9b0dcd
Parents:
698185
git-author:
Frederik Heber <frederik.heber@…> (05/19/21 11:00:24)
git-committer:
Frederik Heber <frederik.heber@…> (05/19/21 19:06:29)
Message:

FIX: StreamFactory did not set BindingModel.

  • we streamed into a default potential instance but this does not set the BindingModel. Now, we use the particle types from that deseralized instance and instantiate a new potential that then also generates the BindingModel.
  • added output operator to BindingModel.
  • TEST: This fixes the fit-compound-potential regression test case.
Location:
src/Potentials
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/Potentials/BindingModel.cpp

    r698185 rc98620  
    3737
    3838#include "Potentials/BindingModel.hpp"
     39
     40#include <iostream>
     41
     42#include "CodePatterns/toString.hpp"
    3943
    4044static HomologyGraph::nodes_t getMapOfNodes(const BindingModel::vector_nodes_t &_nodes)
     
    7983}
    8084
     85std::ostream& operator<<(std::ostream& ost, const BindingModel &model) {
     86  model.getGraph().printEdges(ost);
     87  ost << ", " << model.getNodes();
     88  return ost;
     89}
  • src/Potentials/BindingModel.hpp

    r698185 rc98620  
    7171};
    7272
     73
     74std::ostream& operator<<(std::ostream& ost, const BindingModel &model);
     75
     76
    7377#endif /* POTENTIALS_BINDINGMODEL_HPP_ */
  • src/Potentials/CompoundPotential.cpp

    r698185 rc98620  
    6262  // look though graph and place all matching FunctionModel's in
    6363  // PotentialRegistry in models
    64   PotentialRegistry::const_iterator potentialiter =
    65       PotentialRegistry::getInstance().getBeginIter();
    66   while (potentialiter != PotentialRegistry::getInstance().getEndIter()) {
     64  for(PotentialRegistry::const_iterator potentialiter = PotentialRegistry::getInstance().getBeginIter();
     65    potentialiter != PotentialRegistry::getInstance().getEndIter(); ++potentialiter) {
    6766    // get model and types
    6867    EmpiricalPotential * const potential = potentialiter->second;
     
    7372    Extractors::elementcounts_t counts_per_element =
    7473        Extractors::_detail::getElementCounts(types);
    75 //    ASSERT( !counts_per_element.empty(),
    76 //        "getFirstGraphwithSpecifiedElements() - element counts are empty?");
    7774    LOG(2, "DEBUG: counts_per_element is " << counts_per_element << ".");
    7875
    7976    // check whether graph contains suitable types
    80     Extractors::elementcounts_t::const_iterator countiter = counts_per_element.begin();
    81     for (; countiter != counts_per_element.end(); ++countiter)
    82       if (!graph.hasGreaterEqualTimesAtomicNumber(
     77    bool status = true;
     78    for (Extractors::elementcounts_t::const_iterator countiter = counts_per_element.begin();
     79        (countiter != counts_per_element.end()) && (status); ++countiter)
     80      status = status & (graph.hasGreaterEqualTimesAtomicNumber(
    8381          static_cast<size_t>(countiter->first),
    8482          static_cast<size_t>(countiter->second))
    85           )
    86         break;
    87     // if we have a match for every count, store model
    88     if( countiter == counts_per_element.end()) {
    89       LOG(1, "INFO: Potential " << potentialiter->first << " matches with fragment.");
     83          );
     84    // check whether graph contains all necessary edges
     85    status &= graph.contains(potential->getBindingModel().getGraph());
     86
     87    // if we have a matched all nodes and edges, store model
     88    if( status) {
     89      LOG(1, "INFO: Potential " << potential->getName() << " matches with fragment.");
    9090      models.push_back(static_cast<FunctionModel*>(potential));
    9191      particletypes_per_model.push_back(types);
    9292    }
    93     ++potentialiter;
    9493  }
    9594
     
    430429  ASSERT(!returnresults.empty(),
    431430      "CompoundPotential::parameter_derivative() - could not determine derivative for index "
    432       +toString(index)+". This typically indicates that the derivative of the parameter of "
    433       +" a model should be evaluated which has not arguments in the partial argument list.");
     431      +toString(index)+". This typically indicates that a parameter derivative of "
     432      +"a model is evaluated which has no arguments in the partial argument list.");
    434433  return returnresults;
    435434}
  • src/Potentials/StreamFactory_EmpiricalPotential.cpp

    r698185 rc98620  
    4949    std::istream &serialized) const
    5050{
    51   EmpiricalPotential * const potential = getDefaultPotential(potentialtype);
     51  EmpiricalPotential * full_potential;
    5252  // now stream in types and parameters
    5353  try {
     54    EmpiricalPotential * const potential = getDefaultPotential(potentialtype);
    5455    potential->stream_from(serialized);
     56    // also need to generate the binding model
     57    full_potential = createInstance(potentialtype, potential->getParticleTypes());
     58    delete potential;
    5559  } catch (SerializerMissingValueException &e) {
    5660    ELOG(1, "Missing value for potential in line " << e.what());
    5761  }
    5862
    59   return potential;
     63  return full_potential;
    6064}
  • src/Potentials/StreamFactory_EmpiricalPotential.hpp

    r698185 rc98620  
    1616
    1717#include "StreamFactory.hpp"
     18
     19#include <string>
    1820
    1921#include "Potentials/EmpiricalPotential.hpp"
     
    4850   */
    4951  virtual EmpiricalPotential* getDefaultPotential(const std::string &_name) const=0;
     52
     53  virtual EmpiricalPotential *createInstance(
     54      const std::string &potentialtype,
     55      const SerializablePotential::ParticleTypes_t &charges) const=0;
     56
    5057};
    5158
Note: See TracChangeset for help on using the changeset viewer.