#include "QFramework/TQFolder.h"
#include "QFramework/TQSampleFolder.h"
#include "QFramework/TQSampleDataReader.h"
#include "QFramework/TQSampleVisitor.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQListUtils.h"
#include "TObjArray.h"
#include "TObjString.h"
#include "QFramework/TQIterator.h"
#include "TIterator.h"
#include "QFramework/TQSample.h"
#include "QFramework/TQValue.h"
#include "QFramework/TQUtils.h"
#include "TList.h"
#include "TFile.h"
#include "TMath.h"
#include "TH1.h"

// #define _DEBUG_

#include "QFramework/TQLibrary.h"

#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQSampleFolder:
//
// The TQSampleFolder class is a representation of a certain group/category of event samples
// and by inheriting from the TQFolder class allows to build up a tree-like structure. Analysis 
// results (e.g. histograms or cutflow counters) corresponding to the group of samples
// represented by an instance of the TQSampleFolder class may be stored in specific sub-folders
// (instances of TQFolder) of that instance (e.g. ".histograms" or ".cutflow"). Analysis results
// are retrieved from instances of TQSampeFolder using the TQSampleDataReader class, with
// wrappers implemented in the TQSampleFolder class:
//
// - TQSampleFolder::getHistogram("<path>", "<name>", ...)
//
// - TQSampleFolder::getCounter("<path>", "<name>", ...)
//
// A new and independent instance of TQSampleFolder is created using the static method
// TQSampleFolder::newSampleFolder(...):
//
// TQSampleFolder * sf = TQSampleFolder::newSampleFolder("sf");
//
// whereas a new instance inside an existing sample folder tree can be created using
// TQSampleFolder::getSampleFolder(...): 
//
// TQSampleFolder * sf = sf->getSampleFolder("newSf+");
//
// similar to TQFolder::getFolder(...).
//
// Histograms and counter can be deleted recursively using
//
// - TQSampleFolder::deleteHistogram(...)
// - TQSampleFolder::deleteSingleCounter(...)
// - TQSampleFolder::deleteHistograms(...)
// - TQSampleFolder::deleteCounter(...)
//
// and renamed recursively using
//
// - TQSampleFolder::renameHistogram(...)
// - TQSampleFolder::renameCounter(...)
//
// Histograms and counter can be copied (optionally performing additional operations on these
// objects) using:
//
// - TQSampleFolder::copyHistogram(...)
// - TQSampleFolder::copyHistograms(...)
//
// The TQSampleFolder class provides powerful features to validate cutflow counter between
// two different instances of TQSampleFolder:
//
// - TQSampleFolder::validateAllCounter(...)
// - TQSampleFolder::validateCounter(...)
//
// Generalization of histograms and counter:
//
// Storing histograms or other analysis result objects in a sample folder tree can become very
// memory extensive if for each sample an individual instance is stored. To reduce the
// granularity of object storage and thereby the memory usage the concept of "generalization"
// has been introduced. Generalizing e.g. a histogram at some node in the sample folder tree
// will sum up and remove individual contributions within the corresponding sub-tree and store
// the final sum in the respective sample folder the generalization has taken place at:
//
// - TQSampleFolder::generalizeHistograms(...)
// - TQSampleFolder::generalizeCounter(...)
//
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQSampleFolder)

const TString TQSampleFolder::restrictSelectionTagName = TString("restrict.selected");
//__________________________________________________________________________________|___________

TQSampleFolder::TQSampleFolder() : TQFolder() {
  // Default constructor of TQSampleFolder class: a new and empty instance of
  // TQSampleFolder is created and initialized. Its name will be set to "unkown".
  // Please note: users should not use this constructor but the static factory method
  // TQSampleFolder::newSampleFolder(...). This default constructor has to be present
  // to allow ROOT's CINT to stream instances of TQSampleFolder.

  SetName("unknown");

  init();
}


//__________________________________________________________________________________|___________

TQSampleFolder::TQSampleFolder(TString name) : TQFolder(name) {
  // Default constructor of TQSampleFolder class: a new and empty instance of
  // TQSampleFolder is created and initialized. Its name will be set to the value of
  // the parameter <name> if it is a valid name.
  // Please note: users should not use this constructor but the static factory method
  // TQSampleFolder::newSampleFolder(...).

  init();
}


//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::newSampleFolder(TString name) {
  // Returns a new and empty instance of the TQSampleFolder class with name <name>
  // if <name> is a valid name and a null pointer otherwise. Please refer to the
  // documentation of the static method TQSampleFolder::isValidName(...) for details
  // on valid folder names.

  // check if <name> is a valid name for instances of TQSampleFolder
  if (isValidName(name)) {
    // create and return a new instance of TQSampleFolder with name <name>
    return new TQSampleFolder(name);
  } else {
    // return NULL pointer since <name> is not a valid folder name
    return NULL;
  }
}


//__________________________________________________________________________________|___________

TQFolder * TQSampleFolder::newInstance(const TString& name) {
  // Returns a new and empty instance of the TQSampleFolder class with name <name>
  // if <name> is a valid name and a null pointer otherwise. Please note: this method
  // does exactly the same as TQSampleFolder::newSampleFolder(...) but may be over-
  // written by sub-classes of TQSampleFolder.

  // create and return new instance of TQFolder with name <name>
  return TQSampleFolder::newSampleFolder(name.IsNull() ? this->GetName() : name.Data());
}


//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::loadLazySampleFolder(const TString& path) {
  // this function works exactly as TQSampleFolder::loadSampleFolder, with the
  // exception that all folder branches that have been externalized/splitted
  // when writing the file will remain in collapsed state until they are
  // accessed. for large files with an excessive use of
  // externalization/splitting, this will significantly speed up accessing the
  // data, since the branches are only expanded on-demand.
  //
  // please note, however, that you will only experience a total speed gain if
  // you only access small fractions of your data. if you plan to read most of
  // the file's data at some point, requiring the expansion of all branches,
  // this 'lazy' feature will only postpone the work of loading the data into
  // RAM to the point where it is accessed bringing no total speed gain.
  return TQSampleFolder::loadSampleFolder(path,true);
}


//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::loadSampleFolder(TString path, bool lazy) {
  // Loads an instance of TQSampleFolder from an external ROOT file and returns a
  // pointer to it and a NULL pointer in case of failure. The ROOT file and the key
  // within the key within the ROOT file to be read is identified by <path> which
  // has to have the form "filename:keyname", e.g. "file.root:folder".
  // If the sample folder to load is stored within a structre of TDirectory in the
  // file it can be accessed by prepending the corresponding path to the sample
  // folder name, e.g. "file.root:dir1/dir2/folder". To load only a subfolder of an
  // instance of TQSampleFolder from the ROOT file one can append the corresponding
  // path to the folder name, e.g. "file.root:folder/subfolder". In this case a
  // pointer to "subfolder" is returned which is made the root folder before.
  // 
  // the 'lazy' flag will trigger lazy loading, please refer to TQFolder::loadLazySampleFolder
  // for documentation of this feature.
  TQSampleFolder * dummy = TQSampleFolder::newSampleFolder("dummy");
  TString pathname = path;

  DEBUG("attempting to open file at path '%s'",path.Data());

  TFile* file = TQFolder::openFile(path,"READ");
  if(!file || !file->IsOpen()){
    if(file) delete file;
    ERRORclass("unable to open file '%s'", pathname.Data());
    return NULL;
  }
  
  TQSampleFolder * imported = dynamic_cast<TQSampleFolder*>(dummy->importObjectFromDirectory(file, path,!lazy,TQSampleFolder::Class()));
  
  // the sample folder to load and return
  TQSampleFolder * folder = NULL;

  // check the sample folder that has been imported and get the one to return
  if (imported){
    while (imported->getBaseSampleFolder() != dummy)
      imported = imported->getBaseSampleFolder();

    /* detach imported folder from dummy folder */
    folder = dynamic_cast<TQSampleFolder*>(imported->detachFromBase());
  }

  // delete the dummy sample folder
  delete dummy;

  /* close file and delete file pointer */
  if(folder){
    if(lazy){
      folder->setDirectoryInternal(file);
      folder->fOwnMyDir = true;
    } else {
      folder->setDirectoryInternal(NULL);
      file->Close();
      delete file;
    }
    folder->autoSetExportName();
  } else {
    file->Close();
    delete file;
  }

  // return the sample folder
  return folder;
}


//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::newSampleList(const TString& name,
                                               const TString& treeLocation, double normalization) {
  // Scans the file system for files matching the string pattern of file part in
  // <treeLocation> and returns an instance of TQSampleFolder with name <name> and
  // instances of TQSample referring to each matching file. The tree name is set
  // to the tree part in <treeLocation> and the sample normalization is set to
  // <normalization>.
  //
  // Examples:
  //
  // - TQSampleFolder * samples =
  // TQSampleFolder::newSampleList("data", "data_*.root:Tree", 1.) will create
  // a sample folder of samples for each "data_*.root" ntuple using the TTree
  // "Tree".

  // make sure the user requested a valid name
  if (!TQSampleFolder::isValidName(name)) {
    return NULL;
  }

  // read tree location
  TList * treeLocations = TQSample::splitTreeLocations(treeLocation);
  if (!treeLocations)
    return NULL;
  if (treeLocations->GetEntries() != 1) {
    delete treeLocations;
    return NULL;
  }
 
  TString thisTreeLocation = treeLocations->First()->GetName();
  delete treeLocations;

  TString pattern = TQSample::extractFilename(thisTreeLocation);
  TString treeName = TQSample::extractTreename(thisTreeLocation);

  // the sample folder to return
  TQSampleFolder * sampleFolder = NULL;

  // get the list of files matching the string pattern
  TList * files = TQUtils::getListOfFilesMatching(pattern);

  if (files) {
    sampleFolder = TQSampleFolder::newSampleFolder(name);

    // loop over the list of matching files
    TQIterator itr(files);
    while (itr.hasNext()) {

      /* full filename */
      TString fullFilename = itr.readNext()->GetName();

      /* the filename without path */
      TString filename = fullFilename;
      filename = TQFolder::getPathTail(filename);

      /* remove trailing ".root" */
      if (filename.EndsWith(".root"))
        filename.Remove(filename.Length() - 5, 5);

      /* ensure a valid name */
      TString name = TQStringUtils::makeValidIdentifier(
                                                        filename, TQSampleFolder::getValidNameCharacters(), "_");

      /* ensure a unique name */
      TString namePrefix = name;
      int i = 2;
      while (sampleFolder->hasObject(name))
        name = TString::Format("%s_n%d", namePrefix.Data(), i++);

      /* create a new sample */
      TQSample * sample = new TQSample(name);
      /* set parameter */
      sample->setTreeLocation(fullFilename + ":" + treeName);
      sample->setNormalisation(normalization);
      /* add to folder */
      sampleFolder->addSampleFolder(sample);
    }
  }

  // sort the elements (samples) within the new sample folder by name
  if (sampleFolder) {
    sampleFolder->sortByName();
  }

  // now return the new sample folder
  return sampleFolder;
}


//__________________________________________________________________________________|___________

void TQSampleFolder::init() {
  // Nothing happens here

}

//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::addSampleFolder(TQSampleFolder * sampleFolder_, TString path_, TClass * tclass) {

  /* add the new sample folder and return a pointer on its new base samplefolder */
  if(!sampleFolder_) return NULL;
  if (tclass) {
    return (TQSampleFolder*)addFolder(sampleFolder_, path_, tclass);
  } else {
    /* add the sample folder */
    TQSampleFolder * sampleFolder = (TQSampleFolder*)addFolder(sampleFolder_, path_, TQSampleFolder::Class());
    /* return the sample folder */
    return sampleFolder;
  }
 
}

//__________________________________________________________________________________|___________

int TQSampleFolder::visitMe(TQSampleVisitor * visitor, bool requireSelectionTag) {
  // recursively visit this sample (folder) with the given visitor
  return visitor->visit(this,requireSelectionTag);
}


//__________________________________________________________________________________|___________

//

int TQSampleFolder::visitSampleFolders(TQSampleVisitor * visitor, const TString& category_) {
  // Lets the sample visitor (instance of TQSampleVisitor) <visitor> visit those
  // sample folders that match the path pattern <category> and returns the number
  // visits. <category> may consists of multiple comma-separated paths and wildcards
  // "?" and "*" may be used. If an exclamation mark "!" is appended to a path pattern
  // the corresponding sample folders are visited non-recursively. This "!" feature doesn't actually work-> TODO: fix or remove comment

  // as a debugging special, it is possible to pass NULL as a visitor. in this
  // case, this function will simply print a warning for each sample folder
  // that would have been visited if a valid visitor had been provided
  
  TString category = TQStringUtils::trim(category_,TQStringUtils::getAllBlanks());//remove whitespaces at beginning and end
  
  // loop over all sample folders matching <category>
  std::set<TQSampleFolder*> selectedSet;
  TCollection* c = this->getListOfSampleFolders(category);
  if(!c) return 0;
  if(c->GetEntries() < 1) c->Add(this);
  // let the list die with the iterator (..., true)
  //Note: the following scope is needed to prevent error messages from TList
  // since the iterator is only deleted at the end of this function but the visitor 
  // might delete parts of the sampleFolder during the visit (i.e. within the return
  // statement at the end of this function). With this scope we limit the lifetime of
  // the iterator and therefore the TCollection/TList c.
  // (root containers check if their objects are already deleted when being deleted 
  // themselves even if they don't own the objects...)
  {
    TQSampleFolderIterator itr(c,true); 
    while (itr.hasNext()) {
      // visit the sample folder
      TQSampleFolder* sf = itr.readNext();
      if(!sf) continue;
      selectedSet.insert(sf);
    }
    // warning if no matching sample folder could be found
    if (itr.getCounter() == 0) {
      WARNclass("No matching sample folder for '%s' found", category.Data());
    }
  }
  
  return this->visitSampleFolders(visitor, selectedSet);
}

int TQSampleFolder::visitSampleFolders(TQSampleVisitor * visitor, const std::vector<TQSampleFolder*>& selectedFolders) {
  // wrapper function for std::set<TQSampleFolder*> variant
  std::set<TQSampleFolder*> tmp(selectedFolders.begin(), selectedFolders.end());
  return this->visitSampleFolders(visitor, tmp);
}


int TQSampleFolder::visitSampleFolders(TQSampleVisitor * visitor, const std::set<TQSampleFolder*>& selectedFolders) {
  // visit an already selected set of folders
  
  // loop over all sample folders that are selected
  
  for (TQSampleFolder* sf : selectedFolders) {
    // visit the sample folder
    if(!sf) continue;
    if(visitor){
      sf->setTagBool(TQSampleFolder::restrictSelectionTagName,true);
      //TRY(
      //  nVisits += sf->visitMe(visitor);
      //,TString::Format("An error occured while visiting the sample folder at path '%s'.",sf->getPath().Data())
      //)
    } else {
      WARNclass("cannot visit '%s' with NULL visitor!",sf->getPath().Data());
    }
  }
  
  
  //we delay the call to the actual visiting in order to ensure all folders are visited which lead up to a selected folder (instead of calling the visitMe method on the selected ones directly, see HWWATLAS-138)
	int visited = 0;
  if (visitor) {
    
    TRY(
				visited = this->visitMe(visitor,true);
				,TString::Format("An error occured while visiting the sample folders with root node '%s'.",this->getPath().Data())
				)
    //the visitors (or functions/classes called by them) may re-shape the sampleFolder structure
    //hence, we should not rely on pointers staying valid. 
    std::set<TQSampleFolder*> remaining;
    this->searchObjects<TQSampleFolder>(selectedFolders, remaining);
    //do some cleanup to not spam the output files with too many technical tags:
    for (TQSampleFolder* sf : remaining) {
      //TQSampleFolder* sf = itr.readNext();
      if (!sf) continue;
      sf->removeTag(TQSampleFolder::restrictSelectionTagName);
    }
  }
  
  // return the number of visits
  return visited;
}


//__________________________________________________________________________________|___________

TList * TQSampleFolder::getListOfSampleFolders(const TString& path_, TClass * tclass, bool toplevelOnly) {
  /* get a list of sample folders */
  DEBUGclass(TString::Format("getting list of sample folders for path '%s'",path_.Data()));  
  if (tclass) {
    return getListOfFolders(path_, tclass, toplevelOnly);
  } else {
    /* get the list */
    TList * list = getListOfFolders(path_, TQSampleFolder::Class(), toplevelOnly);
    /* return the list */
    return list;
  }
 
}

//__________________________________________________________________________________|___________

std::vector<TString> TQSampleFolder::getSampleFolderPaths(const TString& path_, TClass * tClass, bool toplevelOnly) {
  return getFolderPaths(path_,tClass ? tClass : TQSampleFolder::Class() , toplevelOnly);
}

//__________________________________________________________________________________|___________

std::vector<TString> TQSampleFolder::getSampleFolderPathsWildcarded(const TString& path_, TClass * tClass, bool toplevelOnly) {
  return getFolderPathsWildcarded(path_,tClass ? tClass : TQSampleFolder::Class() , toplevelOnly);
}

//__________________________________________________________________________________|___________

std::vector<TString> TQSampleFolder::getSamplePaths(const TString& path_, TClass * tClass, bool toplevelOnly) {
  return getFolderPaths(path_,tClass ? tClass : TQSample::Class() , toplevelOnly);
}

//__________________________________________________________________________________|___________

std::vector<TString> TQSampleFolder::getSamplePathsWildcarded(const TString& path_, TClass * tClass, bool toplevelOnly) {
  return getFolderPathsWildcarded(path_,tClass ? tClass : TQSample::Class() , toplevelOnly);
}

//__________________________________________________________________________________|___________

TQSample * TQSampleFolder::getSample(const TString& path) {
  // Returns the sample (instance of TQSample) that matches the path pattern <path>
  // and a NULL pointer in case no match can be found. If more than one sample matches
  // <path> (because wildcards are used) the first match is returned.

  return (TQSample*)getFolder(path, TQSample::Class());
}


//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::getBaseSampleFolder() {
  // Returns a pointer to the base sample folder and a NULL pointer if either there
  // is no base folder or the base folder is not an instance of TQSampleFolder.

  // get the base folder
  TQFolder * base = getBase();

  // check if the base folder is an instance of TQSampleFolder
  if (base && base->InheritsFrom(TQSampleFolder::Class())) {
    // the base folder is a sample folder: return a pointer to it
    return (TQSampleFolder*)base;
  } else {
    // there is no base folder or it is no sample folder: return a NULL pointer
    return NULL;
  }
}

//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::getRootSampleFolder() {
  // Returns the a pointer to the instance of TQSampleFolder which is the root of
  // this samplefolder hierarchy (not necessarily the root of the folder hierarchy).

  // get the base sample folder
  TQSampleFolder * base = getBaseSampleFolder();

  if (base) {
    // there is a base sample folder: return the root sample folder of it
    return base->getRootSampleFolder();
  } else {
    // there is no base sample folder: this is the root
    return this;
  }
}


//__________________________________________________________________________________|___________

std::vector<TQSampleFolder*> TQSampleFolder::getSampleFoldersWithTagsEquivalentTo(const std::vector<const TQValue*>& tags) {
  // wrapper for TQFolder variant (returned set is reduced by TQFolders returned by 
  // the TQFolder variant of this method (getFoldersWithTagsEquivalentTo) which are
  // not also TQSampleFolders.
  std::vector<TQFolder*> asFolders = this->getFoldersWithTagsEquivalentTo(tags);
  std::vector<TQSampleFolder*> asSampleFolders = {};
  for (TQFolder* f : asFolders) {
    if (f->InheritsFrom(TQSampleFolder::Class())) {
      asSampleFolders.push_back(static_cast<TQSampleFolder*>(f));
    }
  }
  return asSampleFolders;
}

//__________________________________________________________________________________|___________

std::vector<TQSampleFolder*> TQSampleFolder::getSampleFoldersWithTagEquivalentTo(const TQValue* tag) {
  // wrapper for TQFolder variant (returned set is reduced by TQFolders returned by 
  // the TQFolder variant of this method (getFoldersWithTagEquivalentTo) which are
  // not also TQSampleFolders.
  std::vector<TQFolder*> asFolders = this->getFoldersWithTagEquivalentTo(tag);
  std::vector<TQSampleFolder*> asSampleFolders = {};
  for (TQFolder* f : asFolders) {
    if (f->InheritsFrom(TQSampleFolder::Class())) {
      //asSampleFolders.insert(static_cast<TQSampleFolder*>(f));
      asSampleFolders.push_back(static_cast<TQSampleFolder*>(f));
    }
  }
  return asSampleFolders;
}

std::vector<TQSampleFolder*> TQSampleFolder::getSampleFoldersWithTagEquivalentTo(const TQValue& tag) {
  return this->getSampleFoldersWithTagEquivalentTo(&tag);
}

//__________________________________________________________________________________|___________

