Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/moleculelist.cpp

    read4e6 ra67d19  
    77#include <cstring>
    88
    9 #include "World.hpp"
    109#include "atom.hpp"
    1110#include "bond.hpp"
     
    2019#include "memoryallocator.hpp"
    2120#include "periodentafel.hpp"
     21#include "World.hpp"
    2222
    2323/*********************************** Functions for class MoleculeListClass *************************/
     
    2525/** Constructor for MoleculeListClass.
    2626 */
    27 MoleculeListClass::MoleculeListClass(World *_world) :
    28   world(_world)
     27MoleculeListClass::MoleculeListClass()
    2928{
    3029  // empty lists
     
    3736MoleculeListClass::~MoleculeListClass()
    3837{
    39   Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl;
     38  DoLog(3) && (Log() << Verbose(3) << this << ": Freeing ListOfMolcules." << endl);
    4039  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);
    4544  ListOfMolecules.clear(); // empty list
    4645};
     
    5251void MoleculeListClass::insert(molecule *mol)
    5352{
    54   OBSERVE;
    5553  mol->IndexNr = MaxIndex++;
    5654  ListOfMolecules.push_back(mol);
    57   mol->signOn(this);
    5855};
    5956
     
    139136 * \param *out output stream
    140137 */
    141 void MoleculeListClass::Enumerate(ostream *out)
    142 {
     138void MoleculeListClass::Enumerate(ofstream *out)
     139{
     140  element* Elemental = NULL;
    143141  atom *Walker = NULL;
    144   periodentafel *periode = World::getInstance().getPeriode();
    145   std::map<atomicNumber_t,unsigned int> counts;
     142  int Counts[MAX_ELEMENTS];
    146143  double size=0;
    147144  Vector Origin;
    148145
    149146  // 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);
    152149  if (ListOfMolecules.size() == 0)
    153     (*out) << "\tNone" << endl;
     150    DoLog(0) && (Log() << Verbose(0) << "\tNone" << endl);
    154151  else {
    155152    Origin.Zero();
    156153    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;
    157157      // count atoms per element and determine size of bounding sphere
    158158      size=0.;
     
    160160      while (Walker->next != (*ListRunner)->end) {
    161161        Walker = Walker->next;
    162         counts[Walker->type->getNumber()]++;
     162        Counts[Walker->type->Z]++;
    163163        if (Walker->x.DistanceSquared(&Origin) > size)
    164164          size = Walker->x.DistanceSquared(&Origin);
    165165      }
    166166      // 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]);
    173173      }
    174174      // 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);
    176176    }
    177177  }
     
    212212  // remove src
    213213  ListOfMolecules.remove(srcmol);
    214   World::getInstance().destroyMolecule(srcmol);
     214  delete(srcmol);
    215215  return true;
    216216};
     
    314314  Tesselation *TesselStruct = NULL;
    315315  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);
    317317    return false;
    318318  }
     
    322322  FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL);
    323323  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);
    325325    return false;
    326326  }
     
    339339  while (Walker->next != srcmol->end) {
    340340    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);
    342342    if (!TesselStruct->IsInnerPoint(Walker->x, LCList)) {
    343       CopyAtoms[Walker->nr] = Walker->clone();
     343      CopyAtoms[Walker->nr] = new atom(Walker);
    344344      mol->AddAtom(CopyAtoms[Walker->nr]);
    345345      nr++;
     
    348348    }
    349349  }
    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.");
    351351
    352352  // go through all bonds and add as well
     
    354354  while(Binder->next != srcmol->last) {
    355355    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);
    357357    mol->AddBond(CopyAtoms[Binder->leftatom->nr], CopyAtoms[Binder->rightatom->nr], Binder->BondDegree);
    358358  }
     
    366366void MoleculeListClass::Output(ofstream *out)
    367367{
    368   Log() << Verbose(1) << "MoleculeList: ";
     368  DoLog(1) && (Log() << Verbose(1) << "MoleculeList: ");
    369369  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);
    372372};
    373373
     
    395395  char *FragmentNumber = NULL;
    396396
    397   Log() << Verbose(1) << "Saving hydrogen saturation correction ... ";
     397  DoLog(1) && (Log() << Verbose(1) << "Saving hydrogen saturation correction ... ");
    398398  // 0. parse in fit constant files that should have the same dimension as the final energy files
    399399  // 0a. find dimension of matrices with constants
     
    405405  input.open(line.c_str());
    406406  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);
    408408    return false;
    409409  }
     
    422422    b++;
    423423  }
    424   Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, ";
     424  DoLog(0) && (Log() << Verbose(0) << "I recognized " << a << " columns and " << b << " rows, ");
    425425  input.close();
    426426
     
    443443    input.open(line.c_str());
    444444    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);
    446446      performCriticalExit();
    447447      return false;
     
    465465  }
    466466  for (int k = 0; k < 3; k++) {
    467     Log() << Verbose(0) << "Constants " << k << ":" << endl;
     467    DoLog(0) && (Log() << Verbose(0) << "Constants " << k << ":" << endl);
    468468    for (int j = 0; j < b; j++) {
    469469      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");
    471471      }
    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);
    475475  }
    476476
     
    560560  }
    561561  Free(&FitConstant);
    562   Log() << Verbose(0) << "done." << endl;
     562  DoLog(0) && (Log() << Verbose(0) << "done." << endl);
    563563  return true;
    564564};
     
    577577  stringstream line;
    578578  atom *Walker = NULL;
    579   periodentafel *periode=World::getInstance().getPeriode();
     579  element *runner = NULL;
    580580
    581581  // open file for the force factors
    582   Log() << Verbose(1) << "Saving  force factors ... ";
     582  DoLog(1) && (Log() << Verbose(1) << "Saving  force factors ... ");
    583583  line << path << "/" << FRAGMENTPREFIX << FORCESFILE;
    584584  ForcesFile.open(line.str().c_str(), ios::out);
     
    587587    //output << prefix << "Forces" << endl;
    588588    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
    592593          Walker = (*ListRunner)->start;
    593594          while (Walker->next != (*ListRunner)->end) { // go through every atom of this element
    594595            Walker = Walker->next;
    595             if (Walker->type->getNumber() == (*elemIter).first) {
     596            if (Walker->type->Z == runner->Z) {
    596597              if ((Walker->GetTrueFather() != NULL) && (Walker->GetTrueFather() != Walker)) {// if there is a rea
    597598                //Log() << Verbose(0) << "Walker is " << *Walker << " with true father " << *( Walker->GetTrueFather()) << ", it
     
    607608    }
    608609    ForcesFile.close();
    609     Log() << Verbose(1) << "done." << endl;
     610    DoLog(1) && (Log() << Verbose(1) << "done." << endl);
    610611  } else {
    611612    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);
    613614  }
    614615  ForcesFile.close();
     
    638639  int FragmentCounter = 0;
    639640  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];
    641647  // store the fragments as config and as xyz
    642648  for (MoleculeList::iterator ListRunner = ListOfMolecules.begin(); ListRunner != ListOfMolecules.end(); ListRunner++) {
     
    646652      strcpy(PathBackup, path);
    647653    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);
    649655      performCriticalExit();
    650656    }
     
    657663    sprintf(FragmentName, "%s/%s%s.conf.xyz", configuration->configpath, FRAGMENTPREFIX, FragmentNumber);
    658664    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 ...");
    660666    if ((intermediateResult = (*ListRunner)->OutputXYZ(&outputFragment)))
    661       Log() << Verbose(0) << " done." << endl;
     667      DoLog(0) && (Log() << Verbose(0) << " done." << endl);
    662668    else
    663       Log() << Verbose(0) << " failed." << endl;
     669      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
    664670    result = result && intermediateResult;
    665671    outputFragment.close();
     
    667673
    668674    // list atoms in fragment for debugging
    669     Log() << Verbose(2) << "Contained atoms: ";
     675    DoLog(2) && (Log() << Verbose(2) << "Contained atoms: ");
    670676    Walker = (*ListRunner)->start;
    671677    while (Walker->next != (*ListRunner)->end) {
    672678      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);
    676682
    677683    // center on edge
     
    682688      j += k + 1;
    683689      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.;
    685691    }
    686692    (*ListRunner)->Translate(&BoxDimension);
     
    697703    // and save as config
    698704    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 ...");
    700706    if ((intermediateResult = configuration->Save(FragmentName, (*ListRunner)->elemente, (*ListRunner))))
    701       Log() << Verbose(0) << " done." << endl;
     707      DoLog(0) && (Log() << Verbose(0) << " done." << endl);
    702708    else
    703       Log() << Verbose(0) << " failed." << endl;
     709      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
    704710    result = result && intermediateResult;
    705711
     
    709715    // and save as mpqc input file
    710716    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 ...");
    712718    if ((intermediateResult = configuration->SaveMPQC(FragmentName, (*ListRunner))))
    713       Log() << Verbose(2) << " done." << endl;
     719      DoLog(2) && (Log() << Verbose(2) << " done." << endl);
    714720    else
    715       Log() << Verbose(0) << " failed." << endl;
     721      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
    716722
    717723    result = result && intermediateResult;
     
    720726    Free(&FragmentNumber);
    721727  }
    722   Log() << Verbose(0) << " done." << endl;
     728  DoLog(0) && (Log() << Verbose(0) << " done." << endl);
    723729
    724730  // 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];
    726736
    727737  return result;
     
    746756void MoleculeListClass::DissectMoleculeIntoConnectedSubgraphs(const periodentafel * const periode, config * const configuration)
    747757{
    748   molecule *mol = World::getInstance().createMolecule();
     758  molecule *mol = new molecule(periode);
    749759  atom *Walker = NULL;
    750760  atom *Advancer = NULL;
     
    758768      Walker = Advancer;
    759769      Advancer = Advancer->next;
    760       Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;
     770      DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl);
    761771      unlink(Walker);
    762772      Walker->father = Walker;
     
    771781    }
    772782    // remove the molecule
    773     World::getInstance().destroyMolecule(*MolRunner);
     783    delete(*MolRunner);
    774784    ListOfMolecules.erase(MolRunner);
    775785  }
    776786
    777787  // 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  }
    779793
    780794  // 2. scan for connected subgraphs
     
    783797  Subgraphs = mol->DepthFirstSearchAnalysis(BackEdgeStack);
    784798  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  }
    785804
    786805  // 3. dissect (the following construct is needed to have the atoms not in the order of the DFS, but in
     
    793812  molecule **molecules = Malloc<molecule *>(MolCount, "config::Load() - **molecules");
    794813  for (int i=0;i<MolCount;i++) {
    795     molecules[i] = World::getInstance().createMolecule();
     814    molecules[i] = (molecule*) new molecule(mol->elemente);
    796815    molecules[i]->ActiveFlag = true;
    797816    strncpy(molecules[i]->name, mol->name, MAXSTRINGSIZE);
     
    800819      strncat(molecules[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1);
    801820    }
    802     cout << "MolName is " << molecules[i]->name << endl;
     821    DoLog(1) && (Log() << Verbose(1) << "MolName is " << molecules[i]->name << endl);
    803822    insert(molecules[i]);
    804823  }
     
    824843    Walker = mol->start->next;
    825844    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);
    827846      performCriticalExit();
    828847    }
    829848    FragmentCounter = MolMap[Walker->nr];
    830849    if (FragmentCounter != 0) {
    831       Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl;
     850      DoLog(3) && (Log() << Verbose(3) << "Re-linking " << *Walker << "..." << endl);
    832851      unlink(Walker);
    833852      molecules[FragmentCounter-1]->AddAtom(Walker);    // counting starts at 1
    834853    } 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);
    836855      performCriticalExit();
    837856    }
     
    854873  Free(&MolMap);
    855874  Free(&molecules);
    856   Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl;
     875  DoLog(1) && (Log() << Verbose(1) << "I scanned " << FragmentCounter << " molecules." << endl);
    857876};
    858877
     
    874893  return AtomNo;
    875894}
    876 
    877 /***********
    878  * Methods Moved here from the menus
    879  */
    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 dimensions
    909   mol->CenterEdge(&center);
    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 };
    964895
    965896
     
    1005936  // remove the leaf itself
    1006937  if (Leaf != NULL) {
    1007     World::getInstance().destroyMolecule(Leaf);
     938    delete (Leaf);
    1008939    Leaf = NULL;
    1009940  }
     
    1051982  int AtomNo;
    1052983
    1053   Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl;
     984  DoLog(1) && (Log() << Verbose(1) << "Begin of FillBondStructureFromReference." << endl);
    1054985  // fill ListOfLocalAtoms if NULL was given
    1055986  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);
    1057988    return false;
    1058989  }
    1059990
    1060991  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);
    1062993    // remove every bond from the list
    1063994    bond *Binder = NULL;
     
    10801011            Leaf->AddBond(Walker, OtherWalker, (*Runner)->BondDegree);
    10811012        } 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);
    10831014          status = false;
    10841015        }
     
    10931024      Free(&ListOfLocalAtoms);
    10941025  }
    1095   Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl;
     1026  DoLog(1) && (Log() << Verbose(1) << "End of FillBondStructureFromReference." << endl);
    10961027  return status;
    10971028};
     
    11261057        next->FillRootStackForSubgraphs(RootStack, AtomMask, ++FragmentCounter);
    11271058    } else {
    1128       Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl;
     1059      DoLog(1) && (Log() << Verbose(1) << "Rootstack[" << FragmentCounter << "] is NULL." << endl);
    11291060      return false;
    11301061    }
     
    11321063    return true;
    11331064  } else {
    1134     Log() << Verbose(1) << "Rootstack is NULL." << endl;
     1065    DoLog(1) && (Log() << Verbose(1) << "Rootstack is NULL." << endl);
    11351066    return false;
    11361067  }
     
    11821113  int KeySetCounter = 0;
    11831114
    1184   Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl;
     1115  DoLog(1) && (Log() << Verbose(1) << "Begin of AssignKeySetsToFragment." << endl);
    11851116  // fill ListOfLocalAtoms if NULL was given
    11861117  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);
    11881119    return false;
    11891120  }
     
    12131144    delete (TempSet);
    12141145    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);
    12161147      delete (FragmentList[FragmentCounter]);
    12171148    } 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);
    12191150    FragmentCounter++;
    12201151    if (next != NULL)
     
    12221153    FragmentCounter--;
    12231154  } else
    1224     Log() << Verbose(1) << "KeySetList is NULL or empty." << endl;
     1155    DoLog(1) && (Log() << Verbose(1) << "KeySetList is NULL or empty." << endl);
    12251156
    12261157  if ((FreeList) && (ListOfLocalAtoms != NULL)) {
     
    12301161      Free(&ListOfLocalAtoms);
    12311162  }
    1232   Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl;
     1163  DoLog(1) && (Log() << Verbose(1) << "End of AssignKeySetsToFragment." << endl);
    12331164  return status;
    12341165};
     
    12431174void MoleculeLeafClass::TranslateIndicesToGlobalIDs(Graph **FragmentList, int &FragmentCounter, int &TotalNumberOfKeySets, Graph &TotalGraph)
    12441175{
    1245   Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl;
     1176  DoLog(1) && (Log() << Verbose(1) << "Begin of TranslateIndicesToGlobalIDs." << endl);
    12461177  KeySet *TempSet = new KeySet;
    12471178  if (FragmentList[FragmentCounter] != NULL) {
     
    12541185    delete (TempSet);
    12551186  } else {
    1256     Log() << Verbose(1) << "FragmentList is NULL." << endl;
     1187    DoLog(1) && (Log() << Verbose(1) << "FragmentList is NULL." << endl);
    12571188  }
    12581189  if (next != NULL)
    12591190    next->TranslateIndicesToGlobalIDs(FragmentList, ++FragmentCounter, TotalNumberOfKeySets, TotalGraph);
    12601191  FragmentCounter--;
    1261   Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl;
     1192  DoLog(1) && (Log() << Verbose(1) << "End of TranslateIndicesToGlobalIDs." << endl);
    12621193};
    12631194
Note: See TracChangeset for help on using the changeset viewer.