Changes in src/moleculelist.cpp [ead4e6:a67d19]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/moleculelist.cpp
read4e6 ra67d19 7 7 #include <cstring> 8 8 9 #include "World.hpp"10 9 #include "atom.hpp" 11 10 #include "bond.hpp" … … 20 19 #include "memoryallocator.hpp" 21 20 #include "periodentafel.hpp" 21 #include "World.hpp" 22 22 23 23 /*********************************** Functions for class MoleculeListClass *************************/ … … 25 25 /** Constructor for MoleculeListClass. 26 26 */ 27 MoleculeListClass::MoleculeListClass(World *_world) : 28 world(_world) 27 MoleculeListClass::MoleculeListClass() 29 28 { 30 29 // empty lists … … 37 36 MoleculeListClass::~MoleculeListClass() 38 37 { 39 Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl;38 DoLog(3) && (Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl); 40 39 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) { 41 Log() << Verbose(4) << "ListOfMolecules: Freeing " << *ListRunner << "." << endl;42 world->destroyMolecule(*ListRunner);43 } 44 Log() << Verbose(4) << "Freeing ListOfMolecules." << endl;40 DoLog(4) && (Log() << Verbose(4) << "ListOfMolecules: Freeing " << *ListRunner << "." << endl); 41 delete (*ListRunner); 42 } 43 DoLog(4) && (Log() << Verbose(4) << "Freeing ListOfMolecules." << endl); 45 44 ListOfMolecules.clear(); // empty list 46 45 }; … … 52 51 void MoleculeListClass::insert(molecule *mol) 53 52 { 54 OBSERVE;55 53 mol->IndexNr = MaxIndex++; 56 54 ListOfMolecules.push_back(mol); 57 mol->signOn(this);58 55 }; 59 56 … … 139 136 * \param *out output stream 140 137 */ 141 void MoleculeListClass::Enumerate(ostream *out) 142 { 138 void MoleculeListClass::Enumerate(ofstream *out) 139 { 140 element* Elemental = NULL; 143 141 atom *Walker = NULL; 144 periodentafel *periode = World::getInstance().getPeriode(); 145 std::map<atomicNumber_t,unsigned int> counts; 142 int Counts[MAX_ELEMENTS]; 146 143 double size=0; 147 144 Vector Origin; 148 145 149 146 // header 150 (*out) << "Index\tName\t\tAtoms\tFormula\tCenter\tSize" << endl;151 (*out) << "-----------------------------------------------" << endl;147 DoLog(0) && (Log() << Verbose(0) << "Index\tName\t\tAtoms\tFormula\tCenter\tSize" << endl); 148 DoLog(0) && (Log() << Verbose(0) << "-----------------------------------------------" << endl); 152 149 if (ListOfMolecules.size() == 0) 153 (*out) << "\tNone" << endl;150 DoLog(0) && (Log() << Verbose(0) << "\tNone" << endl); 154 151 else { 155 152 Origin.Zero(); 156 153 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) { 154 // reset element counts 155 for (int j = 0; j<MAX_ELEMENTS;j++) 156 Counts[j] = 0; 157 157 // count atoms per element and determine size of bounding sphere 158 158 size=0.; … … 160 160 while (Walker->next != (*ListRunner)->end) { 161 161 Walker = Walker->next; 162 counts[Walker->type->getNumber()]++;162 Counts[Walker->type->Z]++; 163 163 if (Walker->x.DistanceSquared(&Origin) > size) 164 164 size = Walker->x.DistanceSquared(&Origin); 165 165 } 166 166 // output Index, Name, number of atoms, chemical formula 167 (*out) << ((*ListRunner)->ActiveFlag ? "*" : " ") << (*ListRunner)->IndexNr << "\t" << (*ListRunner)->name << "\t\t" << (*ListRunner)->AtomCount << "\t";168 169 std::map<atomicNumber_t,unsigned int>::reverse_iterator iter;170 for(iter=counts.rbegin(); iter!=counts.rend();++iter){171 atomicNumber_t Z =(*iter).first;172 (*out) << periode->FindElement(Z)->getSymbol() << (*iter).second;167 DoLog(0) && (Log() << Verbose(0) << ((*ListRunner)->ActiveFlag ? "*" : " ") << (*ListRunner)->IndexNr << "\t" << (*ListRunner)->name << "\t\t" << (*ListRunner)->AtomCount << "\t"); 168 Elemental = (*ListRunner)->elemente->end; 169 while(Elemental->previous != (*ListRunner)->elemente->start) { 170 Elemental = Elemental->previous; 171 if (Counts[Elemental->Z] != 0) 172 DoLog(0) && (Log() << Verbose(0) << Elemental->symbol << Counts[Elemental->Z]); 173 173 } 174 174 // Center and size 175 (*out) << "\t" << (*ListRunner)->Center << "\t" << sqrt(size) << endl;175 DoLog(0) && (Log() << Verbose(0) << "\t" << (*ListRunner)->Center << "\t" << sqrt(size) << endl); 176 176 } 177 177 } … … 212 212 // remove src 213 213 ListOfMolecules.remove(srcmol); 214 World::getInstance().destroyMolecule(srcmol);214 delete(srcmol); 215 215 return true; 216 216 }; … … 314 314 Tesselation *TesselStruct = NULL; 315 315 if ((srcmol == NULL) || (mol == NULL)) { 316 eLog() << Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl;316 DoeLog(1) && (eLog()<< Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl); 317 317 return false; 318 318 } … … 322 322 FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL); 323 323 if (TesselStruct == NULL) { 324 eLog() << Verbose(1) << "Could not tesselate the fixed molecule." << endl;324 DoeLog(1) && (eLog()<< Verbose(1) << "Could not tesselate the fixed molecule." << endl); 325 325 return false; 326 326 } … … 339 339 while (Walker->next != srcmol->end) { 340 340 Walker = Walker->next; 341 Log() << Verbose(2) << "INFO: Current Walker is " << *Walker << "." << endl;341 DoLog(2) && (Log() << Verbose(2) << "INFO: Current Walker is " << *Walker << "." << endl); 342 342 if (!TesselStruct->IsInnerPoint(Walker->x, LCList)) { 343 CopyAtoms[Walker->nr] = Walker->clone();343 CopyAtoms[Walker->nr] = new atom(Walker); 344 344 mol->AddAtom(CopyAtoms[Walker->nr]); 345 345 nr++; … … 348 348 } 349 349 } 350 Log() << Verbose(1) << nr << " of " << srcmol->AtomCount << " atoms have been merged.";350 DoLog(1) && (Log() << Verbose(1) << nr << " of " << srcmol->AtomCount << " atoms have been merged."); 351 351 352 352 // go through all bonds and add as well … … 354 354 while(Binder->next != srcmol->last) { 355 355 Binder = Binder->next; 356 Log() << Verbose(3) << "Adding Bond between " << *CopyAtoms[Binder->leftatom->nr] << " and " << *CopyAtoms[Binder->rightatom->nr]<< "." << endl;356 DoLog(3) && (Log() << Verbose(3) << "Adding Bond between " << *CopyAtoms[Binder->leftatom->nr] << " and " << *CopyAtoms[Binder->rightatom->nr]<< "." << endl); 357 357 mol->AddBond(CopyAtoms[Binder->leftatom->nr], CopyAtoms[Binder->rightatom->nr], Binder->BondDegree); 358 358 } … … 366 366 void MoleculeListClass::Output(ofstream *out) 367 367 { 368 Log() << Verbose(1) << "MoleculeList: ";368 DoLog(1) && (Log() << Verbose(1) << "MoleculeList: "); 369 369 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) 370 Log() << Verbose(0) << *ListRunner << "\t";371 Log() << Verbose(0) << endl;370 DoLog(0) && (Log() << Verbose(0) << *ListRunner << "\t"); 371 DoLog(0) && (Log() << Verbose(0) << endl); 372 372 }; 373 373 … … 395 395 char *FragmentNumber = NULL; 396 396 397 Log() << Verbose(1) << "Saving hydrogen saturation correction ... ";397 DoLog(1) && (Log() << Verbose(1) << "Saving hydrogen saturation correction ... "); 398 398 // 0. parse in fit constant files that should have the same dimension as the final energy files 399 399 // 0a. find dimension of matrices with constants … … 405 405 input.open(line.c_str()); 406 406 if (input == NULL) { 407 Log() << Verbose(1) << endl << "Unable to open " << line << ", is the directory correct?" << endl;407 DoLog(1) && (Log() << Verbose(1) << endl << "Unable to open " << line << ", is the directory correct?" << endl); 408 408 return false; 409 409 } … … 422 422 b++; 423 423 } 424 Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, ";424 DoLog(0) && (Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, "); 425 425 input.close(); 426 426 … … 443 443 input.open(line.c_str()); 444 444 if (input == NULL) { 445 eLog() << Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl;445 DoeLog(0) && (eLog()<< Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl); 446 446 performCriticalExit(); 447 447 return false; … … 465 465 } 466 466 for (int k = 0; k < 3; k++) { 467 Log() << Verbose(0) << "Constants " << k << ":" << endl;467 DoLog(0) && (Log() << Verbose(0) << "Constants " << k << ":" << endl); 468 468 for (int j = 0; j < b; j++) { 469 469 for (int i = 0; i < a; i++) { 470 Log() << Verbose(0) << FitConstant[k][i][j] << "\t";470 DoLog(0) && (Log() << Verbose(0) << FitConstant[k][i][j] << "\t"); 471 471 } 472 Log() << Verbose(0) << endl;473 } 474 Log() << Verbose(0) << endl;472 DoLog(0) && (Log() << Verbose(0) << endl); 473 } 474 DoLog(0) && (Log() << Verbose(0) << endl); 475 475 } 476 476 … … 560 560 } 561 561 Free(&FitConstant); 562 Log() << Verbose(0) << "done." << endl;562 DoLog(0) && (Log() << Verbose(0) << "done." << endl); 563 563 return true; 564 564 }; … … 577 577 stringstream line; 578 578 atom *Walker = NULL; 579 periodentafel *periode=World::getInstance().getPeriode();579 element *runner = NULL; 580 580 581 581 // open file for the force factors 582 Log() << Verbose(1) << "Saving force factors ... ";582 DoLog(1) && (Log() << Verbose(1) << "Saving force factors ... "); 583 583 line << path << "/" << FRAGMENTPREFIX << FORCESFILE; 584 584 ForcesFile.open(line.str().c_str(), ios::out); … … 587 587 //output << prefix << "Forces" << endl; 588 588 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) { 589 periodentafel::const_iterator elemIter; 590 for(elemIter=periode->begin();elemIter!=periode->end();++elemIter){ 591 if ((*ListRunner)->ElementsInMolecule[(*elemIter).first]) { // if this element got atoms 589 runner = (*ListRunner)->elemente->start; 590 while (runner->next != (*ListRunner)->elemente->end) { // go through every element 591 runner = runner->next; 592 if ((*ListRunner)->ElementsInMolecule[runner->Z]) { // if this element got atoms 592 593 Walker = (*ListRunner)->start; 593 594 while (Walker->next != (*ListRunner)->end) { // go through every atom of this element 594 595 Walker = Walker->next; 595 if (Walker->type-> getNumber() == (*elemIter).first) {596 if (Walker->type->Z == runner->Z) { 596 597 if ((Walker->GetTrueFather() != NULL) && (Walker->GetTrueFather() != Walker)) {// if there is a rea 597 598 //Log() << Verbose(0) << "Walker is " << *Walker << " with true father " << *( Walker->GetTrueFather()) << ", it … … 607 608 } 608 609 ForcesFile.close(); 609 Log() << Verbose(1) << "done." << endl;610 DoLog(1) && (Log() << Verbose(1) << "done." << endl); 610 611 } else { 611 612 status = false; 612 Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl;613 DoLog(1) && (Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl); 613 614 } 614 615 ForcesFile.close(); … … 638 639 int FragmentCounter = 0; 639 640 ofstream output; 640 641 double cell_size_backup[6]; 642 double * const cell_size = World::get()->cell_size; 643 644 // backup cell_size 645 for (int i=0;i<6;i++) 646 cell_size_backup[i] = cell_size[i]; 641 647 // store the fragments as config and as xyz 642 648 for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) { … … 646 652 strcpy(PathBackup, path); 647 653 else { 648 eLog() << Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl;654 DoeLog(0) && (eLog()<< Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl); 649 655 performCriticalExit(); 650 656 } … … 657 663 sprintf(FragmentName, "%s/%s%s.conf.xyz", configuration->configpath, FRAGMENTPREFIX, FragmentNumber); 658 664 outputFragment.open(FragmentName, ios::out); 659 Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as XYZ ...";665 DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as XYZ ..."); 660 666 if ((intermediateResult = (*ListRunner)->OutputXYZ(&outputFragment))) 661 Log() << Verbose(0) << " done." << endl;667 DoLog(0) && (Log() << Verbose(0) << " done." << endl); 662 668 else 663 Log() << Verbose(0) << " failed." << endl;669 DoLog(0) && (Log() << Verbose(0) << " failed." << endl); 664 670 result = result && intermediateResult; 665 671 outputFragment.close(); … … 667 673 668 674 // list atoms in fragment for debugging 669 Log() << Verbose(2) << "Contained atoms: ";675 DoLog(2) && (Log() << Verbose(2) << "Contained atoms: "); 670 676 Walker = (*ListRunner)->start; 671 677 while (Walker->next != (*ListRunner)->end) { 672 678 Walker = Walker->next; 673 Log() << Verbose(0) << Walker->Name << " ";674 } 675 Log() << Verbose(0) << endl;679 DoLog(0) && (Log() << Verbose(0) << Walker->Name << " "); 680 } 681 DoLog(0) && (Log() << Verbose(0) << endl); 676 682 677 683 // center on edge … … 682 688 j += k + 1; 683 689 BoxDimension.x[k] = 2.5 * (configuration->GetIsAngstroem() ? 1. : 1. / AtomicLengthToAngstroem); 684 (*ListRunner)->cell_size[j] += BoxDimension.x[k] * 2.;690 cell_size[j] = BoxDimension.x[k] * 2.; 685 691 } 686 692 (*ListRunner)->Translate(&BoxDimension); … … 697 703 // and save as config 698 704 sprintf(FragmentName, "%s/%s%s.conf", configuration->configpath, FRAGMENTPREFIX, FragmentNumber); 699 Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as config ...";705 DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as config ..."); 700 706 if ((intermediateResult = configuration->Save(FragmentName, (*ListRunner)->elemente, (*ListRunner)))) 701 Log() << Verbose(0) << " done." << endl;707 DoLog(0) && (Log() << Verbose(0) << " done." << endl); 702 708 else 703 Log() << Verbose(0) << " failed." << endl;709 DoLog(0) && (Log() << Verbose(0) << " failed." << endl); 704 710 result = result && intermediateResult; 705 711 … … 709 715 // and save as mpqc input file 710 716 sprintf(FragmentName, "%s/%s%s.conf", configuration->configpath, FRAGMENTPREFIX, FragmentNumber); 711 Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as mpqc input ...";717 DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as mpqc input ..."); 712 718 if ((intermediateResult = configuration->SaveMPQC(FragmentName, (*ListRunner)))) 713 Log() << Verbose(2) << " done." << endl;719 DoLog(2) && (Log() << Verbose(2) << " done." << endl); 714 720 else 715 Log() << Verbose(0) << " failed." << endl;721 DoLog(0) && (Log() << Verbose(0) << " failed." << endl); 716 722 717 723 result = result && intermediateResult; … … 720 726 Free(&FragmentNumber); 721 727 } 722 Log() << Verbose(0) << " done." << endl;728 DoLog(0) && (Log() << Verbose(0) << " done." << endl); 723 729 724 730 // printing final number 725 Log() << Verbose(2) << "Final number of fragments: " << FragmentCounter << "." << endl; 731 DoLog(2) && (Log() << Verbose(2) << "Final number of fragments: " << FragmentCounter << "." << endl); 732 733 // restore cell_size 734 for (int i=0;i<6;i++) 735 cell_size[i] = cell_size_backup[i]; 726 736 727 737 return result; … … 746 756 void MoleculeListClass::DissectMoleculeIntoConnectedSubgraphs(const periodentafel * const periode, config * const configuration) 747 757 { 748 molecule *mol = World::getInstance().createMolecule();758 molecule *mol = new molecule(periode); 749 759 atom *Walker = NULL; 750 760 atom *Advancer = NULL; … … 758 768 Walker = Advancer; 759 769 Advancer = Advancer->next; 760 Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;770 DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl); 761 771 unlink(Walker); 762 772 Walker->father = Walker; … … 771 781 } 772 782 // remove the molecule 773 World::getInstance().destroyMolecule(*MolRunner);783 delete(*MolRunner); 774 784 ListOfMolecules.erase(MolRunner); 775 785 } 776 786 777 787 // 1. dissect the molecule into connected subgraphs 778 configuration->BG->ConstructBondGraph(mol); 788 if (!configuration->BG->ConstructBondGraph(mol)) { 789 delete (mol); 790 DoeLog(1) && (eLog()<< Verbose(1) << "There are no bonds." << endl); 791 return; 792 } 779 793 780 794 // 2. scan for connected subgraphs … … 783 797 Subgraphs = mol->DepthFirstSearchAnalysis(BackEdgeStack); 784 798 delete(BackEdgeStack); 799 if ((Subgraphs == NULL) || (Subgraphs->next == NULL)) { 800 delete (mol); 801 DoeLog(1) && (eLog()<< Verbose(1) << "There are no atoms." << endl); 802 return; 803 } 785 804 786 805 // 3. dissect (the following construct is needed to have the atoms not in the order of the DFS, but in … … 793 812 molecule **molecules = Malloc<molecule *>(MolCount, "config::Load() - **molecules"); 794 813 for (int i=0;i<MolCount;i++) { 795 molecules[i] = World::getInstance().createMolecule();814 molecules[i] = (molecule*) new molecule(mol->elemente); 796 815 molecules[i]->ActiveFlag = true; 797 816 strncpy(molecules[i]->name, mol->name, MAXSTRINGSIZE); … … 800 819 strncat(molecules[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1); 801 820 } 802 cout << "MolName is " << molecules[i]->name << endl;821 DoLog(1) && (Log() << Verbose(1) << "MolName is " << molecules[i]->name << endl); 803 822 insert(molecules[i]); 804 823 } … … 824 843 Walker = mol->start->next; 825 844 if ((Walker->nr <0) || (Walker->nr >= mol->AtomCount)) { 826 eLog() << Verbose(0) << "Index of atom " << *Walker << " is invalid!" << endl;845 DoeLog(0) && (eLog()<< Verbose(0) << "Index of atom " << *Walker << " is invalid!" << endl); 827 846 performCriticalExit(); 828 847 } 829 848 FragmentCounter = MolMap[Walker->nr]; 830 849 if (FragmentCounter != 0) { 831 Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;850 DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl); 832 851 unlink(Walker); 833 852 molecules[FragmentCounter-1]->AddAtom(Walker); // counting starts at 1 834 853 } else { 835 eLog() << Verbose(0) << "Atom " << *Walker << " not associated to molecule!" << endl;854 DoeLog(0) && (eLog()<< Verbose(0) << "Atom " << *Walker << " not associated to molecule!" << endl); 836 855 performCriticalExit(); 837 856 } … … 854 873 Free(&MolMap); 855 874 Free(&molecules); 856 Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl;875 DoLog(1) && (Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl); 857 876 }; 858 877 … … 874 893 return AtomNo; 875 894 } 876 877 /***********878 * Methods Moved here from the menus879 */880 881 void MoleculeListClass::flipChosen() {882 int j;883 Log() << Verbose(0) << "Enter index of molecule: ";884 cin >> j;885 for(MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++)886 if ((*ListRunner)->IndexNr == j)887 (*ListRunner)->ActiveFlag = !(*ListRunner)->ActiveFlag;888 }889 890 void MoleculeListClass::createNewMolecule(periodentafel *periode) {891 OBSERVE;892 molecule *mol = NULL;893 mol = World::getInstance().createMolecule();894 insert(mol);895 };896 897 void MoleculeListClass::loadFromXYZ(periodentafel *periode){898 molecule *mol = NULL;899 Vector center;900 char filename[MAXSTRINGSIZE];901 Log() << Verbose(0) << "Format should be XYZ with: ShorthandOfElement\tX\tY\tZ" << endl;902 mol = World::getInstance().createMolecule();903 do {904 Log() << Verbose(0) << "Enter file name: ";905 cin >> filename;906 } while (!mol->AddXYZFile(filename));907 mol->SetNameFromFilename(filename);908 // center at set box dimensions909 mol->CenterEdge(¢er);910 mol->cell_size[0] = center.x[0];911 mol->cell_size[1] = 0;912 mol->cell_size[2] = center.x[1];913 mol->cell_size[3] = 0;914 mol->cell_size[4] = 0;915 mol->cell_size[5] = center.x[2];916 insert(mol);917 }918 919 void MoleculeListClass::setMoleculeFilename() {920 char filename[MAXSTRINGSIZE];921 int nr;922 molecule *mol = NULL;923 do {924 Log() << Verbose(0) << "Enter index of molecule: ";925 cin >> nr;926 mol = ReturnIndex(nr);927 } while (mol == NULL);928 Log() << Verbose(0) << "Enter name: ";929 cin >> filename;930 mol->SetNameFromFilename(filename);931 }932 933 void MoleculeListClass::parseXYZIntoMolecule(){934 char filename[MAXSTRINGSIZE];935 int nr;936 molecule *mol = NULL;937 mol = NULL;938 do {939 Log() << Verbose(0) << "Enter index of molecule: ";940 cin >> nr;941 mol = ReturnIndex(nr);942 } while (mol == NULL);943 Log() << Verbose(0) << "Format should be XYZ with: ShorthandOfElement\tX\tY\tZ" << endl;944 do {945 Log() << Verbose(0) << "Enter file name: ";946 cin >> filename;947 } while (!mol->AddXYZFile(filename));948 mol->SetNameFromFilename(filename);949 };950 951 void MoleculeListClass::eraseMolecule(){952 int nr;953 molecule *mol = NULL;954 Log() << Verbose(0) << "Enter index of molecule: ";955 cin >> nr;956 for(MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++)957 if (nr == (*ListRunner)->IndexNr) {958 mol = *ListRunner;959 ListOfMolecules.erase(ListRunner);960 World::getInstance().destroyMolecule(mol);961 break;962 }963 };964 895 965 896 … … 1005 936 // remove the leaf itself 1006 937 if (Leaf != NULL) { 1007 World::getInstance().destroyMolecule(Leaf);938 delete (Leaf); 1008 939 Leaf = NULL; 1009 940 } … … 1051 982 int AtomNo; 1052 983 1053 Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl;984 DoLog(1) && (Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl); 1054 985 // fill ListOfLocalAtoms if NULL was given 1055 986 if (!FillListOfLocalAtoms(ListOfLocalAtoms, FragmentCounter, reference->AtomCount, FreeList)) { 1056 Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl;987 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 1057 988 return false; 1058 989 } 1059 990 1060 991 if (status) { 1061 Log() << Verbose(1) << "Creating adjacency list for subgraph " << Leaf << "." << endl;992 DoLog(1) && (Log() << Verbose(1) << "Creating adjacency list for subgraph " << Leaf << "." << endl); 1062 993 // remove every bond from the list 1063 994 bond *Binder = NULL; … … 1080 1011 Leaf->AddBond(Walker, OtherWalker, (*Runner)->BondDegree); 1081 1012 } else { 1082 Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << FragmentCounter << "][" << (*Runner)->GetOtherAtom(Walker->GetTrueFather())->nr << "] is NULL!" << endl;1013 DoLog(1) && (Log() << Verbose(1) << "OtherWalker = ListOfLocalAtoms[" << FragmentCounter << "][" << (*Runner)->GetOtherAtom(Walker->GetTrueFather())->nr << "] is NULL!" << endl); 1083 1014 status = false; 1084 1015 } … … 1093 1024 Free(&ListOfLocalAtoms); 1094 1025 } 1095 Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl;1026 DoLog(1) && (Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl); 1096 1027 return status; 1097 1028 }; … … 1126 1057 next->FillRootStackForSubgraphs(RootStack, AtomMask, ++FragmentCounter); 1127 1058 } else { 1128 Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl;1059 DoLog(1) && (Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl); 1129 1060 return false; 1130 1061 } … … 1132 1063 return true; 1133 1064 } else { 1134 Log() << Verbose(1) << "Rootstack is NULL." << endl;1065 DoLog(1) && (Log() << Verbose(1) << "Rootstack is NULL." << endl); 1135 1066 return false; 1136 1067 } … … 1182 1113 int KeySetCounter = 0; 1183 1114 1184 Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl;1115 DoLog(1) && (Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl); 1185 1116 // fill ListOfLocalAtoms if NULL was given 1186 1117 if (!FillListOfLocalAtoms(ListOfLocalAtoms, FragmentCounter, reference->AtomCount, FreeList)) { 1187 Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl;1118 DoLog(1) && (Log() << Verbose(1) << "Filling of ListOfLocalAtoms failed." << endl); 1188 1119 return false; 1189 1120 } … … 1213 1144 delete (TempSet); 1214 1145 if (KeySetCounter == 0) {// if there are no keysets, delete the list 1215 Log() << Verbose(1) << "KeySetCounter is zero, deleting FragmentList." << endl;1146 DoLog(1) && (Log() << Verbose(1) << "KeySetCounter is zero, deleting FragmentList." << endl); 1216 1147 delete (FragmentList[FragmentCounter]); 1217 1148 } else 1218 Log() << Verbose(1) << KeySetCounter << " keysets were assigned to subgraph " << FragmentCounter << "." << endl;1149 DoLog(1) && (Log() << Verbose(1) << KeySetCounter << " keysets were assigned to subgraph " << FragmentCounter << "." << endl); 1219 1150 FragmentCounter++; 1220 1151 if (next != NULL) … … 1222 1153 FragmentCounter--; 1223 1154 } else 1224 Log() << Verbose(1) << "KeySetList is NULL or empty." << endl;1155 DoLog(1) && (Log() << Verbose(1) << "KeySetList is NULL or empty." << endl); 1225 1156 1226 1157 if ((FreeList) && (ListOfLocalAtoms != NULL)) { … … 1230 1161 Free(&ListOfLocalAtoms); 1231 1162 } 1232 Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl;1163 DoLog(1) && (Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl); 1233 1164 return status; 1234 1165 }; … … 1243 1174 void MoleculeLeafClass::TranslateIndicesToGlobalIDs(Graph **FragmentList, int &FragmentCounter, int &TotalNumberOfKeySets, Graph &TotalGraph) 1244 1175 { 1245 Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl;1176 DoLog(1) && (Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl); 1246 1177 KeySet *TempSet = new KeySet; 1247 1178 if (FragmentList[FragmentCounter] != NULL) { … … 1254 1185 delete (TempSet); 1255 1186 } else { 1256 Log() << Verbose(1) << "FragmentList is NULL." << endl;1187 DoLog(1) && (Log() << Verbose(1) << "FragmentList is NULL." << endl); 1257 1188 } 1258 1189 if (next != NULL) 1259 1190 next->TranslateIndicesToGlobalIDs(FragmentList, ++FragmentCounter, TotalNumberOfKeySets, TotalGraph); 1260 1191 FragmentCounter--; 1261 Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl;1192 DoLog(1) && (Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl); 1262 1193 }; 1263 1194
Note:
See TracChangeset
for help on using the changeset viewer.