Changeset 9445081 for src/Fragmentation


Ignore:
Timestamp:
Nov 4, 2016, 9:37:51 AM (8 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_StructOpt_integration_tests, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, 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_ChronosMutex, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, GeometryObjects, Gui_displays_atomic_force_velocity, IndependentFragmentGrids_IntegrationTest, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, RotateToPrincipalAxisSystem_UndoRedo, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, ThirdParty_MPQC_rebuilt_buildsystem, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, Ubuntu_1604_changes, stable
Children:
ea63cb
Parents:
041a79
git-author:
Frederik Heber <heber@…> (10/04/16 08:06:18)
git-committer:
Frederik Heber <heber@…> (11/04/16 09:37:51)
Message:

FragmentJobQueue additionally stores the bond graph as an edge set per fragment/job.

  • added SaturatedFragment::getEdges() that returns the set of edges, indices rewritten (starting at 0), and hydrogens included, i.e. matching with the lines in the output config.
  • ExportGraph_ToJobs::operator() additionally queries for the edge set and places it in the JobQueue.
Location:
src/Fragmentation
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • src/Fragmentation/Automation/FragmentJobQueue.cpp

    r041a79 r9445081  
    5151#include "LinearAlgebra/RealSpaceMatrix.hpp"
    5252#include "World.hpp"
    53 
    5453
    5554void FragmentJobQueue::parsejob(const std::string &filename, const unsigned int level)
     
    132131}
    133132
     133bool FragmentJobQueue::addEdgesPerFragmentFromFiles(
     134    const boost::filesystem::path &path
     135    )
     136{
     137  ASSERT(0,
     138      "FragmentJobQueue::addFullKeySetsFromFiles() - is not implemented, yet.");
     139  return false;
     140}
     141
    134142void FragmentJobQueue::clear()
    135143{
     
    137145  KeySets.clear();
    138146  FullKeySets.clear();
     147  edges_per_fragment.clear();
    139148}
    140149
  • src/Fragmentation/Automation/FragmentJobQueue.hpp

    r041a79 r9445081  
    2020#include "CodePatterns/Singleton.hpp"
    2121
     22#include "Fragmentation/EdgesPerFragment.hpp"
    2223#include "Fragmentation/KeySetsContainer.hpp"
    2324#include "Fragmentation/parseKeySetFile.hpp"
    2425#include "Jobs/MPQCJob.hpp"
     26#include "types.hpp"
    2527
    2628/** FragmentJobQueue is a static instance to contain all present fragment
     
    4547
    4648public:
     49  typedef FragmentationEdges::edges_per_fragment_t edges_per_fragment_t;
    4750
    4851  /** Pushes a vector of jobs into the queue.
    4952   *
    5053   * \param _jobs new jobs to push
    51    * \param KeySet KeySet of all (non-hydrogen) atoms
    52    * \param FullKeySet KeySet of all atoms except saturation hydrogens
     54   * \param _KeySet KeySet of all (non-hydrogen) atoms
     55   * \param _FullKeySet KeySet of all atoms except saturation hydrogens
     56   * \param _edges_per_fragment edges of bond graph of all fragments
    5357   */
    5458  void addJobs(
    5559      std::vector<FragmentJob::ptr> &_jobs,
    5660      const KeySetsContainer &_KeySets,
    57       const KeySetsContainer &_FullKeySets);
     61      const KeySetsContainer &_FullKeySets,
     62      const edges_per_fragment_t &_edges_per_fragment);
    5863
    5964  /** Returns ref to jobs.
     
    96101      );
    97102
     103  /** Adds edges after fragments have been added by file.
     104   *
     105   */
     106  bool addEdgesPerFragmentFromFiles(
     107      const boost::filesystem::path &path
     108      );
     109
    98110  /** Getter for the container of all KeySets to the jobs.
    99111   *
     
    107119   */
    108120  const KeySetsContainer& getFullKeySets() const { return FullKeySets; }
     121
     122  /** Getter for the container of all edges of the bond graph over all jobs.
     123   *
     124   * \return const ref to container
     125   */
     126  const edges_per_fragment_t& getEdgesPerFragment() const { return edges_per_fragment; }
    109127
    110128  /* Empties contained jobs and all KeySets.
     
    130148  //!> container for all KeySet's with all except saturation hydrogen to the jobs
    131149  KeySetsContainer FullKeySets;
     150  //!> container for all edges of the bond graph of each fragments
     151  edges_per_fragment_t edges_per_fragment;
    132152};
    133153
     
    136156    std::vector<FragmentJob::ptr> &_jobs,
    137157    const KeySetsContainer &_KeySets,
    138     const KeySetsContainer &_FullKeySets)
     158    const KeySetsContainer &_FullKeySets,
     159    const edges_per_fragment_t &_edges_per_fragment)
    139160{
    140161  jobs.insert(jobs.end(), _jobs.begin(), _jobs.end());
    141162  KeySets.insert(_KeySets);
    142163  FullKeySets.insert(_FullKeySets);
     164  edges_per_fragment.reserve(edges_per_fragment.size()+_edges_per_fragment.size());
     165  edges_per_fragment.insert(
     166      edges_per_fragment.end(),
     167      _edges_per_fragment.begin(), _edges_per_fragment.end());
    143168}
    144169
  • src/Fragmentation/Exporters/ExportGraph_ToJobs.cpp

    r041a79 r9445081  
    227227  KeySetsContainer KeySets;
    228228  KeySetsContainer FullKeySets;
     229  FragmentJobQueue::edges_per_fragment_t edges_per_fragment;
    229230  jobs.reserve(TotalGraph.size());
    230231  LOG(1, "INFO: Creating " << TotalGraph.size() << " possible bond fragmentation jobs.");
     
    255256    const KeySet &set = CurrentFragment->getKeySet();
    256257    LOG(2, "INFO: Creating bond fragment job for set " << set << ".");
     258
     259    // gather all edges
     260    FragmentationEdges::edges_t edges = CurrentFragment->getEdges();
    257261
    258262    SamplingGridProperties fragment_window(grid);
     
    315319      KeySets.insert(indices, order);
    316320      FullKeySets.insert(forceindices, order);
     321      edges_per_fragment.push_back(edges);
    317322    }
    318323    // store force index reference file
     
    326331
    327332  // push final jobs
    328   FragmentJobQueue::getInstance().addJobs(jobs, KeySets, FullKeySets);
     333  FragmentJobQueue::getInstance().addJobs(jobs, KeySets, FullKeySets, edges_per_fragment);
    329334
    330335  return true;
  • src/Fragmentation/Exporters/SaturatedFragment.cpp

    r041a79 r9445081  
    667667  return std::make_pair(minimum, maximum);
    668668}
     669
     670static FragmentationEdges::edges_t createEdgesFromAtoms(
     671    const std::vector<atom *> &_atoms,
     672    const KeySet &_FullMolecule)
     673{
     674  FragmentationEdges::edges_t edges;
     675  for (std::vector<atom *>::const_iterator iter = _atoms.begin();
     676      iter != _atoms.end(); ++iter) {
     677    const atom * const walker = *iter;
     678    const atomId_t &walkerid = walker->getId();
     679    const BondList &ListOfBonds = walker->getListOfBonds();
     680    for (BondList::const_iterator bonditer = ListOfBonds.begin();
     681        bonditer != ListOfBonds.end(); ++bonditer) {
     682      const atom * const OtherWalker = (*bonditer)->GetOtherAtom(walker);
     683      const atomId_t &otherwalkerid = OtherWalker->getId();
     684      if (walkerid < otherwalkerid) {
     685        // check if it's in fullkeysets (also contains excluded and saturation hydrogens)
     686        if (_FullMolecule.count(otherwalkerid))
     687          edges.push_back( FragmentationEdges::edge_t(walkerid, otherwalkerid) );
     688      }
     689    }
     690  }
     691  return edges;
     692}
     693
     694typedef std::map<atomId_t, atomId_t> idtable_t;
     695
     696static idtable_t createIdTable(
     697    const std::vector<atom *> &_atoms)
     698{
     699  idtable_t idtable;
     700  atomId_t newid = 0;
     701  for (std::vector<atom *>::const_iterator iter = _atoms.begin();
     702      iter != _atoms.end(); ++iter) {
     703    const atom * const walker = *iter;
     704    const atomId_t &walkerid = walker->getId();
     705    idtable.insert( std::make_pair(walkerid, newid++) );
     706  }
     707  return idtable;
     708}
     709
     710static atomId_t getTranslatedId(
     711    const idtable_t &_idtable,
     712    const atomId_t &_id
     713    )
     714{
     715  idtable_t::const_iterator iter = _idtable.find(_id);
     716  if (iter != _idtable.end())
     717    return iter->second;
     718  else {
     719    ASSERT( 0,
     720        "getTranslatedId() - idtable does not contain id in FullMolecule?");
     721    return (atomId_t)-1;
     722  }
     723}
     724
     725static void rewriteEdgeIndices(
     726    FragmentationEdges::edges_t &_edges,
     727    const idtable_t &_idtable)
     728{
     729  for (FragmentationEdges::edges_t::iterator edgeiter = _edges.begin();
     730      edgeiter != _edges.end(); ++edgeiter) {
     731    FragmentationEdges::edge_t &edge = *edgeiter;
     732    edge.first = getTranslatedId(_idtable, edge.first);
     733    edge.second = getTranslatedId(_idtable, edge.second);
     734  }
     735}
     736
     737FragmentationEdges::edges_t SaturatedFragment::getEdges() const
     738{
     739  // gather all edges
     740  const std::vector<atom *> atoms = gatherAllAtoms(FullMolecule);
     741  FragmentationEdges::edges_t edges = createEdgesFromAtoms(atoms, FullMolecule);
     742
     743  // translate each edge
     744  std::map<atomId_t, atomId_t> idtable = createIdTable(atoms);
     745
     746  // rewrite indices of edges in correct order
     747  rewriteEdgeIndices(edges, idtable);
     748
     749  // for debugging output edges
     750  LOG(2, "DEBUG: FullMolecule is : " << FullMolecule << " with edges " << edges);
     751
     752  return edges;
     753}
  • src/Fragmentation/Exporters/SaturatedFragment.hpp

    r041a79 r9445081  
    2020#include "Atom/atom_bondedparticleinfo.hpp"
    2121#include "Bond/bond.hpp"
     22#include "Fragmentation/EdgesPerFragment.hpp"
    2223#include "Fragmentation/KeySet.hpp"
    2324#include "Fragmentation/HydrogenSaturation_enum.hpp"
     
    106107   */
    107108  std::pair<Vector, Vector> getRoughBoundingBox() const;
     109
     110  /** Returns the edges of the bond graph of this fragment.
     111   *
     112   * \return set of edges
     113   */
     114  FragmentationEdges::edges_t getEdges() const;
    108115
    109116  /** Prints the config of the fragment of \a _type to \a out.
Note: See TracChangeset for help on using the changeset viewer.