Changeset c27778
- Timestamp:
- Jul 3, 2010, 2:02:26 PM (14 years ago)
- 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:
- 2a374e
- Parents:
- b9c847
- git-author:
- Frederik Heber <heber@…> (07/03/10 13:24:25)
- git-committer:
- Frederik Heber <heber@…> (07/03/10 14:02:26)
- Location:
- src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Actions/FragmentationAction/DepthFirstSearchAction.cpp
rb9c847 rc27778 49 49 MoleculeLeafClass *Subgraphs = NULL; // list of subgraphs from DFS analysis 50 50 int *MinimumRingSize = new int[mol->getAtomCount()]; 51 atom ** *ListOfLocalAtoms = NULL;51 atom **ListOfAtoms = NULL; 52 52 class StackClass<bond *> *BackEdgeStack = NULL; 53 53 class StackClass<bond *> *LocalBackEdgeStack = NULL; … … 58 58 while (Subgraphs->next != NULL) { 59 59 Subgraphs = Subgraphs->next; 60 Subgraphs->FillBondStructureFromReference(mol, FragmentCounter, ListOfLocalAtoms, false); // we want to keep the created ListOfLocalAtoms 60 ListOfAtoms = NULL; 61 Subgraphs->FillBondStructureFromReference(mol, ListOfAtoms, false); // we want to keep the created ListOfLocalAtoms 61 62 LocalBackEdgeStack = new StackClass<bond *> (Subgraphs->Leaf->BondCount); 62 Subgraphs->Leaf->PickLocalBackEdges(ListOf LocalAtoms[FragmentCounter], BackEdgeStack, LocalBackEdgeStack);63 Subgraphs->Leaf->PickLocalBackEdges(ListOfAtoms, BackEdgeStack, LocalBackEdgeStack); 63 64 Subgraphs->Leaf->CyclicStructureAnalysis(LocalBackEdgeStack, MinimumRingSize); 64 65 delete(LocalBackEdgeStack); 65 66 delete(Subgraphs->previous); 67 delete[](ListOfAtoms); // and here we remove it 66 68 FragmentCounter++; 67 69 } 68 70 delete(Subgraphs); 69 for (int i=0;i<FragmentCounter;i++)70 delete[](ListOfLocalAtoms[i]);71 delete[](ListOfLocalAtoms);72 71 } 73 72 delete(BackEdgeStack); -
src/molecule.hpp
rb9c847 rc27778 426 426 427 427 bool AddLeaf(molecule *ptr, MoleculeLeafClass *Previous); 428 bool FillBondStructureFromReference(const molecule * const reference, int &FragmentCounter, atom ***&ListOfLocalAtoms, bool FreeList = false);428 bool FillBondStructureFromReference(const molecule * const reference, atom **&ListOfLocalAtoms, bool FreeList = false); 429 429 bool FillRootStackForSubgraphs(KeyStack *&RootStack, bool *AtomMask, int &FragmentCounter); 430 430 bool AssignKeySetsToFragment(molecule *reference, Graph *KeySetList, atom ***&ListOfLocalAtoms, Graph **&FragmentList, int &FragmentCounter, bool FreeList = false); 431 bool FillListOfLocalAtoms(atom ** *&ListOfLocalAtoms, const int FragmentCounter, const int GlobalAtomCount, bool &FreeList);431 bool FillListOfLocalAtoms(atom **&ListOfLocalAtoms, const int GlobalAtomCount, bool &FreeList); 432 432 void TranslateIndicesToGlobalIDs(Graph **FragmentList, int &FragmentCounter, int &TotalNumberOfKeySets, Graph &TotalGraph); 433 433 int Count() const; -
src/molecule_fragmentation.cpp
rb9c847 rc27778 629 629 MinimumRingSize[i] = getAtomCount(); 630 630 MolecularWalker = Subgraphs; 631 const int LeafCount = Subgraphs->next->Count(); 631 632 FragmentCounter = 0; 632 633 while (MolecularWalker->next != NULL) { 633 634 MolecularWalker = MolecularWalker->next; 634 635 // fill the bond structure of the individually stored subgraphs 635 MolecularWalker->FillBondStructureFromReference(this, FragmentCounter, ListOfLocalAtoms, false); // we want to keep the created ListOfLocalAtoms 636 ListOfAtoms = NULL; 637 MolecularWalker->FillBondStructureFromReference(this, ListOfAtoms, false); // we want to keep the created ListOfLocalAtoms 636 638 DoLog(0) && (Log() << Verbose(0) << "Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl); 637 639 LocalBackEdgeStack = new StackClass<bond *> (MolecularWalker->Leaf->BondCount); … … 644 646 // Log() << Verbose(0) << "\t" << ListOfLocalAtoms[FragmentCounter][i]->Name; 645 647 DoLog(0) && (Log() << Verbose(0) << "Gathering local back edges for subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl); 646 MolecularWalker->Leaf->PickLocalBackEdges(ListOf LocalAtoms[FragmentCounter++], BackEdgeStack, LocalBackEdgeStack);648 MolecularWalker->Leaf->PickLocalBackEdges(ListOfAtoms, BackEdgeStack, LocalBackEdgeStack); 647 649 DoLog(0) && (Log() << Verbose(0) << "Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl); 648 650 MolecularWalker->Leaf->CyclicStructureAnalysis(LocalBackEdgeStack, MinimumRingSize); 649 651 DoLog(0) && (Log() << Verbose(0) << "Done with Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl); 650 652 delete(LocalBackEdgeStack); 653 delete(ListOfAtoms); 654 FragmentCounter++; 651 655 } 652 656 delete(BackEdgeStack); … … 660 664 // =================================== Begin of FRAGMENTATION =============================== 661 665 // ===== 6a. assign each keyset to its respective subgraph ===== 662 Subgraphs->next->AssignKeySetsToFragment(this, ParsedFragmentList, ListOfLocalAtoms, FragmentList, (FragmentCounter = 0), true); 666 ListOfLocalAtoms = new atom **[LeafCount]; 667 for (int i=0;i<LeafCount;i++) 668 ListOfLocalAtoms[i] = NULL; 669 FragmentCounter = 0; 670 Subgraphs->next->AssignKeySetsToFragment(this, ParsedFragmentList, ListOfLocalAtoms, FragmentList, FragmentCounter, true); 671 delete[](ListOfLocalAtoms); 663 672 664 673 // ===== 6b. prepare and go into the adaptive (Order<0), single-step (Order==0) or incremental (Order>0) cycle … … 695 704 delete(ParsedFragmentList); 696 705 delete[](MinimumRingSize); 697 698 706 699 707 // ==================================== End of FRAGMENTATION ============================================ -
src/molecule_graph.cpp
rb9c847 rc27778 664 664 BFS.ColorList = new enum Shading[AtomCount]; 665 665 BFS.BFSStack = new StackClass<atom *> (AtomCount); 666 BFS.TouchedStack = new StackClass<atom *> (AtomCount); 666 667 667 668 for (int i = AtomCount; i--;) { 668 669 BFS.ShortestPathList[i] = -1; 669 670 BFS.PredecessorList[i] = 0; 671 BFS.ColorList[i] = white; 670 672 } 671 673 }; … … 681 683 delete[](BFS.ColorList); 682 684 delete (BFS.BFSStack); 685 delete (BFS.TouchedStack); 683 686 BFS.AtomCount = 0; 684 687 }; … … 825 828 MinRingSize = RingSize; 826 829 } else { 827 DoLog(1) && (Log() << Verbose(1) << "No ring containing " << *BFS.Root << " with length equal to or smaller than " << MinimumRingSize[ Walker->GetTrueFather()->nr] << " found." << endl);830 DoLog(1) && (Log() << Verbose(1) << "No ring containing " << *BFS.Root << " with length equal to or smaller than " << MinimumRingSize[BFS.Root->GetTrueFather()->nr] << " found." << endl); 828 831 } 829 832 }; -
src/moleculelist.cpp
rb9c847 rc27778 1017 1017 * \param *out output stream for debugging 1018 1018 * \param *reference reference molecule with the bond structure to be copied 1019 * \param &FragmentCounter Counter needed to address \a **ListOfLocalAtoms 1020 * \param ***ListOfLocalAtoms Lookup table for each subgraph and index of each atom in \a *reference, may be NULL on start, then it is filled 1019 * \param **&ListOfLocalAtoms Lookup table for this subgraph and index of each atom in \a *reference, may be NULL on start, then it is filled 1021 1020 * \param FreeList true - ***ListOfLocalAtoms is free'd before return, false - it is not 1022 1021 * \return true - success, false - faoilure 1023 1022 */ 1024 bool MoleculeLeafClass::FillBondStructureFromReference(const molecule * const reference, int &FragmentCounter, atom ***&ListOfLocalAtoms, bool FreeList)1023 bool MoleculeLeafClass::FillBondStructureFromReference(const molecule * const reference, atom **&ListOfLocalAtoms, bool FreeList) 1025 1024 { 1026 1025 atom *OtherWalker = NULL; … … 1031 1030 DoLog(1) && (Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl); 1032 1031 // fill ListOfLocalAtoms if NULL was given 1033 if (!FillListOfLocalAtoms(ListOfLocalAtoms, FragmentCounter,reference->getAtomCount(), FreeList)) {1032 if (!FillListOfLocalAtoms(ListOfLocalAtoms, reference->getAtomCount(), FreeList)) { 1034 1033 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 1035 1034 return false; … … 1048 1047 AtomNo = Father->nr; // global id of the current walker 1049 1048 for (BondList::const_iterator Runner = Father->ListOfBonds.begin(); Runner != Father->ListOfBonds.end(); (++Runner)) { 1050 OtherWalker = ListOfLocalAtoms[ FragmentCounter][(*Runner)->GetOtherAtom((*iter)->GetTrueFather())->nr]; // local copy of current bond partner of walker1049 OtherWalker = ListOfLocalAtoms[(*Runner)->GetOtherAtom((*iter)->GetTrueFather())->nr]; // local copy of current bond partner of walker 1051 1050 if (OtherWalker != NULL) { 1052 1051 if (OtherWalker->nr > (*iter)->nr) 1053 1052 Leaf->AddBond((*iter), OtherWalker, (*Runner)->BondDegree); 1054 1053 } else { 1055 DoLog(1) && (Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << FragmentCounter << "][" <<(*Runner)->GetOtherAtom((*iter)->GetTrueFather())->nr << "] is NULL!" << endl);1054 DoLog(1) && (Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << (*Runner)->GetOtherAtom((*iter)->GetTrueFather())->nr << "] is NULL!" << endl); 1056 1055 status = false; 1057 1056 } … … 1062 1061 if ((FreeList) && (ListOfLocalAtoms != NULL)) { 1063 1062 // free the index lookup list 1064 delete[](ListOfLocalAtoms[FragmentCounter]); 1065 if (FragmentCounter == 0) // first fragments frees the initial pointer to list 1066 delete[](ListOfLocalAtoms); 1063 delete[](ListOfLocalAtoms); 1067 1064 } 1068 1065 DoLog(1) && (Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl); … … 1110 1107 /** Fills a lookup list of father's Atom::nr -> atom for each subgraph. 1111 1108 * \param *out output stream from debugging 1112 * \param ***ListOfLocalAtoms Lookup table for each subgraph and index of each atom in global molecule, may be NULL on start, then it is filled 1113 * \param FragmentCounter counts the fragments as we move along the list 1109 * \param **&ListOfLocalAtoms Lookup table for each subgraph and index of each atom in global molecule, may be NULL on start, then it is filled 1114 1110 * \param GlobalAtomCount number of atoms in the complete molecule 1115 1111 * \param &FreeList true - ***ListOfLocalAtoms is free'd before return, false - it is not 1116 * \return true - success, false - failure 1117 */ 1118 bool MoleculeLeafClass::FillListOfLocalAtoms(atom ** *&ListOfLocalAtoms, const int FragmentCounter, const int GlobalAtomCount, bool &FreeList)1112 * \return true - success, false - failure (ListOfLocalAtoms != NULL) 1113 */ 1114 bool MoleculeLeafClass::FillListOfLocalAtoms(atom **&ListOfLocalAtoms, const int GlobalAtomCount, bool &FreeList) 1119 1115 { 1120 1116 bool status = true; 1121 1117 1122 if (ListOfLocalAtoms == NULL) { // allocated initial pointer 1123 // allocate and set each field to NULL 1124 const int Counter = Count(); 1125 ASSERT(FragmentCounter < Counter, "FillListOfLocalAtoms: FragmenCounter greater than present fragments."); 1126 ListOfLocalAtoms = new atom**[Counter]; 1127 if (ListOfLocalAtoms == NULL) { 1128 FreeList = FreeList && false; 1129 status = false; 1130 } 1131 for (int i=0;i<Counter;i++) 1132 ListOfLocalAtoms[i] = NULL; 1133 } 1134 1135 if ((ListOfLocalAtoms != NULL) && (ListOfLocalAtoms[FragmentCounter] == NULL)) { // allocate and fill list of this fragment/subgraph 1136 status = status && Leaf->CreateFatherLookupTable(ListOfLocalAtoms[FragmentCounter], GlobalAtomCount); 1118 if (ListOfLocalAtoms == NULL) { // allocate and fill list of this fragment/subgraph 1119 status = status && Leaf->CreateFatherLookupTable(ListOfLocalAtoms, GlobalAtomCount); 1137 1120 FreeList = FreeList && true; 1138 } 1121 } else 1122 return false; 1139 1123 1140 1124 return status; … … 1158 1142 DoLog(1) && (Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl); 1159 1143 // fill ListOfLocalAtoms if NULL was given 1160 if (!FillListOfLocalAtoms(ListOfLocalAtoms , FragmentCounter, reference->getAtomCount(), FreeList)) {1144 if (!FillListOfLocalAtoms(ListOfLocalAtoms[FragmentCounter], reference->getAtomCount(), FreeList)) { 1161 1145 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 1162 1146 return false; … … 1203 1187 // free the index lookup list 1204 1188 delete[](ListOfLocalAtoms[FragmentCounter]); 1205 if (FragmentCounter == 0) // first fragments frees the initial pointer to list1206 delete[](ListOfLocalAtoms);1207 1189 } 1208 1190 DoLog(1) && (Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl);
Note:
See TracChangeset
for help on using the changeset viewer.