Changeset 647148


Ignore:
Timestamp:
Sep 9, 2016, 8:22:09 AM (8 years ago)
Author:
Frederik Heber <heber@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_StructOpt_integration_tests, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, 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_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, 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, GeometryObjects, Gui_displays_atomic_force_velocity, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, 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, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, Ubuntu_1604_changes, stable
Children:
d33f24
Parents:
27e6a7
git-author:
Frederik Heber <heber@…> (09/01/16 14:11:53)
git-committer:
Frederik Heber <heber@…> (09/09/16 08:22:09)
Message:

FIX: HomologyGraph's getNodeFromSet() and getEdgesFromSet ignored saturation hydrogens.

  • we need to add hydrogen bonds times bond degree for every non-member encountered in the bond list in both edges and hydrogens. Otherwise, we get HomologyGraphs such as "[Z6,E0]" instead of "4x[Z1,E1], 1x[Z6,E4]" for a CH4 fragment.
  • this came up when we tried to fit a CH morse potential for the larger bio molecule 1KDF.
Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/Actions/FragmentationAction/AnalyseFragmentationResultsAction.cpp

    r27e6a7 r647148  
    306306  const IndexSetContainer::Container_t &Indices = shortrangeresults.getContainer();
    307307  const IndexSetContainer::Container_t &ForceIndices = ForceContainer->getContainer();
     308  ASSERT( Indices.size() == ForceIndices.size(),
     309      "appendToHomologies() - Indices ("+toString(Indices.size())
     310      +") and ForceIndices ("+toString(ForceIndices.size())+") sizes differ.");
    308311  IndexSetContainer::Container_t::const_iterator iter = Indices.begin();
    309312  IndexSetContainer::Container_t::const_iterator forceiter = ForceIndices.begin();
  • src/Fragmentation/Homology/HomologyGraph_getFromKeyset.cpp

    r27e6a7 r647148  
    5252// in all the cludder of World, atom, molecule, and so on ...
    5353
     54template <typename S, typename U>
     55void addNodeToMap(S &_map,  std::pair< U, size_t> _pair) {
     56  std::pair<typename S::iterator,bool> inserter =
     57      _map.insert( _pair );
     58  if (!inserter.second)
     59    inserter.first->second += _pair.second;
     60}
     61
    5462template <typename T>
    5563const HomologyGraph::nodes_t getNodesFromSet(const std::set<T> &keyset)
     
    6977        if (keyset.count(OtherWalker->getId()))
    7078          ++NoBonds;
     79        else {
     80          // add as many bonds as saturation hydrogens
     81          NoBonds += (*bonditer)->getDegree();
     82          // add a saturation node for each, too
     83//          LOG(1, "DEBUG: Adding saturation node " << *Walker << ".");
     84          addNodeToMap(nodes, std::make_pair(FragmentNode(1, 1), (size_t)1) );
     85        }
    7186      }
    72 //      LOG(2, "DEBUG: Adding node " << Walker->getId() << " with element "
     87//      LOG(1, "DEBUG: Adding node " << *Walker << " with element "
    7388//          << Walker->getElementNo() << " and " << NoBonds << " bonds.");
    74     std::pair<HomologyGraph::nodes_t::iterator,bool> inserter =
    75         nodes.insert( std::make_pair(FragmentNode(Walker->getElementNo(), NoBonds), (size_t)1) );
    76     if (!inserter.second)
    77       inserter.first->second += (size_t)1;
     89      addNodeToMap(nodes, std::make_pair(FragmentNode(Walker->getElementNo(), NoBonds), (size_t)1) );
    7890    } else {
    7991      ELOG(3, "Skipping id " << *iter << ", is not associated with any atom.");
     
    97109          bonditer != ListOfBonds.end(); ++bonditer) {
    98110        const atom * const OtherWalker = (*bonditer)->GetOtherAtom(Walker);
    99 //        LOG(2, "DEBUG: Neighbor is " << OtherWalker->getId() << ".");
    100         if ((keyset.count(OtherWalker->getId())) && (Walker->getId() < OtherWalker->getId())) {
    101 //          LOG(1, "DEBUG: Adding edge " << Walker->getId() << " and " << OtherWalker->getId() << ".");
    102           std::pair<HomologyGraph::edges_t::iterator,bool> inserter =
    103               edges.insert( std::make_pair(FragmentEdge( Walker->getElementNo(), OtherWalker->getElementNo()), (size_t)1) );
    104           if (!inserter.second)
    105             inserter.first->second += (size_t)1;
     111//        LOG(1, "DEBUG: Neighbor is " << OtherWalker->getId() << ".");
     112        if (keyset.count(OtherWalker->getId())) {
     113          if (Walker->getId() < OtherWalker->getId()) {
     114//            LOG(1, "DEBUG: Adding edge " << Walker->getId() << " and " << OtherWalker->getId() << ".");
     115            addNodeToMap(edges, std::make_pair(FragmentEdge( Walker->getElementNo(), OtherWalker->getElementNo()), (size_t)1) );
     116          }
     117        } else { // also add edge for each saturation hydrogen
     118          const size_t bonddegree = (*bonditer)->getDegree();
     119//          LOG(1, "DEBUG: Adding " << bonddegree << " saturation edge(s) " << Walker->getId() << " and " << OtherWalker->getId() << ".");
     120          addNodeToMap(edges, std::make_pair(FragmentEdge( Walker->getElementNo(), 1), bonddegree) );
    106121        }
    107122      }
Note: See TracChangeset for help on using the changeset viewer.