Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/molecule_fragmentation.cpp

    re359a8 ra67d19  
    55 *      Author: heber
    66 */
     7
     8#include <cstring>
    79
    810#include "atom.hpp"
     
    1618#include "molecule.hpp"
    1719#include "periodentafel.hpp"
     20#include "World.hpp"
    1821
    1922/************************************* Functions for class molecule *********************************/
     
    4144  }
    4245  FragmentCount = NoNonHydrogen*(1 << (c*order));
    43   Log() << Verbose(1) << "Upper limit for this subgraph is " << FragmentCount << " for " << NoNonHydrogen << " non-H atoms with maximum bond degree of " << c << "." << endl;
     46  DoLog(1) && (Log() << Verbose(1) << "Upper limit for this subgraph is " << FragmentCount << " for " << NoNonHydrogen << " non-H atoms with maximum bond degree of " << c << "." << endl);
    4447  return FragmentCount;
    4548};
     
    6568    } // else it's "-1" or else and thus must not be added
    6669  }
    67   Log() << Verbose(1) << "The scanned KeySet is ";
     70  DoLog(1) && (Log() << Verbose(1) << "The scanned KeySet is ");
    6871  for(KeySet::iterator runner = CurrentSet.begin(); runner != CurrentSet.end(); runner++) {
    69     Log() << Verbose(0) << (*runner) << "\t";
    70   }
    71   Log() << Verbose(0) << endl;
     72    DoLog(0) && (Log() << Verbose(0) << (*runner) << "\t");
     73  }
     74  DoLog(0) && (Log() << Verbose(0) << endl);
    7275  return (status != 0);
    7376};
     
    97100
    98101  // 1st pass: open file and read
    99   Log() << Verbose(1) << "Parsing the KeySet file ... " << endl;
     102  DoLog(1) && (Log() << Verbose(1) << "Parsing the KeySet file ... " << endl);
    100103  sprintf(filename, "%s/%s%s", path, FRAGMENTPREFIX, KEYSETFILE);
    101104  InputFile.open(filename);
     
    110113        testGraphInsert = FragmentList->insert(GraphPair (CurrentSet,pair<int,double>(NumberOfFragments++,1)));  // store fragment number and current factor
    111114        if (!testGraphInsert.second) {
    112           eLog() << Verbose(0) << "KeySet file must be corrupt as there are two equal key sets therein!" << endl;
     115          DoeLog(0) && (eLog()<< Verbose(0) << "KeySet file must be corrupt as there are two equal key sets therein!" << endl);
    113116          performCriticalExit();
    114117        }
     
    119122    InputFile.clear();
    120123    Free(&buffer);
    121     Log() << Verbose(1) << "done." << endl;
     124    DoLog(1) && (Log() << Verbose(1) << "done." << endl);
    122125  } else {
    123     Log() << Verbose(1) << "File " << filename << " not found." << endl;
     126    DoLog(1) && (Log() << Verbose(1) << "File " << filename << " not found." << endl);
    124127    status = false;
    125128  }
     
    151154
    152155  // 2nd pass: open TEFactors file and read
    153   Log() << Verbose(1) << "Parsing the TEFactors file ... " << endl;
     156  DoLog(1) && (Log() << Verbose(1) << "Parsing the TEFactors file ... " << endl);
    154157  sprintf(filename, "%s/%s%s", path, FRAGMENTPREFIX, TEFACTORSFILE);
    155158  InputFile.open(filename);
     
    161164        InputFile >> TEFactor;
    162165        (*runner).second.second = TEFactor;
    163         Log() << Verbose(2) << "Setting " << ++NumberOfFragments << " fragment's TEFactor to " << (*runner).second.second << "." << endl;
     166        DoLog(2) && (Log() << Verbose(2) << "Setting " << ++NumberOfFragments << " fragment's TEFactor to " << (*runner).second.second << "." << endl);
    164167      } else {
    165168        status = false;
     
    169172    // 4. Free and done
    170173    InputFile.close();
    171     Log() << Verbose(1) << "done." << endl;
     174    DoLog(1) && (Log() << Verbose(1) << "done." << endl);
    172175  } else {
    173     Log() << Verbose(1) << "File " << filename << " not found." << endl;
     176    DoLog(1) && (Log() << Verbose(1) << "File " << filename << " not found." << endl);
    174177    status = false;
    175178  }
     
    199202  line += KEYSETFILE;
    200203  output.open(line.c_str(), ios::out);
    201   Log() << Verbose(1) << "Saving key sets of the total graph ... ";
     204  DoLog(1) && (Log() << Verbose(1) << "Saving key sets of the total graph ... ");
    202205  if(output != NULL) {
    203206    for(Graph::iterator runner = KeySetList.begin(); runner != KeySetList.end(); runner++) {
     
    209212      output << endl;
    210213    }
    211     Log() << Verbose(0) << "done." << endl;
     214    DoLog(0) && (Log() << Verbose(0) << "done." << endl);
    212215  } else {
    213     eLog() << Verbose(0) << "Unable to open " << line << " for writing keysets!" << endl;
     216    DoeLog(0) && (eLog()<< Verbose(0) << "Unable to open " << line << " for writing keysets!" << endl);
    214217    performCriticalExit();
    215218    status = false;
     
    240243  line += TEFACTORSFILE;
    241244  output.open(line.c_str(), ios::out);
    242   Log() << Verbose(1) << "Saving TEFactors of the total graph ... ";
     245  DoLog(1) && (Log() << Verbose(1) << "Saving TEFactors of the total graph ... ");
    243246  if(output != NULL) {
    244247    for(Graph::iterator runner = KeySetList.begin(); runner != KeySetList.end(); runner++)
    245248      output << (*runner).second.second << endl;
    246     Log() << Verbose(1) << "done." << endl;
     249    DoLog(1) && (Log() << Verbose(1) << "done." << endl);
    247250  } else {
    248     Log() << Verbose(1) << "failed to open " << line << "." << endl;
     251    DoLog(1) && (Log() << Verbose(1) << "failed to open " << line << "." << endl);
    249252    status = false;
    250253  }
     
    290293        (*PresentItem).second.first = fabs(Value);
    291294        (*PresentItem).second.second = FragOrder;
    292         Log() << Verbose(2) << "Updated element (" <<  (*PresentItem).first << ",[" << (*PresentItem).second.first << "," << (*PresentItem).second.second << "])." << endl;
     295        DoLog(2) && (Log() << Verbose(2) << "Updated element (" <<  (*PresentItem).first << ",[" << (*PresentItem).second.first << "," << (*PresentItem).second.second << "])." << endl);
    293296      } else {
    294         Log() << Verbose(2) << "Did not update element " <<  (*PresentItem).first << " as " << FragOrder << " is less than or equal to " << (*PresentItem).second.second << "." << endl;
     297        DoLog(2) && (Log() << Verbose(2) << "Did not update element " <<  (*PresentItem).first << " as " << FragOrder << " is less than or equal to " << (*PresentItem).second.second << "." << endl);
    295298      }
    296299    } else {
    297       Log() << Verbose(2) << "Inserted element (" <<  (*PresentItem).first << ",[" << (*PresentItem).second.first << "," << (*PresentItem).second.second << "])." << endl;
     300      DoLog(2) && (Log() << Verbose(2) << "Inserted element (" <<  (*PresentItem).first << ",[" << (*PresentItem).second.first << "," << (*PresentItem).second.second << "])." << endl);
    298301    }
    299302  } else {
    300     Log() << Verbose(1) << "No Fragment under No. " << No << "found." << endl;
     303    DoLog(1) && (Log() << Verbose(1) << "No Fragment under No. " << No << "found." << endl);
    301304  }
    302305};
     
    357360  atom *Walker = mol->start;
    358361  map<double, pair<int,int> > *FinalRootCandidates = new map<double, pair<int,int> > ;
    359   Log() << Verbose(1) << "Root candidate list is: " << endl;
     362  DoLog(1) && (Log() << Verbose(1) << "Root candidate list is: " << endl);
    360363  for(map<int, pair<double,int> >::iterator runner = AdaptiveCriteriaList->begin(); runner != AdaptiveCriteriaList->end(); runner++) {
    361364    Walker = mol->FindAtom((*runner).first);
     
    363366      //if ((*runner).second.second >= Walker->AdaptiveOrder) { // only insert if this is an "active" root site for the current order
    364367      if (!Walker->MaxOrder) {
    365         Log() << Verbose(2) << "(" << (*runner).first << ",[" << (*runner).second.first << "," << (*runner).second.second << "])" << endl;
     368        DoLog(2) && (Log() << Verbose(2) << "(" << (*runner).first << ",[" << (*runner).second.first << "," << (*runner).second.second << "])" << endl);
    366369        FinalRootCandidates->insert( make_pair( (*runner).second.first, pair<int,int>((*runner).first, (*runner).second.second) ) );
    367370      } else {
    368         Log() << Verbose(2) << "Excluding (" << *Walker << ", " << (*runner).first << ",[" << (*runner).second.first << "," << (*runner).second.second << "]), as it has reached its maximum order." << endl;
     371        DoLog(2) && (Log() << Verbose(2) << "Excluding (" << *Walker << ", " << (*runner).first << ",[" << (*runner).second.first << "," << (*runner).second.second << "]), as it has reached its maximum order." << endl);
    369372      }
    370373    } else {
    371       eLog() << Verbose(0) << "Atom No. " << (*runner).second.first << " was not found in this molecule." << endl;
     374      DoeLog(0) && (eLog()<< Verbose(0) << "Atom No. " << (*runner).second.first << " was not found in this molecule." << endl);
    372375      performCriticalExit();
    373376    }
     
    394397    Walker = mol->FindAtom(No);
    395398    //if (Walker->AdaptiveOrder < MinimumRingSize[Walker->nr]) {
    396       Log() << Verbose(2) << "Root " << No << " is still above threshold (10^{" << Order <<"}: " << runner->first << ", setting entry " << No << " of Atom mask to true." << endl;
     399      DoLog(2) && (Log() << Verbose(2) << "Root " << No << " is still above threshold (10^{" << Order <<"}: " << runner->first << ", setting entry " << No << " of Atom mask to true." << endl);
    397400      AtomMask[No] = true;
    398401      status = true;
     
    410413void PrintAtomMask(bool *AtomMask, int AtomCount)
    411414{
    412   Log() << Verbose(2) << "              ";
     415  DoLog(2) && (Log() << Verbose(2) << "              ");
    413416  for(int i=0;i<AtomCount;i++)
    414     Log() << Verbose(0) << (i % 10);
    415   Log() << Verbose(0) << endl;
    416   Log() << Verbose(2) << "Atom mask is: ";
     417    DoLog(0) && (Log() << Verbose(0) << (i % 10));
     418  DoLog(0) && (Log() << Verbose(0) << endl);
     419  DoLog(2) && (Log() << Verbose(2) << "Atom mask is: ");
    417420  for(int i=0;i<AtomCount;i++)
    418     Log() << Verbose(0) << (AtomMask[i] ? "t" : "f");
    419   Log() << Verbose(0) << endl;
     421    DoLog(0) && (Log() << Verbose(0) << (AtomMask[i] ? "t" : "f"));
     422  DoLog(0) && (Log() << Verbose(0) << endl);
    420423};
    421424
     
    444447    // transmorph graph keyset list into indexed KeySetList
    445448    if (GlobalKeySetList == NULL) {
    446       eLog() << Verbose(1) << "Given global key set list (graph) is NULL!" << endl;
     449      DoeLog(1) && (eLog()<< Verbose(1) << "Given global key set list (graph) is NULL!" << endl);
    447450      return false;
    448451    }
     
    452455    map<int, pair<double,int> > *AdaptiveCriteriaList = ScanAdaptiveFileIntoMap(path, *IndexKeySetList); // (Root No., (Value, Order)) !
    453456    if (AdaptiveCriteriaList->empty()) {
    454       eLog() << Verbose(2) << "Unable to parse file, incrementing all." << endl;
     457      DoeLog(2) && (eLog()<< Verbose(2) << "Unable to parse file, incrementing all." << endl);
    455458      while (Walker->next != end) {
    456459        Walker = Walker->next;
     
    490493    if (!status) {
    491494      if (Order == 0)
    492         Log() << Verbose(1) << "Single stepping done." << endl;
     495        DoLog(1) && (Log() << Verbose(1) << "Single stepping done." << endl);
    493496      else
    494         Log() << Verbose(1) << "Order at every site is already equal or above desired order " << Order << "." << endl;
     497        DoLog(1) && (Log() << Verbose(1) << "Order at every site is already equal or above desired order " << Order << "." << endl);
    495498    }
    496499  }
     
    509512{
    510513  if (SortIndex != NULL) {
    511     Log() << Verbose(1) << "SortIndex is " << SortIndex << " and not NULL as expected." << endl;
     514    DoLog(1) && (Log() << Verbose(1) << "SortIndex is " << SortIndex << " and not NULL as expected." << endl);
    512515    return false;
    513516  }
     
    560563  bool *AtomMask = NULL;
    561564
    562   Log() << Verbose(0) << endl;
     565  DoLog(0) && (Log() << Verbose(0) << endl);
    563566#ifdef ADDHYDROGEN
    564   Log() << Verbose(0) << "I will treat hydrogen special and saturate dangling bonds with it." << endl;
     567  DoLog(0) && (Log() << Verbose(0) << "I will treat hydrogen special and saturate dangling bonds with it." << endl);
    565568#else
    566   Log() << Verbose(0) << "Hydrogen is treated just like the rest of the lot." << endl;
     569  DoLog(0) && (Log() << Verbose(0) << "Hydrogen is treated just like the rest of the lot." << endl);
    567570#endif
    568571
     
    590593    // fill the bond structure of the individually stored subgraphs
    591594  MolecularWalker->FillBondStructureFromReference(this, FragmentCounter, ListOfLocalAtoms, false);  // we want to keep the created ListOfLocalAtoms
    592     Log() << Verbose(0) << "Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl;
     595    DoLog(0) && (Log() << Verbose(0) << "Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl);
    593596    LocalBackEdgeStack = new StackClass<bond *> (MolecularWalker->Leaf->BondCount);
    594597//    // check the list of local atoms for debugging
     
    599602//      else
    600603//        Log() << Verbose(0) << "\t" << ListOfLocalAtoms[FragmentCounter][i]->Name;
    601     Log() << Verbose(0) << "Gathering local back edges for subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl;
     604    DoLog(0) && (Log() << Verbose(0) << "Gathering local back edges for subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl);
    602605    MolecularWalker->Leaf->PickLocalBackEdges(ListOfLocalAtoms[FragmentCounter++], BackEdgeStack, LocalBackEdgeStack);
    603     Log() << Verbose(0) << "Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl;
     606    DoLog(0) && (Log() << Verbose(0) << "Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl);
    604607    MolecularWalker->Leaf->CyclicStructureAnalysis(LocalBackEdgeStack, MinimumRingSize);
    605     Log() << Verbose(0) << "Done with Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl;
     608    DoLog(0) && (Log() << Verbose(0) << "Done with Analysing the cycles of subgraph " << MolecularWalker->Leaf << " with nr. " << FragmentCounter << "." << endl);
    606609    delete(LocalBackEdgeStack);
    607610  }
     
    634637    while (MolecularWalker->next != NULL) {
    635638      MolecularWalker = MolecularWalker->next;
    636       Log() << Verbose(1) << "Fragmenting subgraph " << MolecularWalker << "." << endl;
     639      DoLog(1) && (Log() << Verbose(1) << "Fragmenting subgraph " << MolecularWalker << "." << endl);
    637640      //MolecularWalker->Leaf->OutputListOfBonds(out);  // output atom::ListOfBonds for debugging
    638641      if (MolecularWalker->Leaf->first->next != MolecularWalker->Leaf->last) {
    639642        // call BOSSANOVA method
    640         Log() << Verbose(0) << endl << " ========== BOND ENERGY of subgraph " << FragmentCounter << " ========================= " << endl;
     643        DoLog(0) && (Log() << Verbose(0) << endl << " ========== BOND ENERGY of subgraph " << FragmentCounter << " ========================= " << endl);
    641644        MolecularWalker->Leaf->FragmentBOSSANOVA(FragmentList[FragmentCounter], RootStack[FragmentCounter], MinimumRingSize);
    642645      } else {
    643         eLog() << Verbose(1) << "Subgraph " << MolecularWalker << " has no atoms!" << endl;
     646        DoeLog(1) && (eLog()<< Verbose(1) << "Subgraph " << MolecularWalker << " has no atoms!" << endl);
    644647      }
    645648      FragmentCounter++;  // next fragment list
    646649    }
    647650  }
    648   Log() << Verbose(2) << "CheckOrder is " << CheckOrder << "." << endl;
     651  DoLog(2) && (Log() << Verbose(2) << "CheckOrder is " << CheckOrder << "." << endl);
    649652  delete[](RootStack);
    650653  delete[](AtomMask);
     
    677680  for(Graph::iterator runner = TotalGraph.begin(); runner != TotalGraph.end(); runner++) {
    678681    KeySet test = (*runner).first;
    679     Log() << Verbose(0) << "Fragment No." << (*runner).second.first << " with TEFactor " << (*runner).second.second << "." << endl;
     682    DoLog(0) && (Log() << Verbose(0) << "Fragment No." << (*runner).second.first << " with TEFactor " << (*runner).second.second << "." << endl);
    680683    BondFragments->insert(StoreFragmentFromKeySet(test, configuration));
    681684    k++;
    682685  }
    683   Log() << Verbose(0) << k << "/" << BondFragments->ListOfMolecules.size() << " fragments generated from the keysets." << endl;
     686  DoLog(0) && (Log() << Verbose(0) << k << "/" << BondFragments->ListOfMolecules.size() << " fragments generated from the keysets." << endl);
    684687
    685688  // ===== 9. Save fragments' configuration and keyset files et al to disk ===
     
    688691    CreateMappingLabelsToConfigSequence(SortIndex);
    689692
    690     Log() << Verbose(1) << "Writing " << BondFragments->ListOfMolecules.size() << " possible bond fragmentation configs" << endl;
     693    DoLog(1) && (Log() << Verbose(1) << "Writing " << BondFragments->ListOfMolecules.size() << " possible bond fragmentation configs" << endl);
    691694    if (BondFragments->OutputConfigForListOfFragments(configuration, SortIndex))
    692       Log() << Verbose(1) << "All configs written." << endl;
     695      DoLog(1) && (Log() << Verbose(1) << "All configs written." << endl);
    693696    else
    694       Log() << Verbose(1) << "Some config writing failed." << endl;
     697      DoLog(1) && (Log() << Verbose(1) << "Some config writing failed." << endl);
    695698
    696699    // store force index reference file
     
    701704
    702705    // store Adjacency file
    703     StoreAdjacencyToFile(configuration->configpath);
     706    char *filename = Malloc<char> (MAXSTRINGSIZE, "molecule::FragmentMolecule - *filename");
     707    strcpy(filename, FRAGMENTPREFIX);
     708    strcat(filename, ADJACENCYFILE);
     709    StoreAdjacencyToFile(configuration->configpath, filename);
     710    Free(&filename);
    704711
    705712    // store Hydrogen saturation correction file
     
    713720
    714721    // free memory for bond part
    715     Log() << Verbose(1) << "Freeing bond memory" << endl;
     722    DoLog(1) && (Log() << Verbose(1) << "Freeing bond memory" << endl);
    716723    delete(FragmentList); // remove bond molecule from memory
    717724    Free(&SortIndex);
    718725  } else {
    719     Log() << Verbose(1) << "FragmentList is zero on return, splitting failed." << endl;
     726    DoLog(1) && (Log() << Verbose(1) << "FragmentList is zero on return, splitting failed." << endl);
    720727  }
    721728  delete(BondFragments);
    722   Log() << Verbose(0) << "End of bond fragmentation." << endl;
     729  DoLog(0) && (Log() << Verbose(0) << "End of bond fragmentation." << endl);
    723730
    724731  return ((int)(!FragmentationToDo)+1);    // 1 - continue, 2 - stop (no fragmentation occured)
     
    739746  line << path << "/" << FRAGMENTPREFIX << ORDERATSITEFILE;
    740747  file.open(line.str().c_str());
    741   Log() << Verbose(1) << "Writing OrderAtSite " << ORDERATSITEFILE << " ... " << endl;
     748  DoLog(1) && (Log() << Verbose(1) << "Writing OrderAtSite " << ORDERATSITEFILE << " ... " << endl);
    742749  if (file != NULL) {
    743750    ActOnAllAtoms( &atom::OutputOrder, &file );
    744751    file.close();
    745     Log() << Verbose(1) << "done." << endl;
     752    DoLog(1) && (Log() << Verbose(1) << "done." << endl);
    746753    return true;
    747754  } else {
    748     Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl;
     755    DoLog(1) && (Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl);
    749756    return false;
    750757  }
     
    767774  ifstream file;
    768775
    769   Log() << Verbose(1) << "Begin of ParseOrderAtSiteFromFile" << endl;
     776  DoLog(1) && (Log() << Verbose(1) << "Begin of ParseOrderAtSiteFromFile" << endl);
    770777  line << path << "/" << FRAGMENTPREFIX << ORDERATSITEFILE;
    771778  file.open(line.str().c_str());
     
    788795    SetAtomValueToIndexedArray( MaxArray, &atom::nr, &atom::MaxOrder );
    789796
    790     Log() << Verbose(1) << "done." << endl;
     797    DoLog(1) && (Log() << Verbose(1) << "done." << endl);
    791798    status = true;
    792799  } else {
    793     Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl;
     800    DoLog(1) && (Log() << Verbose(1) << "failed to open file " << line.str() << "." << endl);
    794801    status = false;
    795802  }
     
    797804  Free(&MaxArray);
    798805
    799   Log() << Verbose(1) << "End of ParseOrderAtSiteFromFile" << endl;
     806  DoLog(1) && (Log() << Verbose(1) << "End of ParseOrderAtSiteFromFile" << endl);
    800807  return status;
    801808};
     
    814821  int SP, Removal;
    815822
    816   Log() << Verbose(2) << "Looking for removal candidate." << endl;
     823  DoLog(2) && (Log() << Verbose(2) << "Looking for removal candidate." << endl);
    817824  SP = -1; //0;  // not -1, so that Root is never removed
    818825  Removal = -1;
     
    841848
    842849  Leaf->BondDistance = mol->BondDistance;
    843   for(int i=NDIM*2;i--;)
    844     Leaf->cell_size[i] = mol->cell_size[i];
    845850
    846851  // first create the minimal set of atoms from the KeySet
     
    901906      }
    902907    } else {
    903       eLog() << Verbose(1) << "Son " << Runner->Name << " has father " << FatherOfRunner->Name << " but its entry in SonList is " << SonList[FatherOfRunner->nr] << "!" << endl;
     908      DoeLog(1) && (eLog()<< Verbose(1) << "Son " << Runner->Name << " has father " << FatherOfRunner->Name << " but its entry in SonList is " << SonList[FatherOfRunner->nr] << "!" << endl);
    904909    }
    905910    if ((LonelyFlag) && (Leaf->AtomCount > 1)) {
    906       Log() << Verbose(0) << *Runner << "has got bonds only to hydrogens!" << endl;
     911      DoLog(0) && (Log() << Verbose(0) << *Runner << "has got bonds only to hydrogens!" << endl);
    907912    }
    908913#ifdef ADDHYDROGEN
     
    10511056    TouchedList[j] = -1;
    10521057  }
    1053   Log() << Verbose(2) << "Remaining local nr.s on snake stack are: ";
     1058  DoLog(2) && (Log() << Verbose(2) << "Remaining local nr.s on snake stack are: ");
    10541059  for(KeySet::iterator runner = FragmentSet->begin(); runner != FragmentSet->end(); runner++)
    1055     Log() << Verbose(0) << (*runner) << " ";
    1056   Log() << Verbose(0) << endl;
     1060    DoLog(0) && (Log() << Verbose(0) << (*runner) << " ");
     1061  DoLog(0) && (Log() << Verbose(0) << endl);
    10571062  TouchedIndex = 0; // set Index to 0 for list of atoms added on this level
    10581063};
     
    11311136        Log() << Verbose(1+verbosity) << "Enough items on stack for a fragment!" << endl;
    11321137        // store fragment as a KeySet
    1133         Log() << Verbose(2) << "Found a new fragment[" << FragmentSearch->FragmentCounter << "], local nr.s are: ";
     1138        DoLog(2) && (Log() << Verbose(2) << "Found a new fragment[" << FragmentSearch->FragmentCounter << "], local nr.s are: ");
    11341139        for(KeySet::iterator runner = FragmentSearch->FragmentSet->begin(); runner != FragmentSearch->FragmentSet->end(); runner++)
    1135           Log() << Verbose(0) << (*runner) << " ";
    1136         Log() << Verbose(0) << endl;
     1140          DoLog(0) && (Log() << Verbose(0) << (*runner) << " ");
     1141        DoLog(0) && (Log() << Verbose(0) << endl);
    11371142        //if (!CheckForConnectedSubgraph(FragmentSearch->FragmentSet))
    1138           //eLog() << Verbose(1) << "The found fragment is not a connected subgraph!" << endl;
     1143          //DoeLog(1) && (eLog()<< Verbose(1) << "The found fragment is not a connected subgraph!" << endl);
    11391144        InsertFragmentIntoGraph(FragmentSearch);
    11401145      }
     
    12161221{
    12171222  bond *Binder = NULL;
    1218   Log() << Verbose(0) << "Free'ing all found lists. and resetting index lists" << endl;
     1223  DoLog(0) && (Log() << Verbose(0) << "Free'ing all found lists. and resetting index lists" << endl);
    12191224  for(int i=Order;i--;) {
    1220     Log() << Verbose(1) << "Current SP level is " << i << ": ";
     1225    DoLog(1) && (Log() << Verbose(1) << "Current SP level is " << i << ": ");
    12211226    Binder = FragmentSearch.BondsPerSPList[2*i];
    12221227    while (Binder->next != FragmentSearch.BondsPerSPList[2*i+1]) {
     
    12291234    cleanup(FragmentSearch.BondsPerSPList[2*i], FragmentSearch.BondsPerSPList[2*i+1]);
    12301235    // also start and end node
    1231     Log() << Verbose(0) << "cleaned." << endl;
     1236    DoLog(0) && (Log() << Verbose(0) << "cleaned." << endl);
    12321237  }
    12331238};
     
    12591264  int SP = -1;
    12601265
    1261   Log() << Verbose(0) << "Starting BFS analysis ..." << endl;
     1266  DoLog(0) && (Log() << Verbose(0) << "Starting BFS analysis ..." << endl);
    12621267  for (SP = 0; SP < (Order-1); SP++) {
    1263     Log() << Verbose(1) << "New SP level reached: " << SP << ", creating new SP list with " << FragmentSearch.BondsPerSPCount[SP] << " item(s)";
     1268    DoLog(1) && (Log() << Verbose(1) << "New SP level reached: " << SP << ", creating new SP list with " << FragmentSearch.BondsPerSPCount[SP] << " item(s)");
    12641269    if (SP > 0) {
    1265       Log() << Verbose(0) << ", old level closed with " << FragmentSearch.BondsPerSPCount[SP-1] << " item(s)." << endl;
     1270      DoLog(0) && (Log() << Verbose(0) << ", old level closed with " << FragmentSearch.BondsPerSPCount[SP-1] << " item(s)." << endl);
    12661271      FragmentSearch.BondsPerSPCount[SP] = 0;
    12671272    } else
    1268       Log() << Verbose(0) << "." << endl;
     1273      DoLog(0) && (Log() << Verbose(0) << "." << endl);
    12691274
    12701275    RemainingWalkers = FragmentSearch.BondsPerSPCount[SP];
     
    12761281      Predecessor = CurrentEdge->leftatom;    // ... and leftatom is predecessor
    12771282      AtomKeyNr = Walker->nr;
    1278       Log() << Verbose(0) << "Current Walker is: " << *Walker << " with nr " << Walker->nr << " and SP of " << SP << ", with " << RemainingWalkers << " remaining walkers on this level." << endl;
     1283      DoLog(0) && (Log() << Verbose(0) << "Current Walker is: " << *Walker << " with nr " << Walker->nr << " and SP of " << SP << ", with " << RemainingWalkers << " remaining walkers on this level." << endl);
    12791284      // check for new sp level
    12801285      // go through all its bonds
    1281       Log() << Verbose(1) << "Going through all bonds of Walker." << endl;
     1286      DoLog(1) && (Log() << Verbose(1) << "Going through all bonds of Walker." << endl);
    12821287      for (BondList::const_iterator Runner = Walker->ListOfBonds.begin(); Runner != Walker->ListOfBonds.end(); (++Runner)) {
    12831288        OtherWalker = (*Runner)->GetOtherAtom(Walker);
     
    12871292  #endif
    12881293                                                              ) {  // skip hydrogens and restrict to fragment
    1289           Log() << Verbose(2) << "Current partner is " << *OtherWalker << " with nr " << OtherWalker->nr << " in bond " << *(*Runner) << "." << endl;
     1294          DoLog(2) && (Log() << Verbose(2) << "Current partner is " << *OtherWalker << " with nr " << OtherWalker->nr << " in bond " << *(*Runner) << "." << endl);
    12901295          // set the label if not set (and push on root stack as well)
    12911296          if ((OtherWalker != Predecessor) && (OtherWalker->GetTrueFather()->nr > RootKeyNr)) { // only pass through those with label bigger than Root's
    12921297            FragmentSearch.ShortestPathList[OtherWalker->nr] = SP+1;
    1293             Log() << Verbose(3) << "Set Shortest Path to " << FragmentSearch.ShortestPathList[OtherWalker->nr] << "." << endl;
     1298            DoLog(3) && (Log() << Verbose(3) << "Set Shortest Path to " << FragmentSearch.ShortestPathList[OtherWalker->nr] << "." << endl);
    12941299            // add the bond in between to the SP list
    12951300            Binder = new bond(Walker, OtherWalker); // create a new bond in such a manner, that bond::rightatom is always the one more distant
    12961301            add(Binder, FragmentSearch.BondsPerSPList[2*(SP+1)+1]);
    12971302            FragmentSearch.BondsPerSPCount[SP+1]++;
    1298             Log() << Verbose(3) << "Added its bond to SP list, having now " << FragmentSearch.BondsPerSPCount[SP+1] << " item(s)." << endl;
     1303            DoLog(3) && (Log() << Verbose(3) << "Added its bond to SP list, having now " << FragmentSearch.BondsPerSPCount[SP+1] << " item(s)." << endl);
    12991304          } else {
    13001305            if (OtherWalker != Predecessor)
    1301               Log() << Verbose(3) << "Not passing on, as index of " << *OtherWalker << " " << OtherWalker->GetTrueFather()->nr << " is smaller than that of Root " << RootKeyNr << "." << endl;
     1306              DoLog(3) && (Log() << Verbose(3) << "Not passing on, as index of " << *OtherWalker << " " << OtherWalker->GetTrueFather()->nr << " is smaller than that of Root " << RootKeyNr << "." << endl);
    13021307            else
    1303               Log() << Verbose(3) << "This is my predecessor " << *Predecessor << "." << endl;
     1308              DoLog(3) && (Log() << Verbose(3) << "This is my predecessor " << *Predecessor << "." << endl);
    13041309          }
    13051310        } else Log() << Verbose(2) << "Is not in the restricted keyset or skipping hydrogen " << *OtherWalker << "." << endl;
     
    13171322{
    13181323  bond *Binder = NULL;
    1319   Log() << Verbose(0) << "Printing all found lists." << endl;
     1324  DoLog(0) && (Log() << Verbose(0) << "Printing all found lists." << endl);
    13201325  for(int i=1;i<Order;i++) {    // skip the root edge in the printing
    13211326    Binder = FragmentSearch.BondsPerSPList[2*i];
    1322     Log() << Verbose(1) << "Current SP level is " << i << "." << endl;
     1327    DoLog(1) && (Log() << Verbose(1) << "Current SP level is " << i << "." << endl);
    13231328    while (Binder->next != FragmentSearch.BondsPerSPList[2*i+1]) {
    13241329      Binder = Binder->next;
    1325       Log() << Verbose(2) << *Binder << endl;
     1330      DoLog(2) && (Log() << Verbose(2) << *Binder << endl);
    13261331    }
    13271332  }
     
    13671372  int Counter = FragmentSearch.FragmentCounter; // mark current value of counter
    13681373
    1369   Log() << Verbose(0) << endl;
    1370   Log() << Verbose(0) << "Begin of PowerSetGenerator with order " << Order << " at Root " << *FragmentSearch.Root << "." << endl;
     1374  DoLog(0) && (Log() << Verbose(0) << endl);
     1375  DoLog(0) && (Log() << Verbose(0) << "Begin of PowerSetGenerator with order " << Order << " at Root " << *FragmentSearch.Root << "." << endl);
    13711376
    13721377  SetSPList(Order, FragmentSearch);
     
    13801385  // creating fragments with the found edge sets  (may be done in reverse order, faster)
    13811386  int SP = CountNumbersInBondsList(Order, FragmentSearch);
    1382   Log() << Verbose(0) << "Total number of edges is " << SP << "." << endl;
     1387  DoLog(0) && (Log() << Verbose(0) << "Total number of edges is " << SP << "." << endl);
    13831388  if (SP >= (Order-1)) {
    13841389    // start with root (push on fragment stack)
    1385     Log() << Verbose(0) << "Starting fragment generation with " << *FragmentSearch.Root << ", local nr is " << FragmentSearch.Root->nr << "." << endl;
     1390    DoLog(0) && (Log() << Verbose(0) << "Starting fragment generation with " << *FragmentSearch.Root << ", local nr is " << FragmentSearch.Root->nr << "." << endl);
    13861391    FragmentSearch.FragmentSet->clear();
    1387     Log() << Verbose(0) << "Preparing subset for this root and calling generator." << endl;
     1392    DoLog(0) && (Log() << Verbose(0) << "Preparing subset for this root and calling generator." << endl);
    13881393
    13891394    // prepare the subset and call the generator
     
    13951400    Free(&BondsList);
    13961401  } else {
    1397     Log() << Verbose(0) << "Not enough total number of edges to build " << Order << "-body fragments." << endl;
     1402    DoLog(0) && (Log() << Verbose(0) << "Not enough total number of edges to build " << Order << "-body fragments." << endl);
    13981403  }
    13991404
    14001405  // as FragmentSearch structure is used only once, we don't have to clean it anymore
    14011406  // remove root from stack
    1402   Log() << Verbose(0) << "Removing root again from stack." << endl;
     1407  DoLog(0) && (Log() << Verbose(0) << "Removing root again from stack." << endl);
    14031408  FragmentSearch.FragmentSet->erase(FragmentSearch.Root->nr);
    14041409
     
    14071412
    14081413  // return list
    1409   Log() << Verbose(0) << "End of PowerSetGenerator." << endl;
     1414  DoLog(0) && (Log() << Verbose(0) << "End of PowerSetGenerator." << endl);
    14101415  return (FragmentSearch.FragmentCounter - Counter);
    14111416};
     
    14531458  atom *Walker = NULL;
    14541459
    1455   Log() << Verbose(0) << "Combining the lists of all orders per order and finally into a single one." << endl;
     1460  DoLog(0) && (Log() << Verbose(0) << "Combining the lists of all orders per order and finally into a single one." << endl);
    14561461  if (FragmentList == NULL) {
    14571462    FragmentList = new Graph;
     
    14861491void FreeAllOrdersList(Graph ***FragmentLowerOrdersList, KeyStack &RootStack, molecule *mol)
    14871492{
    1488   Log() << Verbose(1) << "Free'ing the lists of all orders per order." << endl;
     1493  DoLog(1) && (Log() << Verbose(1) << "Free'ing the lists of all orders per order." << endl);
    14891494  int RootNr = 0;
    14901495  int RootKeyNr = 0;
     
    15391544  struct UniqueFragments FragmentSearch;
    15401545
    1541   Log() << Verbose(0) << "Begin of FragmentBOSSANOVA." << endl;
     1546  DoLog(0) && (Log() << Verbose(0) << "Begin of FragmentBOSSANOVA." << endl);
    15421547
    15431548  // FragmentLowerOrdersList is a 2D-array of pointer to MoleculeListClass objects, one dimension represents the ANOVA expansion of a single order (i.e. 5)
     
    15891594
    15901595      // create top order where nothing is reduced
    1591       Log() << Verbose(0) << "==============================================================================================================" << endl;
    1592       Log() << Verbose(0) << "Creating KeySets of Bond Order " << Order << " for " << *Walker << ", " << (RootStack.size()-RootNr) << " Roots remaining." << endl; // , NumLevels is " << NumLevels << "
     1596      DoLog(0) && (Log() << Verbose(0) << "==============================================================================================================" << endl);
     1597      DoLog(0) && (Log() << Verbose(0) << "Creating KeySets of Bond Order " << Order << " for " << *Walker << ", " << (RootStack.size()-RootNr) << " Roots remaining." << endl); // , NumLevels is " << NumLevels << "
    15931598
    15941599      // Create list of Graphs of current Bond Order (i.e. F_{ij})
     
    16001605
    16011606      // output resulting number
    1602       Log() << Verbose(1) << "Number of resulting KeySets is: " << NumMoleculesOfOrder[RootNr] << "." << endl;
     1607      DoLog(1) && (Log() << Verbose(1) << "Number of resulting KeySets is: " << NumMoleculesOfOrder[RootNr] << "." << endl);
    16031608      if (NumMoleculesOfOrder[RootNr] != 0) {
    16041609        NumMolecules = 0;
     
    16171622    }
    16181623  }
    1619   Log() << Verbose(0) << "==============================================================================================================" << endl;
    1620   Log() << Verbose(1) << "Total number of resulting molecules is: " << TotalNumMolecules << "." << endl;
    1621   Log() << Verbose(0) << "==============================================================================================================" << endl;
     1624  DoLog(0) && (Log() << Verbose(0) << "==============================================================================================================" << endl);
     1625  DoLog(1) && (Log() << Verbose(1) << "Total number of resulting molecules is: " << TotalNumMolecules << "." << endl);
     1626  DoLog(0) && (Log() << Verbose(0) << "==============================================================================================================" << endl);
    16221627
    16231628  // cleanup FragmentSearch structure
     
    16371642  Free(&NumMoleculesOfOrder);
    16381643
    1639   Log() << Verbose(0) << "End of FragmentBOSSANOVA." << endl;
     1644  DoLog(0) && (Log() << Verbose(0) << "End of FragmentBOSSANOVA." << endl);
    16401645};
    16411646
     
    16521657  atom *Walker = NULL;
    16531658  atom *OtherWalker = NULL;
     1659  double * const cell_size = World::get()->cell_size;
    16541660  double *matrix = ReturnFullMatrixforSymmetric(cell_size);
    16551661  enum Shading *ColorList = NULL;
     
    16601666  bool flag = true;
    16611667
    1662   Log() << Verbose(2) << "Begin of ScanForPeriodicCorrection." << endl;
     1668  DoLog(2) && (Log() << Verbose(2) << "Begin of ScanForPeriodicCorrection." << endl);
    16631669
    16641670  ColorList = Calloc<enum Shading>(AtomCount, "molecule::ScanForPeriodicCorrection: *ColorList");
     
    16781684          OtherBinder = Binder->next; // note down binding partner for later re-insertion
    16791685          unlink(Binder);   // unlink bond
    1680           Log() << Verbose(2) << "Correcting at bond " << *Binder << "." << endl;
     1686          DoLog(2) && (Log() << Verbose(2) << "Correcting at bond " << *Binder << "." << endl);
    16811687          flag = true;
    16821688          break;
     
    16941700      //Log() << Verbose(3) << "Translation vector is ";
    16951701      Translationvector.Output();
    1696       Log() << Verbose(0) << endl;
     1702      DoLog(0) && (Log() << Verbose(0) << endl);
    16971703      // apply to all atoms of first component via BFS
    16981704      for (int i=AtomCount;i--;)
     
    17161722      link(Binder, OtherBinder);
    17171723    } else {
    1718       Log() << Verbose(3) << "No corrections for this fragment." << endl;
     1724      DoLog(3) && (Log() << Verbose(3) << "No corrections for this fragment." << endl);
    17191725    }
    17201726    //delete(CompStack);
     
    17251731  Free(&ColorList);
    17261732  Free(&matrix);
    1727   Log() << Verbose(2) << "End of ScanForPeriodicCorrection." << endl;
    1728 };
     1733  DoLog(2) && (Log() << Verbose(2) << "End of ScanForPeriodicCorrection." << endl);
     1734};
Note: See TracChangeset for help on using the changeset viewer.