TList * TQSampleFolder::getListOfSamples(const TString& path) {
  // Returns a list (instance of TList) of samples (instances of TQSample) withing
  // this sample folder matching the path pattern <path>. If no matching sample
  // can be found a NULL pointer is returned.

  // get the list of samples folders matching <path> (this also includes
  // the sample we are interested in since TQSampleFolder <-- TQSample)
  TQSampleDataReader rd(this);
  TList * samples = rd.getListOfSampleFolders(path,TQSample::Class());
 
  // return the list of samples
  return samples;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::printListOfSamples(const TString& path) {
  // prints a list of samples (instances of TQSample) withing
  // this sample folder matching the path pattern <path>. 
  // the number of matched samples is returned
  TList* samples = this->getListOfSamples(path);
  if(!samples) return -1;
  int retval = samples->GetEntries();
  TQSampleIterator itr(samples,true);
  while(itr.hasNext()){
    TQSample* s = itr.readNext();
    if(!s) continue;
    std::cout << s->getName() << "\t" << s->getPath() << std::endl;
  }
  return retval;
}

//__________________________________________________________________________________|___________

TQSampleFolder * TQSampleFolder::getSampleFolder(TString path_, TClass * tclass) {
  // Returns the sample folder (instance of TQSampleFolder) that matches the path
  // pattern <path_> and a NULL pointer in case no match can be found. If more than
  // one sample folder matches <path_> (because wildcards are used) the first match
  // is returned. Additionally, a new instance of TQSampleFolder is created as
  // requested if it does not already exist and a "+" has been appended to <path_>.
  // The path <path_> may be built up from any number of path levels in either case
  // and an arbitrary number of nested sample folders may be created by appending
  // one "+" to the full path.
  //
  // Examples:
  //
  // - getSampleFolder("subfolder") returns a pointer to the instance of TQSampleFolder
  // named "subfolder" within this instance of TQSampleFolder if it does exist.
  // - getSampleFolder("subfolder+") returns a pointer to the instance of TQSampleFolder
  // named "subfolder" within this instance of TQSampleFolder and does create it if
  // it does not exist
  // - getSampleFolder("subfolder/fol2+") returns a pointer to the instance of
  // TQSampleFolder named "fol2" within "subfolder" (in turn within this instance of
  // TQSampleFolder) and does create it if it does not exist

  if (tclass) {
    return (TQSampleFolder*)getFolder(path_, tclass);
  } else {
    /* get the sample folder */
    TQSampleFolder * sampleFolder = (TQSampleFolder*)getFolder(path_, TQSampleFolder::Class());
    /* return the sample folder */
    return sampleFolder;
  }
}


//__________________________________________________________________________________|___________

int TQSampleFolder::getNSampleFolders(bool recursive) {
  // Returns the number of sample folders (instances of TQSampleFolder) within this
  // instance of TQSampleFolder. If <recursive> == true not only sample folders
  // within this instance but also recursively within sub sample folder will be
  // counted.

  // return the number of sample folders in this sample folder
  return getNElements(recursive, TQSampleFolder::Class());
}


//__________________________________________________________________________________|___________

int TQSampleFolder::getNSamples(bool recursive) {
  // Returns the number of samples (instances of TQSample) within this instance of
  // TQSampleFolder. If <recursive> == true not only samples within this instance
  // but also recursively within sub sample folder will be counted.

  // return the number of samples in this sample folder
  return getNElements(recursive, TQSample::Class());
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::hasHistogram(TString path, TString name, TString options) {
  // Returns true if a histogram <name> in <path> can be retrieved with options
  // <options> using TQSampleFolder::getHistogram(...).
  // [Please note: this is a wrapper to TQSampleDataReader::hasHistogram(...).]

  // the reader to retrieve histograms
  TQSampleDataReader rd(this);

  // return true if the histogram exists
  return rd.hasHistogram(path, name, options);
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::hasCounter(TString path, TString name, TString options) {
  // Returns true if a counter <name> in <path> can be retrieved with options
  // <options> using TQSampleFolder::getCounter(...).
  // [Please note: this is a wrapper to TQSampleDataReader::hasCounter(...).]

  // the reader to retrieve counter
  TQSampleDataReader rd(this);

  // return true if the counter exists
  return rd.hasCounter(path, name, options);
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::renameLocalObject(TString category,
                                       TClass * classType, TString oldName, TString newName) {
  // Renames a local object within subfolder <category> and name <oldName> into
  // <newName> also allowing to move the object to a different subfolder and returns
  // true in case of success and false otherwise. This method is used by
  // TQSampleFolder::renameLocalHistogram(...) and TQSampleFolder::
  // renameLocalCounter(...) to rename local histograms and counters.

  // get the local object
  TObject * obj = getObject(TQFolder::concatPaths(category, oldName));
  if (obj && obj->InheritsFrom(classType)) {

    // make sure the new object name is valid
    if (!TQFolder::isValidPath(newName, false, false)) {
      return false;
    }

    // remove the old local object (don't delete it)
    removeObject(TQFolder::concatPaths(category, oldName));

    // delete a potentially existing local object with newName
    deleteLocalObject(category, newName);

    // store the old object under new name
    TQFolder * folder = getFolder(TQFolder::concatPaths(category,
                                                        TQFolder::getPathWithoutTail(newName)) + "+");
    if (folder) {
      folder->addObject(obj, "::" + TQFolder::getPathTail(newName));
      return true;
    } else {
      // unknown problem (we failed to obtain the new folder to put the histogram in
      delete obj;
      return false;
    }
  } else {
    // couldn't find the object to rename or it is of wrong class type
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::renameLocalHistogram(TString oldName, TString newName) {
  // Renames the local histogram (instance of TH1 wihtin ".histograms" subfolder)
  // with name <oldName> to <newName> also allowing to move the histogram to a new
  // subfolder and returns true in case of success and false otherwise. In case a
  // histogram is moved to a new subfolder it is created unless it already exist.
  // This method does not affect histograms within sub sample folders.
  //
  // Examples:
  //
  // - renameLocalHistogram("CutMETRel/MT", "CutMETRel/MT_2") renames the histogram
  // "MT" in "CutMETRel" to "MT_2".
  // - renameLocalHistogram("CutMETRel/MT", "CutMETRel_2/MT") moves the histogram
  // "MT" in "CutMETRel" to "CutMETRel_2".

  // rename local histogram as instance of TH1 within ".histograms"
  return renameLocalObject(".histograms", TH1::Class(), oldName, newName);
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::renameLocalCounter(TString oldName, TString newName) {
  // Renames the local counter (instance of TQCounter wihtin ".cutflow" subfolder)
  // with name <oldName> to <newName> also allowing to move the counter to a new
  // subfolder and returns true in case of success and false otherwise. In case a
  // counter is moved to a new subfolder it is created unless it already exist.
  // This method does not affect counters within sub sample folders.
  //
  // Examples:
  //
  // - renameLocalCounter("CutMETRel", "CutMETRel_2") renames the counter
  // "CutMETRel" to "CutMETRel_2".
  // - renameLocalCounter("CutMETRel", "test/CutMETRel") moves the counter
  // "CutMETRel" to "test".

  // rename local counter as instance of TQCounter within ".cutflow"
  return renameLocalObject(".cutflow", TQCounter::Class(), oldName, newName);
}


//__________________________________________________________________________________|___________

int TQSampleFolder::renameHistogram(TString oldName, TString newName) {
  // Renames the histogram with name <oldName> into <newName> and returns the number
  // of contributing histograms that have been renamed. This method also allows
  // to move histograms to new subfolders without the need to take additional
  // action. Examples:
  //
  // - renameHistogram("Cut_0jet/MT", "Cut_0jet/MT_2") renames the histogram
  // "Cut_0jet/MT" into "Cut_0jet/MT_2"
  // - renameHistogram("Cut_0jet/MT", "Cut_0jet_test/MT") moves the histogram "MT"
  // from "Cut_0jet" to "Cut_0jet_test" (with the latter being created if it does
  // not exists prior to the operation
  // - renameHistogram("Cut_0jet/MT", "1/2/3/MT") moves the histogram "MT"
  // from "Cut_0jet" to "1/2/3" (with the latter being created if it does
  // not exists prior to the operation

  // the number of renamed histogram contributions
  int nHistos = 0;

  // the list to keep track of contributing histograms
  TList * sfList = new TList();
  sfList->SetOwner(false);

  // this while loop is necesarry since renaming a histogram might uncover
  // histograms with the old name stored 'below' the one that has been renamed
  TH1 * histo = NULL;
  while ((histo = getHistogram(".", oldName, "", sfList))) {
    // we are not really interested in the histogram, only the list of contributions
    delete histo;
    // iterate over list of contributing sample folders
    TQIterator itr(sfList);
    while (itr.hasNext()) {
      // for each contributing sample folder rename the local histogram
      if (((TQSampleFolder*)itr.readNext())->renameLocalHistogram(oldName, newName)) {
        nHistos++;
      }
    }
    // next iteration should not use sample folders of this iteration
    sfList->Clear();
  }
  delete sfList;

  // return the number of contributing histograms renamed
  return nHistos;
}


//__________________________________________________________________________________|___________

int TQSampleFolder::renameCounter(TString oldName, TString newName) {
  // Renames the counter with name <oldName> into <newName> and returns the number
  // of contributing counter that have been renamed. This method also allows
  // to move counter to new subfolders without the need to take additional
  // action. Examples:
  //
  // - renameCounter("Cut_0jet", "Cut_0jet_2") renames the counter "Cut_0jet" into
  // "Cut_0jet_2"
  // - renameCounter("Cut_0jet", "1/2/3/Cut_0jet") moves the counter "Cut_0jet"
  // to "1/2/3" (with the latter being created if it does not exists prior to the
  // operation

  // the number of renamed counter contributions
  int nCounter = 0;

  // the list to keep track of contributing counter
  TList * sfList = new TList();
  sfList->SetOwner(false);

  // this while loop is necesarry since renaming a counter might uncover
  // counter with the old name stored 'below' the one that has been renamed
  TQCounter * counter = NULL;
  while ((counter = getCounter(".", oldName, "", sfList))) {
    // we are not really interested in the counter, only the list of contributions
    delete counter;
    // iterate over list of contributing sample folders
    TQIterator itr(sfList);
    while (itr.hasNext()) {
      // for each contributing sample folder rename the local counter
      if (((TQSampleFolder*)itr.readNext())->renameLocalCounter(oldName, newName)) {
        nCounter++;
      }
    }
    // next iteration should not use sample folders of this iteration
    sfList->Clear();
  }
  delete sfList;

  // return the number of contributing counter renamed
  return nCounter;
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::deleteLocalObject(TString category, TString name) {

  /* delete the local object */
  return deleteObject(TQFolder::concatPaths(category, name) + "-") > 0;
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::deleteLocalHistogram(TString name) {

  /* delete the local histogram */
  return deleteLocalObject(".histograms", name);
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::deleteLocalCounter(TString name) {

  /* delete the local counter */
  return deleteLocalObject(".cutflow", name);
}


//__________________________________________________________________________________|___________

int TQSampleFolder::deleteHistogram(TString name) {
  // Deletes all contributing histograms to histogram <name> within this instance of
  // TQSampleFolder and all sub sample folders and returns the number of contributing
  // histograms that have been deleted.

  /* remove all contributions */
  int nHistos = 0;
  TH1 * histo = 0;
  TList * sfList = new TList();
  while ((histo = getHistogram(".", name, "", sfList))) {
    delete histo;
    /* iterate over list of contributions */
    TIterator * itr = sfList->MakeIterator();
    TObject * obj;
    while ((obj = itr->Next())) {
      if (((TQSampleFolder*)obj)->deleteLocalHistogram(name))
        nHistos++;
    }
    sfList->Clear();
    delete itr;
  }
  delete sfList;

  // return the number of contributing histograms deleted
  return nHistos;
}


//__________________________________________________________________________________|___________

int TQSampleFolder::deleteSingleCounter(TString name) {
  // Deletes all contributing counter to counter <name> within this instance of
  // TQSampleFolder and all sub sample folders and returns the number of contributing
  // counter that have been deleted.

  /* remove all contributions */
  int nCounter = 0;
  TQCounter * counter = 0;
  TList * sfList = new TList();
  while ((counter = getCounter(".", name, "", sfList))) {
    delete counter;
    /* iterate over list of contributions */
    TIterator * itr = sfList->MakeIterator();
    TObject * obj;
    while ((obj = itr->Next())) {
      if (((TQSampleFolder*)obj)->deleteLocalCounter(name))
        nCounter++;
    }
    sfList->Clear();
    delete itr;
  }
  delete sfList;

  // return the number of contributing counter deleted
  return nCounter;
}


//__________________________________________________________________________________|___________

int TQSampleFolder::deleteHistograms(TString filter) {
  // Deletes all contributing histograms to histograms matching the string pattern
  // <filter> within this instance of TQSampleFolder and all sub sample folders and
  // returns the number of histograms that have been deleted. The string pattern
  // is matched using TQStringUtils::matchesFilter(...) and allows the use of wildcards
  // "*" and "?", a negation by prepending "!", and an OR of multiple comma-separated
  // string patterns.

  // the number of histograms that have been deleted
  int nHistos = 0;

  // iterate over the list of available histograms
  TQIterator itr(getListOfHistogramNames(), true);
  while (itr.hasNext()) {
    // the name of the current histogram
    TString name = itr.readNext()->GetName();
    // delete histogram if it matches the filter
    if (TQStringUtils::matchesFilter(name, filter, ",", true)) {
      deleteHistogram(name);
      nHistos++;
    }
  }

  // return the number of histograms that have been deleted
  return nHistos;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::deleteCounter(TString filter) {
  // Deletes all contributing counter to counter matching the string pattern <filter>
  // within this instance of TQSampleFolder and all sub sample folders and returns
  // the number of counter that have been deleted. The string pattern is matched
  // using TQStringUtils::matchesFilter(...) and allows the use of wildcards "*" and
  // "?", a negation by prepending "!", and an OR of multiple comma-separated string
  // patterns.

  // the number of counter that have been deleted
  int nCounter = 0;

  // iterate over the list of available counter
  TQIterator itr(getListOfCounterNames(), true);
  while (itr.hasNext()) {
    // the name of the current histogram
    TString name = itr.readNext()->GetName();
    // delete counter if it matches the filter
    if (TQStringUtils::matchesFilter(name, filter, ",", true)) {
      deleteSingleCounter(name);
      nCounter++;
    }
  }

  // return the number of counter that have benn deleted
  return nCounter;
}


//__________________________________________________________________________________|___________

int TQSampleFolder::copyHistograms(TString sourceFilter, TString appendix, TString options) {
 
  // the number of histograms that have been copied
  int nCopied = 0;
 
  // loop over all histograms matching <sourceFilter>
  TList * histograms = this->getListOfHistogramNames();
  TQIterator itr(histograms, sourceFilter, true);
  while (itr.hasNext()) {
    TString name = itr.readNext()->GetName();
    TString newName = name + appendix;
    // make sure histogram does not yet exist
    if (histograms->FindObject(newName.Data())) {
      continue;
    }
    // make a copy
    if (copyHistogram(name, newName, options) > 0) {
      nCopied++;
    }
  }
 
  return nCopied;
}


//__________________________________________________________________________________|___________

int TQSampleFolder::copyHistogram(TString source, TString destination, TString options) {
  // Retrieves the histogram <source> applying options <options>, stores the resulting
  // histgram as <destination>, and returns the number of contributions to the new
  // histogram.
  //
  // Examples:
  // - copyHistogram("Cut_0jet/MT + Cut_1jet/MT", "Cut_Sum01jet/MT") creates a new
  // histogram "Cut_Sum01jet/MT" from the sum of "Cut_0jet/MT" and "Cut_1jet/MT"
  // - copyHistogram("Cut/MT_vs_Mll", "Cut/MT", "projX = true") creates a new
  // histogram "Cut/MT" from the projection of "Cut/MT_vs_Mll" onto its X axis

  // the number of new histogram contributions
  int nHistos = 0;

  // get the source histogram and the list of contributing sample folders
  TList * sfList = new TList();
  delete getHistogram(".", source, options, sfList);

  // the new name of the histogram is the last path token of <destination>
  TString newName = TQFolder::getPathTail(destination);

  // a list to keep track of sample folders that have already been handled
  TList * done = new TList();

  TQIterator itr(sfList, true);
  while (itr.hasNext()) {
    // the next object (sample folder) to handle
    TQSampleFolder * sf = (TQSampleFolder*)itr.readNext();

    // skip sample folders that have already been handled
    if (done->FindObject(sf)) {
      continue;
    }
    done->Add(sf);

    // get the individual source histogram contribution
    TH1 * h_source = sf->getHistogram(".", source, options);
    if (!h_source) {
      // we failed for some reason to obtain it
      continue;
    }

    // store as new histogram
    if (sf->addObject(h_source, TQFolder::concatPaths(".histograms", destination)
                      + "+::" + newName)) {
      // successfully added the new histogram: increment <nHistos>
      nHistos++;
    } else {
      // failed to add new histogram: delete it again
      delete h_source;
    }
  }
  delete done;

  // return the number of new histogram contributions
  return nHistos;
}


//__________________________________________________________________________________|___________

int TQSampleFolder::copyHistogramToCounter(TString source, TString destination) {

  /* default counter name is histogram name */
  if (destination.IsNull()) {
    destination = source;
  }

  /* the number of new counter */
  int nCounter = 0;

  /* get the source histogram and the contributions */
  TList * sfList = new TList();
  TH1 * histo = getHistogram(".", source, "", sfList);
  if (histo) {
    delete histo;
  }

  TString newName = TQFolder::getPathTail(destination);
  TList * done = new TList();

  TQIterator itr(sfList, true);
  while (itr.hasNext()) {
    TObject * obj = itr.readNext();
    /* skip sample folders already handled */
    if (done->FindObject(obj))
      continue;
    done->Add(obj);
    TQSampleFolder * sf = (TQSampleFolder*)obj;

    /* === create counter from histogram === */

    /* get the source histogram */
    TH1 * h_source = sf->getHistogram(".", source);
    if (!h_source) {
      continue;
    }

    /* create counter */
    TQCounter * cnt = new TQCounter("counter");
    double error = 0.;
    cnt->setCounter(TQHistogramUtils::getIntegralAndError(h_source, error));
    cnt->setErrorSquared(TMath::Power(error, 2.));
    delete h_source;

    /* store the new counter */
    if (sf->addObject(cnt, TQFolder::concatPaths(".cutflow", destination)
                      + "+::" + newName)) {
      nCounter++;
    } else {
      delete cnt;
    }
  }

  delete done;

  return nCounter;
}


//__________________________________________________________________________________|___________

TH1 * TQSampleFolder::getHistogram(TString path, TString name,
                                   TQTaggable * options, TList * sfList) {
  // Returns a histogram (pointer to an instance of TH1) obtained from summing
  // contributions matching <name> from sample folders matching <path>. Additional
  // options may be passed via <options> and a list of contribution sample folders
  // is returned if <sfList> is valid pointer to an instance of TList.
  //
  // [Please note: this is a wrapper to TQSampleDataReader::getHistogram(...).
  // Please check the corresponding documentation for details.]

  // the reader to retrieve histograms
  TQSampleDataReader rd(this);

  // get the histogram and return it
  return rd.getHistogram(path, name, options, sfList);
}


//__________________________________________________________________________________|___________

TH1 * TQSampleFolder::getHistogram(TString path, TString name,
                                   TString options, TList * sfList) {
  // Returns a histogram (pointer to an instance of TH1) obtained from summing
  // contributions matching <name> from sample folders matching <path>. Additional
  // options may be passed via <options> and a list of contributing sample folders
  // is returned if <sfList> is a valid pointer to an instance of TList.
  //
  // [Please note: this is a wrapper to TQSampleDataReader::getHistogram(...).
  // Please check the corresponding documentation for details.]

  // the reader to retrieve histograms
  TQSampleDataReader rd(this);

  // get the histogram and return it
  return rd.getHistogram(path, name, options, sfList);
}


//__________________________________________________________________________________|___________

TQCounter * TQSampleFolder::getCounter(TString path, TString name,
                                       TString options, TList * sfList) {
  // Returns a counter (pointer to an instance of TQCounter) obtained from summing
  // contributions matching <name> from sample folders matching <path>. Additional
  // options may be passed via <options> and a list of contributing sample folders
  // is returned if <sfList> is a valid pointer to an instance of TList.
  //
  // [Please note: this is a wrapper to TQSampleDataReader::getCounter(...).
  // Please check the corresponding documentation for details.]

  // the reader to retrieve counter
  TQSampleDataReader rd(this);

  // get the counter and return it
  return rd.getCounter(path, name, options, sfList);
}

//__________________________________________________________________________________|___________

void TQSampleFolder::printCounter(const TString& path, const TString& name, const TString& options, TList* sfList) {
  // Convenience wrapper for getCounter which prints the cunter after checking for
  // potential nullptrs and cleans up the retrieved counter afterwards

  TQCounter* counter = this->getCounter(path, name, options, sfList);
  if (counter) {
    counter->print();
    delete counter;
    counter = nullptr;
  } else {
    std::cout<<"<nullptr> (counter not found, check path and/or counter name!)"<<std::endl;
  }
  return;
}


//__________________________________________________________________________________|___________

TList * TQSampleFolder::getListOfHistogramNames(const TString& path, TList * sfList) {
  // Returns a list (pointer to instance of TList) of histogram names (as instances
  // of TObjString) present within the sample folder referred to by <path> and a
  // NULL pointer if no histogram could be found. Additionally, a list of contributing
  // sample folders is returned if <sfList> is a valid pointer to an instance of TList.

  // the reader to retrieve the list of histogram names
  TQSampleDataReader rd(this);

  // return the list of histogram names
  return rd.getListOfHistogramNames(path, sfList);
}


//__________________________________________________________________________________|___________

void TQSampleFolder::printListOfHistograms(const TString& options) {
  // Prints a list of histogram names present within the sample folder

  // the reader to print the list of histogram names
  TQSampleDataReader rd(this);

  // print the list of histogram names
  rd.printListOfHistograms(options);
}


//__________________________________________________________________________________|___________

TList * TQSampleFolder::getListOfCounterNames(const TString& path, TList * sfList) {
  // Returns a list (pointer to instance of TList) of counter names (as instances
  // of TObjString) present within the sample folder referred to by <path> and a
  // NULL pointer if no counter could be found. Additionally, a list of contributing
  // sample folders is returned if <sfList> is a valid pointer to an instance of TList.

  // the reader to retrieve the list of counter names
  TQSampleDataReader rd(this);

  // return the list of counter names
  return rd.getListOfCounterNames(path, sfList);
}


//__________________________________________________________________________________|___________

void TQSampleFolder::printListOfCounters(const TString& options) {
  // Prints a list of counters present within the sample folder

  // the reader to print the list of histogram names
  TQSampleDataReader rd(this);

  // print the list of histogram names
  rd.printListOfCounters(options);
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::validateAllCounter(TString path1, TString path2, TString options) {
  // Validates all available counter in sample folders referred to by <path1> and
  // <path2> by comparing instances with matching names in these two sample folders,
  // prints out the result, and returns true if all counter agree or false otherwise.
  // The default output is a list of all counter names (present in any of the two
  // sample folders) with the second column indicating the result of the comparison
  // of the corresponding counter retrieved from the two input sample folders:
  //
  // (1) = (2) [green] counter agree within chosen accuracy (weighted number,
  // uncertainty, and raw number)
  // (1) ~ (2) [yellow] counter agree only in raw number
  // (1) > (2) [red] counter retrieved from sample folder 1 has a larger
  // weighted number than the one retrieved from sample folder 2
  // (1) < (2) [red] similarly
  // (1) - [red] counter does not exist in sample folder 2
  // - (2) [red] similarly
  //
  // Additional options may be passed via <options>. The following options are
  // available:
  //
  // - "d" additionally trace mismatch of counter that do not agree.
  // - "m" only list counter that do not match
  // - "e" only list counter that exists in both sample folders
  // - "c" print counter states in additional columns
  // - "r" show ratio of weighted numbers of the two counter
  // - "a[<accuracy>]" set relative accuracy used for comparing counter
  // to <accuracy> (default is 1E-7)
  // - "f[<filter>]" only list counter whose name match <filter> (allows use
  // of wildcards "*" and "?" in the usual "ls-like" way)

  // get the samples folders to compare
  TQSampleFolder * sampleFolder1 = this->getSampleFolder(path1);
  TQSampleFolder * sampleFolder2 = this->getSampleFolder(path2);

  // validate all counter
  if (sampleFolder1 && sampleFolder2) {
    return sampleFolder1->validateAllCounter(sampleFolder2, options);
  } else {
    if (!sampleFolder1) {
      // error message since sample folder 1 does not exist
      std::cout << TQStringUtils::makeBoldRed(TString::Format(
                                                              "TQSampleFolder::validateAllCounter(...): Failed to find "
                                                              "sample folder '%s'", path1.Data())).Data() << std::endl;
    } else if (!sampleFolder2) {
      // error message since sample folder 2 does not exist
      std::cout << TQStringUtils::makeBoldRed(TString::Format(
                                                              "TQSampleFolder::validateAllCounter(...): Failed to find "
                                                              "sample folder '%s'", path2.Data())).Data() << std::endl;
    }
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::validateAllCounter(TQSampleFolder * sampleFolder, TString options) {

  /* column widths */
  const int cWidthName = 50;
  const int cWidthComp = 12;
  const int cWidthCnt = 40;
  const int cWidthRatio = 10;

  /* stop if input sample folder is invalid */
  if (!sampleFolder)
    return false;

  /* ===== read the options ===== */

  TString flags;
  TString localOptions = options;
  TString accuracyOption;
  TString filter;

  /* read flags */
  bool stop = false;
  while (!stop) {
    /* read flags without parameter */
    if (TQStringUtils::readToken(localOptions, flags, "dmecr") > 0)
      continue;

    /* read accuracy option */
    if (TQStringUtils::readToken(localOptions, flags, "a", 1) > 0) {

      /* don't allow multiple accurary definitions */
      if (accuracyOption.Length() > 0) {
        std::cout << "TQSampleFolder::validateAllCounter(...): cannot define "
          "more than one accuracy using 'a'\n";
        return false;
      }

      /* expect accuracy definition after 'a' option */
      if (!(TQStringUtils::readBlock(localOptions, accuracyOption, "[]") > 0
            && accuracyOption.Length() > 0)) {
        std::cout << "TQSampleFolder::validateAllCounter(...): accuracy "
          "definition expected after option 'a'\n";
        return false;
      }

      if (!TQStringUtils::isNumber(accuracyOption)) {
        std::cout << "TQSampleFolder::validateAllCounter(...): expect "
          "number after option 'a'\n";
        return false;
      }

      continue;
    }

    /* read object filter flag "f" and filter definition */
    if (TQStringUtils::readToken(localOptions, flags, "f", 1) > 0) {

      /* don't allow multiple filters */
      if (filter.Length() > 0) {
        std::cout << "TQSampleFolder::validateAllCounter(...): cannot define "
          "more than one filter using 'f'\n";
        return false;
      }

      /* expect filter definition after 'f' option */
      if (!(TQStringUtils::readBlock(localOptions, filter, "[]") > 0
            && filter.Length() > 0)) {
        std::cout << "TQSampleFolder::validateAllCounter(...): filter "
          "definition expected after option 'f'\n";
        return false;
      }

      continue;
    }

    /* no valid tokens left to parse */
    stop = true;
  }

  /* unexpected options left? */
  if (localOptions.Length() > 0) {
    std::cout << TString::Format("TQSampleFolder::validateAllCounter(...):"
                                 " unknown option '%c'\n", localOptions[0]);
    return false;
  }

  /* parse the flags */
  bool flagDetails = flags.Contains("d");
  bool flagMismatch = flags.Contains("m");
  bool flagExisting = flags.Contains("e");
  bool flagShowCounter = flags.Contains("c");
  bool flagAccuracy = flags.Contains("a");
  bool flagShowRatio = flags.Contains("r");

  double accuracy = 1E-7;
  if (!accuracyOption.IsNull())
    accuracy = accuracyOption.Atof();


  /* ===== make the actual comparison ===== */

  /* true if counter in sample folders are equal */
  bool equal = true;

  /* print headline */
  TString line;
  line.Append(TQStringUtils::fixedWidth("Counter / sample folder", cWidthName, true));
  line.Append(TQStringUtils::fixedWidth("Comparison", cWidthComp));
  if (flagShowCounter) {
    line.Append(TQStringUtils::fixedWidth("Counter 1", cWidthCnt));
    line.Append(TQStringUtils::fixedWidth("Counter 2", cWidthCnt));
  }
  if (flagShowRatio) {
    line.Append(TQStringUtils::fixedWidth("(1)/(2)", cWidthRatio));
  }
  std::cout << TQStringUtils::makeBoldWhite(line).Data() << std::endl;
  std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::repeat("=", line.Length())).Data() << std::endl;

  /* get the list of counter names */
  TList * l1 = this->getListOfCounterNames();
  TList * l2 = sampleFolder->getListOfCounterNames();

  /* the number of entries in the list */
  int n1 = 0;
  int n2 = 0;

  if (l1) {
    n1 = l1->GetEntries();
    l1->Sort();
  }
  if (l2) {
    n2 = l2->GetEntries();
    l2->Sort();
  }

  /* the number of entries in the list and the list indices */
  int i1 = 0;
  int i2 = 0;

  /* process counter in both sample folders */
  while (i1 < n1 || i2 < n2) {

    /* get the two heading sample folders */
    TObjString * obj1 = (i1 < n1) ? (TObjString*)l1->At(i1) : 0;
    TObjString * obj2 = (i2 < n2) ? (TObjString*)l2->At(i2) : 0;

    int compare = -1;
    if (obj1 && obj2) {
      compare = obj1->Compare(obj2);
      i1 += (compare <= 0) ? 1 : 0;
      i2 += (compare >= 0) ? 1 : 0;
    } else if (obj1) {
      compare = -1;
      i1++;
    } else if (obj2) {
      compare = 1;
      i2++;
    } else {
      /* something went totally wrong */
      return false;
    }

    TString name;
    TString comparison;
    bool mismatch = false;

    /* the two counter */
    TQCounter * c1 = 0;
    TQCounter * c2 = 0;

    /* matching counter: compare them */
    if (compare == 0) {
      name = obj1->GetName();
      if (!filter.IsNull() && !TQStringUtils::matchesFilter(
                                                            name, filter, ",", true))
        continue;

      /* get the two counter */
      c1 = this->getCounter(".", name);
      c2 = sampleFolder->getCounter(".", name);

      /* compare counter */
      comparison = TQCounter::getComparison(c1, c2, true, accuracy);
      if (!(c1 && c2 && c1->isEqualTo(c2, accuracy)))
        mismatch = true;
    } else {
      /* counter don't match */
      mismatch = true;
      if (compare < 0) {
        name = obj1->GetName();
        if (!filter.IsNull() && !TQStringUtils::matchesFilter(
                                                              name, filter, ",", true))
          continue;
        comparison = TQStringUtils::makeBoldRed("(1) - ");
      } else {
        name = obj2->GetName();
        if (!filter.IsNull() && !TQStringUtils::matchesFilter(
                                                              name, filter, ",", true))
          continue;
        comparison = TQStringUtils::makeBoldRed(" - (2)");
      }
    }

    if ((mismatch || !flagMismatch) && !(compare != 0 && flagExisting)) {
      line.Clear();
      line.Append(TQStringUtils::fixedWidth(name, cWidthName, true));
      line.Append(TQStringUtils::fixedWidth(comparison, cWidthComp));
      if (flagShowCounter) {
        if (c1)
          line.Append(TQStringUtils::fixedWidth(c1->getAsString(), cWidthCnt));
        else
          line.Append(TQStringUtils::fixedWidth("--", cWidthCnt));
        if (c2)
          line.Append(TQStringUtils::fixedWidth(c2->getAsString(), cWidthCnt));
        else
          line.Append(TQStringUtils::fixedWidth("--", cWidthCnt));
      }
      if (flagShowRatio) {
        TString ratio = "--";
        if (c1 && c2)
          ratio = TString::Format("%.3f", c1->getCounter() / c2->getCounter());
        line.Append(TQStringUtils::fixedWidth(ratio, cWidthRatio));
      }
      std::cout << line.Data() << std::endl;
    }

    /* delete counter */
    delete c1;
    delete c2;

    equal &= !mismatch;
    if (mismatch && compare == 0 && flagDetails) {
      TString myOptions;
      if (flagShowCounter)
        myOptions.Append("c");
      if (flagShowRatio)
        myOptions.Append("r");
      if (flagAccuracy)
        myOptions.Append(TString::Format("a[%f]", accuracy));
      validateCounter(sampleFolder, name, myOptions, -1);
    }
  }

  /* delete list of counter names */
  if (l1)
    delete l1;
  if (l2)
    delete l2;

  /* return true if counter in sample folders are equal */
  return equal;
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::validateCounter(TString path1, TString path2,
                                     TString counterName, TString options) {

  /* get the samples folders to compare */
  TQSampleFolder * sampleFolder1 = this->getSampleFolder(path1);
  TQSampleFolder * sampleFolder2 = this->getSampleFolder(path2);

  /* validate counter */
  if (sampleFolder1 && sampleFolder2)
    return sampleFolder1->validateCounter(sampleFolder2, counterName, options);
  else
    return false;
}


//__________________________________________________________________________________|___________

bool TQSampleFolder::validateCounter(TQSampleFolder * sampleFolder,
                                     TString counterName, TString options, int indent) {

  /* column widths */
  const int cWidthName = 50;
  const int cWidthComp = 12;
  const int cWidthCnt = 40;
  const int cWidthRatio = 10;

  /* stop if input sample folder is invalid */
  if (!sampleFolder)
    return false;

  /* ===== read the options ===== */

  TString flags;
  TString localOptions = options;
  TString accuracyOption;

  /* read flags */
  bool stop = false;
  while (!stop) {
    /* read flags without parameter */
    if (TQStringUtils::readToken(localOptions, flags, "cr") > 0)
      continue;

    /* read accuracy option */
    if (TQStringUtils::readToken(localOptions, flags, "a", 1) > 0) {

      /* don't allow multiple accurary definitions */
      if (accuracyOption.Length() > 0) {
        std::cout << "TQSampleFolder::validateCounter(...): cannot define "
          "more than one accuracy using 'a'\n";
        return false;
      }

      /* expect accuracy definition after 'a' option */
      if (!(TQStringUtils::readBlock(localOptions, accuracyOption, "[]") > 0
            && accuracyOption.Length() > 0)) {
        std::cout << "TQSampleFolder::validateCounter(...): accuracy "
          "definition expected after option 'a'\n";
        return false;
      }

      if (!TQStringUtils::isNumber(accuracyOption)) {
        std::cout << "TQSampleFolder::validateCounter(...): expect "
          "number after option 'a'\n";
        return false;
      }

      continue;
    }

    /* no valid tokens left to parse */
    stop = true;
  }

  /* unexpected options left? */
  if (localOptions.Length() > 0) {
    std::cout << TString::Format("TQSampleFolder::validateCounter(...):"
                                 " unknown option '%c'\n", localOptions[0]);
    return false;
  }

  /* parse the flags */
  bool flagShowCounter = flags.Contains("c");
  bool flagShowRatio = flags.Contains("r");

  double accuracy = 1E-7;
  if (!accuracyOption.IsNull())
    accuracy = accuracyOption.Atof();


  /* ===== make the actual comparison ===== */

  /* true if counter in sample folders are equal */
  bool equal = false;

  TString line;
  if (indent == 0) {
    /* print headline */
    line.Append(TQStringUtils::fixedWidth("Sample folder", cWidthName, true));
    line.Append(TQStringUtils::fixedWidth("Comparison", cWidthComp));
    if (flagShowCounter) {
      line.Append(TQStringUtils::fixedWidth("Counter 1", cWidthCnt));
      line.Append(TQStringUtils::fixedWidth("Counter 2", cWidthCnt));
    }
    if (flagShowRatio) {
      line.Append(TQStringUtils::fixedWidth("(1)/(2)", cWidthRatio));
    }
    std::cout << TQStringUtils::makeBoldWhite(line) << std::endl;
    std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::repeat("=", TQStringUtils::getWidth(line))) << std::endl;
  }

  /* get the two counter */
  TQCounter * c1 = this->getCounter(".", counterName);
  TQCounter * c2 = sampleFolder->getCounter(".", counterName);

  /* the columns to print */
  TString name;
  TString comparison;

  /* matching counter */
  if ((c1 && c2 && c1->isEqualTo(c2, accuracy)) || (!c1 && !c2))
    equal = true;

  if (indent == 0 || (indent >= 0 && !equal)) {
    name = TQStringUtils::repeatSpaces(indent * 2);
    comparison = TQCounter::getComparison(c1, c2, true);

    if (indent == 0)
      name.Append(TQStringUtils::makeBoldBlue(GetName()) + "/, " +
                  TQStringUtils::makeBoldBlue(sampleFolder->GetName()) + "/");
    else 
      name.Append(TQStringUtils::makeBoldBlue(sampleFolder->GetName()) + "/");

    line.Clear();
    line.Append(TQStringUtils::fixedWidth(name, cWidthName, true));
    line.Append(TQStringUtils::fixedWidth(comparison, cWidthComp));
    if (flagShowCounter) {
      if (c1)
        line.Append(TQStringUtils::fixedWidth(c1->getAsString(), cWidthCnt));
      else
        line.Append(TQStringUtils::fixedWidth("--", cWidthCnt));
      if (c2)
        line.Append(TQStringUtils::fixedWidth(c2->getAsString(), cWidthCnt));
      else
        line.Append(TQStringUtils::fixedWidth("--", cWidthCnt));
    }
    if (flagShowRatio) {
      TString ratio = "--";
      if (c1 && c2)
        ratio = TString::Format("%.3f", c1->getCounter() / c2->getCounter());
      line.Append(TQStringUtils::fixedWidth(ratio, cWidthRatio));
    }
    std::cout << line.Data() << std::endl;
  }

  /* we are done if the counter agree */
  if (equal) {
    /* delete counter */
    delete c1;
    delete c2;
    return true;
  }

  /* ===== ===== */

  if (indent < 0)
    indent = 0;

  /* get the list of sub sample folders */
  TList * l1 = this->getListOfSampleFolders("?");
  TList * l2 = sampleFolder->getListOfSampleFolders("?");

  /* the number of entries in the list */
  int n1 = 0;
  int n2 = 0;

  if (l1) {
    n1 = l1->GetEntries();
    l1->Sort();
  }
  if (l2) {
    n2 = l2->GetEntries();
    l2->Sort();
  }

  /* the number of entries in the list and the list indices */
  int i1 = 0;
  int i2 = 0;

  /* process sample folder in both lists */
  while (i1 < n1 || i2 < n2) {

    /* get the two heading sample folders */
    TQSampleFolder * sf1 = (i1 < n1) ? (TQSampleFolder*)l1->At(i1) : 0;
    TQSampleFolder * sf2 = (i2 < n2) ? (TQSampleFolder*)l2->At(i2) : 0;

    int compare = -1;
    if (sf1 && sf2) {
      compare = sf1->Compare(sf2);
      i1 += (compare <= 0) ? 1 : 0;
      i2 += (compare >= 0) ? 1 : 0;
    } else if (sf1) {
      compare = -1;
      i1++;
    } else if (sf2) {
      compare = 1;
      i2++;
    } else {
      /* something went totally wrong */
      return false;
    }

    if (compare == 0) {
      /* matching sample folder: compare sub counter */
      sf1->validateCounter(sf2, counterName, options, indent + 1);
    } else {
      /* sample folder don't match */

      TQCounter * cnt = 0;
      if (compare < 0) {
        cnt = sf1->getCounter(".", counterName);
        name = sf1->GetName();
        comparison = "(1) - ";
      } else if (compare > 0) {
        cnt = sf2->getCounter(".", counterName);
        name = sf2->GetName();
        comparison = " - (2)";
      }

      if (cnt) {
        line.Clear();
        line.Append(TQStringUtils::fixedWidth(TQStringUtils::repeatSpaces(indent * 2 + 2) +
                                              TQStringUtils::makeBoldBlue(name) + "/", cWidthName, true));
        line.Append(TQStringUtils::fixedWidth(TQStringUtils::makeBoldRed(comparison), cWidthComp));
        if (flagShowCounter) {
          if (compare < 0) {
            line.Append(TQStringUtils::fixedWidth(cnt->getAsString(), cWidthCnt));
            line.Append(TQStringUtils::fixedWidth("--", cWidthCnt));
          } else {
            line.Append(TQStringUtils::fixedWidth("--", cWidthCnt));
            line.Append(TQStringUtils::fixedWidth(cnt->getAsString(), cWidthCnt));
          }
        }
        std::cout << line.Data() << std::endl;
        delete cnt;
      }
    }
  }

  /* delete list of counter names */
  if (l1)
    delete l1;
  if (l2)
    delete l2;

  /* delete counter */
  delete c1;
  delete c2;

  /* there was a dismessage */
  return false;
}


//__________________________________________________________________________________|___________

int TQSampleFolder::setScaleFactor(const char* name, double scaleFactor, double uncertainty) {
  // Set a scale factor (better: normalization factor) and its uncertainty.
  // The 'path' is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  return this->setScaleFactor((TString)name,name,scaleFactor,uncertainty);
}

//__________________________________________________________________________________|___________

int TQSampleFolder::setScaleFactor(const TString& name, double scaleFactor, double uncertainty) {
  // Set a scale factor (better: normalization factor) and its uncertainty.
  // The 'path' is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  return this->setScaleFactor(name,name,scaleFactor,uncertainty);
}

//__________________________________________________________________________________|___________

int TQSampleFolder::setScaleFactor(TString name, const TString& title, double scaleFactor, double uncertainty) {
  // Set a scale factor (better: normalization factor) and its uncertainty.
  // The 'path' is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 

  /* cumulate (multiply) existing and new scale factors if "<<" was appended */
  if (TQStringUtils::removeTrailing(name, "<") == 2)
    scaleFactor *= getScaleFactor(name);
 
  /* extract the scale scheme (default is '.default') */
  TString scheme = TQStringUtils::readPrefix(name, ":", ".default");
 
  /* get the name of the TQValue object */
  TString objName = getPathTail(name);
 
  /* compile the total path to the scale factor TQValue object */
  TString totalPath = TQFolder::concatPaths(".scalefactors", scheme, name);
 
  /* stop if involved names are invalid */
  if (!TQFolder::isValidPath(totalPath) || !TQValue::isValidName(objName))
    return 0;
 
  if (scaleFactor == 1. && uncertainty == 0.) {
 
    // get/create the folder to contain the tag 
    TQFolder * folder = getFolder(totalPath + "+");
    if(!folder) return 0;

    /* delete existing scale factor and remove folders recursively */
    this->deleteObject(TQFolder::concatPaths(totalPath, objName) + "-");
 
  } else {
 
    /* get/create the folder to contain the TQValue object */
    TQFolder * folder = getFolder(totalPath + "+");
 
    if(!folder) return 0;
    TQCounter* cnt = new TQCounter(objName,scaleFactor,uncertainty);
    cnt->SetTitle(title);
    folder->addObject(cnt,"!");//force possibly existing counter to be overwritten
 
  }
 
  return 1;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::setScaleFactor(const TString& name, double scaleFactor, double uncertainty, const TString& sampleFolders) {
  // Set a scale factor (better: normalization factor) and its uncertainty.
  // The 'path' is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  // The default scheme is '.default'.

  // The 'sampleFolders' argument may contain a list or arithmetic string expression of sample folders
  // at which the scale factor should be deployed.

  if (sampleFolders.IsNull())
    return this->setScaleFactor(name,name,scaleFactor,uncertainty);

  /* the number of scale factors added */
  int nScaleFactors = 0;
 
  /* the list of sample folders to add the scale factor to */
  TQSampleDataReader reader(this);
  TList * list = reader.getListOfSampleFolders(sampleFolders);
 
  if (!list) return 0;
 
  /* loop over sample folders */
  TQSampleFolderIterator itr(list,true);
  while(itr.hasNext()){
    TQSampleFolder* sf = itr.readNext();
    if(!sf) continue;
    nScaleFactors += sf->setScaleFactor(name,name,scaleFactor,uncertainty);
  }
 
  /* return the number of scale factors added */
  return nScaleFactors;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::setScaleFactor(const TString& name, double scaleFactor, const TString& sampleFolders) {
  // Set a scale factor (better: normalization factor).
  // The 'path' is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  // The default scheme is '.default'.

  // The 'sampleFolders' argument may contain a list or arithmetic string expression of sample folders
  // at which the scale factor should be deployed.

  return this->setScaleFactor(name, scaleFactor, 0., sampleFolders);
}

//__________________________________________________________________________________|___________

int TQSampleFolder::setScaleFactor(const TString& name, double scaleFactor, const char* sampleFolders) {
  // Set a scale factor (better: normalization factor).
  // The 'path' is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  // The default scheme is '.default'.

  // The 'sampleFolders' argument may contain a list or arithmetic string expression of sample folders
  // at which the scale factor should be deployed.

  return this->setScaleFactor(name, scaleFactor, 0., sampleFolders);
}


//__________________________________________________________________________________|___________

void TQSampleFolder::printScaleFactors(TString filter) {
  // Prints a summary of scale factors (better: normalization factors) associated
  // to this instance of TQSampleFolder. If no normalization factors are associated
  // to it a corresponding message is printed.

  // get the scale factor folder
  TQFolder * folder = getFolder(".scalefactors");

  // no scale factors available if the folder is missing or if it is empty
  if (!folder || folder->isEmpty()) {
    std::cout << "TQSampleFolder::printScaleFactors(...): No scale factor(s) associated to "
      "this sample folder" << std::endl;
    return;
  }

  // print elements recursively including details
  TString options = "rd";
  if (!filter.IsNull()) {
    // filter options for the print command
    options.Append(TString::Format("f[%s]", filter.Data()));
  }

  // print scale factors
  folder->print(options);
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::getScaleFactor(const TString& path, double& scale, double& uncertainty, bool recursive) {
  // Returns a scale factor (better: normalization factor)
  // The 'path' is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  // The default scheme is '.default'.
  //
  // The value of the scale factor will be deployed in the 'scale' argument,
  // The uncertainty value will be deployed in the 'uncertainty' argument.
  //
  // The recursive flag can be used to collect and multiply corresponding scale factors 
  // from parent directories in an upward-recursive fashion (default: false).
 
  /* the default scale factor is of course 1. */
  scale = 1.;
  uncertainty = 0.;
  if(recursive){
    // the recursive call transmits ownership, here we need to delete the counter afterwards
    TQCounter* cnt = this->getScaleFactorCounterRecursive(path);
    if(!cnt) return false;
    scale = cnt->getCounter();
    uncertainty = cnt->getError();
    delete cnt;
  } else {
    // the non-recursive call returns the internal pointer, we should leave it alone
    TQCounter* cnt = this->getScaleFactorCounterInternal(path);
    if(!cnt) return false;
    scale = cnt->getCounter();
    uncertainty = cnt->getError();
  }
  return true;
}

//__________________________________________________________________________________|___________

void TQSampleFolder::convertLegacyNFs(){
  // convert legacy NFs into the most recent format
  TCollection* sfs = this->getListOfFolders("*/.scalefactors");
  TQFolderIterator itr(sfs,true);
  // std::cout << "converting legacy NFs on sample folder " << this->getPath() << std::endl;
  while(itr.hasNext()){
    TQFolder* sff = itr.readNext();
    TCollection* subsfs = sff->getListOfFolders("*");
    TQFolderIterator sitr(subsfs,true);
    while(sitr.hasNext()){
      TQFolder* f = sitr.readNext();
      // std::cout << f->getPath() << std::endl;
      // f->printTags();
      TQIterator vals(f->getListOfTagNames(),true);
      while(vals.hasNext()){
        TObject* v = vals.readNext();
        TString s(v->GetName());
        TString name;
        TQStringUtils::readUpTo(s,name,".");
        // std::cout << "\t" << name << std::endl;
        double scale = f->getTagDoubleDefault(name+".value",f->getTagDoubleDefault(name,1.));
        double unc = f->getTagDoubleDefault(name+".uncertainty",1.);
        if(scale != 1. || unc != 0.){
          TQSampleFolder* base = dynamic_cast<TQSampleFolder*>(sff->getBase());
          if(base){
            // std::cout << "\tsetting NF: " << scale << " +/- " << unc << std::endl;
            base->setScaleFactor(name,name,scale,unc);
          }
        }
      }
      TQIterator objs(f->getListOfObjects());
      while(objs.hasNext()){
        TObject* obj = objs.readNext();
        if(obj->InheritsFrom(TQValue::Class())){
          TQValue* v = (TQValue*)obj;
          TQSampleFolder* base = dynamic_cast<TQSampleFolder*>(sff->getBase());
          if(base) base->setScaleFactor(v->GetName(),v->GetName(),v->getDouble(),0);
        }
      }
    }
  }
}

//__________________________________________________________________________________|___________

TQCounter* TQSampleFolder::getScaleFactorCounter(const TString& path) {
  // Returns a scale factor (better: normalization factor) as the underlying TQCounter object
  // the path is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  // The default scheme is '.default'.
  TQCounter* cnt = this->getScaleFactorCounterInternal(path);
  if(!cnt) return NULL;
  return new TQCounter(cnt);
}

 
//__________________________________________________________________________________|___________
TQCounter* TQSampleFolder::getScaleFactorCounterInternal(TString path) {
  // Returns a scale factor (better: normalization factor) as the underlying TQCounter 
  // object the path is the name of the corresponding scale factor (typically name 
  // of the cut) and may be prefixed with "schemeName:" to use a the scale factor 
  // scheme 'schemeName'. The default scheme is '.default'.
  
  TString scheme = TQStringUtils::readPrefix(path, ":", ".default");
  return this->getScaleFactorCounterInternal(path,scheme);
  /*
  TString name = TQFolder::getPathTail(path);
  TString subPath = TQFolder::concatPaths(".scalefactors",scheme,path);
  TQFolder* f = this->getFolder(subPath);
  if(!f) return NULL;
  TQCounter* cnt = dynamic_cast<TQCounter*>(f->getObject(name));
  
  // NOTE: this function does *not* support legacy sample folders that do not
  // have the NF saved as a counter.
 
  return cnt;
  */
}


TQCounter* TQSampleFolder::getScaleFactorCounterInternal(const TString& path, const TString& scaleScheme) {
  // Returns a scale factor (better: normalization factor) as the underlying TQCounter 
  // object the path is the name of the corresponding scale factor (typically name 
  // of the cut). 
  
  //crawl bit by bit through the folder structure to exit as early as possible and avoid string operations.
  //we already have individual parts of the path, there is no need to concatenate them just to have them 
  //taken appart again by getFolder.
  TQFolder* helperFolder = this->getFolder(".scalefactors");
  if (!helperFolder) return nullptr;
  helperFolder = helperFolder->getFolder(scaleScheme);
  if (!helperFolder) return nullptr;
  TObject* obj = helperFolder->getObject(path);
  if (!obj) return nullptr;
  return dynamic_cast<TQCounter*>(obj);
}

//__________________________________________________________________________________|___________

TQCounter* TQSampleFolder::getScaleFactorCounterRecursive(const TString& path) {
  // Returns a scale factor (better: normalization factor) as the underlying TQCounter object
  // the path is the name of the corresponding scale factor (typically name of the cut).
  TQSampleFolder* base = this->getBaseSampleFolder();
  if(!base){
    return this->getScaleFactorCounter(path); //TODO: check if we need to adjust this as well!
  } else {
    TQCounter* master = base->getScaleFactorCounterRecursive(path);
    if(master){
      const TQCounter* local = this->getScaleFactorCounterInternal(path);
      master->multiply(local);
    } else {
      return this->getScaleFactorCounter(path);
    }
    return master;
  }
}


//__________________________________________________________________________________|___________

double TQSampleFolder::getScaleFactor(const TString& path, bool recursive) {
  // Returns a scale factor (better: normalization factor)
  // the path is the name of the corresponding scale factor (typically name of the cut)
  // and may be prefixed with "schemeName:" to use a the scale factor scheme 'schemeName'. 
  // The default scheme is '.default'.
  //
  // The value of the scale factor will be returned.
  //
  // The recursive flag can be used to collect and multiply corresponding scale factors 
  // from parent directories in an upward-recursive fashion (default: false).
  double scale, uncertainty;
  this->getScaleFactor(path,scale,uncertainty,recursive);
  return scale;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::generalizeObjectsPrivate(TList * names, TClass* objClass, TQTaggable* options, const TString& paths, const TString& subpath) {
  // Generalizes (merges) contributions to histograms
  int nObjects=0;
  /* allow multiple categories */
  TQIterator cats(TQStringUtils::tokenize(paths),true);
  while(cats.hasNext()){
    TString cat(cats.readNext()->GetName());
    /* generalize the histograms in given paths */
    TQSampleFolderIterator itr(getListOfSampleFolders(cat),true);
    while(itr.hasNext()){
      TQSampleFolder * obj = itr.readNext();
      if(!obj) continue;
      nObjects += obj->generalizeObjectsPrivate(names, objClass, options, subpath);
    }
  }
  /* return the number of histograms generalized */
  return nObjects;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::generalizeObjects(const TString& prefix, const TString& options) {
  // Generalizes (merges) contributions to histograms
  TQTaggable opttags(options);
  TQSampleFolderIterator itr(this->getListOfSampleFolders("?"),true); //DO NOT iterate over all sample folders (path "*" instead of "?"), instead use recursive call below! Iterating over all sample folders at this point can cause a crash if an element in the collection of the iterator gets removed (due to becoming empty) before being processed itself.
  int n=0;
  while(itr.hasNext()){
    TQSampleFolder* sf = itr.readNext();
    if (!sf) continue;
    //TQIterator tags(sf->getListOfKeys(prefix+".*"),true);
    TQIterator tags(sf->getListOfTags(),false); //list is owned by taggable object
    DEBUGclass("searching '%s' for tags '%s', found %d",sf->getPath().Data(),prefix.Data(),tags.getCollection() ? tags.getCollection()->GetEntries() : 0);
    while(tags.hasNext()){
      TString name(tags.readNext()->GetName());
      /*
      if ( this->hasTag("~"+name) ) {
        std::cout<<"Skipping this tag"<<std::endl;
        continue;//we already generalized this type of objects at a more general position
      } else {
        std::cout<<"Continuing to generalize"<<std::endl;
      }
      */
      
      if ( TQStringUtils::removeLeadingText(name,prefix) ) {
        n += sf->generalizeObjectsPrivate(0 /*everyhwere*/,0 /*all objects*/,&opttags,name);
      }
    }
    n+= sf->generalizeObjects(prefix,options); //recursive call on subfolders.
  }
  return n;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::generalizeObjectsPrivate(TList * names, TClass* objClass, TQTaggable* options, const TString& subpath) {
  // Generalizes (merges) contributions to histograms

  /* remember the the number of histograms generalized */
  int nObjects = 0;
 
  /* we need a data reader to read the counter from the sub folders */
  TQSampleDataReader rd(this);
  /* don't wast time calculating stlye settings here... */
  rd.setApplyStyles(false);
  
  /* generalize all counter if no specific list was given */
  bool owningNames = false;
  if (!names) {
    names = rd.getListOfObjectNames(objClass, subpath);
    owningNames = true;
  }

  DEBUGclass("using %d names of type %s in %s:%s",
            names ? names->GetEntries() : 0,objClass ? objClass->GetName() : "(NULL)",
            this->getPath().Data(),subpath.Data());

  if(!names){
    return 0;
  }
  /* loop over every element in the list */
  TQIterator itr(names,owningNames);
  while (itr.hasNext()){
    TObject* obj = itr.readNext();
    /* the element name to generalize */
    TString name = obj->GetName();
    /* the generalized histgram */
    TObject* element = NULL;
    /* the list of samples folders contributing to the element */
    TList * list = new TList();
    /* get the element */
    element = rd.getElement(".", name, objClass, subpath, options, list);
    
    // skip this element if we failed to get the generalized element
    if (!element) {
      ERRORclass("unable to access element '%s' of type '%s' in %s:%s",name.Data(),objClass?objClass->GetName():"(NULL)",this->getPath().Data(),subpath.Data());
      delete list;
      continue;
    }
    /* skip this element if the only contribution is from this sample folder */
    if (list->GetEntries() == 1 && list->First() == this) {
      DEBUGclass("not generalizing -- object already at target location!");
      delete list;
      continue;
    }
 
    /* store the generalized element
     * =================================================== */
 
    /* get/create the folder to store the element */
    TString path(TQFolder::concatPaths(subpath,TQFolder::getPathWithoutTail(name)));
    TQFolder * folder = getFolder(path + "+");
    if (folder) {
      /* delete existing element */
      folder->deleteObject(element->GetName());
      /* store the generalized element */
      folder->Add(element);
      DEBUGclass("adding object '%s' to '%s'",element->GetName(),folder->getPath().Data());
      nObjects++;
      //convert TList to std::vector, since the TList destructor can segfault if its contents are already gone...
      std::vector<TQSampleFolder*> vList;
      vList.reserve(list->GetSize()); 
      TQSampleFolderIterator itr2(list);
      while(itr2.hasNext()){
        vList.push_back(itr2.readNext());
      }
      /* delete the list of contributing sample folders */
      delete list;
      /* loop over contributing sample folders and delete the source elements */
      for(size_t i=0; i<vList.size(); i++) {
        TQSampleFolder* sf = vList[i];
        if(!sf || sf == this) continue;
        sf->deleteObject(TQFolder::concatPaths(subpath,name)+"-");
      }
    } else {
      ERRORclass("unable to make folder '%s'!",path.Data());
      delete element;
      /* delete the list of contributing sample folders */
      delete list;
    }
  }
  if(nObjects > 0){
    //@tag:[.generalize.visited] This tag is set when objects are generalized ('downmerged') at the folder the objects are combined at. For merging sample folders with tqmerge this means the trace ID should be set to 'generalize'.
    TQFolder* sf = this;
    while(sf){
      sf->setTagBool(".generalize.visited",true);
      sf = sf->getBase();
    }
  }
  
  /* the number of generalized elements */
  return nObjects;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::generalizeHistograms (const TString& paths, const TString& options){
  // Generalizes (merges) contributions to histogram
  return this->generalizeHistograms(0, paths, options);
}

//__________________________________________________________________________________|___________

int TQSampleFolder::generalizeCounters    (const TString& paths, const TString& options){
  // Generalizes (merges) contributions to counter
  return this->generalizeCounters(0, paths, options);
}

//__________________________________________________________________________________|___________

int TQSampleFolder::generalizeHistograms(TList * names, const TString& paths, const TString& options) {
  // Generalizes (merges) contributions to histogram
  TQTaggable tags(options);
  return this->generalizeObjectsPrivate(names, TH1::Class(), &tags, paths, ".histograms");
}

//__________________________________________________________________________________|___________

int TQSampleFolder::generalizeCounters(TList * names, const TString& paths, const TString& options) {
  // Generalizes (merges) contributions to counter
  TQTaggable tags(options);
  return this->generalizeObjectsPrivate(names, TQCounter::Class(), &tags, paths, ".cutflow");
}

//__________________________________________________________________________________|___________

TQSampleFolder::~TQSampleFolder() {
  if(this->hasFriends()){
    for(auto s : *this->fFriends){
      s->unfriend(this);
    }
  }
}

//__________________________________________________________________________________|___________

TString TQSampleFolder::getPathFriendsWildcarded(bool requireWildcardTag) {
  // Returns the full path of this instance of TQFolder in the hierarchy. For the
  // root folder "/" is returned.
  // this version of getPath replaces the names of folders that have the tag
  // wildcarded=true
  // set with a wildcard ('?')
  
  if (!this->hasFriends()) {
    this->findFriends(); //make sure friend discovery has run
  }
  if (!fBase) return TString("/");
  
  TString basePath = "";
  TQSampleFolder* sampleFolderBase = dynamic_cast<TQSampleFolder*>(fBase);
  if (!sampleFolderBase){
    basePath = fBase->getPath();
  }
  else{
    basePath = sampleFolderBase->getPathFriendsWildcarded(requireWildcardTag);
  }

  if(requireWildcardTag and !(this->getTagBoolDefault("wildcarded",false))){
    TString retPath = TQFolder::concatPaths(basePath,this->getName())+"/";
    if(fBase == getRoot()) TQStringUtils::ensureLeadingText(retPath,"/"); //TQFolder::concatPaths doesn't preserve a single leading "/" if it's the first argument (it does preserve a leading "/" though if the first part is, e.g., "/foo")
    return retPath;
  }

  TQFolderIterator itr(this->getRoot()->getListOfFolders(TQFolder::concatPaths(basePath,"?")), true);
  bool allMatchesAreFriends = true;
  while(itr.hasNext()){
    TQFolder* f = itr.readNext();
    TQSampleFolder* sf = dynamic_cast<TQSampleFolder*>(f);
    if(sf and this->isFriend(sf)) continue;
    allMatchesAreFriends = false;
    break;
  }
  TString retPathFriends = TQFolder::concatPaths(basePath,allMatchesAreFriends ? "?": this->getName())+"/";

  if(fBase == getRoot()) TQStringUtils::ensureLeadingText(retPathFriends,"/");
  return retPathFriends;
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::merge(TQSampleFolder* f, bool sumElements, bool verbose){
  // merge two sample folders
  return this->merge(f,"asv",sumElements,verbose);
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::merge(TQSampleFolder* f, const TString& traceID, bool sumElements, bool verbose){
  // merge two sample folders
  if(this->Class() == TQSampleFolder::Class()){
    return this->mergeAsSampleFolder(f,traceID,sumElements ? MergeMode::SumElements : MergeMode::PreferOther,verbose);
  } else {
    ERRORclass("unable to merge '%s' with 'TQSampleFolder'",this->Class()->GetName());
    return false;
  }
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::mergeAsSampleFolder(TQSampleFolder* f, const TString& traceID, MergeMode mode, bool verbose){
  // merge two sample folders
  DEBUGclass("merging sample folders");
  if(!f) return false;
  this->resolveImportLinks();
  bool didMerge = false;
  TQFolderIterator itr(f->getListOfFolders("?"));
  // iterate over all the folders
  while(itr.hasNext()){
    TQFolder* otherF = itr.readNext();
    if(!otherF) continue;
    TQSampleFolder* otherSF = dynamic_cast<TQSampleFolder*>(otherF);
    TQSample* otherSample = dynamic_cast<TQSample*>(otherSF);
    TObject* thisObj = this->getObject(otherF->GetName());
    if(!thisObj){
      // if we don't have an object of that type, we can just steal it
      otherF->detachFromBase();
      this->addObject(otherF);
      didMerge = true;
      if(verbose) VERBOSEclass("grabbing object '%s'",otherF->getPath().Data());
    } else {
      // if we have an object of that type, we need to check which one it is
      otherF->resolveImportLinks();
      if(otherSample){
        // the other one is a sample
        TQSample* thisSample = dynamic_cast<TQSample*>(thisObj);
        if(!thisSample){
          // there is a corresponding object in this sample folder, but it's not a sample
          ERRORclass("cannot merge sample '%s' with other object of type '%s'",otherSample->GetName(),thisObj->Class()->GetName());
        } else {
          // there is a corresponding object in this sample folder, and it's a sample
          if(!otherSample->hasSubSamples() && !thisSample->hasSubSamples()){
            // neither of the two samples has a subsample
            // in this case, we can simply add them as if they were folders
            int thisDate, otherDate;
            bool otherHasTimestamp = false; bool thisHasTimestamp = false;
            if (mode != SumElements) { //only read those tags if actually relevant
              otherHasTimestamp = otherSF->getTagInteger("."+traceID+".timestamp.machine",otherDate);
              thisHasTimestamp = thisSample->getTagInteger("."+traceID+".timestamp.machine",thisDate);
            }
            //we want to perform merging if one of the following conditions is true
            // -sumElement
            // -no time stamp on this instance but on the other one (take the content of the stamped one)
            // -both timestamps exist and the other one is newer (take the newer version)
            if(mode == SumElements || (!thisHasTimestamp && otherHasTimestamp) || ( (thisHasTimestamp && otherHasTimestamp) && (otherDate > thisDate) ) ){
              if(verbose) VERBOSEclass("Sample '%s' with no sub-samples: merge '%s' with timestamps: this is %s, other is %s",otherSample->getPath().Data(),otherSample->GetName(),
                                       thisSample->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data(),
                                       otherSample->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data());
              
              didMerge = thisSample->mergeAsFolder(otherSample,mode) || didMerge;
            } else {
              if(verbose) VERBOSEclass("Sample '%s' with no sub-samples: skip '%s' due to timestamps: this is %s, other is %s",otherSample->getPath().Data(),otherSample->GetName(),
                                       thisSample->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data(),
                                       otherSample->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data());
            }
          } else if(otherSample->hasSubSamples() && thisSample->hasSubSamples()){
            // both samples have sub samples
            // need to merge recursively to go deeper down the sample structure
            if(verbose) VERBOSEclass("Sample with sub-samples, going deeper for '%s'",otherSample->getPath().Data());
            didMerge = thisSample->mergeAsSampleFolder(otherSample,traceID,mode,verbose) || didMerge;
          } else {
            // one of the samples has sub samples, but the other one doesn't
            // we should never do this!
            ERRORclass("refusing to merge sample that has sub samples with one that has none at '%s'",thisSample->getPath().Data());
          }
        }
      } else if(otherSF){
        // the other one is a sample folder
        TQSampleFolder* thisSF = dynamic_cast<TQSampleFolder*>(thisObj);
        if(!thisSF){
          // there is a corresponding object in this sample folder, but it's not a sample folder
          ERRORclass("cannot merge sample folder '%s' with other object of type '%s'",otherSF->GetName(),thisObj->Class()->GetName());
        } else {
          // there is a corresponding object in this sample folder, and it's a sample folder
          if(otherSF->getTagBoolDefault("."+traceID+".visited~",false)){
            // the other one was visited
            // we need to look at its contents
            if(thisSF->getTagBoolDefault("."+traceID+".visited~",false)){
              // this one was visited as well
              // in this case, we need to merge recursively
              if(verbose) VERBOSEclass("merging from '%s'",otherSF->getPath().Data());
              didMerge = thisSF->mergeAsSampleFolder(otherSF,traceID,mode,verbose) || didMerge;
            } else {
              // this one was not visited
              // we just use the other one
              if(verbose) VERBOSEclass("grabbing '%s'",otherSF->getPath().Data());
              otherSF->detachFromBase();
              thisSF->detachFromBase();
              delete thisSF;
              this->addObject(otherSF);
              didMerge = true;
            }
          } else {
            // the other one was not visited
            // we can ignore it
            if(verbose) VERBOSEclass("ignoring '%s'",thisSF->getPath().Data());
          }
        }
      } else if(otherF){
        // the other one is a regular folder
        TQFolder* thisF = dynamic_cast<TQFolder*>(thisObj);
        if(!thisF){
          // there is a corresponding object in this sample folder, but it's not a folder
          ERRORclass("cannot merge folder '%s' with other object of type '%s'",otherF->GetName(),thisObj->Class()->GetName());
        } else {
          int thisDate, otherDate;
          bool otherHasTimestamp = false; bool thisHasTimestamp = false;
          if (mode != SumElements) {
            //only get the time stamps if it's relevant
            otherHasTimestamp = f->getTagInteger("."+traceID+".timestamp.machine",otherDate);
            thisHasTimestamp = this->getTagInteger("."+traceID+".timestamp.machine",thisDate);
          } 
          //we want to perform merging if one of the following conditions is true
          // -sumElement
          // -no time stamp on this instance but on the other one (take the content of the stamped one)
          // -both timestamps exist and the other one is newer (take the newer version)
          if(mode == SumElements || (!thisHasTimestamp && otherHasTimestamp) || ( (thisHasTimestamp && otherHasTimestamp) && (otherDate > thisDate) ) ){
            if(verbose) VERBOSEclass("Sample folder '%s': merge '%s' with timestamps: this is %s, other is %s",f->getPath().Data(),otherF->GetName(),
                                     this->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data(),
                                     f->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data());
            // there is a corresponding object in this sample folder, and its also a folder
            // there are some issues with protection, hence the following line looks a bit silly
            didMerge = (thisF->*&TQSampleFolder::mergeAsFolder)(otherF,mode) || didMerge;
            // what it actually does is just 
            // thisF->mergeAsFolder(otherF,mode)
            // for reference, see 
            // http://stackoverflow.com/questions/30111578/trying-to-call-protected-function-of-parent-class-in-child-class-in-c
          } else {
            if(verbose) VERBOSEclass("Sample folder '%s': skip '%s' due to timestamps: this is %s, other is %s",f->getPath().Data(),otherF->GetName(),
                                     this->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data(),
                                     f->getTagStringDefault("."+traceID+".timestamp.human","<unknown>").Data());
          }
        }
      }
    }
  }
  this->mergeTags(f);
  this->mergeObjects(f,mode);
  return didMerge;
}

//__________________________________________________________________________________|___________



void TQSampleFolder::findFriends(const TString& pathpattern, bool forceUpdateSubfolder){
  // find the friends of this sample folder in a branch of the current folder tree
  TQSampleFolder* base = this->getBaseSampleFolder();
  TQSampleFolderIterator itr(base->getListOfSampleFolders(pathpattern),true);
  while(itr.hasNext()){
    TQSampleFolder* sf= itr.readNext();
    this->findFriends(sf, forceUpdateSubfolder);
  }
}

//__________________________________________________________________________________|___________

void TQSampleFolder::findFriends(bool forceUpdateSubfolder){
    // find the friends of this sample folder in the current folder tree
  TQSampleFolder* base = this->getRootSampleFolder();
  this->findFriends(base, forceUpdateSubfolder);
}

//__________________________________________________________________________________|___________

void TQSampleFolder::findFriends(TQSampleFolder* otherSF, bool forceUpdateSubfolder){
  // public version wrapping protected version which uses additional, performance saving parameters
  this->findFriends(otherSF, forceUpdateSubfolder, nullptr);
}

//__________________________________________________________________________________|___________

void TQSampleFolder::findFriends(TQSampleFolder* otherSF, bool forceUpdateSubfolder, std::shared_ptr<TList> otherSFContents){
  //protected version with additional arguments (pre-compiled contents of otherSF) for performance reasons
  if (this->fIsFindingFriends) return; //we're already running this method for this instance, prevent infinite recursions!
  this->fIsFindingFriends = true;
  if (forceUpdateSubfolder || (this->countFriends() == 0) ) this->findFriendsInternal(otherSF,forceUpdateSubfolder, otherSFContents);
  this->fIsFindingFriends = false;
  return;
}

//__________________________________________________________________________________|___________

void TQSampleFolder::findFriendsInternal(TQSampleFolder* otherSF, bool forceUpdateSubfolder, std::shared_ptr<TList> otherSFContents){
  // find the friends of this sample folder in some other sample folder
  // the otherSFContents shared_ptr can optionally be provided and has to be equivalent 
  // to obtainig it (as a bare ptr) as other->getListOfSampeFolders("*") . This should only be used 
  // in recursive calls to save us from recreating this list over and over again
  DEBUGclass("finding friends");
  
  if (!otherSFContents) otherSFContents = std::shared_ptr<TList>(otherSF->getListOfSampleFolders("*")); //note: even if this list arrives in the TQSample version, using a TQSampleIterator there will automatically filter out TQSampeFolders in this list
  TQSampleFolderIterator itr(otherSFContents.get()); //itr needs the bare pointer
  //now check if all sub-samples are friends and if so, befriend with their sup-folder
  DEBUGclass("checking for friends of '%s'",this->getPath().Data());
  itr.reset();
  TQSampleFolderIterator subitr(this->getListOfSampleFolders("?"));
  while(itr.hasNext()){
    TQSampleFolder* other = itr.readNext();
    if (!other) continue;
    if (this->getDistToRoot() != other->getDistToRoot()) continue; //folders must not only be unrelated or identical but must be identical or at same depth (which implies being unrelated) -> fixing synchronous initialization of friends being impossible/broken
    //if (this->isFriend(other)) continue; //if they are already friends we don't need to do anything
    if (!forceUpdateSubfolder && other->hasFriends() ) continue; //if the other sample folder already has friends its list should already be complete (using symmetry of the equivalence relation). NOTE: this cannot be applied to 'this' as we're just constructing its list!
    //we apply the requirements: existence (not a null pointer), has sub samples, same number of (sub) samples as this sample, 
    if (!other || (this->getNSamples() != other->getNSamples()) || (this->getNSampleFolders() != other->getNSampleFolders()) ) continue;
    bool doBefriend = true;  //check if there is even an entry. TODO: if we assign true here as a default value we cause empty SampleFolders to become friends if they are at the same depth. I don't see any downside to this, but may require clarification. See also CAFCore#339 )
    while(subitr.hasNext() && doBefriend) {
      TQSampleFolder* thisSub = subitr.readNext();
      if (!thisSub) continue;
      TQSampleFolder* otherSub = other->getSampleFolder(thisSub->GetName());
      if (!otherSub) {doBefriend = false; break;} //if the friend candidate doesn't have a SampleFolder this folder has, we don't consider it a friend.
      if (!thisSub->isFriend(otherSub)) {
      thisSub->findFriends(otherSF, forceUpdateSubfolder, otherSFContents);//can this be a place for optimization? Maybe only have
      //otherSub->findFriends(otherSF, forceUpdateSubfolder); //do not enable this line it's just a reminder (not to do this)!
      }
      
      doBefriend = doBefriend && ( thisSub->isFriend(otherSub) || ( !thisSub->hasFriends() && !otherSub->hasFriends() ) ); //if neither of the two subfolders has friends (even after the update triggered before), these may be folders which were not populated (i.e. have no Samples attached below them at all)
      //if (!doBefriend) INFOclass("these two are not friends: '%s' and '%s'",thisSub->getPath().Data(),otherSub->getPath().Data());
    }
    subitr.reset();
    if (doBefriend) {
      DEBUGclass("befriending '%s' with '%s'",this->getPath().Data(),other->getPath().Data());
      this->befriend(other);
    }
  }
}


//__________________________________________________________________________________|___________

void TQSampleFolder::unfriend(TQSampleFolder* other){
  // remove a friend
  
  if (!other) return;
  if(this->fFriends && this->fFriends->count(other)>0){
    this->fFriends->erase(other);
  }
}


//__________________________________________________________________________________|___________

void TQSampleFolder::befriend(TQSampleFolder* other){
  // add another sample as a friend
  
  if (!other) return;
  DEBUGclass("Befriending SFs at '%' and '%'",this->getPath().Data(),other->getPath().Data());
  if (this->hasFriends() && other->hasFriends()) {
    //check that the friend sets are the same
    if ( !this->isFriend(other) ) {
      //something is really wrong!
      this->print("dt");
      other->print("dt");
      throw std::runtime_error(TString::Format("Cannot befriend sample(folder) '%s' and '%s': Both already have friends but the latter is not a friend of the former",this->getPath().Data(),other->getPath().Data()).Data());
    } else if ( !other->isFriend(this) ) {
      throw std::runtime_error(TString::Format("Cannot befriend sample(folder) '%s' and '%s': Both already have friends and the latter is a friend of the former but not the other way around. This should never happen! Unless you expect that your setup causes this issue, please report this incident (with a way to reproduce it) to qframework-users@SPAMNOTcern.ch !",this->getPath().Data(),other->getPath().Data()).Data());
    }
    //everything is fine, the two sample folders are already friends
  } else if (other->hasFriends() && !this->hasFriends()) {
    //other samplefolder already has friends. Let's get his list and add this samplefolder
    this->fFriends = other->getFriends();
    this->fFriends->insert(this);
    
  } else if( this->hasFriends() && !other->hasFriends() ){
    //we already have a friend set but the other one doesn't. This is the mirrored case of the one before, so let's just flip 'this' and 'other'
    other->befriend(this);

  } else if( !this->hasFriends() && !other->hasFriends() ) {
    //both, this and other, don't have any friends yet. We create a new set, add 'this' and notify the 'other'
    this->fFriends = std::shared_ptr<std::set<TQSampleFolder*>>(new std::set<TQSampleFolder*>()); //new TList();
    this->fFriends->insert(this);
    other->befriend(this); //if 'other' doesn't have a set of friends yet it will ask for the one just created and add itself
  } else {
    throw std::runtime_error("There seems to be a case the code monkey has not thought of, better get him another cup of coffee!");
  }
  
}

//__________________________________________________________________________________|___________

void TQSampleFolder::clearFriends(){
  // clear the list of friends
  if(this->fFriends){
    this->fFriends.reset();
    this->fFriends = nullptr;
  }
}

//__________________________________________________________________________________|___________

std::shared_ptr<std::set<TQSampleFolder*>> TQSampleFolder::getFriends(){
  // retrieve the set of friends
  return this->fFriends;
}

//__________________________________________________________________________________|___________

int TQSampleFolder::countFriends(){
  // retrieve the list of friends
  if(!this->fFriends) return 0;
  return this->fFriends->size();
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::hasFriends(){
  // retrieve the list of friends
  return (this->countFriends() > 0);
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::isFriend(TQSampleFolder* other){
  // check if another folder is a friend
  if (!this->fFriends) return false;
  if (!other) return false;
  return (this->fFriends->count(other)>0);
}

//__________________________________________________________________________________|___________

void TQSampleFolder::printFriends(){
  // print the list of friends 
  if(!this->getBase() || !this->fFriends) {
    std::cout<< TQStringUtils::makeBoldWhite("<no friends>")<<std::endl;
    return;
  }
  for (auto s : (*this->fFriends)) {
    if(!s) continue;
    TString path(s->getPath());
    path.Prepend(":");
    if(s->getBase()){
      path.Prepend(s->getBase()->GetName());
    }
    std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::fixedWidth(s->GetName(),20)) << " " << TQStringUtils::fixedWidth(path,50) << std::endl;
  }
}

//__________________________________________________________________________________|___________

bool TQSampleFolder::isVariant(bool recursive) {
  TQSampleFolder* base = this->getBaseSampleFolder();
  return this->fIsVariant || (recursive && base && base->isVariant());
}

//__________________________________________________________________________________|___________

void TQSampleFolder::purgeWithoutTag(const TString& tag){
  TList * sampleFolders = this->getListOfSampleFolders("*");
  TQSampleFolderIterator itr(sampleFolders,true);
  std::set<TQSampleFolder*> kill;
  std::set<TQSampleFolder*> protect;
  while(itr.hasNext()){
    TQSampleFolder* sf = itr.readNext();
    if(!sf) continue;
    if(!sf->hasTag(tag)){
      kill.insert(sf);
    } else {
      protect.insert(sf);
    }
  }
  // clear list here and not at the end
  // otherwise we get errors of the form of ""TListst::Clear ERROR A list is accessing an object (0xc5404f0) already deleted (list name = TList)""
  // because we delete objects from memory before the list is destroyed (at the end of this function)
  // see https://sft.its.cern.ch/jira/browse/ROOT-9262
  sampleFolders->Clear();
  for(auto sf:protect){
    TQSampleFolder* base = sf->getBaseSampleFolder();
    while(base){
      if(kill.find(base) != kill.end()){
        kill.erase(base);
      }
      base = base->getBaseSampleFolder();
    }
  }
  if(kill.find(this) != kill.end()){
    kill.erase(this);
  }
  std::set<TQSampleFolder*> dependent;
  for(auto sf:kill){
    if(kill.find(sf->getBaseSampleFolder())!=kill.end()){
      dependent.insert(sf);
    }
  }
  for(auto sf:dependent){
    kill.erase(sf);
  }
  for(auto sf:kill){
    sf->detachFromBase();
    delete sf;
  }
}
 TQSampleFolder.cxx:1
 TQSampleFolder.cxx:2
 TQSampleFolder.cxx:3
 TQSampleFolder.cxx:4
 TQSampleFolder.cxx:5
 TQSampleFolder.cxx:6
 TQSampleFolder.cxx:7
 TQSampleFolder.cxx:8
 TQSampleFolder.cxx:9
 TQSampleFolder.cxx:10
 TQSampleFolder.cxx:11
 TQSampleFolder.cxx:12
 TQSampleFolder.cxx:13
 TQSampleFolder.cxx:14
 TQSampleFolder.cxx:15
 TQSampleFolder.cxx:16
 TQSampleFolder.cxx:17
 TQSampleFolder.cxx:18
 TQSampleFolder.cxx:19
 TQSampleFolder.cxx:20
 TQSampleFolder.cxx:21
 TQSampleFolder.cxx:22
 TQSampleFolder.cxx:23
 TQSampleFolder.cxx:24
 TQSampleFolder.cxx:25
 TQSampleFolder.cxx:26
 TQSampleFolder.cxx:27
 TQSampleFolder.cxx:28
 TQSampleFolder.cxx:29
 TQSampleFolder.cxx:30
 TQSampleFolder.cxx:31
 TQSampleFolder.cxx:32
 TQSampleFolder.cxx:33
 TQSampleFolder.cxx:34
 TQSampleFolder.cxx:35
 TQSampleFolder.cxx:36
 TQSampleFolder.cxx:37
 TQSampleFolder.cxx:38
 TQSampleFolder.cxx:39
 TQSampleFolder.cxx:40
 TQSampleFolder.cxx:41
 TQSampleFolder.cxx:42
 TQSampleFolder.cxx:43
 TQSampleFolder.cxx:44
 TQSampleFolder.cxx:45
 TQSampleFolder.cxx:46
 TQSampleFolder.cxx:47
 TQSampleFolder.cxx:48
 TQSampleFolder.cxx:49
 TQSampleFolder.cxx:50
 TQSampleFolder.cxx:51
 TQSampleFolder.cxx:52
 TQSampleFolder.cxx:53
 TQSampleFolder.cxx:54
 TQSampleFolder.cxx:55
 TQSampleFolder.cxx:56
 TQSampleFolder.cxx:57
 TQSampleFolder.cxx:58
 TQSampleFolder.cxx:59
 TQSampleFolder.cxx:60
 TQSampleFolder.cxx:61
 TQSampleFolder.cxx:62
 TQSampleFolder.cxx:63
 TQSampleFolder.cxx:64
 TQSampleFolder.cxx:65
 TQSampleFolder.cxx:66
 TQSampleFolder.cxx:67
 TQSampleFolder.cxx:68
 TQSampleFolder.cxx:69
 TQSampleFolder.cxx:70
 TQSampleFolder.cxx:71
 TQSampleFolder.cxx:72
 TQSampleFolder.cxx:73
 TQSampleFolder.cxx:74
 TQSampleFolder.cxx:75
 TQSampleFolder.cxx:76
 TQSampleFolder.cxx:77
 TQSampleFolder.cxx:78
 TQSampleFolder.cxx:79
 TQSampleFolder.cxx:80
 TQSampleFolder.cxx:81
 TQSampleFolder.cxx:82
 TQSampleFolder.cxx:83
 TQSampleFolder.cxx:84
 TQSampleFolder.cxx:85
 TQSampleFolder.cxx:86
 TQSampleFolder.cxx:87
 TQSampleFolder.cxx:88
 TQSampleFolder.cxx:89
 TQSampleFolder.cxx:90
 TQSampleFolder.cxx:91
 TQSampleFolder.cxx:92
 TQSampleFolder.cxx:93
 TQSampleFolder.cxx:94
 TQSampleFolder.cxx:95
 TQSampleFolder.cxx:96
 TQSampleFolder.cxx:97
 TQSampleFolder.cxx:98
 TQSampleFolder.cxx:99
 TQSampleFolder.cxx:100
 TQSampleFolder.cxx:101
 TQSampleFolder.cxx:102
 TQSampleFolder.cxx:103
 TQSampleFolder.cxx:104
 TQSampleFolder.cxx:105
 TQSampleFolder.cxx:106
 TQSampleFolder.cxx:107
 TQSampleFolder.cxx:108
 TQSampleFolder.cxx:109
 TQSampleFolder.cxx:110
 TQSampleFolder.cxx:111
 TQSampleFolder.cxx:112
 TQSampleFolder.cxx:113
 TQSampleFolder.cxx:114
 TQSampleFolder.cxx:115
 TQSampleFolder.cxx:116
 TQSampleFolder.cxx:117
 TQSampleFolder.cxx:118
 TQSampleFolder.cxx:119
 TQSampleFolder.cxx:120
 TQSampleFolder.cxx:121
 TQSampleFolder.cxx:122
 TQSampleFolder.cxx:123
 TQSampleFolder.cxx:124
 TQSampleFolder.cxx:125
 TQSampleFolder.cxx:126
 TQSampleFolder.cxx:127
 TQSampleFolder.cxx:128
 TQSampleFolder.cxx:129
 TQSampleFolder.cxx:130
 TQSampleFolder.cxx:131
 TQSampleFolder.cxx:132
 TQSampleFolder.cxx:133
 TQSampleFolder.cxx:134
 TQSampleFolder.cxx:135
 TQSampleFolder.cxx:136
 TQSampleFolder.cxx:137
 TQSampleFolder.cxx:138
 TQSampleFolder.cxx:139
 TQSampleFolder.cxx:140
 TQSampleFolder.cxx:141
 TQSampleFolder.cxx:142
 TQSampleFolder.cxx:143
 TQSampleFolder.cxx:144
 TQSampleFolder.cxx:145
 TQSampleFolder.cxx:146
 TQSampleFolder.cxx:147
 TQSampleFolder.cxx:148
 TQSampleFolder.cxx:149
 TQSampleFolder.cxx:150
 TQSampleFolder.cxx:151
 TQSampleFolder.cxx:152
 TQSampleFolder.cxx:153
 TQSampleFolder.cxx:154
 TQSampleFolder.cxx:155
 TQSampleFolder.cxx:156
 TQSampleFolder.cxx:157
 TQSampleFolder.cxx:158
 TQSampleFolder.cxx:159
 TQSampleFolder.cxx:160
 TQSampleFolder.cxx:161
 TQSampleFolder.cxx:162
 TQSampleFolder.cxx:163
 TQSampleFolder.cxx:164
 TQSampleFolder.cxx:165
 TQSampleFolder.cxx:166
 TQSampleFolder.cxx:167
 TQSampleFolder.cxx:168
 TQSampleFolder.cxx:169
 TQSampleFolder.cxx:170
 TQSampleFolder.cxx:171
 TQSampleFolder.cxx:172
 TQSampleFolder.cxx:173
 TQSampleFolder.cxx:174
 TQSampleFolder.cxx:175
 TQSampleFolder.cxx:176
 TQSampleFolder.cxx:177
 TQSampleFolder.cxx:178
 TQSampleFolder.cxx:179
 TQSampleFolder.cxx:180
 TQSampleFolder.cxx:181
 TQSampleFolder.cxx:182
 TQSampleFolder.cxx:183
 TQSampleFolder.cxx:184
 TQSampleFolder.cxx:185
 TQSampleFolder.cxx:186
 TQSampleFolder.cxx:187
 TQSampleFolder.cxx:188
 TQSampleFolder.cxx:189
 TQSampleFolder.cxx:190
 TQSampleFolder.cxx:191
 TQSampleFolder.cxx:192
 TQSampleFolder.cxx:193
 TQSampleFolder.cxx:194
 TQSampleFolder.cxx:195
 TQSampleFolder.cxx:196
 TQSampleFolder.cxx:197
 TQSampleFolder.cxx:198
 TQSampleFolder.cxx:199
 TQSampleFolder.cxx:200
 TQSampleFolder.cxx:201
 TQSampleFolder.cxx:202
 TQSampleFolder.cxx:203
 TQSampleFolder.cxx:204
 TQSampleFolder.cxx:205
 TQSampleFolder.cxx:206
 TQSampleFolder.cxx:207
 TQSampleFolder.cxx:208
 TQSampleFolder.cxx:209
 TQSampleFolder.cxx:210
 TQSampleFolder.cxx:211
 TQSampleFolder.cxx:212
 TQSampleFolder.cxx:213
 TQSampleFolder.cxx:214
 TQSampleFolder.cxx:215
 TQSampleFolder.cxx:216
 TQSampleFolder.cxx:217
 TQSampleFolder.cxx:218
 TQSampleFolder.cxx:219
 TQSampleFolder.cxx:220
 TQSampleFolder.cxx:221
 TQSampleFolder.cxx:222
 TQSampleFolder.cxx:223
 TQSampleFolder.cxx:224
 TQSampleFolder.cxx:225
 TQSampleFolder.cxx:226
 TQSampleFolder.cxx:227
 TQSampleFolder.cxx:228
 TQSampleFolder.cxx:229
 TQSampleFolder.cxx:230
 TQSampleFolder.cxx:231
 TQSampleFolder.cxx:232
 TQSampleFolder.cxx:233
 TQSampleFolder.cxx:234
 TQSampleFolder.cxx:235
 TQSampleFolder.cxx:236
 TQSampleFolder.cxx:237
 TQSampleFolder.cxx:238
 TQSampleFolder.cxx:239
 TQSampleFolder.cxx:240
 TQSampleFolder.cxx:241
 TQSampleFolder.cxx:242
 TQSampleFolder.cxx:243
 TQSampleFolder.cxx:244
 TQSampleFolder.cxx:245
 TQSampleFolder.cxx:246
 TQSampleFolder.cxx:247
 TQSampleFolder.cxx:248
 TQSampleFolder.cxx:249
 TQSampleFolder.cxx:250
 TQSampleFolder.cxx:251
 TQSampleFolder.cxx:252
 TQSampleFolder.cxx:253
 TQSampleFolder.cxx:254
 TQSampleFolder.cxx:255
 TQSampleFolder.cxx:256
 TQSampleFolder.cxx:257
 TQSampleFolder.cxx:258
 TQSampleFolder.cxx:259
 TQSampleFolder.cxx:260
 TQSampleFolder.cxx:261
 TQSampleFolder.cxx:262
 TQSampleFolder.cxx:263
 TQSampleFolder.cxx:264
 TQSampleFolder.cxx:265
 TQSampleFolder.cxx:266
 TQSampleFolder.cxx:267
 TQSampleFolder.cxx:268
 TQSampleFolder.cxx:269
 TQSampleFolder.cxx:270
 TQSampleFolder.cxx:271
 TQSampleFolder.cxx:272
 TQSampleFolder.cxx:273
 TQSampleFolder.cxx:274
 TQSampleFolder.cxx:275
 TQSampleFolder.cxx:276
 TQSampleFolder.cxx:277
 TQSampleFolder.cxx:278
 TQSampleFolder.cxx:279
 TQSampleFolder.cxx:280
 TQSampleFolder.cxx:281
 TQSampleFolder.cxx:282
 TQSampleFolder.cxx:283
 TQSampleFolder.cxx:284
 TQSampleFolder.cxx:285
 TQSampleFolder.cxx:286
 TQSampleFolder.cxx:287
 TQSampleFolder.cxx:288
 TQSampleFolder.cxx:289
 TQSampleFolder.cxx:290
 TQSampleFolder.cxx:291
 TQSampleFolder.cxx:292
 TQSampleFolder.cxx:293
 TQSampleFolder.cxx:294
 TQSampleFolder.cxx:295
 TQSampleFolder.cxx:296
 TQSampleFolder.cxx:297
 TQSampleFolder.cxx:298
 TQSampleFolder.cxx:299
 TQSampleFolder.cxx:300
 TQSampleFolder.cxx:301
 TQSampleFolder.cxx:302
 TQSampleFolder.cxx:303
 TQSampleFolder.cxx:304
 TQSampleFolder.cxx:305
 TQSampleFolder.cxx:306
 TQSampleFolder.cxx:307
 TQSampleFolder.cxx:308
 TQSampleFolder.cxx:309
 TQSampleFolder.cxx:310
 TQSampleFolder.cxx:311
 TQSampleFolder.cxx:312
 TQSampleFolder.cxx:313
 TQSampleFolder.cxx:314
 TQSampleFolder.cxx:315
 TQSampleFolder.cxx:316
 TQSampleFolder.cxx:317
 TQSampleFolder.cxx:318
 TQSampleFolder.cxx:319
 TQSampleFolder.cxx:320
 TQSampleFolder.cxx:321
 TQSampleFolder.cxx:322
 TQSampleFolder.cxx:323
 TQSampleFolder.cxx:324
 TQSampleFolder.cxx:325
 TQSampleFolder.cxx:326
 TQSampleFolder.cxx:327
 TQSampleFolder.cxx:328
 TQSampleFolder.cxx:329
 TQSampleFolder.cxx:330
 TQSampleFolder.cxx:331
 TQSampleFolder.cxx:332
 TQSampleFolder.cxx:333
 TQSampleFolder.cxx:334
 TQSampleFolder.cxx:335
 TQSampleFolder.cxx:336
 TQSampleFolder.cxx:337
 TQSampleFolder.cxx:338
 TQSampleFolder.cxx:339
 TQSampleFolder.cxx:340
 TQSampleFolder.cxx:341
 TQSampleFolder.cxx:342
 TQSampleFolder.cxx:343
 TQSampleFolder.cxx:344
 TQSampleFolder.cxx:345
 TQSampleFolder.cxx:346
 TQSampleFolder.cxx:347
 TQSampleFolder.cxx:348
 TQSampleFolder.cxx:349
 TQSampleFolder.cxx:350
 TQSampleFolder.cxx:351
 TQSampleFolder.cxx:352
 TQSampleFolder.cxx:353
 TQSampleFolder.cxx:354
 TQSampleFolder.cxx:355
 TQSampleFolder.cxx:356
 TQSampleFolder.cxx:357
 TQSampleFolder.cxx:358
 TQSampleFolder.cxx:359
 TQSampleFolder.cxx:360
 TQSampleFolder.cxx:361
 TQSampleFolder.cxx:362
 TQSampleFolder.cxx:363
 TQSampleFolder.cxx:364
 TQSampleFolder.cxx:365
 TQSampleFolder.cxx:366
 TQSampleFolder.cxx:367
 TQSampleFolder.cxx:368
 TQSampleFolder.cxx:369
 TQSampleFolder.cxx:370
 TQSampleFolder.cxx:371
 TQSampleFolder.cxx:372
 TQSampleFolder.cxx:373
 TQSampleFolder.cxx:374
 TQSampleFolder.cxx:375
 TQSampleFolder.cxx:376
 TQSampleFolder.cxx:377
 TQSampleFolder.cxx:378
 TQSampleFolder.cxx:379
 TQSampleFolder.cxx:380
 TQSampleFolder.cxx:381
 TQSampleFolder.cxx:382
 TQSampleFolder.cxx:383
 TQSampleFolder.cxx:384
 TQSampleFolder.cxx:385
 TQSampleFolder.cxx:386
 TQSampleFolder.cxx:387
 TQSampleFolder.cxx:388
 TQSampleFolder.cxx:389
 TQSampleFolder.cxx:390
 TQSampleFolder.cxx:391
 TQSampleFolder.cxx:392
 TQSampleFolder.cxx:393
 TQSampleFolder.cxx:394
 TQSampleFolder.cxx:395
 TQSampleFolder.cxx:396
 TQSampleFolder.cxx:397
 TQSampleFolder.cxx:398
 TQSampleFolder.cxx:399
 TQSampleFolder.cxx:400
 TQSampleFolder.cxx:401
 TQSampleFolder.cxx:402
 TQSampleFolder.cxx:403
 TQSampleFolder.cxx:404
 TQSampleFolder.cxx:405
 TQSampleFolder.cxx:406
 TQSampleFolder.cxx:407
 TQSampleFolder.cxx:408
 TQSampleFolder.cxx:409
 TQSampleFolder.cxx:410
 TQSampleFolder.cxx:411
 TQSampleFolder.cxx:412
 TQSampleFolder.cxx:413
 TQSampleFolder.cxx:414
 TQSampleFolder.cxx:415
 TQSampleFolder.cxx:416
 TQSampleFolder.cxx:417
 TQSampleFolder.cxx:418
 TQSampleFolder.cxx:419
 TQSampleFolder.cxx:420
 TQSampleFolder.cxx:421
 TQSampleFolder.cxx:422
 TQSampleFolder.cxx:423
 TQSampleFolder.cxx:424
 TQSampleFolder.cxx:425
 TQSampleFolder.cxx:426
 TQSampleFolder.cxx:427
 TQSampleFolder.cxx:428
 TQSampleFolder.cxx:429
 TQSampleFolder.cxx:430
 TQSampleFolder.cxx:431
 TQSampleFolder.cxx:432
 TQSampleFolder.cxx:433
 TQSampleFolder.cxx:434
 TQSampleFolder.cxx:435
 TQSampleFolder.cxx:436
 TQSampleFolder.cxx:437
 TQSampleFolder.cxx:438
 TQSampleFolder.cxx:439
 TQSampleFolder.cxx:440
 TQSampleFolder.cxx:441
 TQSampleFolder.cxx:442
 TQSampleFolder.cxx:443
 TQSampleFolder.cxx:444
 TQSampleFolder.cxx:445
 TQSampleFolder.cxx:446
 TQSampleFolder.cxx:447
 TQSampleFolder.cxx:448
 TQSampleFolder.cxx:449
 TQSampleFolder.cxx:450
 TQSampleFolder.cxx:451
 TQSampleFolder.cxx:452
 TQSampleFolder.cxx:453
 TQSampleFolder.cxx:454
 TQSampleFolder.cxx:455
 TQSampleFolder.cxx:456
 TQSampleFolder.cxx:457
 TQSampleFolder.cxx:458
 TQSampleFolder.cxx:459
 TQSampleFolder.cxx:460
 TQSampleFolder.cxx:461
 TQSampleFolder.cxx:462
 TQSampleFolder.cxx:463
 TQSampleFolder.cxx:464
 TQSampleFolder.cxx:465
 TQSampleFolder.cxx:466
 TQSampleFolder.cxx:467
 TQSampleFolder.cxx:468
 TQSampleFolder.cxx:469
 TQSampleFolder.cxx:470
 TQSampleFolder.cxx:471
 TQSampleFolder.cxx:472
 TQSampleFolder.cxx:473
 TQSampleFolder.cxx:474
 TQSampleFolder.cxx:475
 TQSampleFolder.cxx:476
 TQSampleFolder.cxx:477
 TQSampleFolder.cxx:478
 TQSampleFolder.cxx:479
 TQSampleFolder.cxx:480
 TQSampleFolder.cxx:481
 TQSampleFolder.cxx:482
 TQSampleFolder.cxx:483
 TQSampleFolder.cxx:484
 TQSampleFolder.cxx:485
 TQSampleFolder.cxx:486
 TQSampleFolder.cxx:487
 TQSampleFolder.cxx:488
 TQSampleFolder.cxx:489
 TQSampleFolder.cxx:490
 TQSampleFolder.cxx:491
 TQSampleFolder.cxx:492
 TQSampleFolder.cxx:493
 TQSampleFolder.cxx:494
 TQSampleFolder.cxx:495
 TQSampleFolder.cxx:496
 TQSampleFolder.cxx:497
 TQSampleFolder.cxx:498
 TQSampleFolder.cxx:499
 TQSampleFolder.cxx:500
 TQSampleFolder.cxx:501
 TQSampleFolder.cxx:502
 TQSampleFolder.cxx:503
 TQSampleFolder.cxx:504
 TQSampleFolder.cxx:505
 TQSampleFolder.cxx:506
 TQSampleFolder.cxx:507
 TQSampleFolder.cxx:508
 TQSampleFolder.cxx:509
 TQSampleFolder.cxx:510
 TQSampleFolder.cxx:511
 TQSampleFolder.cxx:512
 TQSampleFolder.cxx:513
 TQSampleFolder.cxx:514
 TQSampleFolder.cxx:515
 TQSampleFolder.cxx:516
 TQSampleFolder.cxx:517
 TQSampleFolder.cxx:518
 TQSampleFolder.cxx:519
 TQSampleFolder.cxx:520
 TQSampleFolder.cxx:521
 TQSampleFolder.cxx:522
 TQSampleFolder.cxx:523
 TQSampleFolder.cxx:524
 TQSampleFolder.cxx:525
 TQSampleFolder.cxx:526
 TQSampleFolder.cxx:527
 TQSampleFolder.cxx:528
 TQSampleFolder.cxx:529
 TQSampleFolder.cxx:530
 TQSampleFolder.cxx:531
 TQSampleFolder.cxx:532
 TQSampleFolder.cxx:533
 TQSampleFolder.cxx:534
 TQSampleFolder.cxx:535
 TQSampleFolder.cxx:536
 TQSampleFolder.cxx:537
 TQSampleFolder.cxx:538
 TQSampleFolder.cxx:539
 TQSampleFolder.cxx:540
 TQSampleFolder.cxx:541
 TQSampleFolder.cxx:542
 TQSampleFolder.cxx:543
 TQSampleFolder.cxx:544
 TQSampleFolder.cxx:545
 TQSampleFolder.cxx:546
 TQSampleFolder.cxx:547
 TQSampleFolder.cxx:548
 TQSampleFolder.cxx:549
 TQSampleFolder.cxx:550
 TQSampleFolder.cxx:551
 TQSampleFolder.cxx:552
 TQSampleFolder.cxx:553
 TQSampleFolder.cxx:554
 TQSampleFolder.cxx:555
 TQSampleFolder.cxx:556
 TQSampleFolder.cxx:557
 TQSampleFolder.cxx:558
 TQSampleFolder.cxx:559
 TQSampleFolder.cxx:560
 TQSampleFolder.cxx:561
 TQSampleFolder.cxx:562
 TQSampleFolder.cxx:563
 TQSampleFolder.cxx:564
 TQSampleFolder.cxx:565
 TQSampleFolder.cxx:566
 TQSampleFolder.cxx:567
 TQSampleFolder.cxx:568
 TQSampleFolder.cxx:569
 TQSampleFolder.cxx:570
 TQSampleFolder.cxx:571
 TQSampleFolder.cxx:572
 TQSampleFolder.cxx:573
 TQSampleFolder.cxx:574
 TQSampleFolder.cxx:575
 TQSampleFolder.cxx:576
 TQSampleFolder.cxx:577
 TQSampleFolder.cxx:578
 TQSampleFolder.cxx:579
 TQSampleFolder.cxx:580
 TQSampleFolder.cxx:581
 TQSampleFolder.cxx:582
 TQSampleFolder.cxx:583
 TQSampleFolder.cxx:584
 TQSampleFolder.cxx:585
 TQSampleFolder.cxx:586
 TQSampleFolder.cxx:587
 TQSampleFolder.cxx:588
 TQSampleFolder.cxx:589
 TQSampleFolder.cxx:590
 TQSampleFolder.cxx:591
 TQSampleFolder.cxx:592
 TQSampleFolder.cxx:593
 TQSampleFolder.cxx:594
 TQSampleFolder.cxx:595
 TQSampleFolder.cxx:596
 TQSampleFolder.cxx:597
 TQSampleFolder.cxx:598
 TQSampleFolder.cxx:599
 TQSampleFolder.cxx:600
 TQSampleFolder.cxx:601
 TQSampleFolder.cxx:602
 TQSampleFolder.cxx:603
 TQSampleFolder.cxx:604
 TQSampleFolder.cxx:605
 TQSampleFolder.cxx:606
 TQSampleFolder.cxx:607
 TQSampleFolder.cxx:608
 TQSampleFolder.cxx:609
 TQSampleFolder.cxx:610
 TQSampleFolder.cxx:611
 TQSampleFolder.cxx:612
 TQSampleFolder.cxx:613
 TQSampleFolder.cxx:614
 TQSampleFolder.cxx:615
 TQSampleFolder.cxx:616
 TQSampleFolder.cxx:617
 TQSampleFolder.cxx:618
 TQSampleFolder.cxx:619
 TQSampleFolder.cxx:620
 TQSampleFolder.cxx:621
 TQSampleFolder.cxx:622
 TQSampleFolder.cxx:623
 TQSampleFolder.cxx:624
 TQSampleFolder.cxx:625
 TQSampleFolder.cxx:626
 TQSampleFolder.cxx:627
 TQSampleFolder.cxx:628
 TQSampleFolder.cxx:629
 TQSampleFolder.cxx:630
 TQSampleFolder.cxx:631
 TQSampleFolder.cxx:632
 TQSampleFolder.cxx:633
 TQSampleFolder.cxx:634
 TQSampleFolder.cxx:635
 TQSampleFolder.cxx:636
 TQSampleFolder.cxx:637
 TQSampleFolder.cxx:638
 TQSampleFolder.cxx:639
 TQSampleFolder.cxx:640
 TQSampleFolder.cxx:641
 TQSampleFolder.cxx:642
 TQSampleFolder.cxx:643
 TQSampleFolder.cxx:644
 TQSampleFolder.cxx:645
 TQSampleFolder.cxx:646
 TQSampleFolder.cxx:647
 TQSampleFolder.cxx:648
 TQSampleFolder.cxx:649
 TQSampleFolder.cxx:650
 TQSampleFolder.cxx:651
 TQSampleFolder.cxx:652
 TQSampleFolder.cxx:653
 TQSampleFolder.cxx:654
 TQSampleFolder.cxx:655
 TQSampleFolder.cxx:656
 TQSampleFolder.cxx:657
 TQSampleFolder.cxx:658
 TQSampleFolder.cxx:659
 TQSampleFolder.cxx:660
 TQSampleFolder.cxx:661
 TQSampleFolder.cxx:662
 TQSampleFolder.cxx:663
 TQSampleFolder.cxx:664
 TQSampleFolder.cxx:665
 TQSampleFolder.cxx:666
 TQSampleFolder.cxx:667
 TQSampleFolder.cxx:668
 TQSampleFolder.cxx:669
 TQSampleFolder.cxx:670
 TQSampleFolder.cxx:671
 TQSampleFolder.cxx:672
 TQSampleFolder.cxx:673
 TQSampleFolder.cxx:674
 TQSampleFolder.cxx:675
 TQSampleFolder.cxx:676
 TQSampleFolder.cxx:677
 TQSampleFolder.cxx:678
 TQSampleFolder.cxx:679
 TQSampleFolder.cxx:680
 TQSampleFolder.cxx:681
 TQSampleFolder.cxx:682
 TQSampleFolder.cxx:683
 TQSampleFolder.cxx:684
 TQSampleFolder.cxx:685
 TQSampleFolder.cxx:686
 TQSampleFolder.cxx:687
 TQSampleFolder.cxx:688
 TQSampleFolder.cxx:689
 TQSampleFolder.cxx:690
 TQSampleFolder.cxx:691
 TQSampleFolder.cxx:692
 TQSampleFolder.cxx:693
 TQSampleFolder.cxx:694
 TQSampleFolder.cxx:695
 TQSampleFolder.cxx:696
 TQSampleFolder.cxx:697
 TQSampleFolder.cxx:698
 TQSampleFolder.cxx:699
 TQSampleFolder.cxx:700
 TQSampleFolder.cxx:701
 TQSampleFolder.cxx:702
 TQSampleFolder.cxx:703
 TQSampleFolder.cxx:704
 TQSampleFolder.cxx:705
 TQSampleFolder.cxx:706
 TQSampleFolder.cxx:707
 TQSampleFolder.cxx:708
 TQSampleFolder.cxx:709
 TQSampleFolder.cxx:710
 TQSampleFolder.cxx:711
 TQSampleFolder.cxx:712
 TQSampleFolder.cxx:713
 TQSampleFolder.cxx:714
 TQSampleFolder.cxx:715
 TQSampleFolder.cxx:716
 TQSampleFolder.cxx:717
 TQSampleFolder.cxx:718
 TQSampleFolder.cxx:719
 TQSampleFolder.cxx:720
 TQSampleFolder.cxx:721
 TQSampleFolder.cxx:722
 TQSampleFolder.cxx:723
 TQSampleFolder.cxx:724
 TQSampleFolder.cxx:725
 TQSampleFolder.cxx:726
 TQSampleFolder.cxx:727
 TQSampleFolder.cxx:728
 TQSampleFolder.cxx:729
 TQSampleFolder.cxx:730
 TQSampleFolder.cxx:731
 TQSampleFolder.cxx:732
 TQSampleFolder.cxx:733
 TQSampleFolder.cxx:734
 TQSampleFolder.cxx:735
 TQSampleFolder.cxx:736
 TQSampleFolder.cxx:737
 TQSampleFolder.cxx:738
 TQSampleFolder.cxx:739
 TQSampleFolder.cxx:740
 TQSampleFolder.cxx:741
 TQSampleFolder.cxx:742
 TQSampleFolder.cxx:743
 TQSampleFolder.cxx:744
 TQSampleFolder.cxx:745
 TQSampleFolder.cxx:746
 TQSampleFolder.cxx:747
 TQSampleFolder.cxx:748
 TQSampleFolder.cxx:749
 TQSampleFolder.cxx:750
 TQSampleFolder.cxx:751
 TQSampleFolder.cxx:752
 TQSampleFolder.cxx:753
 TQSampleFolder.cxx:754
 TQSampleFolder.cxx:755
 TQSampleFolder.cxx:756
 TQSampleFolder.cxx:757
 TQSampleFolder.cxx:758
 TQSampleFolder.cxx:759
 TQSampleFolder.cxx:760
 TQSampleFolder.cxx:761
 TQSampleFolder.cxx:762
 TQSampleFolder.cxx:763
 TQSampleFolder.cxx:764
 TQSampleFolder.cxx:765
 TQSampleFolder.cxx:766
 TQSampleFolder.cxx:767
 TQSampleFolder.cxx:768
 TQSampleFolder.cxx:769
 TQSampleFolder.cxx:770
 TQSampleFolder.cxx:771
 TQSampleFolder.cxx:772
 TQSampleFolder.cxx:773
 TQSampleFolder.cxx:774
 TQSampleFolder.cxx:775
 TQSampleFolder.cxx:776
 TQSampleFolder.cxx:777
 TQSampleFolder.cxx:778
 TQSampleFolder.cxx:779
 TQSampleFolder.cxx:780
 TQSampleFolder.cxx:781
 TQSampleFolder.cxx:782
 TQSampleFolder.cxx:783
 TQSampleFolder.cxx:784
 TQSampleFolder.cxx:785
 TQSampleFolder.cxx:786
 TQSampleFolder.cxx:787
 TQSampleFolder.cxx:788
 TQSampleFolder.cxx:789
 TQSampleFolder.cxx:790
 TQSampleFolder.cxx:791
 TQSampleFolder.cxx:792
 TQSampleFolder.cxx:793
 TQSampleFolder.cxx:794
 TQSampleFolder.cxx:795
 TQSampleFolder.cxx:796
 TQSampleFolder.cxx:797
 TQSampleFolder.cxx:798
 TQSampleFolder.cxx:799
 TQSampleFolder.cxx:800
 TQSampleFolder.cxx:801
 TQSampleFolder.cxx:802
 TQSampleFolder.cxx:803
 TQSampleFolder.cxx:804
 TQSampleFolder.cxx:805
 TQSampleFolder.cxx:806
 TQSampleFolder.cxx:807
 TQSampleFolder.cxx:808
 TQSampleFolder.cxx:809
 TQSampleFolder.cxx:810
 TQSampleFolder.cxx:811
 TQSampleFolder.cxx:812
 TQSampleFolder.cxx:813
 TQSampleFolder.cxx:814
 TQSampleFolder.cxx:815
 TQSampleFolder.cxx:816
 TQSampleFolder.cxx:817
 TQSampleFolder.cxx:818
 TQSampleFolder.cxx:819
 TQSampleFolder.cxx:820
 TQSampleFolder.cxx:821
 TQSampleFolder.cxx:822
 TQSampleFolder.cxx:823
 TQSampleFolder.cxx:824
 TQSampleFolder.cxx:825
 TQSampleFolder.cxx:826
 TQSampleFolder.cxx:827
 TQSampleFolder.cxx:828
 TQSampleFolder.cxx:829
 TQSampleFolder.cxx:830
 TQSampleFolder.cxx:831
 TQSampleFolder.cxx:832
 TQSampleFolder.cxx:833
 TQSampleFolder.cxx:834
 TQSampleFolder.cxx:835
 TQSampleFolder.cxx:836
 TQSampleFolder.cxx:837
 TQSampleFolder.cxx:838
 TQSampleFolder.cxx:839
 TQSampleFolder.cxx:840
 TQSampleFolder.cxx:841
 TQSampleFolder.cxx:842
 TQSampleFolder.cxx:843
 TQSampleFolder.cxx:844
 TQSampleFolder.cxx:845
 TQSampleFolder.cxx:846
 TQSampleFolder.cxx:847
 TQSampleFolder.cxx:848
 TQSampleFolder.cxx:849
 TQSampleFolder.cxx:850
 TQSampleFolder.cxx:851
 TQSampleFolder.cxx:852
 TQSampleFolder.cxx:853
 TQSampleFolder.cxx:854
 TQSampleFolder.cxx:855
 TQSampleFolder.cxx:856
 TQSampleFolder.cxx:857
 TQSampleFolder.cxx:858
 TQSampleFolder.cxx:859
 TQSampleFolder.cxx:860
 TQSampleFolder.cxx:861
 TQSampleFolder.cxx:862
 TQSampleFolder.cxx:863
 TQSampleFolder.cxx:864
 TQSampleFolder.cxx:865
 TQSampleFolder.cxx:866
 TQSampleFolder.cxx:867
 TQSampleFolder.cxx:868
 TQSampleFolder.cxx:869
 TQSampleFolder.cxx:870
 TQSampleFolder.cxx:871
 TQSampleFolder.cxx:872
 TQSampleFolder.cxx:873
 TQSampleFolder.cxx:874
 TQSampleFolder.cxx:875
 TQSampleFolder.cxx:876
 TQSampleFolder.cxx:877
 TQSampleFolder.cxx:878
 TQSampleFolder.cxx:879
 TQSampleFolder.cxx:880
 TQSampleFolder.cxx:881
 TQSampleFolder.cxx:882
 TQSampleFolder.cxx:883
 TQSampleFolder.cxx:884
 TQSampleFolder.cxx:885
 TQSampleFolder.cxx:886
 TQSampleFolder.cxx:887
 TQSampleFolder.cxx:888
 TQSampleFolder.cxx:889
 TQSampleFolder.cxx:890
 TQSampleFolder.cxx:891
 TQSampleFolder.cxx:892
 TQSampleFolder.cxx:893
 TQSampleFolder.cxx:894
 TQSampleFolder.cxx:895
 TQSampleFolder.cxx:896
 TQSampleFolder.cxx:897
 TQSampleFolder.cxx:898
 TQSampleFolder.cxx:899
 TQSampleFolder.cxx:900
 TQSampleFolder.cxx:901
 TQSampleFolder.cxx:902
 TQSampleFolder.cxx:903
 TQSampleFolder.cxx:904
 TQSampleFolder.cxx:905
 TQSampleFolder.cxx:906
 TQSampleFolder.cxx:907
 TQSampleFolder.cxx:908
 TQSampleFolder.cxx:909
 TQSampleFolder.cxx:910
 TQSampleFolder.cxx:911
 TQSampleFolder.cxx:912
 TQSampleFolder.cxx:913
 TQSampleFolder.cxx:914
 TQSampleFolder.cxx:915
 TQSampleFolder.cxx:916
 TQSampleFolder.cxx:917
 TQSampleFolder.cxx:918
 TQSampleFolder.cxx:919
 TQSampleFolder.cxx:920
 TQSampleFolder.cxx:921
 TQSampleFolder.cxx:922
 TQSampleFolder.cxx:923
 TQSampleFolder.cxx:924
 TQSampleFolder.cxx:925
 TQSampleFolder.cxx:926
 TQSampleFolder.cxx:927
 TQSampleFolder.cxx:928
 TQSampleFolder.cxx:929
 TQSampleFolder.cxx:930
 TQSampleFolder.cxx:931
 TQSampleFolder.cxx:932
 TQSampleFolder.cxx:933
 TQSampleFolder.cxx:934
 TQSampleFolder.cxx:935
 TQSampleFolder.cxx:936
 TQSampleFolder.cxx:937
 TQSampleFolder.cxx:938
 TQSampleFolder.cxx:939
 TQSampleFolder.cxx:940
 TQSampleFolder.cxx:941
 TQSampleFolder.cxx:942
 TQSampleFolder.cxx:943
 TQSampleFolder.cxx:944
 TQSampleFolder.cxx:945
 TQSampleFolder.cxx:946
 TQSampleFolder.cxx:947
 TQSampleFolder.cxx:948
 TQSampleFolder.cxx:949
 TQSampleFolder.cxx:950
 TQSampleFolder.cxx:951
 TQSampleFolder.cxx:952
 TQSampleFolder.cxx:953
 TQSampleFolder.cxx:954
 TQSampleFolder.cxx:955
 TQSampleFolder.cxx:956
 TQSampleFolder.cxx:957
 TQSampleFolder.cxx:958
 TQSampleFolder.cxx:959
 TQSampleFolder.cxx:960
 TQSampleFolder.cxx:961
 TQSampleFolder.cxx:962
 TQSampleFolder.cxx:963
 TQSampleFolder.cxx:964
 TQSampleFolder.cxx:965
 TQSampleFolder.cxx:966
 TQSampleFolder.cxx:967
 TQSampleFolder.cxx:968
 TQSampleFolder.cxx:969
 TQSampleFolder.cxx:970
 TQSampleFolder.cxx:971
 TQSampleFolder.cxx:972
 TQSampleFolder.cxx:973
 TQSampleFolder.cxx:974
 TQSampleFolder.cxx:975
 TQSampleFolder.cxx:976
 TQSampleFolder.cxx:977
 TQSampleFolder.cxx:978
 TQSampleFolder.cxx:979
 TQSampleFolder.cxx:980
 TQSampleFolder.cxx:981
 TQSampleFolder.cxx:982
 TQSampleFolder.cxx:983
 TQSampleFolder.cxx:984
 TQSampleFolder.cxx:985
 TQSampleFolder.cxx:986
 TQSampleFolder.cxx:987
 TQSampleFolder.cxx:988
 TQSampleFolder.cxx:989
 TQSampleFolder.cxx:990
 TQSampleFolder.cxx:991
 TQSampleFolder.cxx:992
 TQSampleFolder.cxx:993
 TQSampleFolder.cxx:994
 TQSampleFolder.cxx:995
 TQSampleFolder.cxx:996
 TQSampleFolder.cxx:997
 TQSampleFolder.cxx:998
 TQSampleFolder.cxx:999
 TQSampleFolder.cxx:1000
 TQSampleFolder.cxx:1001
 TQSampleFolder.cxx:1002
 TQSampleFolder.cxx:1003
 TQSampleFolder.cxx:1004
 TQSampleFolder.cxx:1005
 TQSampleFolder.cxx:1006
 TQSampleFolder.cxx:1007
 TQSampleFolder.cxx:1008
 TQSampleFolder.cxx:1009
 TQSampleFolder.cxx:1010
 TQSampleFolder.cxx:1011
 TQSampleFolder.cxx:1012
 TQSampleFolder.cxx:1013
 TQSampleFolder.cxx:1014
 TQSampleFolder.cxx:1015
 TQSampleFolder.cxx:1016
 TQSampleFolder.cxx:1017
 TQSampleFolder.cxx:1018
 TQSampleFolder.cxx:1019
 TQSampleFolder.cxx:1020
 TQSampleFolder.cxx:1021
 TQSampleFolder.cxx:1022
 TQSampleFolder.cxx:1023
 TQSampleFolder.cxx:1024
 TQSampleFolder.cxx:1025
 TQSampleFolder.cxx:1026
 TQSampleFolder.cxx:1027
 TQSampleFolder.cxx:1028
 TQSampleFolder.cxx:1029
 TQSampleFolder.cxx:1030
 TQSampleFolder.cxx:1031
 TQSampleFolder.cxx:1032
 TQSampleFolder.cxx:1033
 TQSampleFolder.cxx:1034
 TQSampleFolder.cxx:1035
 TQSampleFolder.cxx:1036
 TQSampleFolder.cxx:1037
 TQSampleFolder.cxx:1038
 TQSampleFolder.cxx:1039
 TQSampleFolder.cxx:1040
 TQSampleFolder.cxx:1041
 TQSampleFolder.cxx:1042
 TQSampleFolder.cxx:1043
 TQSampleFolder.cxx:1044
 TQSampleFolder.cxx:1045
 TQSampleFolder.cxx:1046
 TQSampleFolder.cxx:1047
 TQSampleFolder.cxx:1048
 TQSampleFolder.cxx:1049
 TQSampleFolder.cxx:1050
 TQSampleFolder.cxx:1051
 TQSampleFolder.cxx:1052
 TQSampleFolder.cxx:1053
 TQSampleFolder.cxx:1054
 TQSampleFolder.cxx:1055
 TQSampleFolder.cxx:1056
 TQSampleFolder.cxx:1057
 TQSampleFolder.cxx:1058
 TQSampleFolder.cxx:1059
 TQSampleFolder.cxx:1060
 TQSampleFolder.cxx:1061
 TQSampleFolder.cxx:1062
 TQSampleFolder.cxx:1063
 TQSampleFolder.cxx:1064
 TQSampleFolder.cxx:1065
 TQSampleFolder.cxx:1066
 TQSampleFolder.cxx:1067
 TQSampleFolder.cxx:1068
 TQSampleFolder.cxx:1069
 TQSampleFolder.cxx:1070
 TQSampleFolder.cxx:1071
 TQSampleFolder.cxx:1072
 TQSampleFolder.cxx:1073
 TQSampleFolder.cxx:1074
 TQSampleFolder.cxx:1075
 TQSampleFolder.cxx:1076
 TQSampleFolder.cxx:1077
 TQSampleFolder.cxx:1078
 TQSampleFolder.cxx:1079
 TQSampleFolder.cxx:1080
 TQSampleFolder.cxx:1081
 TQSampleFolder.cxx:1082
 TQSampleFolder.cxx:1083
 TQSampleFolder.cxx:1084
 TQSampleFolder.cxx:1085
 TQSampleFolder.cxx:1086
 TQSampleFolder.cxx:1087
 TQSampleFolder.cxx:1088
 TQSampleFolder.cxx:1089
 TQSampleFolder.cxx:1090
 TQSampleFolder.cxx:1091
 TQSampleFolder.cxx:1092
 TQSampleFolder.cxx:1093
 TQSampleFolder.cxx:1094
 TQSampleFolder.cxx:1095
 TQSampleFolder.cxx:1096
 TQSampleFolder.cxx:1097
 TQSampleFolder.cxx:1098
 TQSampleFolder.cxx:1099
 TQSampleFolder.cxx:1100
 TQSampleFolder.cxx:1101
 TQSampleFolder.cxx:1102
 TQSampleFolder.cxx:1103
 TQSampleFolder.cxx:1104
 TQSampleFolder.cxx:1105
 TQSampleFolder.cxx:1106
 TQSampleFolder.cxx:1107
 TQSampleFolder.cxx:1108
 TQSampleFolder.cxx:1109
 TQSampleFolder.cxx:1110
 TQSampleFolder.cxx:1111
 TQSampleFolder.cxx:1112
 TQSampleFolder.cxx:1113
 TQSampleFolder.cxx:1114
 TQSampleFolder.cxx:1115
 TQSampleFolder.cxx:1116
 TQSampleFolder.cxx:1117
 TQSampleFolder.cxx:1118
 TQSampleFolder.cxx:1119
 TQSampleFolder.cxx:1120
 TQSampleFolder.cxx:1121
 TQSampleFolder.cxx:1122
 TQSampleFolder.cxx:1123
 TQSampleFolder.cxx:1124
 TQSampleFolder.cxx:1125
 TQSampleFolder.cxx:1126
 TQSampleFolder.cxx:1127
 TQSampleFolder.cxx:1128
 TQSampleFolder.cxx:1129
 TQSampleFolder.cxx:1130
 TQSampleFolder.cxx:1131
 TQSampleFolder.cxx:1132
 TQSampleFolder.cxx:1133
 TQSampleFolder.cxx:1134
 TQSampleFolder.cxx:1135
 TQSampleFolder.cxx:1136
 TQSampleFolder.cxx:1137
 TQSampleFolder.cxx:1138
 TQSampleFolder.cxx:1139
 TQSampleFolder.cxx:1140
 TQSampleFolder.cxx:1141
 TQSampleFolder.cxx:1142
 TQSampleFolder.cxx:1143
 TQSampleFolder.cxx:1144
 TQSampleFolder.cxx:1145
 TQSampleFolder.cxx:1146
 TQSampleFolder.cxx:1147
 TQSampleFolder.cxx:1148
 TQSampleFolder.cxx:1149
 TQSampleFolder.cxx:1150
 TQSampleFolder.cxx:1151
 TQSampleFolder.cxx:1152
 TQSampleFolder.cxx:1153
 TQSampleFolder.cxx:1154
 TQSampleFolder.cxx:1155
 TQSampleFolder.cxx:1156
 TQSampleFolder.cxx:1157
 TQSampleFolder.cxx:1158
 TQSampleFolder.cxx:1159
 TQSampleFolder.cxx:1160
 TQSampleFolder.cxx:1161
 TQSampleFolder.cxx:1162
 TQSampleFolder.cxx:1163
 TQSampleFolder.cxx:1164
 TQSampleFolder.cxx:1165
 TQSampleFolder.cxx:1166
 TQSampleFolder.cxx:1167
 TQSampleFolder.cxx:1168
 TQSampleFolder.cxx:1169
 TQSampleFolder.cxx:1170
 TQSampleFolder.cxx:1171
 TQSampleFolder.cxx:1172
 TQSampleFolder.cxx:1173
 TQSampleFolder.cxx:1174
 TQSampleFolder.cxx:1175
 TQSampleFolder.cxx:1176
 TQSampleFolder.cxx:1177
 TQSampleFolder.cxx:1178
 TQSampleFolder.cxx:1179
 TQSampleFolder.cxx:1180
 TQSampleFolder.cxx:1181
 TQSampleFolder.cxx:1182
 TQSampleFolder.cxx:1183
 TQSampleFolder.cxx:1184
 TQSampleFolder.cxx:1185
 TQSampleFolder.cxx:1186
 TQSampleFolder.cxx:1187
 TQSampleFolder.cxx:1188
 TQSampleFolder.cxx:1189
 TQSampleFolder.cxx:1190
 TQSampleFolder.cxx:1191
 TQSampleFolder.cxx:1192
 TQSampleFolder.cxx:1193
 TQSampleFolder.cxx:1194
 TQSampleFolder.cxx:1195
 TQSampleFolder.cxx:1196
 TQSampleFolder.cxx:1197
 TQSampleFolder.cxx:1198
 TQSampleFolder.cxx:1199
 TQSampleFolder.cxx:1200
 TQSampleFolder.cxx:1201
 TQSampleFolder.cxx:1202
 TQSampleFolder.cxx:1203
 TQSampleFolder.cxx:1204
 TQSampleFolder.cxx:1205
 TQSampleFolder.cxx:1206
 TQSampleFolder.cxx:1207
 TQSampleFolder.cxx:1208
 TQSampleFolder.cxx:1209
 TQSampleFolder.cxx:1210
 TQSampleFolder.cxx:1211
 TQSampleFolder.cxx:1212
 TQSampleFolder.cxx:1213
 TQSampleFolder.cxx:1214
 TQSampleFolder.cxx:1215
 TQSampleFolder.cxx:1216
 TQSampleFolder.cxx:1217
 TQSampleFolder.cxx:1218
 TQSampleFolder.cxx:1219
 TQSampleFolder.cxx:1220
 TQSampleFolder.cxx:1221
 TQSampleFolder.cxx:1222
 TQSampleFolder.cxx:1223
 TQSampleFolder.cxx:1224
 TQSampleFolder.cxx:1225
 TQSampleFolder.cxx:1226
 TQSampleFolder.cxx:1227
 TQSampleFolder.cxx:1228
 TQSampleFolder.cxx:1229
 TQSampleFolder.cxx:1230
 TQSampleFolder.cxx:1231
 TQSampleFolder.cxx:1232
 TQSampleFolder.cxx:1233
 TQSampleFolder.cxx:1234
 TQSampleFolder.cxx:1235
 TQSampleFolder.cxx:1236
 TQSampleFolder.cxx:1237
 TQSampleFolder.cxx:1238
 TQSampleFolder.cxx:1239
 TQSampleFolder.cxx:1240
 TQSampleFolder.cxx:1241
 TQSampleFolder.cxx:1242
 TQSampleFolder.cxx:1243
 TQSampleFolder.cxx:1244
 TQSampleFolder.cxx:1245
 TQSampleFolder.cxx:1246
 TQSampleFolder.cxx:1247
 TQSampleFolder.cxx:1248
 TQSampleFolder.cxx:1249
 TQSampleFolder.cxx:1250
 TQSampleFolder.cxx:1251
 TQSampleFolder.cxx:1252
 TQSampleFolder.cxx:1253
 TQSampleFolder.cxx:1254
 TQSampleFolder.cxx:1255
 TQSampleFolder.cxx:1256
 TQSampleFolder.cxx:1257
 TQSampleFolder.cxx:1258
 TQSampleFolder.cxx:1259
 TQSampleFolder.cxx:1260
 TQSampleFolder.cxx:1261
 TQSampleFolder.cxx:1262
 TQSampleFolder.cxx:1263
 TQSampleFolder.cxx:1264
 TQSampleFolder.cxx:1265
 TQSampleFolder.cxx:1266
 TQSampleFolder.cxx:1267
 TQSampleFolder.cxx:1268
 TQSampleFolder.cxx:1269
 TQSampleFolder.cxx:1270
 TQSampleFolder.cxx:1271
 TQSampleFolder.cxx:1272
 TQSampleFolder.cxx:1273
 TQSampleFolder.cxx:1274
 TQSampleFolder.cxx:1275
 TQSampleFolder.cxx:1276
 TQSampleFolder.cxx:1277
 TQSampleFolder.cxx:1278
 TQSampleFolder.cxx:1279
 TQSampleFolder.cxx:1280
 TQSampleFolder.cxx:1281
 TQSampleFolder.cxx:1282
 TQSampleFolder.cxx:1283
 TQSampleFolder.cxx:1284
 TQSampleFolder.cxx:1285
 TQSampleFolder.cxx:1286
 TQSampleFolder.cxx:1287
 TQSampleFolder.cxx:1288
 TQSampleFolder.cxx:1289
 TQSampleFolder.cxx:1290
 TQSampleFolder.cxx:1291
 TQSampleFolder.cxx:1292
 TQSampleFolder.cxx:1293
 TQSampleFolder.cxx:1294
 TQSampleFolder.cxx:1295
 TQSampleFolder.cxx:1296
 TQSampleFolder.cxx:1297
 TQSampleFolder.cxx:1298
 TQSampleFolder.cxx:1299
 TQSampleFolder.cxx:1300
 TQSampleFolder.cxx:1301
 TQSampleFolder.cxx:1302
 TQSampleFolder.cxx:1303
 TQSampleFolder.cxx:1304
 TQSampleFolder.cxx:1305
 TQSampleFolder.cxx:1306
 TQSampleFolder.cxx:1307
 TQSampleFolder.cxx:1308
 TQSampleFolder.cxx:1309
 TQSampleFolder.cxx:1310
 TQSampleFolder.cxx:1311
 TQSampleFolder.cxx:1312
 TQSampleFolder.cxx:1313
 TQSampleFolder.cxx:1314
 TQSampleFolder.cxx:1315
 TQSampleFolder.cxx:1316
 TQSampleFolder.cxx:1317
 TQSampleFolder.cxx:1318
 TQSampleFolder.cxx:1319
 TQSampleFolder.cxx:1320
 TQSampleFolder.cxx:1321
 TQSampleFolder.cxx:1322
 TQSampleFolder.cxx:1323
 TQSampleFolder.cxx:1324
 TQSampleFolder.cxx:1325
 TQSampleFolder.cxx:1326
 TQSampleFolder.cxx:1327
 TQSampleFolder.cxx:1328
 TQSampleFolder.cxx:1329
 TQSampleFolder.cxx:1330
 TQSampleFolder.cxx:1331
 TQSampleFolder.cxx:1332
 TQSampleFolder.cxx:1333
 TQSampleFolder.cxx:1334
 TQSampleFolder.cxx:1335
 TQSampleFolder.cxx:1336
 TQSampleFolder.cxx:1337
 TQSampleFolder.cxx:1338
 TQSampleFolder.cxx:1339
 TQSampleFolder.cxx:1340
 TQSampleFolder.cxx:1341
 TQSampleFolder.cxx:1342
 TQSampleFolder.cxx:1343
 TQSampleFolder.cxx:1344
 TQSampleFolder.cxx:1345
 TQSampleFolder.cxx:1346
 TQSampleFolder.cxx:1347
 TQSampleFolder.cxx:1348
 TQSampleFolder.cxx:1349
 TQSampleFolder.cxx:1350
 TQSampleFolder.cxx:1351
 TQSampleFolder.cxx:1352
 TQSampleFolder.cxx:1353
 TQSampleFolder.cxx:1354
 TQSampleFolder.cxx:1355
 TQSampleFolder.cxx:1356
 TQSampleFolder.cxx:1357
 TQSampleFolder.cxx:1358
 TQSampleFolder.cxx:1359
 TQSampleFolder.cxx:1360
 TQSampleFolder.cxx:1361
 TQSampleFolder.cxx:1362
 TQSampleFolder.cxx:1363
 TQSampleFolder.cxx:1364
 TQSampleFolder.cxx:1365
 TQSampleFolder.cxx:1366
 TQSampleFolder.cxx:1367
 TQSampleFolder.cxx:1368
 TQSampleFolder.cxx:1369
 TQSampleFolder.cxx:1370
 TQSampleFolder.cxx:1371
 TQSampleFolder.cxx:1372
 TQSampleFolder.cxx:1373
 TQSampleFolder.cxx:1374
 TQSampleFolder.cxx:1375
 TQSampleFolder.cxx:1376
 TQSampleFolder.cxx:1377
 TQSampleFolder.cxx:1378
 TQSampleFolder.cxx:1379
 TQSampleFolder.cxx:1380
 TQSampleFolder.cxx:1381
 TQSampleFolder.cxx:1382
 TQSampleFolder.cxx:1383
 TQSampleFolder.cxx:1384
 TQSampleFolder.cxx:1385
 TQSampleFolder.cxx:1386
 TQSampleFolder.cxx:1387
 TQSampleFolder.cxx:1388
 TQSampleFolder.cxx:1389
 TQSampleFolder.cxx:1390
 TQSampleFolder.cxx:1391
 TQSampleFolder.cxx:1392
 TQSampleFolder.cxx:1393
 TQSampleFolder.cxx:1394
 TQSampleFolder.cxx:1395
 TQSampleFolder.cxx:1396
 TQSampleFolder.cxx:1397
 TQSampleFolder.cxx:1398
 TQSampleFolder.cxx:1399
 TQSampleFolder.cxx:1400
 TQSampleFolder.cxx:1401
 TQSampleFolder.cxx:1402
 TQSampleFolder.cxx:1403
 TQSampleFolder.cxx:1404
 TQSampleFolder.cxx:1405
 TQSampleFolder.cxx:1406
 TQSampleFolder.cxx:1407
 TQSampleFolder.cxx:1408
 TQSampleFolder.cxx:1409
 TQSampleFolder.cxx:1410
 TQSampleFolder.cxx:1411
 TQSampleFolder.cxx:1412
 TQSampleFolder.cxx:1413
 TQSampleFolder.cxx:1414
 TQSampleFolder.cxx:1415
 TQSampleFolder.cxx:1416
 TQSampleFolder.cxx:1417
 TQSampleFolder.cxx:1418
 TQSampleFolder.cxx:1419
 TQSampleFolder.cxx:1420
 TQSampleFolder.cxx:1421
 TQSampleFolder.cxx:1422
 TQSampleFolder.cxx:1423
 TQSampleFolder.cxx:1424
 TQSampleFolder.cxx:1425
 TQSampleFolder.cxx:1426
 TQSampleFolder.cxx:1427
 TQSampleFolder.cxx:1428
 TQSampleFolder.cxx:1429
 TQSampleFolder.cxx:1430
 TQSampleFolder.cxx:1431
 TQSampleFolder.cxx:1432
 TQSampleFolder.cxx:1433
 TQSampleFolder.cxx:1434
 TQSampleFolder.cxx:1435
 TQSampleFolder.cxx:1436
 TQSampleFolder.cxx:1437
 TQSampleFolder.cxx:1438
 TQSampleFolder.cxx:1439
 TQSampleFolder.cxx:1440
 TQSampleFolder.cxx:1441
 TQSampleFolder.cxx:1442
 TQSampleFolder.cxx:1443
 TQSampleFolder.cxx:1444
 TQSampleFolder.cxx:1445
 TQSampleFolder.cxx:1446
 TQSampleFolder.cxx:1447
 TQSampleFolder.cxx:1448
 TQSampleFolder.cxx:1449
 TQSampleFolder.cxx:1450
 TQSampleFolder.cxx:1451
 TQSampleFolder.cxx:1452
 TQSampleFolder.cxx:1453
 TQSampleFolder.cxx:1454
 TQSampleFolder.cxx:1455
 TQSampleFolder.cxx:1456
 TQSampleFolder.cxx:1457
 TQSampleFolder.cxx:1458
 TQSampleFolder.cxx:1459
 TQSampleFolder.cxx:1460
 TQSampleFolder.cxx:1461
 TQSampleFolder.cxx:1462
 TQSampleFolder.cxx:1463
 TQSampleFolder.cxx:1464
 TQSampleFolder.cxx:1465
 TQSampleFolder.cxx:1466
 TQSampleFolder.cxx:1467
 TQSampleFolder.cxx:1468
 TQSampleFolder.cxx:1469
 TQSampleFolder.cxx:1470
 TQSampleFolder.cxx:1471
 TQSampleFolder.cxx:1472
 TQSampleFolder.cxx:1473
 TQSampleFolder.cxx:1474
 TQSampleFolder.cxx:1475
 TQSampleFolder.cxx:1476
 TQSampleFolder.cxx:1477
 TQSampleFolder.cxx:1478
 TQSampleFolder.cxx:1479
 TQSampleFolder.cxx:1480
 TQSampleFolder.cxx:1481
 TQSampleFolder.cxx:1482
 TQSampleFolder.cxx:1483
 TQSampleFolder.cxx:1484
 TQSampleFolder.cxx:1485
 TQSampleFolder.cxx:1486
 TQSampleFolder.cxx:1487
 TQSampleFolder.cxx:1488
 TQSampleFolder.cxx:1489
 TQSampleFolder.cxx:1490
 TQSampleFolder.cxx:1491
 TQSampleFolder.cxx:1492
 TQSampleFolder.cxx:1493
 TQSampleFolder.cxx:1494
 TQSampleFolder.cxx:1495
 TQSampleFolder.cxx:1496
 TQSampleFolder.cxx:1497
 TQSampleFolder.cxx:1498
 TQSampleFolder.cxx:1499
 TQSampleFolder.cxx:1500
 TQSampleFolder.cxx:1501
 TQSampleFolder.cxx:1502
 TQSampleFolder.cxx:1503
 TQSampleFolder.cxx:1504
 TQSampleFolder.cxx:1505
 TQSampleFolder.cxx:1506
 TQSampleFolder.cxx:1507
 TQSampleFolder.cxx:1508
 TQSampleFolder.cxx:1509
 TQSampleFolder.cxx:1510
 TQSampleFolder.cxx:1511
 TQSampleFolder.cxx:1512
 TQSampleFolder.cxx:1513
 TQSampleFolder.cxx:1514
 TQSampleFolder.cxx:1515
 TQSampleFolder.cxx:1516
 TQSampleFolder.cxx:1517
 TQSampleFolder.cxx:1518
 TQSampleFolder.cxx:1519
 TQSampleFolder.cxx:1520
 TQSampleFolder.cxx:1521
 TQSampleFolder.cxx:1522
 TQSampleFolder.cxx:1523
 TQSampleFolder.cxx:1524
 TQSampleFolder.cxx:1525
 TQSampleFolder.cxx:1526
 TQSampleFolder.cxx:1527
 TQSampleFolder.cxx:1528
 TQSampleFolder.cxx:1529
 TQSampleFolder.cxx:1530
 TQSampleFolder.cxx:1531
 TQSampleFolder.cxx:1532
 TQSampleFolder.cxx:1533
 TQSampleFolder.cxx:1534
 TQSampleFolder.cxx:1535
 TQSampleFolder.cxx:1536
 TQSampleFolder.cxx:1537
 TQSampleFolder.cxx:1538
 TQSampleFolder.cxx:1539
 TQSampleFolder.cxx:1540
 TQSampleFolder.cxx:1541
 TQSampleFolder.cxx:1542
 TQSampleFolder.cxx:1543
 TQSampleFolder.cxx:1544
 TQSampleFolder.cxx:1545
 TQSampleFolder.cxx:1546
 TQSampleFolder.cxx:1547
 TQSampleFolder.cxx:1548
 TQSampleFolder.cxx:1549
 TQSampleFolder.cxx:1550
 TQSampleFolder.cxx:1551
 TQSampleFolder.cxx:1552
 TQSampleFolder.cxx:1553
 TQSampleFolder.cxx:1554
 TQSampleFolder.cxx:1555
 TQSampleFolder.cxx:1556
 TQSampleFolder.cxx:1557
 TQSampleFolder.cxx:1558
 TQSampleFolder.cxx:1559
 TQSampleFolder.cxx:1560
 TQSampleFolder.cxx:1561
 TQSampleFolder.cxx:1562
 TQSampleFolder.cxx:1563
 TQSampleFolder.cxx:1564
 TQSampleFolder.cxx:1565
 TQSampleFolder.cxx:1566
 TQSampleFolder.cxx:1567
 TQSampleFolder.cxx:1568
 TQSampleFolder.cxx:1569
 TQSampleFolder.cxx:1570
 TQSampleFolder.cxx:1571
 TQSampleFolder.cxx:1572
 TQSampleFolder.cxx:1573
 TQSampleFolder.cxx:1574
 TQSampleFolder.cxx:1575
 TQSampleFolder.cxx:1576
 TQSampleFolder.cxx:1577
 TQSampleFolder.cxx:1578
 TQSampleFolder.cxx:1579
 TQSampleFolder.cxx:1580
 TQSampleFolder.cxx:1581
 TQSampleFolder.cxx:1582
 TQSampleFolder.cxx:1583
 TQSampleFolder.cxx:1584
 TQSampleFolder.cxx:1585
 TQSampleFolder.cxx:1586
 TQSampleFolder.cxx:1587
 TQSampleFolder.cxx:1588
 TQSampleFolder.cxx:1589
 TQSampleFolder.cxx:1590
 TQSampleFolder.cxx:1591
 TQSampleFolder.cxx:1592
 TQSampleFolder.cxx:1593
 TQSampleFolder.cxx:1594
 TQSampleFolder.cxx:1595
 TQSampleFolder.cxx:1596
 TQSampleFolder.cxx:1597
 TQSampleFolder.cxx:1598
 TQSampleFolder.cxx:1599
 TQSampleFolder.cxx:1600
 TQSampleFolder.cxx:1601
 TQSampleFolder.cxx:1602
 TQSampleFolder.cxx:1603
 TQSampleFolder.cxx:1604
 TQSampleFolder.cxx:1605
 TQSampleFolder.cxx:1606
 TQSampleFolder.cxx:1607
 TQSampleFolder.cxx:1608
 TQSampleFolder.cxx:1609
 TQSampleFolder.cxx:1610
 TQSampleFolder.cxx:1611
 TQSampleFolder.cxx:1612
 TQSampleFolder.cxx:1613
 TQSampleFolder.cxx:1614
 TQSampleFolder.cxx:1615
 TQSampleFolder.cxx:1616
 TQSampleFolder.cxx:1617
 TQSampleFolder.cxx:1618
 TQSampleFolder.cxx:1619
 TQSampleFolder.cxx:1620
 TQSampleFolder.cxx:1621
 TQSampleFolder.cxx:1622
 TQSampleFolder.cxx:1623
 TQSampleFolder.cxx:1624
 TQSampleFolder.cxx:1625
 TQSampleFolder.cxx:1626
 TQSampleFolder.cxx:1627
 TQSampleFolder.cxx:1628
 TQSampleFolder.cxx:1629
 TQSampleFolder.cxx:1630
 TQSampleFolder.cxx:1631
 TQSampleFolder.cxx:1632
 TQSampleFolder.cxx:1633
 TQSampleFolder.cxx:1634
 TQSampleFolder.cxx:1635
 TQSampleFolder.cxx:1636
 TQSampleFolder.cxx:1637
 TQSampleFolder.cxx:1638
 TQSampleFolder.cxx:1639
 TQSampleFolder.cxx:1640
 TQSampleFolder.cxx:1641
 TQSampleFolder.cxx:1642
 TQSampleFolder.cxx:1643
 TQSampleFolder.cxx:1644
 TQSampleFolder.cxx:1645
 TQSampleFolder.cxx:1646
 TQSampleFolder.cxx:1647
 TQSampleFolder.cxx:1648
 TQSampleFolder.cxx:1649
 TQSampleFolder.cxx:1650
 TQSampleFolder.cxx:1651
 TQSampleFolder.cxx:1652
 TQSampleFolder.cxx:1653
 TQSampleFolder.cxx:1654
 TQSampleFolder.cxx:1655
 TQSampleFolder.cxx:1656
 TQSampleFolder.cxx:1657
 TQSampleFolder.cxx:1658
 TQSampleFolder.cxx:1659
 TQSampleFolder.cxx:1660
 TQSampleFolder.cxx:1661
 TQSampleFolder.cxx:1662
 TQSampleFolder.cxx:1663
 TQSampleFolder.cxx:1664
 TQSampleFolder.cxx:1665
 TQSampleFolder.cxx:1666
 TQSampleFolder.cxx:1667
 TQSampleFolder.cxx:1668
 TQSampleFolder.cxx:1669
 TQSampleFolder.cxx:1670
 TQSampleFolder.cxx:1671
 TQSampleFolder.cxx:1672
 TQSampleFolder.cxx:1673
 TQSampleFolder.cxx:1674
 TQSampleFolder.cxx:1675
 TQSampleFolder.cxx:1676
 TQSampleFolder.cxx:1677
 TQSampleFolder.cxx:1678
 TQSampleFolder.cxx:1679
 TQSampleFolder.cxx:1680
 TQSampleFolder.cxx:1681
 TQSampleFolder.cxx:1682
 TQSampleFolder.cxx:1683
 TQSampleFolder.cxx:1684
 TQSampleFolder.cxx:1685
 TQSampleFolder.cxx:1686
 TQSampleFolder.cxx:1687
 TQSampleFolder.cxx:1688
 TQSampleFolder.cxx:1689
 TQSampleFolder.cxx:1690
 TQSampleFolder.cxx:1691
 TQSampleFolder.cxx:1692
 TQSampleFolder.cxx:1693
 TQSampleFolder.cxx:1694
 TQSampleFolder.cxx:1695
 TQSampleFolder.cxx:1696
 TQSampleFolder.cxx:1697
 TQSampleFolder.cxx:1698
 TQSampleFolder.cxx:1699
 TQSampleFolder.cxx:1700
 TQSampleFolder.cxx:1701
 TQSampleFolder.cxx:1702
 TQSampleFolder.cxx:1703
 TQSampleFolder.cxx:1704
 TQSampleFolder.cxx:1705
 TQSampleFolder.cxx:1706
 TQSampleFolder.cxx:1707
 TQSampleFolder.cxx:1708
 TQSampleFolder.cxx:1709
 TQSampleFolder.cxx:1710
 TQSampleFolder.cxx:1711
 TQSampleFolder.cxx:1712
 TQSampleFolder.cxx:1713
 TQSampleFolder.cxx:1714
 TQSampleFolder.cxx:1715
 TQSampleFolder.cxx:1716
 TQSampleFolder.cxx:1717
 TQSampleFolder.cxx:1718
 TQSampleFolder.cxx:1719
 TQSampleFolder.cxx:1720
 TQSampleFolder.cxx:1721
 TQSampleFolder.cxx:1722
 TQSampleFolder.cxx:1723
 TQSampleFolder.cxx:1724
 TQSampleFolder.cxx:1725
 TQSampleFolder.cxx:1726
 TQSampleFolder.cxx:1727
 TQSampleFolder.cxx:1728
 TQSampleFolder.cxx:1729
 TQSampleFolder.cxx:1730
 TQSampleFolder.cxx:1731
 TQSampleFolder.cxx:1732
 TQSampleFolder.cxx:1733
 TQSampleFolder.cxx:1734
 TQSampleFolder.cxx:1735
 TQSampleFolder.cxx:1736
 TQSampleFolder.cxx:1737
 TQSampleFolder.cxx:1738
 TQSampleFolder.cxx:1739
 TQSampleFolder.cxx:1740
 TQSampleFolder.cxx:1741
 TQSampleFolder.cxx:1742
 TQSampleFolder.cxx:1743
 TQSampleFolder.cxx:1744
 TQSampleFolder.cxx:1745
 TQSampleFolder.cxx:1746
 TQSampleFolder.cxx:1747
 TQSampleFolder.cxx:1748
 TQSampleFolder.cxx:1749
 TQSampleFolder.cxx:1750
 TQSampleFolder.cxx:1751
 TQSampleFolder.cxx:1752
 TQSampleFolder.cxx:1753
 TQSampleFolder.cxx:1754
 TQSampleFolder.cxx:1755
 TQSampleFolder.cxx:1756
 TQSampleFolder.cxx:1757
 TQSampleFolder.cxx:1758
 TQSampleFolder.cxx:1759
 TQSampleFolder.cxx:1760
 TQSampleFolder.cxx:1761
 TQSampleFolder.cxx:1762
 TQSampleFolder.cxx:1763
 TQSampleFolder.cxx:1764
 TQSampleFolder.cxx:1765
 TQSampleFolder.cxx:1766
 TQSampleFolder.cxx:1767
 TQSampleFolder.cxx:1768
 TQSampleFolder.cxx:1769
 TQSampleFolder.cxx:1770
 TQSampleFolder.cxx:1771
 TQSampleFolder.cxx:1772
 TQSampleFolder.cxx:1773
 TQSampleFolder.cxx:1774
 TQSampleFolder.cxx:1775
 TQSampleFolder.cxx:1776
 TQSampleFolder.cxx:1777
 TQSampleFolder.cxx:1778
 TQSampleFolder.cxx:1779
 TQSampleFolder.cxx:1780
 TQSampleFolder.cxx:1781
 TQSampleFolder.cxx:1782
 TQSampleFolder.cxx:1783
 TQSampleFolder.cxx:1784
 TQSampleFolder.cxx:1785
 TQSampleFolder.cxx:1786
 TQSampleFolder.cxx:1787
 TQSampleFolder.cxx:1788
 TQSampleFolder.cxx:1789
 TQSampleFolder.cxx:1790
 TQSampleFolder.cxx:1791
 TQSampleFolder.cxx:1792
 TQSampleFolder.cxx:1793
 TQSampleFolder.cxx:1794
 TQSampleFolder.cxx:1795
 TQSampleFolder.cxx:1796
 TQSampleFolder.cxx:1797
 TQSampleFolder.cxx:1798
 TQSampleFolder.cxx:1799
 TQSampleFolder.cxx:1800
 TQSampleFolder.cxx:1801
 TQSampleFolder.cxx:1802
 TQSampleFolder.cxx:1803
 TQSampleFolder.cxx:1804
 TQSampleFolder.cxx:1805
 TQSampleFolder.cxx:1806
 TQSampleFolder.cxx:1807
 TQSampleFolder.cxx:1808
 TQSampleFolder.cxx:1809
 TQSampleFolder.cxx:1810
 TQSampleFolder.cxx:1811
 TQSampleFolder.cxx:1812
 TQSampleFolder.cxx:1813
 TQSampleFolder.cxx:1814
 TQSampleFolder.cxx:1815
 TQSampleFolder.cxx:1816
 TQSampleFolder.cxx:1817
 TQSampleFolder.cxx:1818
 TQSampleFolder.cxx:1819
 TQSampleFolder.cxx:1820
 TQSampleFolder.cxx:1821
 TQSampleFolder.cxx:1822
 TQSampleFolder.cxx:1823
 TQSampleFolder.cxx:1824
 TQSampleFolder.cxx:1825
 TQSampleFolder.cxx:1826
 TQSampleFolder.cxx:1827
 TQSampleFolder.cxx:1828
 TQSampleFolder.cxx:1829
 TQSampleFolder.cxx:1830
 TQSampleFolder.cxx:1831
 TQSampleFolder.cxx:1832
 TQSampleFolder.cxx:1833
 TQSampleFolder.cxx:1834
 TQSampleFolder.cxx:1835
 TQSampleFolder.cxx:1836
 TQSampleFolder.cxx:1837
 TQSampleFolder.cxx:1838
 TQSampleFolder.cxx:1839
 TQSampleFolder.cxx:1840
 TQSampleFolder.cxx:1841
 TQSampleFolder.cxx:1842
 TQSampleFolder.cxx:1843
 TQSampleFolder.cxx:1844
 TQSampleFolder.cxx:1845
 TQSampleFolder.cxx:1846
 TQSampleFolder.cxx:1847
 TQSampleFolder.cxx:1848
 TQSampleFolder.cxx:1849
 TQSampleFolder.cxx:1850
 TQSampleFolder.cxx:1851
 TQSampleFolder.cxx:1852
 TQSampleFolder.cxx:1853
 TQSampleFolder.cxx:1854
 TQSampleFolder.cxx:1855
 TQSampleFolder.cxx:1856
 TQSampleFolder.cxx:1857
 TQSampleFolder.cxx:1858
 TQSampleFolder.cxx:1859
 TQSampleFolder.cxx:1860
 TQSampleFolder.cxx:1861
 TQSampleFolder.cxx:1862
 TQSampleFolder.cxx:1863
 TQSampleFolder.cxx:1864
 TQSampleFolder.cxx:1865
 TQSampleFolder.cxx:1866
 TQSampleFolder.cxx:1867
 TQSampleFolder.cxx:1868
 TQSampleFolder.cxx:1869
 TQSampleFolder.cxx:1870
 TQSampleFolder.cxx:1871
 TQSampleFolder.cxx:1872
 TQSampleFolder.cxx:1873
 TQSampleFolder.cxx:1874
 TQSampleFolder.cxx:1875
 TQSampleFolder.cxx:1876
 TQSampleFolder.cxx:1877
 TQSampleFolder.cxx:1878
 TQSampleFolder.cxx:1879
 TQSampleFolder.cxx:1880
 TQSampleFolder.cxx:1881
 TQSampleFolder.cxx:1882
 TQSampleFolder.cxx:1883
 TQSampleFolder.cxx:1884
 TQSampleFolder.cxx:1885
 TQSampleFolder.cxx:1886
 TQSampleFolder.cxx:1887
 TQSampleFolder.cxx:1888
 TQSampleFolder.cxx:1889
 TQSampleFolder.cxx:1890
 TQSampleFolder.cxx:1891
 TQSampleFolder.cxx:1892
 TQSampleFolder.cxx:1893
 TQSampleFolder.cxx:1894
 TQSampleFolder.cxx:1895
 TQSampleFolder.cxx:1896
 TQSampleFolder.cxx:1897
 TQSampleFolder.cxx:1898
 TQSampleFolder.cxx:1899
 TQSampleFolder.cxx:1900
 TQSampleFolder.cxx:1901
 TQSampleFolder.cxx:1902
 TQSampleFolder.cxx:1903
 TQSampleFolder.cxx:1904
 TQSampleFolder.cxx:1905
 TQSampleFolder.cxx:1906
 TQSampleFolder.cxx:1907
 TQSampleFolder.cxx:1908
 TQSampleFolder.cxx:1909
 TQSampleFolder.cxx:1910
 TQSampleFolder.cxx:1911
 TQSampleFolder.cxx:1912
 TQSampleFolder.cxx:1913
 TQSampleFolder.cxx:1914
 TQSampleFolder.cxx:1915
 TQSampleFolder.cxx:1916
 TQSampleFolder.cxx:1917
 TQSampleFolder.cxx:1918
 TQSampleFolder.cxx:1919
 TQSampleFolder.cxx:1920
 TQSampleFolder.cxx:1921
 TQSampleFolder.cxx:1922
 TQSampleFolder.cxx:1923
 TQSampleFolder.cxx:1924
 TQSampleFolder.cxx:1925
 TQSampleFolder.cxx:1926
 TQSampleFolder.cxx:1927
 TQSampleFolder.cxx:1928
 TQSampleFolder.cxx:1929
 TQSampleFolder.cxx:1930
 TQSampleFolder.cxx:1931
 TQSampleFolder.cxx:1932
 TQSampleFolder.cxx:1933
 TQSampleFolder.cxx:1934
 TQSampleFolder.cxx:1935
 TQSampleFolder.cxx:1936
 TQSampleFolder.cxx:1937
 TQSampleFolder.cxx:1938
 TQSampleFolder.cxx:1939
 TQSampleFolder.cxx:1940
 TQSampleFolder.cxx:1941
 TQSampleFolder.cxx:1942
 TQSampleFolder.cxx:1943
 TQSampleFolder.cxx:1944
 TQSampleFolder.cxx:1945
 TQSampleFolder.cxx:1946
 TQSampleFolder.cxx:1947
 TQSampleFolder.cxx:1948
 TQSampleFolder.cxx:1949
 TQSampleFolder.cxx:1950
 TQSampleFolder.cxx:1951
 TQSampleFolder.cxx:1952
 TQSampleFolder.cxx:1953
 TQSampleFolder.cxx:1954
 TQSampleFolder.cxx:1955
 TQSampleFolder.cxx:1956
 TQSampleFolder.cxx:1957
 TQSampleFolder.cxx:1958
 TQSampleFolder.cxx:1959
 TQSampleFolder.cxx:1960
 TQSampleFolder.cxx:1961
 TQSampleFolder.cxx:1962
 TQSampleFolder.cxx:1963
 TQSampleFolder.cxx:1964
 TQSampleFolder.cxx:1965
 TQSampleFolder.cxx:1966
 TQSampleFolder.cxx:1967
 TQSampleFolder.cxx:1968
 TQSampleFolder.cxx:1969
 TQSampleFolder.cxx:1970
 TQSampleFolder.cxx:1971
 TQSampleFolder.cxx:1972
 TQSampleFolder.cxx:1973
 TQSampleFolder.cxx:1974
 TQSampleFolder.cxx:1975
 TQSampleFolder.cxx:1976
 TQSampleFolder.cxx:1977
 TQSampleFolder.cxx:1978
 TQSampleFolder.cxx:1979
 TQSampleFolder.cxx:1980
 TQSampleFolder.cxx:1981
 TQSampleFolder.cxx:1982
 TQSampleFolder.cxx:1983
 TQSampleFolder.cxx:1984
 TQSampleFolder.cxx:1985
 TQSampleFolder.cxx:1986
 TQSampleFolder.cxx:1987
 TQSampleFolder.cxx:1988
 TQSampleFolder.cxx:1989
 TQSampleFolder.cxx:1990
 TQSampleFolder.cxx:1991
 TQSampleFolder.cxx:1992
 TQSampleFolder.cxx:1993
 TQSampleFolder.cxx:1994
 TQSampleFolder.cxx:1995
 TQSampleFolder.cxx:1996
 TQSampleFolder.cxx:1997
 TQSampleFolder.cxx:1998
 TQSampleFolder.cxx:1999
 TQSampleFolder.cxx:2000
 TQSampleFolder.cxx:2001
 TQSampleFolder.cxx:2002
 TQSampleFolder.cxx:2003
 TQSampleFolder.cxx:2004
 TQSampleFolder.cxx:2005
 TQSampleFolder.cxx:2006
 TQSampleFolder.cxx:2007
 TQSampleFolder.cxx:2008
 TQSampleFolder.cxx:2009
 TQSampleFolder.cxx:2010
 TQSampleFolder.cxx:2011
 TQSampleFolder.cxx:2012
 TQSampleFolder.cxx:2013
 TQSampleFolder.cxx:2014
 TQSampleFolder.cxx:2015
 TQSampleFolder.cxx:2016
 TQSampleFolder.cxx:2017
 TQSampleFolder.cxx:2018
 TQSampleFolder.cxx:2019
 TQSampleFolder.cxx:2020
 TQSampleFolder.cxx:2021
 TQSampleFolder.cxx:2022
 TQSampleFolder.cxx:2023
 TQSampleFolder.cxx:2024
 TQSampleFolder.cxx:2025
 TQSampleFolder.cxx:2026
 TQSampleFolder.cxx:2027
 TQSampleFolder.cxx:2028
 TQSampleFolder.cxx:2029
 TQSampleFolder.cxx:2030
 TQSampleFolder.cxx:2031
 TQSampleFolder.cxx:2032
 TQSampleFolder.cxx:2033
 TQSampleFolder.cxx:2034
 TQSampleFolder.cxx:2035
 TQSampleFolder.cxx:2036
 TQSampleFolder.cxx:2037
 TQSampleFolder.cxx:2038
 TQSampleFolder.cxx:2039
 TQSampleFolder.cxx:2040
 TQSampleFolder.cxx:2041
 TQSampleFolder.cxx:2042
 TQSampleFolder.cxx:2043
 TQSampleFolder.cxx:2044
 TQSampleFolder.cxx:2045
 TQSampleFolder.cxx:2046
 TQSampleFolder.cxx:2047
 TQSampleFolder.cxx:2048
 TQSampleFolder.cxx:2049
 TQSampleFolder.cxx:2050
 TQSampleFolder.cxx:2051
 TQSampleFolder.cxx:2052
 TQSampleFolder.cxx:2053
 TQSampleFolder.cxx:2054
 TQSampleFolder.cxx:2055
 TQSampleFolder.cxx:2056
 TQSampleFolder.cxx:2057
 TQSampleFolder.cxx:2058
 TQSampleFolder.cxx:2059
 TQSampleFolder.cxx:2060
 TQSampleFolder.cxx:2061
 TQSampleFolder.cxx:2062
 TQSampleFolder.cxx:2063
 TQSampleFolder.cxx:2064
 TQSampleFolder.cxx:2065
 TQSampleFolder.cxx:2066
 TQSampleFolder.cxx:2067
 TQSampleFolder.cxx:2068
 TQSampleFolder.cxx:2069
 TQSampleFolder.cxx:2070
 TQSampleFolder.cxx:2071
 TQSampleFolder.cxx:2072
 TQSampleFolder.cxx:2073
 TQSampleFolder.cxx:2074
 TQSampleFolder.cxx:2075
 TQSampleFolder.cxx:2076
 TQSampleFolder.cxx:2077
 TQSampleFolder.cxx:2078
 TQSampleFolder.cxx:2079
 TQSampleFolder.cxx:2080
 TQSampleFolder.cxx:2081
 TQSampleFolder.cxx:2082
 TQSampleFolder.cxx:2083
 TQSampleFolder.cxx:2084
 TQSampleFolder.cxx:2085
 TQSampleFolder.cxx:2086
 TQSampleFolder.cxx:2087
 TQSampleFolder.cxx:2088
 TQSampleFolder.cxx:2089
 TQSampleFolder.cxx:2090
 TQSampleFolder.cxx:2091
 TQSampleFolder.cxx:2092
 TQSampleFolder.cxx:2093
 TQSampleFolder.cxx:2094
 TQSampleFolder.cxx:2095
 TQSampleFolder.cxx:2096
 TQSampleFolder.cxx:2097
 TQSampleFolder.cxx:2098
 TQSampleFolder.cxx:2099
 TQSampleFolder.cxx:2100
 TQSampleFolder.cxx:2101
 TQSampleFolder.cxx:2102
 TQSampleFolder.cxx:2103
 TQSampleFolder.cxx:2104
 TQSampleFolder.cxx:2105
 TQSampleFolder.cxx:2106
 TQSampleFolder.cxx:2107
 TQSampleFolder.cxx:2108
 TQSampleFolder.cxx:2109
 TQSampleFolder.cxx:2110
 TQSampleFolder.cxx:2111
 TQSampleFolder.cxx:2112
 TQSampleFolder.cxx:2113
 TQSampleFolder.cxx:2114
 TQSampleFolder.cxx:2115
 TQSampleFolder.cxx:2116
 TQSampleFolder.cxx:2117
 TQSampleFolder.cxx:2118
 TQSampleFolder.cxx:2119
 TQSampleFolder.cxx:2120
 TQSampleFolder.cxx:2121
 TQSampleFolder.cxx:2122
 TQSampleFolder.cxx:2123
 TQSampleFolder.cxx:2124
 TQSampleFolder.cxx:2125
 TQSampleFolder.cxx:2126
 TQSampleFolder.cxx:2127
 TQSampleFolder.cxx:2128
 TQSampleFolder.cxx:2129
 TQSampleFolder.cxx:2130
 TQSampleFolder.cxx:2131
 TQSampleFolder.cxx:2132
 TQSampleFolder.cxx:2133
 TQSampleFolder.cxx:2134
 TQSampleFolder.cxx:2135
 TQSampleFolder.cxx:2136
 TQSampleFolder.cxx:2137
 TQSampleFolder.cxx:2138
 TQSampleFolder.cxx:2139
 TQSampleFolder.cxx:2140
 TQSampleFolder.cxx:2141
 TQSampleFolder.cxx:2142
 TQSampleFolder.cxx:2143
 TQSampleFolder.cxx:2144
 TQSampleFolder.cxx:2145
 TQSampleFolder.cxx:2146
 TQSampleFolder.cxx:2147
 TQSampleFolder.cxx:2148
 TQSampleFolder.cxx:2149
 TQSampleFolder.cxx:2150
 TQSampleFolder.cxx:2151
 TQSampleFolder.cxx:2152
 TQSampleFolder.cxx:2153
 TQSampleFolder.cxx:2154
 TQSampleFolder.cxx:2155
 TQSampleFolder.cxx:2156
 TQSampleFolder.cxx:2157
 TQSampleFolder.cxx:2158
 TQSampleFolder.cxx:2159
 TQSampleFolder.cxx:2160
 TQSampleFolder.cxx:2161
 TQSampleFolder.cxx:2162
 TQSampleFolder.cxx:2163
 TQSampleFolder.cxx:2164
 TQSampleFolder.cxx:2165
 TQSampleFolder.cxx:2166
 TQSampleFolder.cxx:2167
 TQSampleFolder.cxx:2168
 TQSampleFolder.cxx:2169
 TQSampleFolder.cxx:2170
 TQSampleFolder.cxx:2171
 TQSampleFolder.cxx:2172
 TQSampleFolder.cxx:2173
 TQSampleFolder.cxx:2174
 TQSampleFolder.cxx:2175
 TQSampleFolder.cxx:2176
 TQSampleFolder.cxx:2177
 TQSampleFolder.cxx:2178
 TQSampleFolder.cxx:2179
 TQSampleFolder.cxx:2180
 TQSampleFolder.cxx:2181
 TQSampleFolder.cxx:2182
 TQSampleFolder.cxx:2183
 TQSampleFolder.cxx:2184
 TQSampleFolder.cxx:2185
 TQSampleFolder.cxx:2186
 TQSampleFolder.cxx:2187
 TQSampleFolder.cxx:2188
 TQSampleFolder.cxx:2189
 TQSampleFolder.cxx:2190
 TQSampleFolder.cxx:2191
 TQSampleFolder.cxx:2192
 TQSampleFolder.cxx:2193
 TQSampleFolder.cxx:2194
 TQSampleFolder.cxx:2195
 TQSampleFolder.cxx:2196
 TQSampleFolder.cxx:2197
 TQSampleFolder.cxx:2198
 TQSampleFolder.cxx:2199
 TQSampleFolder.cxx:2200
 TQSampleFolder.cxx:2201
 TQSampleFolder.cxx:2202
 TQSampleFolder.cxx:2203
 TQSampleFolder.cxx:2204
 TQSampleFolder.cxx:2205
 TQSampleFolder.cxx:2206
 TQSampleFolder.cxx:2207
 TQSampleFolder.cxx:2208
 TQSampleFolder.cxx:2209
 TQSampleFolder.cxx:2210
 TQSampleFolder.cxx:2211
 TQSampleFolder.cxx:2212
 TQSampleFolder.cxx:2213
 TQSampleFolder.cxx:2214
 TQSampleFolder.cxx:2215
 TQSampleFolder.cxx:2216
 TQSampleFolder.cxx:2217
 TQSampleFolder.cxx:2218
 TQSampleFolder.cxx:2219
 TQSampleFolder.cxx:2220
 TQSampleFolder.cxx:2221
 TQSampleFolder.cxx:2222
 TQSampleFolder.cxx:2223
 TQSampleFolder.cxx:2224
 TQSampleFolder.cxx:2225
 TQSampleFolder.cxx:2226
 TQSampleFolder.cxx:2227
 TQSampleFolder.cxx:2228
 TQSampleFolder.cxx:2229
 TQSampleFolder.cxx:2230
 TQSampleFolder.cxx:2231
 TQSampleFolder.cxx:2232
 TQSampleFolder.cxx:2233
 TQSampleFolder.cxx:2234
 TQSampleFolder.cxx:2235
 TQSampleFolder.cxx:2236
 TQSampleFolder.cxx:2237
 TQSampleFolder.cxx:2238
 TQSampleFolder.cxx:2239
 TQSampleFolder.cxx:2240
 TQSampleFolder.cxx:2241
 TQSampleFolder.cxx:2242
 TQSampleFolder.cxx:2243
 TQSampleFolder.cxx:2244
 TQSampleFolder.cxx:2245
 TQSampleFolder.cxx:2246
 TQSampleFolder.cxx:2247
 TQSampleFolder.cxx:2248
 TQSampleFolder.cxx:2249
 TQSampleFolder.cxx:2250
 TQSampleFolder.cxx:2251
 TQSampleFolder.cxx:2252
 TQSampleFolder.cxx:2253
 TQSampleFolder.cxx:2254
 TQSampleFolder.cxx:2255
 TQSampleFolder.cxx:2256
 TQSampleFolder.cxx:2257
 TQSampleFolder.cxx:2258
 TQSampleFolder.cxx:2259
 TQSampleFolder.cxx:2260
 TQSampleFolder.cxx:2261
 TQSampleFolder.cxx:2262
 TQSampleFolder.cxx:2263
 TQSampleFolder.cxx:2264
 TQSampleFolder.cxx:2265
 TQSampleFolder.cxx:2266
 TQSampleFolder.cxx:2267
 TQSampleFolder.cxx:2268
 TQSampleFolder.cxx:2269
 TQSampleFolder.cxx:2270
 TQSampleFolder.cxx:2271
 TQSampleFolder.cxx:2272
 TQSampleFolder.cxx:2273
 TQSampleFolder.cxx:2274
 TQSampleFolder.cxx:2275
 TQSampleFolder.cxx:2276
 TQSampleFolder.cxx:2277
 TQSampleFolder.cxx:2278
 TQSampleFolder.cxx:2279
 TQSampleFolder.cxx:2280
 TQSampleFolder.cxx:2281
 TQSampleFolder.cxx:2282
 TQSampleFolder.cxx:2283
 TQSampleFolder.cxx:2284
 TQSampleFolder.cxx:2285
 TQSampleFolder.cxx:2286
 TQSampleFolder.cxx:2287
 TQSampleFolder.cxx:2288
 TQSampleFolder.cxx:2289
 TQSampleFolder.cxx:2290
 TQSampleFolder.cxx:2291
 TQSampleFolder.cxx:2292
 TQSampleFolder.cxx:2293
 TQSampleFolder.cxx:2294
 TQSampleFolder.cxx:2295
 TQSampleFolder.cxx:2296
 TQSampleFolder.cxx:2297
 TQSampleFolder.cxx:2298
 TQSampleFolder.cxx:2299
 TQSampleFolder.cxx:2300
 TQSampleFolder.cxx:2301
 TQSampleFolder.cxx:2302
 TQSampleFolder.cxx:2303
 TQSampleFolder.cxx:2304
 TQSampleFolder.cxx:2305
 TQSampleFolder.cxx:2306
 TQSampleFolder.cxx:2307
 TQSampleFolder.cxx:2308
 TQSampleFolder.cxx:2309
 TQSampleFolder.cxx:2310
 TQSampleFolder.cxx:2311
 TQSampleFolder.cxx:2312
 TQSampleFolder.cxx:2313
 TQSampleFolder.cxx:2314
 TQSampleFolder.cxx:2315
 TQSampleFolder.cxx:2316
 TQSampleFolder.cxx:2317
 TQSampleFolder.cxx:2318
 TQSampleFolder.cxx:2319
 TQSampleFolder.cxx:2320
 TQSampleFolder.cxx:2321
 TQSampleFolder.cxx:2322
 TQSampleFolder.cxx:2323
 TQSampleFolder.cxx:2324
 TQSampleFolder.cxx:2325
 TQSampleFolder.cxx:2326
 TQSampleFolder.cxx:2327
 TQSampleFolder.cxx:2328
 TQSampleFolder.cxx:2329
 TQSampleFolder.cxx:2330
 TQSampleFolder.cxx:2331
 TQSampleFolder.cxx:2332
 TQSampleFolder.cxx:2333
 TQSampleFolder.cxx:2334
 TQSampleFolder.cxx:2335
 TQSampleFolder.cxx:2336
 TQSampleFolder.cxx:2337
 TQSampleFolder.cxx:2338
 TQSampleFolder.cxx:2339
 TQSampleFolder.cxx:2340
 TQSampleFolder.cxx:2341
 TQSampleFolder.cxx:2342
 TQSampleFolder.cxx:2343
 TQSampleFolder.cxx:2344
 TQSampleFolder.cxx:2345
 TQSampleFolder.cxx:2346
 TQSampleFolder.cxx:2347
 TQSampleFolder.cxx:2348
 TQSampleFolder.cxx:2349
 TQSampleFolder.cxx:2350
 TQSampleFolder.cxx:2351
 TQSampleFolder.cxx:2352
 TQSampleFolder.cxx:2353
 TQSampleFolder.cxx:2354
 TQSampleFolder.cxx:2355
 TQSampleFolder.cxx:2356
 TQSampleFolder.cxx:2357
 TQSampleFolder.cxx:2358
 TQSampleFolder.cxx:2359
 TQSampleFolder.cxx:2360
 TQSampleFolder.cxx:2361
 TQSampleFolder.cxx:2362
 TQSampleFolder.cxx:2363
 TQSampleFolder.cxx:2364
 TQSampleFolder.cxx:2365
 TQSampleFolder.cxx:2366
 TQSampleFolder.cxx:2367
 TQSampleFolder.cxx:2368
 TQSampleFolder.cxx:2369
 TQSampleFolder.cxx:2370
 TQSampleFolder.cxx:2371
 TQSampleFolder.cxx:2372
 TQSampleFolder.cxx:2373
 TQSampleFolder.cxx:2374
 TQSampleFolder.cxx:2375
 TQSampleFolder.cxx:2376
 TQSampleFolder.cxx:2377
 TQSampleFolder.cxx:2378
 TQSampleFolder.cxx:2379
 TQSampleFolder.cxx:2380
 TQSampleFolder.cxx:2381
 TQSampleFolder.cxx:2382
 TQSampleFolder.cxx:2383
 TQSampleFolder.cxx:2384
 TQSampleFolder.cxx:2385
 TQSampleFolder.cxx:2386
 TQSampleFolder.cxx:2387
 TQSampleFolder.cxx:2388
 TQSampleFolder.cxx:2389
 TQSampleFolder.cxx:2390
 TQSampleFolder.cxx:2391
 TQSampleFolder.cxx:2392
 TQSampleFolder.cxx:2393
 TQSampleFolder.cxx:2394
 TQSampleFolder.cxx:2395
 TQSampleFolder.cxx:2396
 TQSampleFolder.cxx:2397
 TQSampleFolder.cxx:2398
 TQSampleFolder.cxx:2399
 TQSampleFolder.cxx:2400
 TQSampleFolder.cxx:2401
 TQSampleFolder.cxx:2402
 TQSampleFolder.cxx:2403
 TQSampleFolder.cxx:2404
 TQSampleFolder.cxx:2405
 TQSampleFolder.cxx:2406
 TQSampleFolder.cxx:2407
 TQSampleFolder.cxx:2408
 TQSampleFolder.cxx:2409
 TQSampleFolder.cxx:2410
 TQSampleFolder.cxx:2411
 TQSampleFolder.cxx:2412
 TQSampleFolder.cxx:2413
 TQSampleFolder.cxx:2414
 TQSampleFolder.cxx:2415
 TQSampleFolder.cxx:2416
 TQSampleFolder.cxx:2417
 TQSampleFolder.cxx:2418
 TQSampleFolder.cxx:2419
 TQSampleFolder.cxx:2420
 TQSampleFolder.cxx:2421
 TQSampleFolder.cxx:2422
 TQSampleFolder.cxx:2423
 TQSampleFolder.cxx:2424
 TQSampleFolder.cxx:2425
 TQSampleFolder.cxx:2426
 TQSampleFolder.cxx:2427
 TQSampleFolder.cxx:2428
 TQSampleFolder.cxx:2429
 TQSampleFolder.cxx:2430
 TQSampleFolder.cxx:2431
 TQSampleFolder.cxx:2432
 TQSampleFolder.cxx:2433
 TQSampleFolder.cxx:2434
 TQSampleFolder.cxx:2435
 TQSampleFolder.cxx:2436
 TQSampleFolder.cxx:2437
 TQSampleFolder.cxx:2438
 TQSampleFolder.cxx:2439
 TQSampleFolder.cxx:2440
 TQSampleFolder.cxx:2441
 TQSampleFolder.cxx:2442
 TQSampleFolder.cxx:2443
 TQSampleFolder.cxx:2444
 TQSampleFolder.cxx:2445
 TQSampleFolder.cxx:2446
 TQSampleFolder.cxx:2447
 TQSampleFolder.cxx:2448
 TQSampleFolder.cxx:2449
 TQSampleFolder.cxx:2450
 TQSampleFolder.cxx:2451
 TQSampleFolder.cxx:2452
 TQSampleFolder.cxx:2453
 TQSampleFolder.cxx:2454
 TQSampleFolder.cxx:2455
 TQSampleFolder.cxx:2456
 TQSampleFolder.cxx:2457
 TQSampleFolder.cxx:2458
 TQSampleFolder.cxx:2459
 TQSampleFolder.cxx:2460
 TQSampleFolder.cxx:2461
 TQSampleFolder.cxx:2462
 TQSampleFolder.cxx:2463
 TQSampleFolder.cxx:2464
 TQSampleFolder.cxx:2465
 TQSampleFolder.cxx:2466
 TQSampleFolder.cxx:2467
 TQSampleFolder.cxx:2468
 TQSampleFolder.cxx:2469
 TQSampleFolder.cxx:2470
 TQSampleFolder.cxx:2471
 TQSampleFolder.cxx:2472
 TQSampleFolder.cxx:2473
 TQSampleFolder.cxx:2474
 TQSampleFolder.cxx:2475
 TQSampleFolder.cxx:2476
 TQSampleFolder.cxx:2477
 TQSampleFolder.cxx:2478
 TQSampleFolder.cxx:2479
 TQSampleFolder.cxx:2480
 TQSampleFolder.cxx:2481
 TQSampleFolder.cxx:2482
 TQSampleFolder.cxx:2483
 TQSampleFolder.cxx:2484
 TQSampleFolder.cxx:2485
 TQSampleFolder.cxx:2486
 TQSampleFolder.cxx:2487
 TQSampleFolder.cxx:2488
 TQSampleFolder.cxx:2489
 TQSampleFolder.cxx:2490
 TQSampleFolder.cxx:2491
 TQSampleFolder.cxx:2492
 TQSampleFolder.cxx:2493
 TQSampleFolder.cxx:2494
 TQSampleFolder.cxx:2495
 TQSampleFolder.cxx:2496
 TQSampleFolder.cxx:2497
 TQSampleFolder.cxx:2498
 TQSampleFolder.cxx:2499
 TQSampleFolder.cxx:2500
 TQSampleFolder.cxx:2501
 TQSampleFolder.cxx:2502
 TQSampleFolder.cxx:2503
 TQSampleFolder.cxx:2504
 TQSampleFolder.cxx:2505
 TQSampleFolder.cxx:2506
 TQSampleFolder.cxx:2507
 TQSampleFolder.cxx:2508
 TQSampleFolder.cxx:2509
 TQSampleFolder.cxx:2510
 TQSampleFolder.cxx:2511
 TQSampleFolder.cxx:2512
 TQSampleFolder.cxx:2513
 TQSampleFolder.cxx:2514
 TQSampleFolder.cxx:2515
 TQSampleFolder.cxx:2516
 TQSampleFolder.cxx:2517
 TQSampleFolder.cxx:2518
 TQSampleFolder.cxx:2519
 TQSampleFolder.cxx:2520
 TQSampleFolder.cxx:2521
 TQSampleFolder.cxx:2522
 TQSampleFolder.cxx:2523
 TQSampleFolder.cxx:2524
 TQSampleFolder.cxx:2525
 TQSampleFolder.cxx:2526
 TQSampleFolder.cxx:2527
 TQSampleFolder.cxx:2528
 TQSampleFolder.cxx:2529
 TQSampleFolder.cxx:2530
 TQSampleFolder.cxx:2531
 TQSampleFolder.cxx:2532
 TQSampleFolder.cxx:2533
 TQSampleFolder.cxx:2534
 TQSampleFolder.cxx:2535
 TQSampleFolder.cxx:2536
 TQSampleFolder.cxx:2537
 TQSampleFolder.cxx:2538
 TQSampleFolder.cxx:2539
 TQSampleFolder.cxx:2540
 TQSampleFolder.cxx:2541
 TQSampleFolder.cxx:2542
 TQSampleFolder.cxx:2543
 TQSampleFolder.cxx:2544
 TQSampleFolder.cxx:2545
 TQSampleFolder.cxx:2546
 TQSampleFolder.cxx:2547
 TQSampleFolder.cxx:2548
 TQSampleFolder.cxx:2549
 TQSampleFolder.cxx:2550
 TQSampleFolder.cxx:2551
 TQSampleFolder.cxx:2552
 TQSampleFolder.cxx:2553
 TQSampleFolder.cxx:2554
 TQSampleFolder.cxx:2555
 TQSampleFolder.cxx:2556
 TQSampleFolder.cxx:2557
 TQSampleFolder.cxx:2558
 TQSampleFolder.cxx:2559
 TQSampleFolder.cxx:2560
 TQSampleFolder.cxx:2561
 TQSampleFolder.cxx:2562
 TQSampleFolder.cxx:2563
 TQSampleFolder.cxx:2564
 TQSampleFolder.cxx:2565
 TQSampleFolder.cxx:2566
 TQSampleFolder.cxx:2567
 TQSampleFolder.cxx:2568
 TQSampleFolder.cxx:2569
 TQSampleFolder.cxx:2570
 TQSampleFolder.cxx:2571
 TQSampleFolder.cxx:2572
 TQSampleFolder.cxx:2573
 TQSampleFolder.cxx:2574
 TQSampleFolder.cxx:2575
 TQSampleFolder.cxx:2576
 TQSampleFolder.cxx:2577
 TQSampleFolder.cxx:2578
 TQSampleFolder.cxx:2579
 TQSampleFolder.cxx:2580
 TQSampleFolder.cxx:2581
 TQSampleFolder.cxx:2582
 TQSampleFolder.cxx:2583
 TQSampleFolder.cxx:2584
 TQSampleFolder.cxx:2585
 TQSampleFolder.cxx:2586
 TQSampleFolder.cxx:2587
 TQSampleFolder.cxx:2588
 TQSampleFolder.cxx:2589
 TQSampleFolder.cxx:2590
 TQSampleFolder.cxx:2591
 TQSampleFolder.cxx:2592
 TQSampleFolder.cxx:2593
 TQSampleFolder.cxx:2594
 TQSampleFolder.cxx:2595
 TQSampleFolder.cxx:2596
 TQSampleFolder.cxx:2597
 TQSampleFolder.cxx:2598
 TQSampleFolder.cxx:2599
 TQSampleFolder.cxx:2600
 TQSampleFolder.cxx:2601
 TQSampleFolder.cxx:2602
 TQSampleFolder.cxx:2603
 TQSampleFolder.cxx:2604
 TQSampleFolder.cxx:2605
 TQSampleFolder.cxx:2606
 TQSampleFolder.cxx:2607
 TQSampleFolder.cxx:2608
 TQSampleFolder.cxx:2609
 TQSampleFolder.cxx:2610
 TQSampleFolder.cxx:2611
 TQSampleFolder.cxx:2612
 TQSampleFolder.cxx:2613
 TQSampleFolder.cxx:2614
 TQSampleFolder.cxx:2615
 TQSampleFolder.cxx:2616
 TQSampleFolder.cxx:2617
 TQSampleFolder.cxx:2618
 TQSampleFolder.cxx:2619
 TQSampleFolder.cxx:2620
 TQSampleFolder.cxx:2621
 TQSampleFolder.cxx:2622
 TQSampleFolder.cxx:2623
 TQSampleFolder.cxx:2624
 TQSampleFolder.cxx:2625
 TQSampleFolder.cxx:2626
 TQSampleFolder.cxx:2627
 TQSampleFolder.cxx:2628
 TQSampleFolder.cxx:2629
 TQSampleFolder.cxx:2630
 TQSampleFolder.cxx:2631
 TQSampleFolder.cxx:2632
 TQSampleFolder.cxx:2633
 TQSampleFolder.cxx:2634
 TQSampleFolder.cxx:2635
 TQSampleFolder.cxx:2636
 TQSampleFolder.cxx:2637
 TQSampleFolder.cxx:2638
 TQSampleFolder.cxx:2639
 TQSampleFolder.cxx:2640
 TQSampleFolder.cxx:2641
 TQSampleFolder.cxx:2642
 TQSampleFolder.cxx:2643
 TQSampleFolder.cxx:2644
 TQSampleFolder.cxx:2645
 TQSampleFolder.cxx:2646
 TQSampleFolder.cxx:2647
 TQSampleFolder.cxx:2648
 TQSampleFolder.cxx:2649
 TQSampleFolder.cxx:2650
 TQSampleFolder.cxx:2651
 TQSampleFolder.cxx:2652
 TQSampleFolder.cxx:2653
 TQSampleFolder.cxx:2654
 TQSampleFolder.cxx:2655
 TQSampleFolder.cxx:2656
 TQSampleFolder.cxx:2657
 TQSampleFolder.cxx:2658
 TQSampleFolder.cxx:2659
 TQSampleFolder.cxx:2660
 TQSampleFolder.cxx:2661
 TQSampleFolder.cxx:2662
 TQSampleFolder.cxx:2663
 TQSampleFolder.cxx:2664
 TQSampleFolder.cxx:2665
 TQSampleFolder.cxx:2666
 TQSampleFolder.cxx:2667
 TQSampleFolder.cxx:2668
 TQSampleFolder.cxx:2669
 TQSampleFolder.cxx:2670
 TQSampleFolder.cxx:2671
 TQSampleFolder.cxx:2672
 TQSampleFolder.cxx:2673
 TQSampleFolder.cxx:2674
 TQSampleFolder.cxx:2675
 TQSampleFolder.cxx:2676
 TQSampleFolder.cxx:2677
 TQSampleFolder.cxx:2678
 TQSampleFolder.cxx:2679
 TQSampleFolder.cxx:2680
 TQSampleFolder.cxx:2681
 TQSampleFolder.cxx:2682
 TQSampleFolder.cxx:2683
 TQSampleFolder.cxx:2684
 TQSampleFolder.cxx:2685
 TQSampleFolder.cxx:2686
 TQSampleFolder.cxx:2687
 TQSampleFolder.cxx:2688
 TQSampleFolder.cxx:2689
 TQSampleFolder.cxx:2690
 TQSampleFolder.cxx:2691
 TQSampleFolder.cxx:2692
 TQSampleFolder.cxx:2693
 TQSampleFolder.cxx:2694
 TQSampleFolder.cxx:2695
 TQSampleFolder.cxx:2696
 TQSampleFolder.cxx:2697
 TQSampleFolder.cxx:2698
 TQSampleFolder.cxx:2699
 TQSampleFolder.cxx:2700
 TQSampleFolder.cxx:2701
 TQSampleFolder.cxx:2702
 TQSampleFolder.cxx:2703
 TQSampleFolder.cxx:2704
 TQSampleFolder.cxx:2705
 TQSampleFolder.cxx:2706
 TQSampleFolder.cxx:2707
 TQSampleFolder.cxx:2708
 TQSampleFolder.cxx:2709
 TQSampleFolder.cxx:2710
 TQSampleFolder.cxx:2711
 TQSampleFolder.cxx:2712
 TQSampleFolder.cxx:2713
 TQSampleFolder.cxx:2714
 TQSampleFolder.cxx:2715
 TQSampleFolder.cxx:2716
 TQSampleFolder.cxx:2717
 TQSampleFolder.cxx:2718
 TQSampleFolder.cxx:2719
 TQSampleFolder.cxx:2720
 TQSampleFolder.cxx:2721
 TQSampleFolder.cxx:2722
 TQSampleFolder.cxx:2723
 TQSampleFolder.cxx:2724
 TQSampleFolder.cxx:2725
 TQSampleFolder.cxx:2726
 TQSampleFolder.cxx:2727
 TQSampleFolder.cxx:2728
 TQSampleFolder.cxx:2729
 TQSampleFolder.cxx:2730
 TQSampleFolder.cxx:2731
 TQSampleFolder.cxx:2732
 TQSampleFolder.cxx:2733
 TQSampleFolder.cxx:2734
 TQSampleFolder.cxx:2735
 TQSampleFolder.cxx:2736
 TQSampleFolder.cxx:2737
 TQSampleFolder.cxx:2738
 TQSampleFolder.cxx:2739
 TQSampleFolder.cxx:2740
 TQSampleFolder.cxx:2741
 TQSampleFolder.cxx:2742
 TQSampleFolder.cxx:2743
 TQSampleFolder.cxx:2744
 TQSampleFolder.cxx:2745
 TQSampleFolder.cxx:2746
 TQSampleFolder.cxx:2747
 TQSampleFolder.cxx:2748
 TQSampleFolder.cxx:2749
 TQSampleFolder.cxx:2750
 TQSampleFolder.cxx:2751
 TQSampleFolder.cxx:2752
 TQSampleFolder.cxx:2753
 TQSampleFolder.cxx:2754
 TQSampleFolder.cxx:2755
 TQSampleFolder.cxx:2756
 TQSampleFolder.cxx:2757
 TQSampleFolder.cxx:2758
 TQSampleFolder.cxx:2759
 TQSampleFolder.cxx:2760
 TQSampleFolder.cxx:2761
 TQSampleFolder.cxx:2762
 TQSampleFolder.cxx:2763
 TQSampleFolder.cxx:2764
 TQSampleFolder.cxx:2765
 TQSampleFolder.cxx:2766
 TQSampleFolder.cxx:2767
 TQSampleFolder.cxx:2768
 TQSampleFolder.cxx:2769
 TQSampleFolder.cxx:2770
 TQSampleFolder.cxx:2771
 TQSampleFolder.cxx:2772
 TQSampleFolder.cxx:2773
 TQSampleFolder.cxx:2774
 TQSampleFolder.cxx:2775
 TQSampleFolder.cxx:2776
 TQSampleFolder.cxx:2777
 TQSampleFolder.cxx:2778
 TQSampleFolder.cxx:2779
 TQSampleFolder.cxx:2780
 TQSampleFolder.cxx:2781
 TQSampleFolder.cxx:2782
 TQSampleFolder.cxx:2783
 TQSampleFolder.cxx:2784
 TQSampleFolder.cxx:2785
 TQSampleFolder.cxx:2786
 TQSampleFolder.cxx:2787
 TQSampleFolder.cxx:2788
 TQSampleFolder.cxx:2789
 TQSampleFolder.cxx:2790
 TQSampleFolder.cxx:2791
 TQSampleFolder.cxx:2792
 TQSampleFolder.cxx:2793
 TQSampleFolder.cxx:2794
 TQSampleFolder.cxx:2795
 TQSampleFolder.cxx:2796
 TQSampleFolder.cxx:2797
 TQSampleFolder.cxx:2798
 TQSampleFolder.cxx:2799
 TQSampleFolder.cxx:2800
 TQSampleFolder.cxx:2801
 TQSampleFolder.cxx:2802
 TQSampleFolder.cxx:2803
 TQSampleFolder.cxx:2804
 TQSampleFolder.cxx:2805
 TQSampleFolder.cxx:2806
 TQSampleFolder.cxx:2807
 TQSampleFolder.cxx:2808
 TQSampleFolder.cxx:2809
 TQSampleFolder.cxx:2810
 TQSampleFolder.cxx:2811
 TQSampleFolder.cxx:2812
 TQSampleFolder.cxx:2813
 TQSampleFolder.cxx:2814
 TQSampleFolder.cxx:2815
 TQSampleFolder.cxx:2816
 TQSampleFolder.cxx:2817
 TQSampleFolder.cxx:2818
 TQSampleFolder.cxx:2819
 TQSampleFolder.cxx:2820
 TQSampleFolder.cxx:2821
 TQSampleFolder.cxx:2822
 TQSampleFolder.cxx:2823
 TQSampleFolder.cxx:2824
 TQSampleFolder.cxx:2825
 TQSampleFolder.cxx:2826
 TQSampleFolder.cxx:2827
 TQSampleFolder.cxx:2828
 TQSampleFolder.cxx:2829
 TQSampleFolder.cxx:2830
 TQSampleFolder.cxx:2831
 TQSampleFolder.cxx:2832
 TQSampleFolder.cxx:2833
 TQSampleFolder.cxx:2834
 TQSampleFolder.cxx:2835
 TQSampleFolder.cxx:2836
 TQSampleFolder.cxx:2837
 TQSampleFolder.cxx:2838
 TQSampleFolder.cxx:2839
 TQSampleFolder.cxx:2840
 TQSampleFolder.cxx:2841
 TQSampleFolder.cxx:2842
 TQSampleFolder.cxx:2843
 TQSampleFolder.cxx:2844
 TQSampleFolder.cxx:2845
 TQSampleFolder.cxx:2846
 TQSampleFolder.cxx:2847
 TQSampleFolder.cxx:2848
 TQSampleFolder.cxx:2849
 TQSampleFolder.cxx:2850
 TQSampleFolder.cxx:2851
 TQSampleFolder.cxx:2852
 TQSampleFolder.cxx:2853
 TQSampleFolder.cxx:2854
 TQSampleFolder.cxx:2855
 TQSampleFolder.cxx:2856
 TQSampleFolder.cxx:2857
 TQSampleFolder.cxx:2858
 TQSampleFolder.cxx:2859
 TQSampleFolder.cxx:2860
 TQSampleFolder.cxx:2861
 TQSampleFolder.cxx:2862
 TQSampleFolder.cxx:2863
 TQSampleFolder.cxx:2864
 TQSampleFolder.cxx:2865
 TQSampleFolder.cxx:2866
 TQSampleFolder.cxx:2867
 TQSampleFolder.cxx:2868
 TQSampleFolder.cxx:2869
 TQSampleFolder.cxx:2870
 TQSampleFolder.cxx:2871
 TQSampleFolder.cxx:2872
 TQSampleFolder.cxx:2873
 TQSampleFolder.cxx:2874
 TQSampleFolder.cxx:2875
 TQSampleFolder.cxx:2876
 TQSampleFolder.cxx:2877
 TQSampleFolder.cxx:2878