#include "QFramework/TQSampleDataReader.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQTHnBaseUtils.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQSampleFolder.h"
#include "QFramework/TQFolder.h"
#include "QFramework/TQCounter.h"
#include "QFramework/TQTaggable.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQListUtils.h"
#include "QFramework/TQValue.h"
#include "QFramework/TQPCA.h"
#include "QFramework/TQCut.h"

#include "THashList.h"
#include "TMap.h"
#include "TTree.h"
#include "TList.h"
#include "TProfile.h"
#include "TProfile2D.h"
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "THnBase.h"
#include "THnSparse.h"
#include "TMath.h"
#include "TFile.h"

// #define _DEBUG_
#include "QFramework/TQLibrary.h"

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


////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQSampleDataReader:
//
// The TQSampleDataReader class provides methods to retrieve analysis results (histograms,
// cutflow counters, ...) from a structure of instances of the TQSampleFolder class. Generally,
// those elements are obtained by summing individual contributions in sample folders recursively.
//
// Retrieving histograms (in subfolders ".histograms"):
//
// - TQSampleDataReader::getHistogram("<path>", "<cutName/histogram>", ...) returning TH1*
//
// Retrieving cutflow counter (in subfolders ".cutflow"):
//
// - TQSampleDataReader::getCounter("<path>", "<cutName>", ...) returning TQCounter*
//
//
//
//
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQSampleDataReader)

//__________________________________________________________________________________|___________

TQSampleDataReader::TQSampleDataReader():
f_errMsg(new std::stringstream(),true,true)
{
  // default constructor
  reset();
}


//__________________________________________________________________________________|___________

TQSampleDataReader::TQSampleDataReader(TQSampleFolder * sampleFolder):
  f_errMsg(new std::stringstream(),true,true)
{
  // constructor using a TQSamplefolder
  reset();
  f_baseSampleFolder = sampleFolder;
}

//__________________________________________________________________________________|___________

TQSampleFolder* TQSampleDataReader::getSampleFolder(){
  // retrieve the sample folder
  return f_baseSampleFolder;
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::reset() {
  // reset this TQSampleDataReader
  f_baseSampleFolder = 0;
  f_localMode = false;
  f_Verbose = 0;
  f_errMsg.clearMessages();

  // reset the schemes
  f_styleScheme = "default";
  f_filterScheme = "";
  f_normScheme = "";
  f_scaleScheme = ".default";

  // reset object paths
  f_pathHistograms = ".histograms";
  f_pathGraphs = ".graphs";
  f_pathGridScan = ".gridscan";
  f_pathCutflow = ".cutflow";
  f_pathEventlists = ".eventlists";
  f_pathScaleFactors = ".scalefactors";
  f_pathPCA = ".pca";
  f_pathTrees = ".trees";
  
  //tmp
  if (collectTimer) delete collectTimer;
  if (summationTimer) delete summationTimer;
  if (auxTimer) delete auxTimer;
  collectTimer = new TStopwatch(); collectTimer->Reset();
  summationTimer = new TStopwatch(); summationTimer->Reset();
  auxTimer = new TStopwatch(); auxTimer->Reset();
}


//__________________________________________________________________________________|___________

void TQSampleDataReader::setLocalMode(bool localMode) {
  // Enables (<localMode> == true) or disables (<localMode> == false) the 'local
  // mode' of this instance of TQSampleDataReader (local mode is disabled by default).
  // In local mode, scale factors (better: normalization factors) or ignored for
  // sample folders starting from the base sample folder of this instance of
  // TQSampleDataReader up to the root sample folder. If the local mode is disabled
  // scale factors assigned to any sample folder up the sample folder tree are
  // accounted for. Examples:
  //
  // Let <samples> refer to a sample folder hierarchy with the following structure
  // samples/
  // bkg/
  // top/
  // WW/
  // sig/
  // and let the sample folder "bkg" have a scale factor of 2. assigned to it (at
  // some object folder). Defining two different instances of TQSampleDataReader
  //
  // TQSampleDataReader rd1(samples);
  // TQSampleDataReader rd2(samples->getSampleFolder("bkg"));
  //
  // both rd1.getHistogram(...) and rd2.getHistogram(...) will account for the scale
  // factor at sample folder "bkg" (provided the requested object is stored in
  // the corresponding object folder). However, in local mode, set by
  //
  // rd1.setLocalMode(true);
  // rd2.setLocalMode(true);
  //
  // only rd1.getHistogram(...) will account for the scale factor at sample folder
  // "bkg" (again, provided the requested object is stored in the corresponding object
  // folder), while rd2.getHistogram(...) will ignore this scale factor.
  //
  // Please note: the local mode does equivalently affect the retrieval of counter
  // and other scaleable objects.

  f_localMode = localMode;
}


//__________________________________________________________________________________|___________

bool TQSampleDataReader::getLocalMode() {
  // Returns true if this instance of TQSampleDataReader is in local mode and false
  // otherwise.

  return f_localMode;
}


//__________________________________________________________________________________|___________

void TQSampleDataReader::setVerbose(int verbose) {
  // Sets the verbosity of this instance of TQSampleDataReader to level <verbose>.
  // Verbosity levels are:
  // - 0: No output on standard out at all (default)
  // - 1: Print an error message on standard out if an operation fails
  // - 2: Print info for main internal function calls
  // - 3: Print info for nternal function calls
  // - 4: Trace detailed way through structure of sample folders

  f_Verbose = verbose;
}


//__________________________________________________________________________________|___________

int TQSampleDataReader::getVerbose() {
  // Returns the level of verbosity of this instance of TQSampleDataReader (see
  // documentation of TQSampleDataReader::setVerbose(...) for additional information
  // on verbosity levels).
 
  return f_Verbose;
}


//__________________________________________________________________________________|___________

void TQSampleDataReader::setErrorMessage(const TString& fname, const TString& message) {
 
  // update the error message
  f_errMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),fname,message);
 
  // print the error message if in verbose mode
  if (f_Verbose > 0) {
    TQLibrary::msgStream.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),fname,message);
  }
}


//__________________________________________________________________________________|___________

TString TQSampleDataReader::getErrorMessage() {
  // Return the last error message
  return f_errMsg.getMessages();
}

//__________________________________________________________________________________|___________

std::vector<TString> TQSampleDataReader::getPaths(const TString& paths, TList * inputTokens, const TString& pathPrefix){
  auto pathterms = this->parsePaths(paths,inputTokens,pathPrefix);
  std::vector<TString> retval;
  for(const auto& altpath:pathterms){
    for(const auto& path:altpath){
      retval.push_back(path.path);
    }
  }
  return retval;
}

//__________________________________________________________________________________|___________

std::vector< std::vector<TString> > TQSampleDataReader::getParsedPathStrings(TString paths, TList * inputTokens, TString pathPrefix) {
  // wrapper method to parsePaths for only returning the string values of the PathTerms

  std::vector<TQSampleDataReader::AltPath_t> altPaths = parsePaths(paths, inputTokens, pathPrefix);

  std::vector< std::vector<TString> > altPathStrings;

  for ( auto altPath : altPaths ) {
    std::vector<TString> pathTermStrings;
    altPathStrings.push_back(pathTermStrings);
    for ( auto pathTerm : altPath ) {
      altPathStrings.back().push_back(pathTerm.path);
    }
  }

  return altPathStrings;
}


//__________________________________________________________________________________|___________

std::vector<TQSampleDataReader::AltPath_t> TQSampleDataReader::parsePaths(TString paths, TList * inputTokens, TString pathPrefix) {
  DEBUGclass("called with '%s'",paths.Data());
  paths.ReplaceAll(",",";");
  if(paths.Contains("$")){
    DEBUGclass("path '%s' contains unresolved tags, unable to parse!",paths.Data());
    // return empty vector, expected upon error
    std::vector<TQSampleDataReader::AltPath_t> dummy;
    return dummy;
  }

  // clear error message
  f_errMsg.clearMessages();

  // to be returned
  std::vector<TQSampleDataReader::AltPath_t> tokens;

  // Add alternate paths if any were already provided as input
  // (implicit assumption of TList structure)
  for (int i = 0; inputTokens && i < inputTokens->GetEntries(); i++) {
    TList * subInputTokens = (TList*)inputTokens->At(i);
    TQSampleDataReader::AltPath_t altPath;
    tokens.push_back(altPath);
    // add all path terms for the alternate path
    for (int j = 0; j < subInputTokens->GetEntries(); j++) {
      TList * subsubInputTokens = (TList*)subInputTokens->At(j);
      double factor = ((TQValue*)subsubInputTokens->At(0))->getDouble();
      TString path = ((TQValue*)subsubInputTokens->At(1))->getString();
      double statCor = ((TQValue*)subsubInputTokens->At(2))->getDouble();
      PathTerm pathTerm(factor,path,statCor);
      tokens.back().push_back(pathTerm);
    }
  }

  // add the first alternative
  // to be populated later from input path string
  TQSampleDataReader::AltPath_t firstPath;
  tokens.push_back(firstPath);

  bool isFirstPath = true;
  bool done = false;
  bool error = false;

  // read paths tokens
  do {
    // the number of characters read (excluding blanks)
    int nCharsRead = 0;
    // read operator (get rid of leading blanks before)
    TString thisOperator;
    DEBUGclass("remaining text: '%s'",paths.Data());
    TQStringUtils::readBlanks(paths);
    nCharsRead += TQStringUtils::readToken(paths, thisOperator, "+-");
    TString operatorAppendix = paths;

    // read paths token (get rid of leading blanks before)
    TString thisPath;
    TString pathBuffer;
    TQStringUtils::readBlanks(paths);
    int nNewChars = 0;

    // evaluate operator token
    double factor = 1.;
    double statCor = 1.;
    
    // read any leading multipliers, e.g. "2*/path/to/my/whatever"
    int endidx = TQStringUtils::findFirstNotOf(paths,TQStringUtils::numerals+". ");
    if(endidx > 0 && endidx < paths.Length() && paths[endidx] == '*'){
      TQStringUtils::readToken(paths,pathBuffer,TQStringUtils::numerals+".");
      TQStringUtils::removeLeading(paths,"*");
      nNewChars = 0;
      factor = std::atof(pathBuffer.Data());
      pathBuffer.Clear();
      statCor = factor;
    }
    
    nNewChars += TQStringUtils::readTokenAndBlock(paths, pathBuffer,TQStringUtils::getDefaultIDCharacters() + "/*?","[]");
    TString innerBuffer = "";
    if(TQStringUtils::readUpTo(pathBuffer,thisPath,"[") < nNewChars){
      TQStringUtils::readBlock(pathBuffer,innerBuffer,"[]");
      std::vector<TQSampleDataReader::AltPath_t> parsed = this->parsePaths(innerBuffer,NULL,"");
      if (parsed.size() < 1) {
        DEBUGclass("encountered error while parsing '%s'",innerBuffer.Data());
        return parsed;
      }
      TQSampleDataReader::AltPath_t subtokens = parsed.at(0);
      TQSampleDataReader::AltPath_t::reverse_iterator rit = subtokens.rbegin();
      for(; rit != subtokens.rend(); ++rit){

        TString subtoken = rit->path;
        double subop_factor = rit->factor * factor;
        double subop_statcor = rit->statCor * factor; //tmp *factor

        TString subop = "+";
        if(subop_factor<0){
          if(thisOperator.BeginsWith("-"))
            subop="+";
          else
            subop="-";
        } else {
          if(thisOperator.BeginsWith("-"))
            subop="-";
          else
            subop="+";
        }
        if(subop_statcor<0 || (thisOperator.Length()>1))
          subop+=subop;
        if(fabs(subop_factor) != 1){
          subop+=TString::Format("%f*",fabs(subop_factor));
        }
        paths = subop+thisPath+subtoken+pathBuffer+paths;
      }
      continue;
    }
 
    nCharsRead+=nNewChars;
    TString pathAppendix = paths;
    // read ";" separating paths
    TString thisSep;
    TQStringUtils::readBlanks(paths);
    paths = TQStringUtils::trim(paths,"()/");
    nCharsRead += TQStringUtils::readToken(paths, thisSep, ";", 1);

    // prepend path prefix
    if (!thisPath.IsNull() && !pathPrefix.IsNull()){
      thisPath = TQFolder::concatPaths(pathPrefix, thisPath);
    }

    // we might have ran out of valid tokens in the input string
    if (nCharsRead == 0) {
      if (!paths.IsNull()) {
        // unexpected character in paths
        setErrorMessage(__FUNCTION__,TString::Format("syntax error near unexpected token '%s'", paths.Data()));
        error = true;
      } else if (isFirstPath) {
        // no (alternative) path at all
        if (tokens.size() > 1)
          setErrorMessage(__FUNCTION__,"alternative path expected");
        else
          setErrorMessage(__FUNCTION__,"path expected");
        error = true;
      } else {
        /* we are done if <paths> is an empty
         * string now (we read all of it) */
        done = true;
      }
      continue;
    }

    if ((thisOperator.IsNull() && isFirstPath) || thisOperator.CompareTo("+") == 0) {
      // add contributions
      factor *= 1.;
    } else if (thisOperator.CompareTo("-") == 0) {
      // subtract contributions
      factor *= -1.;
    } else if (thisOperator.CompareTo("--") == 0) {
      // subtract contributions with fully correlated statistical uncertainty
      factor *= -1.;
      statCor *= -1.;
    } else {
      // an unknown string instead of an operator: compile an error message
      if (thisOperator.IsNull())
        setErrorMessage(__FUNCTION__,TString::Format("operator (+, -, --) expected near '%s'", operatorAppendix.Data()));
      else
        setErrorMessage(__FUNCTION__,TString::Format("operator (+, -, --) expected near '%s'", thisOperator.Data()));
      error = true;
      continue;
    }

    // evaluate paths
    if (!thisPath.IsNull()) {

      // create a new path term
      PathTerm pathTerm(factor,thisPath,statCor);
      // add the path term to the list of terms for current path alternative
      DEBUGclass("adding '%s'",thisPath.Data());
      //TQSampleDataReader::AltPath_t altPath = tokens.back();
      //altPath.push_back(pathTerm);
      // make sure it's push directly into the last altPath_t and not just a copy!
      tokens.back().push_back(pathTerm);

      // expect operator preceeding next path
      isFirstPath = false;
    } else {
      // expected a paths but found nothing
      if (thisOperator.IsNull())
        setErrorMessage(__FUNCTION__,TString::Format("path expected near '%s'", pathAppendix.Data()));
      else
        setErrorMessage(__FUNCTION__,TString::Format("path expected after operator '%s'", thisOperator.Data()));
      error = true;
      continue;
    }

    if (thisSep.CompareTo(";") == 0) {
      // add a new alternative
      TQSampleDataReader::AltPath_t newPath;
      tokens.push_back(newPath);
      isFirstPath = true;
    }

  } while (!error && !done);

  // clear the whole alternate paths vector if an error occured
  if (error) {
    tokens.clear();
  }

  return tokens;
}

//__________________________________________________________________________________|___________

bool TQSampleDataReader::compareHistograms(const TString& histName1, const TString& histName2, const TString path, double maxdiff, bool print){
  // compare two histograms with each other via chi2 test (chi2 < maxdiff)
  // return true if they are completely equal, false otherwise
  if(!this->f_baseSampleFolder){
    ERRORclass("no sample folder assigned!");
    return false;
  }
  TString fullpath = TQFolder::concatPaths(path,this->f_pathHistograms);
  TList* histfolders = this->f_baseSampleFolder->getListOfFolders(fullpath);
  if(histfolders->GetEntries() < 1){
    WARNclass("could not find any histograms under folder matching '%s'",path.Data());
  }
  int found = 0;
  int ok = 0;
  TString fstring = TString::Format("discrepancy of X²=%%.%df detected",std::max((int)(ceil(-log10(maxdiff))),3));
  TQFolderIterator itr(histfolders,true);
  while(itr.hasNext()){
    TQFolder* f = itr.readNext();
    if(!f) continue;
    TH1* h1 = dynamic_cast<TH1*>(f->getObject(histName1));
    TH1* h2 = dynamic_cast<TH1*>(f->getObject(histName2));
    TString fpath = f->getBase()->getPath();
    if(!h1 && !h2) continue;
    if(!h1 && print){
      std::cout << TQStringUtils::fixedWidth(fpath,60, "l") << " " << TQStringUtils::makeBoldYellow(TString::Format("unable to find histogram '%s'",histName1.Data())) << std::endl;
    }
    if(!h2 && print){
      std::cout << TQStringUtils::fixedWidth(fpath,60, "l") << " " << TQStringUtils::makeBoldYellow(TString::Format("unable to find histogram '%s'",histName2.Data())) << std::endl;
    }
    if(!h1 || !h2) continue;
    found++;
    double diff = TQHistogramUtils::getChi2(h1,h2);
    if(diff < maxdiff){
      ok++;
    } else if(print){
      std::cout << TQStringUtils::fixedWidth(fpath,60, "l") << " " << TString::Format(fstring.Data(),diff) << std::endl;
    }

  }
  if(ok != found){
    if(found > 0){
      if(print) std::cout << TString::Format("found disagreement: only %d/%d histograms under '%s' were found equal!",ok,found,path.Data()) << std::endl;
    } else {
      if(print) std::cout << TQStringUtils::makeBoldRed("could not find any histograms!") << std::endl;
    }
    return false;
  }
  if(print) std::cout << TString::Format("found agreement for all %d histograms under '%s'!",ok,path.Data()) << std::endl;
  return true;
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::printPaths(TString paths) {

  // TODO: implement printing method using an AltPath_t directly
  std::vector<TQSampleDataReader::AltPath_t> altPaths = parsePaths(paths);

  for( auto altPath : altPaths ) {
    for( auto pathTerm : altPath ) {
      std::cout << pathTerm.factor << ": " << pathTerm.path.Data() << std::endl;
    }
    std::cout << "---------" << std::endl;
  }
}


//__________________________________________________________________________________|___________

bool TQSampleDataReader::passesFilter(TQSampleFolder * sampleFolder, TString filterName) {

  // let every sample folder pass if no filter name is specified
  if (filterName.Length() == 0)
    return true;

  // invalid sample folders don't pass the filter
  if (!sampleFolder)
    return false;

  // let every sample folder pass the folter for now
  return true;
}

//__________________________________________________________________________________|___________

TList * TQSampleDataReader::getListOfSampleFoldersTrivial(TString path, TClass* tclass) {
  // no valid base sample folder available?
  if (!f_baseSampleFolder) {
    setErrorMessage(__FUNCTION__,"no valid base sample folder specified");
    return 0;
  }
  TList* list = f_baseSampleFolder->getListOfSampleFolders(path, tclass);
  if(!list || list->GetEntries() < 1){
    setErrorMessage(__FUNCTION__,TString::Format("unknown path '%s'", path.Data()));
    return NULL;
  }
  return list;
}

//__________________________________________________________________________________|___________

TList * TQSampleDataReader::getListOfSampleFolders(const TString& path, TClass* tclass) {
  // retrieve the list of sample folders matching the given path and class

  // no valid base sample folder available?
  if (!f_baseSampleFolder) {
    setErrorMessage(__FUNCTION__,"no valid base sample folder specified");
    return 0;
  }

  TList* folders = new TList();
  std::vector<TQSampleDataReader::AltPath_t> altPaths = this->parsePaths(path);
  if(altPaths.size() < 1){
    DEBUGclass("unable to find paths for '%s'",path.Data());
    return NULL;
  }
  for( auto altPath : altPaths ) {
    for( auto pathTerm : altPath ) {
      TString sfname = pathTerm.path;
      TList* sflist = f_baseSampleFolder->getListOfSampleFolders(sfname,tclass);
      if (!sflist) continue;
      for (int k = 0; k < sflist->GetEntries(); k++) {
        TObject* obj = sflist->At(k);
        if(obj && obj->InheritsFrom(tclass))
          folders->Add(obj);
      }
      delete sflist;
    }
  }

  // unknown path (no matching elements)?
  if (!folders || folders->GetEntries() == 0) {
    setErrorMessage(__FUNCTION__,TString::Format("unknown path '%s'", path.Data()));
    return NULL;
  }
  return folders;
}


//__________________________________________________________________________________|___________

TH1 * TQSampleDataReader::getRatesHistogram(const TString& path, const TString& name, const TString& options, TList * sfList) {

  TQTaggable tagsOptions(options);
  return getRatesHistogram(path, name, &tagsOptions, sfList);
}


//__________________________________________________________________________________|___________

TH1 * TQSampleDataReader::getRatesHistogram(const TString& path, TString name, TQTaggable * options, TList * /*sfList*/) {
  // Returns a histogram which is created from of a list of hitograms and cutflow
  // counter with each bin of the final histogram corresponding to the integral or
  // rate of one histogram or cutflow counter . The list of names of the input
  // histograms or counters has to be provided as a comma-separated list with the
  // full list being enclosed in "{}". For each name in the list first a counter is
  // searched for and only in case of failure a histogram is searched for. Each
  // individual histogram or counter is read from path <path>. 
  TQTaggable tags;
  if(options) tags.importTags(options);
    
  // tokenize list of bins
  TString outerList_str;
  TQStringUtils::readBlock(name, outerList_str, "{}");
  auto outerList = TQStringUtils::split(outerList_str,",","{","}");

  // the style scheme to apply to the final histogram
  TString styleScheme = tags.getTagStringDefault("styleScheme", f_styleScheme);
  size_t n = outerList.size();
  size_t m = 0;
  if(outerList_str.Contains("{")){
    m = (outerList_str.CountChar(',')+1 - n) / n + 1; // guessing number of inner bins
  }
  
  // create histogram
  TH1* histo = 0;
  bool labels = true;
  if(m>0){
    // this is 2D
    auto binningX = tags.getTagVDouble("boundariesX");
    if(binningX.size() == 0){
      for(size_t i=0; i<n; ++i){
        binningX.push_back(i);
      }
    }
    if(binningX.size() != n+1){
      setErrorMessage(__FUNCTION__,"Invalid binning for rates histogram");
      return NULL;
    }
    auto binningY = tags.getTagVDouble("boundariesY");
    if(binningY.size() == 0){
      for(size_t i=0; i<m; ++i){
        binningY.push_back(i);
      }
    }
    if(binningY.size() != m+1){
      setErrorMessage(__FUNCTION__,"Invalid binning for rates histogram");
      return NULL;
    }
    
    histo = new TH2D("rates_histogram", "rates_histogram", n, &binningX[0], binningY.size()-1, &binningY[0]);
    labels = false;
  } else {
    // this is 1D
    if(options && tags.hasTag("boundaries.0")){
      auto binning = tags.getTagVDouble("boundaries");
      if(binning.size() != n+1){
        setErrorMessage(__FUNCTION__,"Invalid binning for rates histogram");
        return NULL;
      }
      histo = new TH1D("rates_histogram", "rates_histogram", n, &binning[0]);
      labels = false;
    } else {
      histo = new TH1D("rates_histogram", "rates_histogram", n, 0., (double)n);
    }
  }
  histo->SetDirectory(NULL);

  TList * thisSfList = new TList();
  thisSfList->SetOwner(false);

  bool stop = false;
  int i = 1;
  TString lastName;
  for(auto name:outerList){
    lastName = name;
    DEBUGclass("getting "+name);
    std::vector<TString> innerList;
    if(name.Contains("{")){
      TString innerList_str;
      TQStringUtils::readBlock(name, innerList_str, "{}");
      innerList = TQStringUtils::split(innerList_str, ",", "{","}");
      if (innerList.size() == 0){
	setErrorMessage(__FUNCTION__,"Invalid list of bins for rates histogram");
	return NULL;
      }
    }

    if(innerList.size() > 0){
      int j=1;
      for(auto name:innerList){
	lastName = name;
	DEBUGclass("getting "+name);	
	// try to obtain counter or histogram
	TQCounter * cnt = this->getCounter(path, name, options, thisSfList);
	if (!cnt) {
	  TH1 * h = this->getHistogram(path, name, options, thisSfList);
	  cnt = TQHistogramUtils::histogramToCounter(h);
	  if (h) delete h;
	}
	if (cnt) {
	  TString title = cnt->GetTitle();
	  if(title.IsNull())title=name;
	  histo->SetBinContent(i, j, cnt->getCounter());
	  histo->SetBinError(i, j, cnt->getError());
	} else {
	  DEBUGclass("stopping -- failed");
	  stop = true;
	}
	if(stop) break;
	++j;
      }
    } else {
      TQCounter * cnt = this->getCounter(path, name, options, thisSfList);
      if (!cnt) {
	TH1 * h = this->getHistogram(path, name, options, thisSfList);
	cnt = TQHistogramUtils::histogramToCounter(h);
	if (h) delete h;
      }
      if (cnt) {
	TString title = cnt->GetTitle();
	if(title.IsNull())title=name;
	if(labels){
	  histo->GetXaxis()->SetBinLabel(i, title);
	}
	histo->SetBinContent(i, cnt->getCounter());
	histo->SetBinError(i, cnt->getError());
	delete cnt;
      } else {
	DEBUGclass("stopping -- failed");
	stop = true;
      }
      if(stop) break;
    }
    i++;      
  }

  if (thisSfList) {
    TQHistogramUtils::applyStyle(histo,
				 (TQSampleFolder*)thisSfList->First(), styleScheme);
    delete thisSfList;
    thisSfList = NULL;
  }

  if (stop) {
    delete histo;
    histo = NULL;
    setErrorMessage(__FUNCTION__,TString::Format("Element '%s' not found in '%s'",
                                                 lastName.Data(), path.Data()));
  }

  return histo;
}

//__________________________________________________________________________________|___________

TProfile * TQSampleDataReader::getProfile(const TString& path, const TString& name, const TString& options, TList * sfList) {
  TQTaggable * tagsOptions = new TQTaggable(options);
  TProfile * histo = getProfile(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return histo;
}


//__________________________________________________________________________________|___________

TProfile * TQSampleDataReader::getProfile(const TString& path, TString name, TQTaggable * options, TList * sfList) {

  // restore original verbosity
  int tmpVerbose = f_Verbose;

  TProfile * histo = NULL;
  TQStringUtils::removeLeading(name, " \t");

  // this block is used to parse histogram names like
  // [CutA+CutB-CutC]/VarName
  // and obtain the corresponding histogram
  std::vector<TQSampleDataReader::AltPath_t> histNames = this->parsePaths(name);
  for( auto altPath : histNames ) {
    for( auto pathTerm : altPath ) {
      double factor = pathTerm.factor;
      TString histName = pathTerm.path;
      TProfile* newHisto = this->getElement<TProfile>(path, histName, this->f_pathHistograms, options, sfList);
      if(!newHisto) continue;
      if(!histo){
        histo = newHisto;
        histo->Scale(factor);
      } else {
        histo->Add(newHisto,factor);
        delete newHisto;
      }
    }
  }

  if (f_Verbose > 1) {
    VERBOSEclass("Profiles");
    VERBOSEclass("- original: %s",TQHistogramUtils::getDetailsAsString(histo, 2).Data());
  }
 

  // normalize the histogram if 'norm = true'
  if (options->getTagBoolDefault("norm", false)) {
    TQHistogramUtils::normalize(histo);
  }

  // apply additional style options
  TQHistogramUtils::applyStyle(histo, options);

  // reset histograms if requested
  if (histo && options->getTagBoolDefault("reset", false)) {
    histo->Reset();
  }

  // scale histogram
  double scale = 1.;
  if (histo && options->getTagDouble("scale", scale)) {
    histo->Scale(scale);

    if (!TMath::AreEqualRel(scale, 1., 0.01)) {
      // append the scale factor
      TString title(histo->GetTitle());
      title.Append(TString::Format(" (#times%g)", scale));
      histo->SetTitle(title);
    }
  }

  // restore original verbosity
  f_Verbose = tmpVerbose;

  return histo;
}


//__________________________________________________________________________________|___________

TH1 * TQSampleDataReader::getHistogram(const TString& path, const TString& name, const TString& options, TList * sfList) {

  TQTaggable * tagsOptions = new TQTaggable(options);
  TH1 * histo = getHistogram(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return histo;
}


//__________________________________________________________________________________|___________


void TQSampleDataReader::processHistogramOptions(TH1*& histo, TQTaggable* options){
  // process all simple histogram transformations
  // this includes everything that can be done *without* access to the sample folder itself, that is
  
  DEBUGclass("HistogramName: %s", histo->GetName() );

  // cut/zoom histogram
  int cutBinLowX  = options->getTagIntegerDefault("~cutBinLowX",  options->getTagIntegerDefault("~cutBinLow",  -1));
  int cutBinHighX = options->getTagIntegerDefault("~cutBinHighX", options->getTagIntegerDefault("~cutBinHigh", -1));
  int cutBinLowY  = options->getTagIntegerDefault("~cutBinLowY",  -1);
  int cutBinHighY = options->getTagIntegerDefault("~cutBinHighY", -1);
    
  int zoomBinLowX  = options->getTagIntegerDefault("~zoomBinLowX",  options->getTagIntegerDefault("~zoomBinLow",  -1));
  int zoomBinHighX = options->getTagIntegerDefault("~zoomBinHighX", options->getTagIntegerDefault("~zoomBinHigh", -1));
  int zoomBinLowY  = options->getTagIntegerDefault("~zoomBinLowY", -1);
  int zoomBinHighY = options->getTagIntegerDefault("~zoomBinHighY", -1);
    
  double cutLowX,cutHighX,cutLowY,cutHighY,zoomLowX,zoomHighX,zoomLowY,zoomHighY = 0;
  if(options->getTagDouble("~cutLowX",  cutLowX ) || options->getTagDouble("~cutLow",  cutLowX )) cutBinLowX  = histo->GetXaxis()->FindBin(cutLowX);
  if(options->getTagDouble("~cutHighX", cutHighX) || options->getTagDouble("~cutHigh", cutHighX)) cutBinHighX = histo->GetXaxis()->FindBin(cutHighX)-1;
  if(options->getTagDouble("~cutLowY",  cutLowY )) cutBinLowY = histo->GetYaxis()->FindBin(cutLowY );
  if(options->getTagDouble("~cutHighY", cutHighY )) cutBinHighY= histo->GetYaxis()->FindBin(cutHighY)-1;
  if(options->getTagDouble("~zoomLowX",  zoomLowX ) || options->getTagDouble("~zoomLow",  zoomLowX )) zoomBinLowX  = histo->GetXaxis()->FindBin(zoomLowX);
  if(options->getTagDouble("~zoomHighX", zoomHighX) || options->getTagDouble("~zoomHigh", zoomHighX)) zoomBinHighX = histo->GetXaxis()->FindBin(zoomHighX);
  if(options->getTagDouble("~zoomLowY",  zoomLowY )) zoomBinLowY = histo->GetYaxis()->FindBin(zoomLowY );
  if(options->getTagDouble("~zoomHighY", zoomHighY )) zoomBinHighY= histo->GetYaxis()->FindBin(zoomHighY);
    
  if(cutBinLowX != -1 || cutBinHighX != -1 || cutBinLowY != -1 || cutBinHighY != -1 || zoomBinLowX != -1 || zoomBinHighX != -1 || zoomBinLowY != -1 || zoomBinHighY != -1) {
    TH1 * newHisto = TQHistogramUtils::cutAndZoomHistogram(histo,
                                                           cutBinLowX, cutBinHighX, cutBinLowY, cutBinHighY,
                                                           zoomBinLowX, zoomBinHighX, zoomBinLowY, zoomBinHighY);
    if (!newHisto) {
      setErrorMessage(__FUNCTION__,TString::Format(
                                                   "Invalid cut/zoom parameter for histogram '%s'", histo->GetName()));
    }
    delete histo;
    histo = newHisto;
    if (f_Verbose > 1) {
      VERBOSEclass("- cut/zoomed: %s",TQHistogramUtils::getDetailsAsString(histo, 2).Data());
    }
  }
 
  // ===== make projection =====
    
  int projXBinLowY = -2;
  int projXBinHighY = -2;
  int projYBinLowX = -2;
  int projYBinHighX = -2;
  if (!options->getTagInteger("~projXBinLowY", projXBinLowY)) {
    if (!options->getTagInteger("~projXBinY", projXBinLowY)) {
      projXBinLowY = (options->getTagBoolDefault("~projX", false) ? -1 : -2);
    }
  }
  if (!options->getTagInteger("~projXBinHighY", projXBinHighY)) {
    if (!options->getTagInteger("~projXBinY", projXBinHighY)) {
      projXBinHighY = (options->getTagBoolDefault("~projX", false) ? -1 : -2);
    }
  }
  if (!options->getTagInteger("~projYBinLowX", projYBinLowX)) {
    if (!options->getTagInteger("~projYBinX", projYBinLowX)) {
      projYBinLowX = (options->getTagBoolDefault("~projY", false) ? -1 : -2);
    }
  }
  if (!options->getTagInteger("~projYBinHighX", projYBinHighX)) {
    if (!options->getTagInteger("~projYBinX", projYBinHighX)) {
      projYBinHighX = (options->getTagBoolDefault("~projY", false) ? -1 : -2);
    }
  }
  if ((projXBinLowY != -2 || projXBinHighY != -2 || projYBinLowX != -2 || projYBinHighX != -2)) {
    TH1 * newHisto = NULL;
    if ((projXBinLowY != -2 || projXBinHighY != -2) && projYBinLowX == -2 && projYBinHighX == -2) {
      // projection on X
      newHisto = TQHistogramUtils::getProjectionX(histo, projXBinLowY, projXBinHighY);
    } else if ((projYBinLowX != -2 || projYBinHighX != -2) && projXBinLowY == -2 && projXBinHighY == -2) {
      // projection on Y
      newHisto = TQHistogramUtils::getProjectionY(histo, projYBinLowX, projYBinHighX);
    }
    if (!newHisto) {
      setErrorMessage(__FUNCTION__,TString::Format(
                                                   "Invalid projection parameter for histogram '%s'", histo->GetName()));
    }
    delete histo;
    histo = newHisto;
    if (f_Verbose > 1) {
      VERBOSEclass("- projected: %s",TQHistogramUtils::getDetailsAsString(histo, 2).Data());
    }
  }

  // ===== rebin histogram =====
  //@tag: rebin,rebinX,rebinY,rebinZ: give a factor by which to rebin X, Y or Z coordinate
  int rebinX = options->getTagIntegerDefault("~rebinX", 0);
  int rebinY = options->getTagIntegerDefault("~rebinY", 0);
  int rebinZ = options->getTagIntegerDefault("~rebinZ", 0);
  //@tag: rebinXList,rebinYList: give a list "{1,2,3}" of bin boundaries for rebinning
  std::vector<double> rebinXList = options->getTagVDouble("~rebinXList");
  std::vector<double> rebinYList = options->getTagVDouble("~rebinYList");
  std::vector<int> rebinXBinList = options->getTagVInteger("~rebinXBinList");
  std::vector<int> rebinYBinList = options->getTagVInteger("~rebinYBinList");  
  //@tag: remap: remap a histogram X axes to the range 0-1
  bool remap = options->getTagBoolDefault("~remap",false);
  bool relabel = options->getTagBoolDefault("~relabel",false);
  bool rebinned = false;
  if ((rebinX > 0 || rebinY > 0 || rebinZ > 0)) {
    if(!histo->InheritsFrom(TH2::Class())){
      delete histo;
      histo = 0;
      setErrorMessage(__FUNCTION__,"Cannot use rebinX, rebinY, rebinZ for 1D-histograms, please use rebin");
    } else if(!TQHistogramUtils::rebin(histo,rebinX,rebinY,rebinZ,remap)){
      setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
      delete histo;
      histo = 0;
    } else if (f_Verbose > 1) {
      VERBOSEclass("- rebinned: %s",TQHistogramUtils::getDetailsAsString(histo, 2).Data());
    }
    rebinned = true;
  } else if(rebinXList.size() > 0){
    if(!histo->InheritsFrom(TH2::Class())){
      setErrorMessage(__FUNCTION__,"Cannot use rebinYList for 1D-histograms, please use rebinList");
      delete histo;
      histo = 0;
    } else {
      if(rebinYList.size() > 0){
        if(!TQHistogramUtils::rebin(histo,rebinXList,rebinYList,remap)){
          setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
          delete histo;
          histo = 0;
        }
      } else {
        if(!TQHistogramUtils::rebin(histo,rebinXList,remap)){
          setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
          delete histo;
          histo = 0;
        }
      }
    }
    rebinned = true;	
  } else if(rebinXBinList.size() > 0){
    if(!histo->InheritsFrom(TH2::Class())){
      setErrorMessage(__FUNCTION__,"Cannot use rebinYBinList for 1D-histograms, please use rebinBinList");
      delete histo;
      histo = 0;
    } else {
      if(rebinYBinList.size() > 0){
        if(!TQHistogramUtils::rebin(histo,rebinXBinList,rebinYBinList,remap)){
          setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
          delete histo;
          histo = 0;
        }
      } else {
        if(!TQHistogramUtils::rebin(histo,rebinXBinList,remap)){
          setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
          delete histo;
          histo = 0;
        }
      }
    }
    rebinned = true;	
  }

  //@tag: unroll a two-dimensional histogram
  if(options->getTagBoolDefault("~unroll",false)){
    TH2* h2 = dynamic_cast<TH2*>(histo);
    if(h2){
      bool firstX = options->getTagBoolDefault("~unroll.firstX",true);
      bool includeUO = options->getTagBoolDefault("~unroll.includeUndervlowOverflow",false);
      TH1* newhisto = TQHistogramUtils::unrollHistogram(h2,firstX,includeUO);
      if(newhisto){
        histo = newhisto;
        TQHistogramUtils::copyStyle(histo,h2);
        delete h2;
      }
    }
  }

  int rebin = options->getTagIntegerDefault("~rebin", 0);
  std::vector<double> rebinList = options->getTagVDouble("~rebinList");
  std::vector<int> rebinBinList = options->getTagVInteger("~rebinBinList");
  if(rebin){
    if(!TQHistogramUtils::rebin(histo,rebin,0,0,remap)){
      setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
      delete histo;
      histo = 0;
    } else if (f_Verbose > 1) {
      VERBOSEclass("- rebinned: %s",TQHistogramUtils::getDetailsAsString(histo, 2).Data());
    }
    rebinned = true;
  } else if(rebinList.size() > 0){
    if(!TQHistogramUtils::rebin(histo,rebinList,remap)){
      setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
      delete histo;
      histo = 0;
    }
    rebinned = true;	
  } else if(rebinBinList.size() > 0){
    if(!TQHistogramUtils::rebin(histo,rebinBinList,remap)){
      setErrorMessage(__FUNCTION__,TString::Format("Invalid rebinning parameter for histogram '%s'", histo->GetName()));
      delete histo;
      histo = 0;
    }
    rebinned = true;	
  }

  if(!rebinned && remap){
    if(relabel){
      TQHistogramUtils::remapAndRelabel(histo->GetXaxis());
      if(histo->InheritsFrom(TH2::Class())) TQHistogramUtils::remapAndRelabel(histo->GetYaxis());
      if(histo->InheritsFrom(TH3::Class())) TQHistogramUtils::remapAndRelabel(histo->GetZaxis());
    } else {
      TQHistogramUtils::remap(histo->GetXaxis(),0,1);
      if(histo->InheritsFrom(TH2::Class())) TQHistogramUtils::remap(histo->GetYaxis(),0,1);
      if(histo->InheritsFrom(TH3::Class())) TQHistogramUtils::remap(histo->GetZaxis(),0,1);
    }
  }  

  // apply slope to histogram
  double slope = 1.;
  if (options->getTagDouble("~slope", slope)) {
    if (!TQHistogramUtils::applySlopeToHistogram(histo, slope)) {
      setErrorMessage(__FUNCTION__,TString::Format("Invalid slope parameter for histogram '%s'", histo->GetName()));
      delete histo;
      histo = 0;
    }
  }
    
  // normalize the histogram if 'norm = true'
  if (options->getTagBoolDefault("~norm", false)) {
    TQHistogramUtils::normalize(histo);
  }
    
  // apply additional style options
  TQHistogramUtils::applyStyle(histo, options);
    
  // reset histograms if requested
  if (options->getTagBoolDefault("~reset", false)) {
    histo->Reset();
  }

  // scale histogram
  double scale = 1.;
  if (options->getTagDouble("~scale", scale)) {
    histo->Scale(scale);
      
    if (!TMath::AreEqualRel(scale, 1., 0.01)) {
      // append the scale factor
      TString title(histo->GetTitle());
      title.Append(TString::Format(" (#times%g)", scale));
      histo->SetTitle(title);
    }
  }
    
  int densityBin = 0;
  //@tag: scaleDensityToBin: scale all bin contents to densities, normalizing to the bin with the given index
  if (options->getTagInteger("~scaleDensityToBin",densityBin)){
    histo->Scale(histo->GetXaxis()->GetBinWidth(densityBin),"width");
  }
    
  // apply Poisson errors if 'applyPoissonErrors = true'
  if (options->getTagBoolDefault("~applyPoissonErrors", false)) {
    TQHistogramUtils::applyPoissonErrors(histo);
  }

  // scale errors if requested
  double scaleErrors;
  if (options->getTagDouble("~scaleErrors", scaleErrors)) {
    DEBUGclass("scaling errors of histogram '%s' to %g",histo->GetName(),scaleErrors);
    TQHistogramUtils::scaleErrors(histo,scaleErrors);
  }
    
  //@tag:rerollGauss,rerollPoisson: reroll the histogram if required
  double zvalue;
  if(options->getTagDouble("~rerollGauss",zvalue)){
    TQHistogramUtils::rerollGauss(histo,zvalue);
  } else if(options->getTagBoolDefault("~rerollPoisson")){
    TQHistogramUtils::rerollPoisson(histo);
  }

  //@tag: includeUnderflow,includeOverflow: include under- and overflow bins
  bool includeUnderflow = options->getTagBoolDefault("~includeUnderflow",false) or options->getTagBoolDefault("~includeUnderflowOverflow",false);
  bool includeOverflow = options->getTagBoolDefault("~includeOverflow",false) or options->getTagBoolDefault("~includeUnderflowOverflow",false);
  TQHistogramUtils::includeOverflowBins(histo, includeUnderflow, includeOverflow);

  //@tag: extraUnderflow,extraOverflow: keep under- and/or overflow bins separate
  bool extraUnderflow = options->getTagBoolDefault("~extraUnderflow",false) or options->getTagBoolDefault("~extraUnderflowOverflow",false);
  bool extraOverflow = options->getTagBoolDefault("~extraOverflow",false) or options->getTagBoolDefault("~extraUnderflowOverflow",false);
  TQHistogramUtils::extraOverflowBins(histo, extraUnderflow, extraOverflow, remap);

  //@tag: ensureMinimumBinContent:  ensure a minimum bin content as given
  double minBinContent;
  double ensureAbsMinimumContent;
  TString SampleName;
  options->getTagString("~Sample", SampleName);
  if (options->getTagDouble("~ensureMinimumBinContent", minBinContent)) {
    if (options->getTagDouble("~ensureAbsMinimumContent", ensureAbsMinimumContent)) {
      INFOclass("ensureAbsMinimumContent on sample: '%s'", SampleName.Data());
      TQHistogramUtils::ensureAbsMinimumBinContent(histo, minBinContent);
    } else{
      TQHistogramUtils::ensureMinimumBinContent(histo,minBinContent,true);
    }
  }


    
  std::vector<TString> labelsX = options->getTagVString("~relabelX");
  if(labelsX.size() > 0 && labelsX.size() == (size_t)histo->GetXaxis()->GetNbins()){
    for(size_t i=0; i<labelsX.size(); ++i){
      histo->GetXaxis()->SetBinLabel(i+1,labelsX[i]);
      histo->GetXaxis()->LabelsOption("v");
    }
  }
  std::vector<TString> labelsY = options->getTagVString("~relabelY");
  if(labelsY.size() > 0 && labelsY.size() == (size_t)histo->GetYaxis()->GetNbins()){  
    for(size_t i=0; i<labelsY.size(); ++i){
      histo->GetYaxis()->SetBinLabel(i+1,labelsY[i]);
    }
  }
  std::vector<TString> labelsZ = options->getTagVString("~relabelZ");
  if(labelsZ.size() > 0 && labelsZ.size() == (size_t)histo->GetZaxis()->GetNbins()){    
    for(size_t i=0; i<labelsZ.size(); ++i){
      histo->GetZaxis()->SetBinLabel(i+1,labelsZ[i]);
    }
  }
  
  //@tag:histogramOfOnes: make a histogram with bin contents of one (for testing shape factors)
  bool histogramOfOnes = options->getTagBoolDefault("~histogramOfOnes", false);
  if ( histogramOfOnes ) {
    DEBUGclass("Making a histogram of ones (to be used for testing fits with ShapeFactors)");
    for (int i=0; i<histo->GetNbinsX()+1; ++i){
      DEBUGclass("Set bin %i to 1", i);
      histo->SetBinContent(i, 1.);
    }
  }
}



TH1 * TQSampleDataReader::getHistogram(const TString& path, TString name, TQTaggable * options, TList * sfList) {
  // Retrieves the histogram <name> by recursively summing corresponding contributions
  // from sample folders matching <path> and returns a pointer to an independent copy
  // of an instance of TH1 or a NULL pointer in case an error occured. Examples:
  //
  // - getHistogram("bkg", "Cut_0jet/MT") returns a pointer to the sum of all
  // contributing histograms "Cut_0jet/MT" in sample folder "bkg"
  //
  // Please note: the user is responsible for deleting the returned histogram!
  //
  // Manipulations to the retrieved histogram do not affect the original source
  // histograms. Contributing histograms are checked for consistency (dimension and
  // binning) before being summed.
  //
  // Multiple sample folder paths as well as histogram names may be summed and
  // subtracted 'in-situ' by using the addition and subtraction operators "+" and
  // "-", respectively. Examples:
  //
  // - getHistogram("bkg + sig", "Cut_0jet/MT") returns a pointer to the sum of
  // all contributing histograms "Cut_0jet/MT" in sample folder "bkg" and "sig"
  // - getHistogram("data - bkg", "Cut_0jet/MT") returns a pointer to the sum of
  // all contributing histograms "Cut_0jet/MT" in sample folder "data" subtracted
  // by the corresponding sum in sample folder "bkg"
  // - getHistogram("bkg", "Cut_0jet/MT + Cut_1jet/MT") returns a pointer to the
  // sum of all contributing histograms "Cut_0jet/MT" and "Cut_1jet/MT" in sample
  // folder "bkg"
  //
  // Furthermore, "rate histograms" with each bin corresponding to the total yield of one
  // category may be obtained by providing a comma-separated list of histogram or counter
  // names (see also TQSampleDataReader::getRatesHistogram(...)):
  //
  // - getHistogram("bkg", "{Cut_0jet, Cut_1jet}") returns a pointer to a histogram with 2
  // bins with the first (second) bin corresponding to the event yield obtained from the
  // sum of counter "Cut_0jet" ("Cut_1jet") in sample folder "bkg".
  //
  //
  // Several options can be used to manipulate the histogram before it is returned:
  //
  // - Applying histogram style options:
  //
  // Using style options various histogram style parameter can be set:
  //
  // @tag:title: sets the title using h->SetTitle(...)
  // @tag:histFillColor: sets the fill color using h->SetFillColor(...)
  // @tag:histFillStyle: sets the fill style using h->SetFillStyle(...)
  // @tag:histLineColor: sets the line color using h->SetLineColor(...)
  // @tag:histLineWidth: sets the line width using h->SetLineWidth(...)
  // @tag:histLineStyle: sets the line style using h->SetLineStyle(...)
  // @tag:histMarkerColor: sets the marker color using h->SetMarkerColor(...)
  // @tag:histMarkerSize: sets the marker width using h->SetMarkerSize(...)
  // @tag:histMarkerStyle: sets the marker style using h->SetMarkerStyle(...)
  // @tag:color: default to histFillColor, histLineColor, and histMarkerColor
  //
  // For colors either the ROOT color code or the corresponding color code name
  // may be used, e.g. "histFillColor = kRed" is equivalent to "histFillColor = 632".
  //
  // Defaults:
  // color >> (histFillColor, histLineColor, histMarkerColor)
  //
  // [Please note: this notation means that the tag <color> will be propagated to
  // tags <histFillColor>, <histLineColor>, and <histMarkerColor> as default,
  // which can overwrite the default]
  //
  //
  // - Cutting on histograms (removing bins):
  /*@tag: [cutBinLowX, cutBinHighX, cutBinLowY, cutBinHighY, cutBinLow, cutBinHigh]
    
    Cutting on histograms refers to completely removing bins to the left or right
    of any axis resulting in a new histogram with modified range of the corresponding
    axes. The bin contents of bins that are removed by this operation is NOT kept.
    The parameter <cutBinLow> and <cutBinHigh> refer to the bin index of those bins
    that form the first and last bin, respectively, of the axes of the new histogram.
    No cut is placed if the corresponding parameter is -1.
    
    Defaults:
    -1 >> cutBinLow >> cutBinLowX
    -1 >> cutBinHigh >> cutBinHighX
    -1 >> cutBinLowY
    -1 >> cutBinHighY
  */
  //
  // - Zooming into histograms:
  /*@tag: [zoomBinLowX, zoomBinHighX, zoomBinLowY, zoomBinHighY, zoomBinLow, zoomBinHigh]
    
    Zooming into histograms refers to selecting a sub-range of a histogram by merging
    bins to the left or right of any axis and accounting both bin content as well as
    bin errors to the corresponding underflow and overflow bins. The resulting histogram
    has a modified range of the corresponding axes but the same total integral as the
    original histogram. The parameter <zoomBinLow> and <zoomBinHigh> refer to the bin
    index of those bins that form the first and last bin, respectively, of the axes of
    the new histogram. Bins are kept if the corresponding parameter is -1.
    
    Defaults:
    -1 >> zoomBinLow >> zoomBinLowX
    -1 >> zoomBinHigh >> zoomBinHighX
    -1 >> zoomBinLowY
    -1 >> zoomBinHighY
  */
  // - Projecting 2D -> 1D:
  /*@tag: [projXBinLowY, projXBinY, projXBinHighY, projXBinY, projYBinLowX,
          projYBinX, projYBinHighX, projYBinX, projX, projX, projY, projY]
  
     Allows to project a 2D histogram onto one of its axes.
  
     Defaults:
     false >> projX ___(== false): -2 ___ projXBinY >> (projXBinLowY, projXBinHighY)
     \_(== true) : -1 _/
     false >> projY ___(== false): -2 ___ projYBinX >> (projYBinLowX, projYBinHighX)
     \_(== true) : -1 _/
  */
  //
  // - Rebinning (merging bins):
  /*@tag: [rebinX, rebinY, rebinZ, rebin]
    
     Histograms can be rebinned using rebinning options:
    
     > rebinX: merged <rebinX> bins on X axis to one bin using TH1::RebinX(...)
     or TH1::Rebin3D(...). No rebinning on X axis is performed if
     <rebinX> = 0
     > rebinY: merged <rebinY> bins on Y axis to one bin using TH1::RebinY(...)
     or TH1::Rebin3D(...). No rebinning on Y axis is performed if
     <rebinY> = 0
     > rebinZ: merged <rebinZ> bins on Z axis to one bin using TH1::Rebin3D(...).
     No rebinning on Z axis is performed if <rebinZ> = 0
     > rebin: default to <rebinX>
    
     Defaults:
     0 >> rebin >> rebinX
     0 >> rebinY
     0 >> rebinZ
  */
  //
  // The normalization of histograms can be changed using <norm> and <scale>:
  //
  // @tag:norm: scales the histogram such that the total integral of it is 1 using TH1::Scale(...)
  // @tag:scale: scales the histogram by a factor <scale> using TH1::Scale(...). This operation is performed after <norm>.
  //
  // - Reseting histograms:
  // @tag:[reset]: reset the histogram (set all contents to zero)
  //
  // - Applying a slope (reweighting):
  // @tag:[slope]: reweight a histogam with a slope
  //
  // - Applying Poisson errors:
  // @tag:[applyPoissonErrors]: apply poisson errors to all bins
  //
  // @tag:rerollGauss: randomize the bin contents of the histogram according to the erros set, assuming gaussian errors.
  //                   if tag value is numeric, errors are scaled with that number
  // @tag:rerollPoisson: randomize the bin contents of the histogram according to the bin contents, assuming poisson errors
  // @tag:includeUnderflow: include the underflow bin in the first bin of the histogram
  // @tag:includeOverflow: include the overflow bin in the last bin of the histogram
  // @tag:extraUnderflow: move the underflow bin into the range of the histogram (use with remap)
  // @tag:extraOverflow: move the overflow bin into the range of the histogram (use with remap)
  // @tag:includeUnderflowOverflow: same as includeUnderflow and includeOverflow
  // @tag:extraUnderflowOverflow: same as extraUnderflow and includeOverflow
  // @tag:transferRelativeErrorsFromPath: copy relative error from another histogram (or counter in getCounter) with path given by this tag

  int tmpVerbose = f_Verbose;

  TH1 * histo = NULL;
  TQStringUtils::removeLeading(name, " \t");
  if (name.BeginsWith("{")) {
    histo = this->getRatesHistogram(path, name, options, sfList);
  } else {
    histo = dynamic_cast<TH1*>(this->getElement<TH1>(path, name, this->f_pathHistograms, options, sfList));
  }
	
  if (f_Verbose > 1) {
    VERBOSEclass("Histograms");
    VERBOSEclass("- original: %s",TQHistogramUtils::getDetailsAsString(histo, 2).Data());
  }

  if (histo && options){

   //@tag:transferRelativeErrorsFromPath
    TString pathToTransferFrom;
    if (options->getTagString("transferRelativeErrorsFromPath",pathToTransferFrom)) {
      TH1 * relErrorsHisto = NULL;
      if (pathToTransferFrom.BeginsWith("{")) {
        relErrorsHisto = this->getRatesHistogram(pathToTransferFrom, name, options, sfList);
      } else {
        relErrorsHisto = dynamic_cast<TH1*>(this->getElement<TH1>(pathToTransferFrom, name, this->f_pathHistograms, options, sfList));
      }
      if (!TQHistogramUtils::transferRelativeErrors(relErrorsHisto, histo)) {
        ERRORclass(TString::Format("Failed to transfer relative errors from histogram with name '%s' and path '%s' to histogram '%s' at path '%s'", name.Data(), pathToTransferFrom.Data(), name.Data(), path.Data()));
      }
    }
   
    this->processHistogramOptions(histo,options);

    // print norm factor in legend
    if(options->getTagBoolDefault("printNFInLegend",false)){
      TQTaggable newoptions(*options);
      
      newoptions.setTagString("scaleScheme","none"); // disable NF application
      newoptions.setTagBool("printNFInLegend",false); // needed to avoid infinite recursion
      TH1* unscaled = this->getHistogram(path,name,&newoptions,NULL);
      
      double nf = TQHistogramUtils::getIntegral(histo) / TQHistogramUtils::getIntegral(unscaled);
      
      delete unscaled;
      
      TString title(histo->GetTitle());
      title.Append(TString::Format(" (#times%.3g)", nf));
      histo->SetTitle(title);
    }

    //@tag: sortBinsByRatio=true/false,sortBinsByRatio.numerator,sortBinsByRatio.denominator
    if(options->getTagBoolDefault("sortBinsByRatio",false)){
      TString numerator = options->getTagStringDefault("sortBinsByRatio.numerator","sig");
      TString denominator = options->getTagStringDefault("sortBinsByRatio.denominator","bkg");      
      TQTaggable subOptions(options);
      subOptions.setTagBool("sortBinsByRatio",false);
      TH1* num = this->getHistogram(numerator,name,&subOptions);
      TH1* denom = this->getHistogram(denominator,name,&subOptions);
      std::vector<int> bins = TQHistogramUtils::getBinsSortedByRatio(num,denom,1e-12);
      TQHistogramUtils::reorder(histo,bins);
      delete num;
      delete denom;
    }
  }
  
  // restore original verbosity
  f_Verbose = tmpVerbose;
 
  // return the histogram
  return histo;
}

//__________________________________________________________________________________|___________

THnBase * TQSampleDataReader::getTHnBase(const TString& path, const TString& name, const TString& options, TList * sfList) {
  // Does the same as getHistogram with support for multidimentional histograms (THnBase)
  TQTaggable * tagsOptions = new TQTaggable(options);
  THnBase * histo = getTHnBase(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return histo;
}

//__________________________________________________________________________________|___________

THnBase * TQSampleDataReader::getTHnBase(const TString& path, TString name, TQTaggable * options, TList * sfList) {
  // Does the same as getHistogram with support for multidimentional histograms (THnBase)
  int tmpVerbose = f_Verbose;

  THnBase * histo = NULL;
  TQStringUtils::removeLeading(name, " \t");
  histo = dynamic_cast<THnBase*>(this->getElement<THnBase>(path, name, this->f_pathHistograms, options, sfList));
  
  // restore original verbosity
  f_Verbose = tmpVerbose;
 
  // return the histogram
  return histo;
}

//__________________________________________________________________________________|___________

TGraph * TQSampleDataReader::getGraph(const TString& path, const TString& name, const TString& options, TList * sfList) {
  // Does the same as getHistogram for TGraph
  TQTaggable * tagsOptions = new TQTaggable(options);
  TGraph * graph = getGraph(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return graph;
}

//__________________________________________________________________________________|___________

TGraph * TQSampleDataReader::getGraph(const TString& path, TString name, TQTaggable * options, TList * sfList) {
  // Does the same as getHistogram for TGraph
  int tmpVerbose = f_Verbose;

  TGraph * graph = NULL;
  TQStringUtils::removeLeading(name, " \t");
  graph = dynamic_cast<TGraph*>(this->getElement<TGraph>(path, name, this->f_pathGraphs, options, sfList));
  
  // restore original verbosity
  f_Verbose = tmpVerbose;
 
  // return the histogram
  return graph;
}

//__________________________________________________________________________________|___________

TGraph2D * TQSampleDataReader::getGraph2D(const TString& path, const TString& name, const TString& options, TList * sfList) {
  // Does the same as getHistogram for TGraph
  TQTaggable * tagsOptions = new TQTaggable(options);
  TGraph2D * graph = getGraph2D(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return graph;
}

//__________________________________________________________________________________|___________

TGraph2D * TQSampleDataReader::getGraph2D(const TString& path, TString name, TQTaggable * options, TList * sfList) {
  // Does the same as getHistogram for TGraph
  int tmpVerbose = f_Verbose;

  TGraph2D * graph = NULL;
  TQStringUtils::removeLeading(name, " \t");
  graph = dynamic_cast<TGraph2D*>(this->getElement<TGraph2D>(path, name, this->f_pathGraphs, options, sfList));
  
  // restore original verbosity
  f_Verbose = tmpVerbose;
  
  // return the histogram
  return graph;
}

//__________________________________________________________________________________|___________

template<class T>
TList * TQSampleDataReader::collectElements(TQSampleDataReader::AltPath_t& paths, TQSampleDataReader::AltPath_t& elements, const TString& subPath, TList * sfList, TQTaggable * options) {
  TList * list = new TList();
  list->SetOwner(true);
  
  TString scaleScheme = options ? options->getTagStringDefault("scaleScheme", f_scaleScheme) : f_scaleScheme;

  // the number of elements added up
  int nElements = 0;
  
  for( auto pathTerm : paths ) {

    TString pathName = pathTerm.path;
    double pathfactor = pathTerm.factor;

    if (this->f_Verbose > 3) {
      VERBOSEclass("Collecting using path expression %s (factor:%f)",pathName.Data(),pathfactor);
    }
    TQSampleFolderIterator pIter2(this->f_baseSampleFolder->getListOfSampleFolders(pathName, TQSampleFolder::Class(), true), true);
    while(pIter2.hasNext() && nElements >= 0){
      TQSampleFolder* sf = pIter2.readNext();
      if(!sf) continue;
      if (this->f_Verbose > 3) {
        VERBOSEclass("Collecting from path match %s",sf->getPath().Data());
      }

      for( auto elementTerm : elements ) {

        const TString& elementName = elementTerm.path;
        double elementfactor = elementTerm.factor;

        // get the base scale factors, including factors from path and/or element
        TList * baseScaleList = this->getBaseScaleFactors(sf, elementName, scaleScheme);
        if(pathfactor != 1. || elementfactor != 1.){
          if (!baseScaleList) {
            baseScaleList = new TList();
          }
          TQCounter* scale = new TQCounter("prefactor",pathfactor*elementfactor,0.);
          baseScaleList->Add(scale); //pathFactor*elementFactor
        }

        // dump some info text if in verbose mode
        if (f_Verbose > 3) {
          VERBOSEclass("now collecting elements for path '%s' (with %d base scale factors)",sf->getPath().Data(),baseScaleList ? baseScaleList->GetEntries() : 0);
          if (f_Verbose > 4) {
            TQCounterIterator itr(baseScaleList);
            while(itr.hasNext()){
              TQCounter* c = itr.readNext();
              VERBOSEclass("%s = %g",c->GetName(),c->getCounter());
            }
          }
        }
        // sum up the Elements of this path
        nElements += this->collectElementsWorker<T>(sf, elementName, subPath, list, baseScaleList, sfList, options, 1);
        if(baseScaleList){
          baseScaleList->SetOwner(false);
          delete baseScaleList;
        }
      }
      
         
    }
  }
  // return the number of element added
  if(nElements <= 0){
    delete list;
    list = nullptr;
  }
  return list;
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::setDefaultScaleScheme(const TString& defaultScheme){
  this->f_scaleScheme = defaultScheme;
}

//__________________________________________________________________________________|___________

template<class T>
int TQSampleDataReader::collectElementsWorker(TQSampleFolder * sampleFolder, const TString& elementName, const TString& subPath, TList* list, TList * baseScaleList, TList * sfList, TQTaggable * options, int indent) {

  TList* scaleList = nullptr;

  if (f_Verbose > 4) {
    VERBOSEclass("trying to collect '"+elementName+"'");
  }
  
  // stop if the sample folder is invalid
  if (!sampleFolder) return 0;
  TString scaleScheme = options ? options->getTagStringDefault("scaleScheme", f_scaleScheme) : f_scaleScheme;
  
  // get the local scale factor
  // skip local scale factor of base sample folder in local mode
  if (!(f_localMode && sampleFolder == f_baseSampleFolder)) {

    // dump some info text if in verbose mode
    TString text;
    TString sftext;
    bool printsftext = (f_Verbose > 4);
    if (f_Verbose > 3) {
      // indentation
      text.Append(TQStringUtils::repeat(" ", indent * 2));
      // sample folder name
      text.Append(TQStringUtils::makeBoldBlue(sampleFolder->GetName()));
      text.Append(" ");
      text.Append(subPath);
      // the scale factors
      sftext.Append(TQStringUtils::makeBoldRed(" [local SF = ("));
    }

    TString scaleFactorPath = elementName;
    while (!scaleFactorPath.IsNull()) {
      //Important: handle the pointer with care (i.e. do not replace by a copy), correlations might be determined later via pointer comparison! 
      TQCounter * localScaleItemCounter = sampleFolder->getScaleFactorCounterInternal(scaleFactorPath,scaleScheme);
      TQFolder::getPathTail(scaleFactorPath);
      if (!localScaleItemCounter) continue;
      
      //if we don't have our own list yet, we need to create one in order not to modify the provided one
      if (!scaleList) {
        scaleList = new TList();
        scaleList->SetOwner(false);
        scaleList->AddAll(baseScaleList);
      }
      scaleList->Add(localScaleItemCounter);
 
      if (f_Verbose > 3) {
        if (!localScaleItemCounter || localScaleItemCounter->getCounter() == 1.) {
          sftext.Append(TQStringUtils::makeBoldWhite("1."));
        } else {
          printsftext = true;
          sftext.Append(TQStringUtils::makeBoldRed(TString::Format("%f", localScaleItemCounter->getCounter() )));
        }
        if (!scaleFactorPath.IsNull()) {
          sftext.Append(TQStringUtils::makeBoldRed(", "));
        } 
      }
    }
    if (f_Verbose > 3) {
      sftext.Append(TQStringUtils::makeBoldRed(")]"));
      if(printsftext)
        VERBOSEclass(text + sftext);
      else
        VERBOSEclass(text);
    }
  }
  // the number of elements added
  int nElements = 0;

  sampleFolder->resolveImportLinks(false);
  
  TString folderPath = TQFolder::concatPaths(subPath, elementName);
  TString objName = TQFolder::getPathTail(folderPath);
  TQFolder* containingFolder = sampleFolder->getFolder(folderPath);
  T* obj = NULL;
  if (containingFolder) {
   obj = dynamic_cast<T*>(containingFolder->getObject(objName));
  } else {
    if (f_Verbose > 4) {
      VERBOSEclass("no container '%s' in '%s'",folderPath.Data(),sampleFolder->getPath().Data());
    }    
  }
  
  if (obj){
    if (f_Verbose > 4) {
      VERBOSEclass("found object '%s'",obj->GetName());
    }
    TList * localList = new TList();
    localList->Add(containingFolder); 
    localList->Add(obj);
    localList->AddAll(scaleList ? scaleList : baseScaleList);
    list->Add(localList);
    nElements = 1;
    obj = 0;
    if (sfList) sfList->Add(sampleFolder);
  } else {
    // loop over sub sample folders
    if (f_Verbose > 4) {
      VERBOSEclass("found no object '%s', looping inside '%s' for %d elements",objName.Data(),sampleFolder->getPath().Data(),nElements);
      sampleFolder->print("rdt");
    }
    TQIterator itr(sampleFolder->getListOfSampleFolders("?"),true);
    while (itr.hasNext() && nElements >= 0) {
      // collect the histograms for every sub sample folder
      TQSampleFolder* sf = static_cast<TQSampleFolder*>(itr.readNext());
      if(!sf) continue;
      // step into the sub sample folder recursively
      if (f_Verbose > 4) {
        VERBOSEclass("looking inside '%s'",sf->getPath().Data());
      }
      nElements+=this->collectElementsWorker<T>(sf, elementName, subPath, list, scaleList ? scaleList : baseScaleList, sfList, options, indent + 1);
    }
  }
 
  if (scaleList) delete scaleList; //delete our self-made list if it was created
  // return the number of elements added
  return nElements;
}

//__________________________________________________________________________________|___________

template<class T>
int TQSampleDataReader::sumElements( TList * list, T * &histo, TQTaggable * options ) {
  // sum all elements in the list (histogram variant)
  int nElements = 0;
  if (!list) return -1;
  //@tag: [includeScaleUncertainty] This can is used to enable the inclusion of scale ("NF") uncertainties in histograms and counters. Default: false
  bool useScaleUncertainty = options ? options->getTagBoolDefault("includeScaleUncertainty", false) : false;
  //@tag: [.correlate.path, .correlate.value] See "useManualCorrelations"
  //@tag: [useManualCorrelations] If set to true this option enables the inclusion of correlations between (unscaled) histograms and (unscaled cutflow) counters. The correlation information in this regard is retrieved in the following way:
  /*@tag  Starting from the folder in which the original element (=histogram or counter) is stored the folder strucutre is searched towards the root folder. The search stops when the tag ".correlate.path.0" is found (in other words a vector tag with the key ".correlate.path") or the root folder is searched without success. Tags from folders located in the hierarchy above the folder with the first match are ignored. For each entry in the ".correlate.path" vector a corresponding correlation value is retrieved via the key ".correlate.value.x", where "x" is the index in the former vector (in case no value can be obtained from ".correlate.value.x", 1.0 is used as a default). The value of the ".correlate.path.x" tag should give the path to a single folder. Elements in (sub) folders of the one where this tag is set and elements from the referenced folder are considered as correlated during summation according to the aforementioned correlation value IF they represent the same element. Representing the same element is determined by comparing the the object names  (typically the name of the cut for cutflow counters / the name of the distribution for histograms) concatenated with their path in the folder structure starting (but not including) the last instance of TQSample(Folder) above the elements location.
  
  */
  bool useManualCorrelations = options ? options->getTagBoolDefault("useManualCorrelations", false) : false;
  bool advancedUncertaintyTreatment = useScaleUncertainty || useManualCorrelations;
  // if there is a valid histogram in this sample folder...
  TQListIterator itr(list);
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 1) continue;
    double scale = 1.;
    for (int j=2; j<l->GetSize(); j++) {
      TQCounter* cnt = dynamic_cast<TQCounter*>(l->At(j));
      if(cnt) scale *= cnt->getCounter();
    }
    T* h = dynamic_cast<T*>(l->At(1));
    if (!histo) {
      if(!h){
        ERRORclass("object list [1] is not a histogram!");
        continue;
      }
      histo = (T*)TQHistogramUtils::copyHistogram(h,"NODIR");
      if (!histo) {
        ERRORclass("Failed to copy histogram!");
        continue;
      }
      TQHistogramUtils::scaleHistogram(histo,scale,0.,false);
      DEBUGclass("starting summation with histogram: s(w)=%g, n=%zu",histo->Integral(),histo->GetEntries());
      nElements = 1;
    } else {
      //ToDo: check for histogram consistency, abort with error message if not!
      DEBUGclass("adding histogram: s(w)=%g, n=%zu",h->Integral(),h->GetEntries());
      TQHistogramUtils::addHistogram(histo,h,scale,0.,0.,false);
      nElements++;
    }
  }
  bool simpleScaleUncertainty = false;
  itr.reset();
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 2) continue;
    TQCounter* cnt = dynamic_cast<TQCounter*>(l->At(1));
    if (!cnt) {
      simpleScaleUncertainty = true;
      break;
    }
    TString id = cnt->GetTitle();
    TQFolder* corrFolder = this->getCorrelationFolderByIdentifier(id);
    if (!corrFolder) {
      simpleScaleUncertainty = true;
      break;
    }
  }
  if (!simpleScaleUncertainty && advancedUncertaintyTreatment && nElements>0) {
    //You do not want to do this yourself!
    //reset all bin errors (this is the resulting histogram, uncertainties are recomputed from all input histograms + counters in the following)
    double correlationAux = 0.; //auxillary variable to retrieve correlations between different paths
    const int nbins = TQHistogramUtils::getNbinsGlobal(histo);
    std::vector<double> binErrors2(nbins);
    TQListIterator cont1(list);
    while(cont1.hasNext()){
      TList* c1 = cont1.readNext();
      if(!c1 || c1->GetSize()<2) continue;
      TQFolder * oFolder1 = dynamic_cast<TQFolder*>(c1->At(0));
      
      
      T* h1 = dynamic_cast<T*>(c1->At(1)); //index 0 is the TQFolder for which this list was created.
      if(!h1) continue;
      if(!TQHistogramUtils::checkConsistency(histo, h1) ) continue;
      for (int j=1; j<c1->GetSize(); j++) {
        if (!c1->At(j)) continue;
        TQListIterator cont2(list);
        while(cont2.hasNext()){
          TList* c2 = cont2.readNext();
          if(!c2 || c2->GetSize()<2) continue;
          TQFolder * oFolder2 = dynamic_cast<TQFolder*>(c2->At(0));
          
          T* h2 = dynamic_cast<T*>(c2->At(1));
          if(!h2) continue;
          if(!TQHistogramUtils::checkConsistency(histo, h2) ) continue;
          for (int l=1; l<c2->GetSize(); l++) {
            if (!c2->At(l)) continue;
            correlationAux = 0.;//reset, just to be sure
            if ( j == 1 && l == 1) { // if we are at the right position for histograms and
              if ( h1 == h2 || ( useManualCorrelations && TQStringUtils::equal(h1->GetName(),h2->GetName()) && areFoldersCorrelated(oFolder1,oFolder2,correlationAux) ) ) { //the histograms are the same, do:
                if (h1 == h2) correlationAux = 1.;
                //uncertainty treatment for histogram part
                double tempErr = correlationAux;
                for (int j1=2; j1<c1->GetSize(); j1++) {
                  TQCounter* cnt = dynamic_cast<TQCounter*>(c1->At(j1));
                  if(!cnt) continue;
                  tempErr *= cnt->getCounter();
                }
                for (int l1=2; l1<c2->GetSize(); l1++) {
                  TQCounter* cnt = dynamic_cast<TQCounter*>(c2->At(l1));
                  if(!cnt) continue;
                  tempErr *= cnt->getCounter();
                }
                for (int bin = 0; bin<nbins; bin++) {
                  binErrors2[bin] += h1->GetBinError(bin) * h2->GetBinError(bin)*tempErr;
                }
              } 
              //uncertainty treatment for scale factor part
            } else if ( j > 1 && l > 1 && useScaleUncertainty ) {// if we are at the right position for NF counters and want to include scale uncertainties
              //the combination of histogram (l or j == 1) and scale factor (j or l > 1) is always uncorrelated, i.e. the contribution vanishes anyway.
              //uncertainty treatment for NF counter part
              //note that this relies heavily on how the TQNFChainloader stores its results, not using the chainloader can easily break something.
              //if the current entries in question do not have any uncertainties, we don't need to do anything. Also: protect against non-TQCounter objects.
              if ( !(c1->At(j) && c1->At(j)->IsA() == TQCounter::Class() ) || !((c2->At(l)) && c2->At(l)->IsA() == TQCounter::Class()) || (static_cast<TQCounter*>(c1->At(j)))->getError() == 0. || (static_cast<TQCounter*>(c2->At(l)))->getError() == 0.) continue;
              
              TString id1 = c1->At(j)->GetTitle();
              TString id2 = c2->At(l)->GetTitle();
              
              double tempErr = 1.;
              for (int j1=2; j1<c1->GetSize(); j1++) {
                if (!c1->At(j1) || c1->At(j1)->IsA() != TQCounter::Class()) continue;
                TQCounter* cnt = static_cast<TQCounter*>(c1->At(j1));
                tempErr *= ( j == j1 ? cnt->getError() : cnt->getCounter() );
              }
              for (int l1=2; l1<c2->GetSize(); l1++) {
                if (!c2->At(l1) || c2->At(l1)->IsA() != TQCounter::Class()) continue;
                TQCounter* cnt = static_cast<TQCounter*>(c2->At(l1));
                tempErr *= ( l == l1 ? cnt->getError() : cnt->getCounter() );
              }
              if ( !id1.IsNull() && !id2.IsNull() ) {
                //try to retrieve the folders containing the correlations between different NFs
                TQFolder* f1 = this->getCorrelationFolderByIdentifier(id1);
                TQFolder* f2 = this->getCorrelationFolderByIdentifier(id2);
                if ( f1 && f2 && f1->getObject(id2) ) {
                  double corr = (dynamic_cast<TQCounter*>( f1->getObject(id2) ))->getCounter();
                  //debug only code: some additional checks to verify that the correlation matrix is symetric (i.e. the correlation storage is working)
                  #ifdef _DEBUG_
                  if ( f2->getObject(id1) && !TMath::AreEqualAbs(corr, (dynamic_cast<TQCounter*>( f2->getObject(id1) ))->getCounter() , std::numeric_limits<double>::epsilon()) ) {
                    WARNclass("Correlations do not match: cor(x1,x2) = %d, cor(x2,x1) = %d \nID(x1) = '%s'\nID(x2) = '%s'", corr, (dynamic_cast<TQCounter*>( f2->getObject(id1) ))->getCounter(), id1.Data(), id2.Data() );
                  } else if (!f2->getObject(id1)) {
                    ERRORclass("Failed to retrieve secondary correlation counter (ID '%s') from folder %s", id1.Data(), f2->getPath().Data());
                  }
                  #endif
                  //apply correlation factor to the current term in the uncertainty calculation
                  tempErr*= corr;
                } else {
                  //fall back solution: at least try to correlate identical counters. This also offers support for some simple (manual) implementation of correlations by setting the title of different scale factors to the same value
                  WARNclass("Failed to retrieve correlation counter from folder '%s' for NF counters with identifiers (titles) %s and %s!",f1->getPath().Data(),id1.Data(),id2.Data());
                  if (TQStringUtils::equal(id1,id2)) {
                    WARNclass("identifiers are equal, assuming full correlation (100%)");
                  } else {
                    WARNclass("identifiers are equal, assuming no correlation (0%)");
                    tempErr *= 0;
                  }
                }
                for (int bin = 0; bin<nbins; bin++) {
                  binErrors2[bin] += h1->GetBinContent(bin) * h2->GetBinContent(bin) * tempErr; //apply to bins
                }
              } else if (!(TQStringUtils::equal(c1->At(j)->GetName(),"prefactor") || TQStringUtils::equal(c2->At(l)->GetName(),"prefactor") )){
                WARNclass("At least one counter has no title, skipping uncertainty contribution involving this counter");
                (dynamic_cast<TQCounter*>(c1->At(j)))->print();
                (dynamic_cast<TQCounter*>(c2->At(l)))->print();
              }
            }
          } 
        }
      }
    }
    for (int bin=0; bin<nbins; ++bin) {
      histo->SetBinError(bin, sqrt(binErrors2[bin]));
    }
  }
  # ifdef _DEBUG_
  if(histo){
    DEBUGclass("resulting histogram: s(w)=%g, n=%zu",histo->Integral(),histo->GetEntries());
  } else {
    DEBUGclass("no histogram generated!");
  }
  #endif
  return nElements;
}

//__________________________________________________________________________________|___________

int TQSampleDataReader::sumElements( TList * list, THnBase * &histo, TQTaggable * /*options*/) {
  // sum all elements in the list (multidimensional histogram (THnBase) variant)
	// Remark: No support for advanced uncertainty treatment as for TH1 histograms,
	// i.e., NF uncertainties are not considered

  int nElements = 0;
  if (!list) return -1;

  // bool useScaleUncertainty = options ? options->getTagBoolDefault("includeScaleUncertainty", false) : false;
  // bool useManualCorrelations = options ? options->getTagBoolDefault("useManualCorrelations", false) : false;
  //  bool advancedUncertaintyTreatment = useScaleUncertainty || useManualCorrelations;
  // if there is a valid histogram in this sample folder...
  TQListIterator itr(list);
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 1) continue;
    double scale = 1.;
    for (int j=2; j<l->GetSize(); j++) {
      TQCounter* cnt = dynamic_cast<TQCounter*>(l->At(j));
      if(cnt) scale *= cnt->getCounter();
    }
    THnBase* h = dynamic_cast<THnBase*>(l->At(1));
    if (!histo) {
      if(!h){
        ERRORclass("object list [1] is not a histogram!");
        continue;
      }
      
      histo = (THnBase*)TQTHnBaseUtils::copyHistogram(h,"NODIR");
      
      if (!histo) {
        ERRORclass("Failed to copy histogram!");
        continue;
      }
      TQTHnBaseUtils::scaleHistogram(histo,scale,0.,false);
      nElements = 1;
    } else {
      TQTHnBaseUtils::addHistogram(histo,h,scale,0.,0.,false);
      nElements++;
    }
  }

  # ifdef _DEBUG_
  if(histo){
    DEBUGclass("resulting histogram: n=%zu",histo->GetEntries());
  } else {
    DEBUGclass("no histogram generated!");
  }
  #endif
  return nElements;
}

//__________________________________________________________________________________|___________

int TQSampleDataReader::sumElements( TList * list, TQTable * &table, TQTaggable * /*options*/ ) {
  // sum all elements in the list (eventlist variant)
  int nElements = 0;
  if (!list) return -1;
  TQListIterator itr(list);
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 2) continue;
    TQTable* t = dynamic_cast<TQTable*>(l->At(1));
    if(!t) continue;
    if (table) {
      table->appendLines(t,1,true);
    } else {
      table = new TQTable(t);
    }
    nElements++;
  }
  return nElements;
}

//__________________________________________________________________________________|___________

int TQSampleDataReader::sumElements( TList * list, TGraph * &graph, TQTaggable * /*options*/ ) {
  // sum all elements in the list (TGraph variant)
  int nElements = 0;
  if (!list) return -1;
  TQListIterator itr(list);
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 2) continue;
    TGraph* g = dynamic_cast<TGraph*>(l->At(1));
    if(!g) continue;
    if (graph) {
      TQHistogramUtils::addGraph(graph,g);
    } else {
      graph = (TGraph*)TQHistogramUtils::copyGraph(g);
    }
    nElements++;
  }
  return nElements;
}

//__________________________________________________________________________________|___________

int TQSampleDataReader::sumElements( TList * list, TGraph2D * &graph, TQTaggable * /*options*/ ) {
  // sum all elements in the list (TGraph variant)
  int nElements = 0;
  if (!list) return -1;
  TQListIterator itr(list);
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 2) continue;
    TGraph2D* g = dynamic_cast<TGraph2D*>(l->At(1));
    if(!g) continue;
    if (graph) {
      TQHistogramUtils::addGraph(graph,g);
    } else {
      graph = (TGraph2D*)TQHistogramUtils::copyGraph(g);
    }
    nElements++;
  }
  return nElements;
}

//__________________________________________________________________________________|___________

int TQSampleDataReader::sumElements( TList * list, TQPCA * &pca, TQTaggable * /*options*/ ) {
  // sum all elements in the list (TQPCA variant)
  int nElements = 0;
  if (!list) return -1;
  TQListIterator itr(list);
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 2) continue;
    TQPCA* p = dynamic_cast<TQPCA*>(l->At(1));
    if(!p) continue;
    if (pca) {
      pca->add(p);
    } else {
      pca = (TQPCA*)(p->Clone());
    }
    nElements++;
  }
  return nElements;
}

//__________________________________________________________________________________|___________

int TQSampleDataReader::sumElements( TList * list, TTree * &tree, TQTaggable * /*options*/ ) {
  // sum all elements in the list (TTree variant)
  if (!gDirectory->IsWritable()) { 
    // else create the tree out of the trees in the TList,
    // in case there's no writabel file return an error message */
    ERRORclass("current directory is not writable and you can't create a tree on memory ");
    ERRORclass("please create a new TFile before getting the tree ");
    tree = NULL;
    return -1;
  }
  int nElements = 0;
  if (!list) return -1;
  TList* trees = new TList();
  trees->SetOwner(false);
  TQListIterator itr(list);
  while(itr.hasNext()){
    TList* l = itr.readNext();
    if(!l || l->GetSize() < 2) continue;
    TTree* t = dynamic_cast<TTree*>(l->At(1));
    if(!t) continue;
    trees->Add(t);
    nElements++;
  }
  if (trees->GetSize()==0){
    // without any tree, there's nothing to return
    tree = NULL;
    delete trees;
    return 0;
  } else if (trees->GetSize()==1){
    // if there's only one tree in the path it's easy, just return this one
    tree = (TTree*)trees->At(0)->Clone(); 
    delete trees;
    return 1;
  } else {
    // in this case, we need to merge
    tree = TTree::MergeTrees(trees);
    delete trees;
    return nElements;
  }
}

//__________________________________________________________________________________|___________

TString TQSampleDataReader::getStoragePath(TQFolder* f) {
  // get the tail of the folders path which corresponds to folders not inheriting 
  // from TQSampleFolder
  TString path = "";
  TQFolder* thisFolder = f;
  while (!thisFolder->InheritsFrom(TQSampleFolder::Class())) {
    path = TQFolder::concatPaths(thisFolder->GetName(),path);
    thisFolder = thisFolder->getBase();
  }
  return path;
}

bool TQSampleDataReader::areFoldersCorrelated(TQFolder* f1, TQFolder* f2) {
  double tmp = 0.;
  return this->areFoldersCorrelated(f1,f2,tmp);
}

//__________________________________________________________________________________|___________

bool TQSampleDataReader::areFoldersCorrelated(TQFolder* f1, TQFolder* f2, double& correlation, bool reversed) {
  // checks if tags are set indicating that elements in <f1> should be correlated 
  // with elements in folder <f2>. the corresponding correlation value if then 
  // stored in <correlation>. Please note that one should check in addition if the
  // actual objects in question are correlated (e.g. same distribution / same cut 
  // stage).
  
  if (!f1 || !f2) {
    ERRORclass("Recieved null-pointer, returning false!");
    return false;
  }
  correlation = 0.; //just to be sure

  //perform pre-check (we only want to correlate elements from the same "storage" folders, i.e. the parts of the path which do not correspond to instances of TQSample(Folder) but are basic TQFolders. This is used to only correlate objects representing the same distribution (for histograms) at the same cut
  if (!TQStringUtils::equal( getStoragePath(f1), getStoragePath(f2) )) return false;  
    
  TQFolder* rootFolder = f1->getRoot(); //we could also use f_baseSampleFolder instead, but this way we could make this a static method if needed and/or shift it to another class
  bool found = false;
  TQFolder* currentFolder = f1;
  std::vector<TString> paths;
  while ( !found && currentFolder ) { //if current
    currentFolder->getTag(".correlate.path",paths);
    if (paths.size() > 0) { //there is some information here, now evaluate it
      found = true;
      for (size_t i=0; i<paths.size(); i++) {
        TQFolder* f = rootFolder->getFolder(paths[i]);
        if (f && (f == f2 || f->isBaseOf(f2)) ) {  //we found a match if the path points to the second folder (f2) or a base folder of it
          //get correlation value from the folder we found the matching reference in. If no corresponding tag is found, issue a warning and assume full correlation (correlation = 1.)
          if (!currentFolder->getTagDouble(TString::Format(".correlate.value.%zu", i), correlation)) {
            WARNclass("Found correlation reference from folder '%s' to folder '%s' (from tag '.correlate.path.%d') but no corresponding correlation value. Full correlation (1.0) will be assumed!",currentFolder->getPath().Data(),f->getPath().Data(),i);
            correlation = 1.;
          }
          return true;
        }
      }
      //if we get to this point, we found some information but the second folder (f2) does not match any reference. We do not consider any other information from folders higher in the hierarchy (the user is expected to always re-write the full correlation set when overwriting further down the hierarchy! This allows to drop some correlations for a sub folder if needed). Since we found some information but no match we are done and return false since the two folders given seem to be uncorrelated
      return false;
    } else { //no information found, continue search on the base folder
      currentFolder = currentFolder->getBase();
    }
  }
  if (!reversed) return this->areFoldersCorrelated(f2,f1,correlation,true); //check with reversed order of f1,f2 if no information was found on f1 (we will now search in the tree leading to f2)
  //if we come to this point and already searched the opposite order, then there is no correlation.
  return false;
  
}

int TQSampleDataReader::sumElements( TList * list, TQCounter * &counter, TQTaggable * options ) {
  // sum all elements in the list (counter variant)
  
  // The first TList argument is expected to have a 2D structure: It is a list of sublists.
  // Each sublist should be composed as follows: A TQFolder object at the very first place (index 0)
  // which is the origin in the sample folder structure of the following entry (index 1). This is 
  // one of the actual elements to be summed up followed by an arbitrary number of scale factors
  // (usually "NFs") with which the index 1 element is multiplied (scaled) before the summation.
  // The summation essentially corresponds to an iteration over the initial list, each sublist
  // contribution one term.
	
  int nElements = 0;
  if (!list) return -1;
  bool useScaleUncertainty = options ? options->getTagBoolDefault("includeScaleUncertainty", false) : false;
  bool useManualCorrelations = options ? options->getTagBoolDefault("useManualCorrelations", false) : false;
  bool advancedUncertaintyTreatment = useScaleUncertainty || useManualCorrelations;
  //calculate the weighted/scaled sum of the counters:
  TQListIterator itr1(list);
  TQListIterator itr2(list);
  bool simpleScaleUncertainty = !advancedUncertaintyTreatment;
  // If any scale factor does not have a corresponding correlation folder, take the uncertainty
  // values directly (therefore assuming no correlation).
  if (!simpleScaleUncertainty) {
    while(itr1.hasNext()){
      TList* l = itr1.readNext();
      if(!l || l->GetSize() < 2) continue;
      TQCounter* cnt = dynamic_cast<TQCounter*>(l->At(1));
      TString id = cnt->GetTitle();
      TQFolder* corrFolder = this->getCorrelationFolderByIdentifier(id);
      if (!corrFolder) {
        simpleScaleUncertainty = true;
        break;
      }
    }
  }
  while(itr2.hasNext()){
    TList* l = itr2.readNext();
    if(!l || l->GetSize() < 2) continue;
    TQCounter* cnt = dynamic_cast<TQCounter*>(l->At(1));
    if(!cnt) continue;
    double scale = 1.;
    double uncertFrac = 0.;
    for (int j=2; j<l->GetSize(); j++) {
      TQCounter * c = dynamic_cast<TQCounter*>(l->At(j));
      if (c) {
        double thisScale = c->getCounter();
        scale *= thisScale;
        uncertFrac += pow(c->getError()/thisScale, 2);
      }
    }
    double uncertAbs = sqrt(uncertFrac) * scale;
    if (counter) {
      if (simpleScaleUncertainty) {
        counter->add(cnt,scale,uncertAbs,0.,useScaleUncertainty); 
      } else {
        //do not take scale uncertainties into account (yet). Will be done later if useScaleUncert == true.
        counter->add(cnt,scale,0.,0.,false); 
      }
    } else {
      counter = new TQCounter(cnt);
      if (simpleScaleUncertainty) {
        counter->scale(scale,uncertAbs,useScaleUncertainty);
      } else {
        counter->scale(scale,0.,false);
      }
    }
    nElements++;
  }
  if (!simpleScaleUncertainty && advancedUncertaintyTreatment && nElements > 0) {
    double correlationAux = 0.; //auxillary variable to retrieve correlations between different paths
    double uncertSq = 0;
    itr1.reset();
    while(itr1.hasNext()){
      TList* l1 = itr1.readNext();
      if(!l1 || l1->GetSize() < 2) continue;
      TQFolder * oFolder1 = dynamic_cast<TQFolder*>(l1->At(0));
      for (int j=1; j<l1->GetSize();j++) { //loop over entries in current sublist (index=0 is a TQFolder! It is the folder from which the (base) counter was retrieved.)
        TQCounter* cnt1 = dynamic_cast<TQCounter*>(l1->At(j));
        if(!cnt1) continue;
        TQListIterator itr2(list);
        while(itr2.hasNext()){
          TList* l2 = itr2.readNext();
          if(!l2 || l2->GetSize() < 2) continue;
          TQFolder * oFolder2 = dynamic_cast<TQFolder*>(l1->At(0));
          
          for (int l=1;l<l2->GetSize();l++) { //second loop over sublist (double loop since we need to examine each combination. Each element could be correlated to any other element)
            TQCounter* cnt2 = dynamic_cast<TQCounter*>(l2->At(l));
            if(!cnt2) continue;
            
            double tempErr = 1.;
            //now do stuff
            if (l == 1 && j == 1 ) { //this part deals with correlations between base counters (i.e. non-scale factors)
              if ( cnt1 != cnt2 ) { //if the counters are the same, we have full correlation anyways.
                //if we have a self-correlation term, the correlation is 1, so we don't need to apply an additional factor
                if (useManualCorrelations && TQStringUtils::equal(cnt1->GetName(),cnt2->GetName()) && areFoldersCorrelated(oFolder1,oFolder2,correlationAux) ) {
                  tempErr*=correlationAux;//insert correlation coefficient
                } else {
                  continue; //if we have two main counters that are non-identical they are assumed to be uncorrelated
                }
              }
            } else if (!useScaleUncertainty) continue; //if no inclusion of scale factor uncertainties is desired and we don't deal with base counter uncertainties/correlations, let's just skipp this part.
           
           //veto combinations of main counters and scale factors. These do not contribute to the total uncertainty as they are assumed to be uncorrelated
           if ( (l==1 && j>1) || (l>1 && j==1) ) continue;
            
            
            //the structure of terms processed here is a sum of products. Differentiating  w.r.t. any of the contributions and multiplying with the respective element of the covariance matrix (here realized as: element(covariance matrix) * sigma) therefore has the form
            // x1 * x2 * ... * sigma_xi * ... * xN
            // hence, the contribution to the resulting uncertainty from the current pair of two quantities is
            // (x1 * x2 * ... * sigma_xi * ... * xN) * (y1 * y2 * ... * sigma_yi * ... * yN)
            
            for (int i = 1; i<l1->GetSize(); i++) {
              TQCounter* cnt = dynamic_cast<TQCounter*>(l1->At(i));
              if(!cnt) continue;
              tempErr *= ( j == i ? cnt->getError() : cnt->getCounter() );
            }
            for (int k = 1; k<l2->GetSize(); k++) {
              TQCounter* cnt = dynamic_cast<TQCounter*>(l2->At(k));
              if(!cnt) continue;
              tempErr *= ( l == k ? cnt->getError() : cnt->getCounter() ) ;
            }
            //The title of scale factors serves as a global identifier and is used to retrieve information about the correlation of the two counters in question here
            TString id1 = cnt1->GetTitle();
            TString id2 = cnt2->GetTitle();
            //the following treatment is only applicable for scale factors, not for the original counters (it is assumed that the original counters are uncorrelated with their scale factors. This is not always true, however, we currently have no way to determine these correlations and/or reasonably store/retrieve it)
            if (l>1 && j>1 && !(id1.IsNull() || id2.IsNull()) ) {
              //for each counter we have a folder (name given by id1, i.e., the counters title) filled with counters holding the correlation values w.r.t. other scale factors. Note that this is also used to correlate identical scale factors which are stored at multiple places in the sample folder structure (plus: this automatically also includes the contributions from the diagonal entries of the correlation/covariance matrix)!
              TQFolder* f1 = this->getCorrelationFolderByIdentifier(id1);
              if (!f1) {
                //print an error message if the correlation folder could not be found 
               ERRORclass("Failed to retrieve primary correlation folder!");
               return -1;
              } else if (f1->getObject(id2)) {
                double corr = (dynamic_cast<TQCounter*>( f1->getObject(id2) ))->getCounter();
                #ifdef _DEBUG_
                //debug only code: check that the transposed element in the correlation matrix is equal to the one already retrieved
                TQFolder* f2 = this->getCorrelationFolderByIdentifier(id2);
                if (!f2) WARNclass("Unable to retrieve secondary correlation folder (id '%s')", id2.Data());
                else if (f2->getObject(id1) && !TMath::AreEqualAbs(corr, (dynamic_cast<TQCounter*>( f2->getObject(id1) ))->getCounter() , std::numeric_limits<double>::epsilon()) ) {
                  WARNclass("Correlations do not match: cor(x1,x2) = %d, cor(x2,x1) = %d", corr, (dynamic_cast<TQCounter*>( f2->getObject(id1) ))->getCounter() );
                } else if (!f2->getObject(id1)) {
                  WARNclass("Unable to retrieve second correlation counter (id '%s')",id1.Data());
                }
                #endif
                tempErr *= corr;
              } else {
                //fall back solution: at least try to correlate identical counters. This also offers support for some simple (manual) implementation of correlations by setting the title of different scale factors to the same value
                WARNclass("Failed to retrieve correlation counter from folder '%s' for NF counters with identifiers (titles) %s and %s!",f1->getPath().Data(),id1.Data(),id2.Data());
                if (TQStringUtils::equal(id1,id2)) {
                  WARNclass("identifiers are equal, assuming full correlation (100%)");
                } else {
                  WARNclass("identifiers are equal, assuming no correlation (0%)");
                  tempErr *= 0;
                }
              } 
              
            } else if (l>1 && j>1 ) { //we are dealing with scale factors and at least one of the two elements in question has an empty title. This makes matching a bit hard, so we ulimatelly fall back to only consider this contribution if it is a diagonal term in the sense that the two pointers match, otherwise we consider the correlation to be zero.
               if (cnt1 != cnt2) tempErr *= 0;
              //the correlation or not correlation of the base counters is already taken care of before
            }
            
            //add this term to (squared) uncertainty
            uncertSq += tempErr;
          }
        }
      }
    }
    counter->setErrorSquared(uncertSq);
  }
  return nElements;
}

//__________________________________________________________________________________|___________

TQCounter * TQSampleDataReader::getCounter(const TString& path,const TString& name, const TString& options, TList * sfList) {
  // retrieve a counter path/name with the given options
  TQTaggable * tagsOptions = new TQTaggable(options);
  TQCounter * counter = getCounter(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return counter;
}

//__________________________________________________________________________________|___________

TQTable * TQSampleDataReader::getEventlist(const TString& path, const TString& name, const TString& options, TList * sfList) {
  // retrieve an eventlist path/name with the given options
  TQTaggable * tagsOptions = new TQTaggable(options);
  TQTable * evtlist = getEventlist(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return evtlist;
}

//__________________________________________________________________________________|___________

TQTable * TQSampleDataReader::getEventlist(const TString& path, const TString& name, TQTaggable * options, TList * sfList) {
  // retrieve an eventlist path/name with the given options
  TQTable* evtlist = dynamic_cast<TQTable*>(this->getElement<TQTable>(path, name, this->f_pathEventlists, options, sfList));
  if(!evtlist){
    TList* alt = dynamic_cast<TList*>(this->getElement<TQTable>(path, name, this->f_pathEventlists, options, sfList));
    if(alt){
      evtlist = new TQTable(alt);
      delete alt;
    }
  }
  if(!evtlist) return NULL;
  //@tag:recognizeIntegers: automatically recognize integer-valued columns and format them accordingly (default:true)
  if(options->getTagBoolDefault("recognizeIntegers",true)){
    for(int i=0; i<evtlist->getNcols(); ++i){
      bool isInt = true;
      for(int j=1; j<evtlist->getNrows(); ++j){
        const double val = evtlist->getEntryValue(j,i,0);
        const double diff = fabs((double(int(val))/val) - 1);
        if( diff > 10*std::numeric_limits<double>::epsilon() ) isInt = false;
      }
      if(isInt){
        for(int j=1; j<evtlist->getNrows(); ++j){
          const int val = evtlist->getEntryValue(j,i,0);
          evtlist->setEntryValue(j,i,val);
        }
      }
    }
  }
  return evtlist;
}

//__________________________________________________________________________________|___________

TQCounter * TQSampleDataReader::getCounter(const TString& path, const TString& name, TQTaggable * options, TList * sfList) {
  // retrieve a counter path/name with the given options
  TQCounter* retval = NULL;
  if(TQStringUtils::isNumber(path)){
    double c = atof(path);
    retval = new TQCounter(name,c,sqrt(c));
  } else {
    retval = dynamic_cast<TQCounter*>(this->getElement<TQCounter>(path, name, this->f_pathCutflow, options, sfList));
  }
  if(!retval){
    TH1* hist = getHistogram(path,name,options,sfList);
    if(hist){
      double val,err;
      val = TQHistogramUtils::getIntegralAndError(hist,err);
      retval = new TQCounter(name,val,err,hist->GetEntries());
      retval->SetTitle(hist->GetTitle());
      delete hist;
    }
  } else {
    //@tag:transferRelativeErrorsFromPath
    TString pathToTransferFrom;
    if (options && options->getTagString("transferRelativeErrorsFromPath",pathToTransferFrom)) {
      TQCounter * relErrorCounter = NULL;
      relErrorCounter = dynamic_cast<TQCounter*>(this->getElement<TQCounter>(pathToTransferFrom, name, this->f_pathCutflow, options, sfList));
      if (!TQHistogramUtils::transferRelativeErrors(relErrorCounter, retval)) {
        ERRORclass(TString::Format("Failed to transfer relative errors from histogram with name '%s' and path '%s'", name.Data(), pathToTransferFrom.Data()));
      }
    }
  }
  
  return retval;
}

//__________________________________________________________________________________|___________

TQPCA * TQSampleDataReader::getPCA(const TString& path, const TString& name, const TString& options, TList * sfList) {
  // retrieve a PCA object path/name with the given options
  TQTaggable * tagsOptions = new TQTaggable(options);
  TQPCA * grid = getPCA(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return grid;
}


//__________________________________________________________________________________|___________

TQPCA * TQSampleDataReader::getPCA(const TString& path, const TString& name, TQTaggable * options, TList * sfList) {
  // retrieve a PCA object path/name with the given options
  return dynamic_cast<TQPCA*>(this->getElement<TQPCA>(path, name, this->f_pathPCA, options, sfList));
}


//__________________________________________________________________________________|___________

TTree * TQSampleDataReader::getTree(const TString& path, const TString& name, const TString& options, TList * sfList) {
  // retrieve a tree path/name with the given options
  // please note that you will need a writeable TDirectory open to allow
  // merging, because ROOT will not allow TTrees to be cloned/merged in memory!
  TQTaggable * tagsOptions = new TQTaggable(options);
  TTree * tree = getTree(path, name, tagsOptions, sfList);
  delete tagsOptions;
  return tree;
}


//__________________________________________________________________________________|___________

TTree * TQSampleDataReader::getTree(const TString& path, const TString& name, TQTaggable * options, TList * sfList) {
  // retrieve a tree path/name with the given options
  // please note that you will need a writeable TDirectory open to allow
  // merging, because ROOT will not allow TTrees to be cloned/merged in memory!
  return this->getElement<TTree>(path, name, this->f_pathTrees, options, sfList);
}

//__________________________________________________________________________________|___________

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"

template <class CLASS>
int TQSampleDataReader::getElementWorker(TQSampleDataReader::AltPath_t& paths, TQSampleDataReader::AltPath_t& elements, CLASS*&element,
					 const TString& subPath, TList* sfList,
					 TQTaggable* options) {
  TList * elementList = this->collectElements<CLASS>(paths, elements, subPath, sfList, options);

  if(elementList) {
    int nSubElements = 0;
    nSubElements = this->sumElements(elementList,element,options);
    if(f_Verbose > 0){
      VERBOSEclass("getElementWorker: summed %d elements",nSubElements);
    }
    
    elementList->SetOwner(true);
    delete elementList;
    return nSubElements;
  } else {
    if(f_Verbose > 0){
      VERBOSEclass("getElementWorker: no element list retrieved");
    }
  }
  
  return -1;                                                            
}

#pragma GCC diagnostic pop

//__________________________________________________________________________________|___________

TObject * TQSampleDataReader::getElement(const TString& path, const TString& name, TClass* objClass, const TString& subPath, TQTaggable * options, TList * sfList){
  // this is a legacy wrapper for getElement that still uses the root TClass pointer functionality
#define CALL_GET_ELEMENT(CLASS) if(!objClass || objClass->InheritsFrom(CLASS::Class())) { TObject* obj = this->getElement<CLASS>(path,name,subPath,options,sfList); if(obj) return obj; }
  CALL_GET_ELEMENT(TQCounter);
  CALL_GET_ELEMENT(TProfile2D);
  CALL_GET_ELEMENT(TProfile);
  CALL_GET_ELEMENT(TH3);
  CALL_GET_ELEMENT(TH2);
  CALL_GET_ELEMENT(TH1);
  CALL_GET_ELEMENT(TQTable);
  CALL_GET_ELEMENT(TQPCA);
  CALL_GET_ELEMENT(THnBase);
  CALL_GET_ELEMENT(TGraph);
  CALL_GET_ELEMENT(TGraph2D);
  ERRORclass("cannot get element of unsupproted class '%s'",objClass->GetName());
  return NULL;
}

//__________________________________________________________________________________|___________

template <class T>
T * TQSampleDataReader::getElement(const TString& path, const TString& name, const TString& subPath, TQTaggable * options, TList * sfList) {
  // temporary verbosity
  int tmpVerbose = f_Verbose;
  if (options) {
    f_Verbose = options->getTagIntegerDefault("verbosity", f_Verbose);
  }

  if (f_Verbose > 3) {
    VERBOSEclass("getElement: starting to collect elements. path='%s', name='%s'",path.Data(),name.Data());
  }
  
  // clear the error message
  f_errMsg.clearMessages();

  // parse the paths
  std::vector<TQSampleDataReader::AltPath_t> altPaths = parsePaths(path, 0, options ? options->getTagStringDefault("prefix.path", "") : "");

  std::vector<TQSampleDataReader::AltPath_t> altElements = parsePaths(name, 0, options ? options->getTagStringDefault("prefix.name", "") : "");

  bool tmpSFList = false;
  if(!sfList && f_applyStyles){
    tmpSFList = true;
    sfList = new TList();
  }
  
  // stop if an error occured when parsing the paths
  if (altPaths.size() < 1){
    ERRORclass("Failed to parse paths '%s'",path.Data());
    return 0;
  }
  if(altElements.size() < 1) {
    ERRORclass("Failed to parse elements from '%s'",name.Data());
    return 0;
  }
    
  // the element to return
  T * element = 0;

  /* the number of elements added up
   * to obtain the final element */
  int nElements = 0;

  bool globalError = false;
  bool invalidPath = true;
  TString errorMsg;

  // loop over alternative paths
  int iAltPaths = -1;
  while (!globalError && invalidPath && ++iAltPaths < (int)altPaths.size()) {
    invalidPath = false;
    nElements = 0;

    // clear element
    delete element;
    element = 0;
    
    // loop over the list of paths of this alternative
    TQSampleDataReader::AltPath_t paths = altPaths.at(iAltPaths);
    
    // loop over the list of element
    int iAltElement = -1;
    while (!globalError && !invalidPath && ++iAltElement < (int)altElements.size()) {
      TQSampleDataReader::AltPath_t elements = altElements.at(iAltElement);

      if (f_Verbose > 3) {
	VERBOSEclass("getElement: attempting to obtain elements from path '%s'",path.Data());
      }
      
      // read and add element
      int nSubElements = 0;
      
      nSubElements = this->getElementWorker<T>(paths, elements, element, subPath, sfList, options);
    
      if (nSubElements < 0) {
        // an error occured: stop without returning an element (an error message was already compiled)
	if (f_Verbose > 0) {
	  VERBOSEclass("getElement: an error occurred trying to retrieve elements from path '%s'",path.Data());
	}	
        nElements = 0;
        globalError = true;
      } else if (nSubElements == 0) {
        /* no elements found: compile an error
         * message and go to next path alternative */
        errorMsg = TString::Format("no elements found in path variant %d, element variant %d.", iAltPaths, iAltElement);
        nElements = 0;
        invalidPath = true;
      } else {
        nElements+=nSubElements;
      }
    }
    
  }
   
  if(f_applyStyles && nElements > 0){
    if(f_Verbose > 0){
      VERBOSEclass("getElement: done collecting elements, calculating style");
    }
    this->applyStyleToElement(element,sfList,options);
  }

  if(sfList && tmpSFList) delete sfList;

  if (nElements == 0) {
    /* an error occured: delete the element
     * that has been derived up to now */
    delete element;
    element = 0;
  }

  if (invalidPath)
    setErrorMessage(__FUNCTION__,errorMsg);

  
  if(f_Verbose > 4) {
    if(element) VERBOSEclass("returning element '%s'",element->GetName()); else VERBOSEclass("returning NULL");
  }
  // restore original verbosity
  f_Verbose = tmpVerbose;
  return element;
 
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::applyStyleToElement(TObject* element, TCollection* sfList, TQTaggable* options){
  TQFolder* baseSF = this->f_baseSampleFolder->findCommonBaseFolder(sfList,true);
  if(baseSF){
    if(element->InheritsFrom(TH1::Class())){
      if(f_Verbose > 3){
        VERBOSEclass("applying style to %s: contributing folders are",element->GetName());
        TQFolderIterator fitr(sfList);
        while(fitr.hasNext()){
          TQFolder* f = fitr.readNext();
          if(!f) continue;
          VERBOSEclass("\t%s",f->getPathWildcarded().Data());
        }
        VERBOSEclass(" ==> applying tags from %s",baseSF->getPath().Data());
        VERBOSEclass("\t%s",baseSF->exportTagsAsString().Data());
      }
      TString styleScheme = options ? options->getTagStringDefault("styleScheme", f_styleScheme) : f_styleScheme;
      TQHistogramUtils::applyStyle((TH1*)(element), baseSF, styleScheme,true);
    } else if (element->InheritsFrom(TNamed::Class())){
      // apply style: the histogram title
      TString title;
      if (baseSF->getTagString("style.title", title)) {
        ((TNamed*)(element))->SetTitle(title.Data());
      }
    }
  }
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::addObjectNames(TQSampleFolder * sampleFolder, const TString& objectPath,
                                        TClass * objectClass, TList * &objectNames, TList * sfList, const TString& filterScheme) {

  // stop if sample folder is invalid
  if (!sampleFolder) {
    return;
  }

  // get the list of objects in this sample folder...
  TList * objects = sampleFolder->getListOfObjectNames(objectClass, true, objectPath);

  // ...and add them to the list
  if (objects) {

    // make sure the resulting list exists
    if (!objectNames) {
      objectNames = new THashList();
      objectNames->SetOwner(true);
    }

    // iterate over object names and add them to the
    // resulting list unless it is already in the list
    objects->SetOwner(false);
    TQIterator itr(objects);
    while (itr.hasNext()) {
      TObject * obj = itr.readNext();
      if (objectNames->FindObject(obj->GetName())) {
        delete obj;
      } else {
        objectNames->Add(obj);
      }
    }
  }
  
  // loop over sub sample folders and ...
  TQSampleFolderIterator itr(sampleFolder->getListOfSampleFolders("?"), true);
  while (itr.hasNext()) {
    // ... recursively add object names in sub sample folders
    this->addObjectNames(itr.readNext(), objectPath, objectClass,objectNames, sfList, filterScheme);
  }
}


//__________________________________________________________________________________|___________

void TQSampleDataReader::addObjectNames(const TString& path, const TString& objectPath,
                                        TClass * objectClass, TList * &objectNames, TList * sfList, const TString& filterScheme) {

  // get the list of sample folders matching path
  TQSampleFolderIterator itr(this->getListOfSampleFolders(path));
  while(itr.hasNext()){
    TQSampleFolder* sf = itr.readNext();
    if(!sf) continue;
    DEBUGclass("adding '%s' object names for '%s'",objectClass->GetName(),sf->getPath().Data());
    this->addObjectNames(sf, objectPath, objectClass, objectNames, sfList, filterScheme);
  }
}


//__________________________________________________________________________________|___________

TList * TQSampleDataReader::getBaseScaleFactors(TQSampleFolder * sampleFolder, const TString& path, const TString& scaleScheme) {
  // return a TList of all the internal TQCounter objects
  if (f_Verbose > 3 && sampleFolder) {
    // the method headline
    VERBOSEclass("path='%s'",sampleFolder->getPath().Data());
  }
 
  // the global scale factor
  TList * scaleList = NULL;
  
  // in local mode the base sample folder must be the base of <sampleFolder>
  if (f_localMode && (!f_baseSampleFolder || !f_baseSampleFolder->isBaseOf(sampleFolder)))
    return scaleList;
 
  // the pointer to the current sample folder
  TQSampleFolder * sf = sampleFolder;
 
  while (sf) {
 
    /* we are only intersted in scale factors of the
       base folders, thus skip the starting sample folder */
    if (sf != sampleFolder) {
 
      // get the local scale factor
      //TQCounter * localScale = new TQCounter("localScale",1.,0.);
 
      // dump some info text if in verbose mode
      if (f_Verbose > 3) {
        VERBOSEclass("looking at folder '%s'",sf->getPath().Data());
      }
 
      TString scaleFactorPath = path;
 
      while (!scaleFactorPath.IsNull()) {
        //TQCounter * localScaleItem = sf->getScaleFactorCounterInternal(scaleScheme + ":" + scaleFactorPath);
        TQCounter * localScaleItem = sf->getScaleFactorCounterInternal(scaleFactorPath,scaleScheme);
        scaleFactorPath = TQFolder::getPathWithoutTail(scaleFactorPath);
        if (!localScaleItem) {
          continue;
        }
        if (f_Verbose > 3) {
          VERBOSEclass("at path '%s', found '%g'",scaleFactorPath.Data(),localScaleItem->getCounter());
        }
        if(!scaleList){
          scaleList = new TList();
          scaleList->SetOwner(false);
        }
        scaleList->Add(localScaleItem);
      }
    }
 
    // get base sample folder to step up to
    sf = sf->getBaseSampleFolder();
 
    /* stop at the root sample folder or before
     * the base sample folder in local mode */
    if (f_localMode && sf == f_baseSampleFolder) {
      sf = NULL;
    }
  }
 
  // return the total scale factor list
  return scaleList;
}


//__________________________________________________________________________________|___________

bool TQSampleDataReader::hasHistogram(const TString& path, const TString& name, const TString& options) {
  // Tries to retrieve the histogram <name> from <path> applying options <options>
  // and returns true in case of success or false otherwise.

  // try to retrieve the histogram
  TH1 * histo = getHistogram(path, name, options);

  if (histo) {
    // we are not interested in the histogram itself => delete it
    delete histo;
    return true;
  } else {
    // failed to retrieve the histogram
    return false;
  }
}


//__________________________________________________________________________________|___________

bool TQSampleDataReader::hasCounter(const TString& path, const TString& name, const TString& options) {
  // Tries to retrieve the counter <name> from <path> applying options <options>
  // and returns true in case of success or false otherwise.

  // try to retrieve the counter
  TQCounter * counter = getCounter(path, name, options);

  if (counter) {
    // we are not interested in the counter itself => delete it
    delete counter;
    return true;
  } else {
    // failed to retrieve the counter
    return false;
  }
}


//__________________________________________________________________________________|___________

TList * TQSampleDataReader::getListOfHistogramNames(const TString& path, TList * sfList) {
  // Returns a list (instance of TList* with instances of TObjString*) of the names
  // of all histograms available in the sample folder structure referred to by <path>
  // or a NULL pointer in case of failure or if no histogram is available. Please
  // note: the user is responsible to delete the list.

  // the list to return
  TList * objectNames = NULL;

  // add histogram names to the list
  this->addObjectNames(path, f_pathHistograms, TH1::Class(), objectNames, sfList, "");

  // return the list
  return objectNames;
}


//__________________________________________________________________________________|___________

TList * TQSampleDataReader::getListOfObjectNames(TClass* objClass, const TString& subpath, const TString& path, TList * sfList){

  // the list to return
  TList * objectNames = 0;

  // add the object names to the list
  this->addObjectNames(path, subpath, objClass, objectNames, sfList, "");

  // return the list
  return objectNames;
}



//__________________________________________________________________________________|___________

TList * TQSampleDataReader::getListOfCounterNames(const TString& path, TList * sfList) {
  // Returns a list (instance of TList* with instances of TObjString*) of the names
  // of all counter available in the sample folder structure referred to by <path>
  // or a NULL pointer in case of failure or if no counter is available. Please
  // note: the user is responsible to delete the list.

  // the list to return
  TList * objectNames = 0;

  // add counter names to the list
  this->addObjectNames(path, f_pathCutflow, TQCounter::Class(), objectNames, sfList, "");

  // return the list
  return objectNames;
}

//__________________________________________________________________________________|___________

TList * TQSampleDataReader::getListOfEventlistNames(const TString& path, TList * sfList) {

  // the list to return
  TList * objectNames = 0;

  // add the object names to the list
  this->addObjectNames(path, f_pathEventlists, TList::Class(), objectNames, sfList, "");
  this->addObjectNames(path, f_pathEventlists, TQTable::Class(), objectNames, sfList, "");

  // return the list
  return objectNames;
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::printListOfHistogramLocations(const TString& name) {
  TList* sfList = new TList();
  TH1 * histo = getHistogram(".", name, "", sfList);
  delete histo;
  TQIterator itr(sfList,true);
  while(itr.hasNext()){
    TQSampleFolder* sf = dynamic_cast<TQSampleFolder*>(itr.readNext());
    if(!sf) continue;
    TH1* hist = dynamic_cast<TH1*>(sf->getObject(name,f_pathHistograms));
    std::cout << TQStringUtils::fixedWidth(sf->getPath(),40,"l");
    if(hist) std::cout << TQHistogramUtils::getDetailsAsString(hist);
    std::cout << std::endl;
  }
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::printListOfHistograms(TString options) {

  // temporarily disable verbose mode
  int tmpVerbose = f_Verbose;
  f_Verbose = 0;

  // read the path to print
  TString path = TQStringUtils::readPrefix(options, ":", ".");

  // get the list of histogram names matching <path>
  TList * names = this->getListOfHistogramNames(path);

  // ===== print header =====
  TString line;
  line.Append(TQStringUtils::fixedWidth("Histogram name", 50, "l"));
  line.Append(TQStringUtils::fixedWidth("Type", 8, "l"));
  line.Append(TQStringUtils::fixedWidth("Binning", 70, "l"));
  line.Append(TQStringUtils::fixedWidth("# Folders", 12));
  std::cout << TQStringUtils::makeBoldWhite(line) << std::endl;
  std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::repeat("=", TQStringUtils::getWidth(line))) << std::endl;

  // stop if no histograms were found
  if (!names) {
    return;
  }

  // the histogram name prefix
  TString prefix;

  // sort the list
  names->Sort();

  // loop over list of histogram names
  TQIterator itr(names,true);
  while (itr.hasNext()){
    TObject* obj = itr.readNext();
    // get the histogram name
    TString name = obj->GetName();

    // group histogram prefixes
    TString newPrefix = TQFolder::getPathWithoutTail(name);
    if (newPrefix.IsNull()) {
      newPrefix = ".";
    }
    if (newPrefix.CompareTo(prefix) != 0) {
      prefix = newPrefix;
      std::cout << TString::Format("%*s\033[1;34m%s\033[0m/", 0, "", prefix.Data()) << std::endl;
    }

    // get the histogram and the list of contributing sample folders
    TList * sfList = new TList();
    TH1 * histo = getHistogram(path, name, "", sfList);

    // remember the error message for this histogram
    TString errorMsg = this->getErrorMessage();

    // get the name of the histogram class
    TString histoType;
    if (histo)
      histoType = histo->IsA()->GetName();

    // prepare line to print
    line.Clear();

    if (histo) {

      // histogram details
      TString histoDetails = TQHistogramUtils::getDetailsAsString(histo, 2);

      line.Append(TQStringUtils::fixedWidth(
                                            TQStringUtils::repeat(" ", 2 * TQFolder::countPathLevels(prefix, false)) +
                                            TQFolder::getPathTail(name), 50,"l"));
      line.Append(TQStringUtils::fixedWidth(histoType, 8, "l"));
      line.Append(TQStringUtils::fixedWidth(histoDetails, 70, "l"));
      line.Append(TQStringUtils::fixedWidth(TString::Format("%d", sfList->GetEntries()), 12,"l"));
    } else {
      line.Append(TQStringUtils::fixedWidth(
                                            TQStringUtils::repeat(" ", 2 * TQFolder::countPathLevels(prefix)) +
                                            "\033[0;31m" + TQFolder::getPathTail(name) + "\033[0m", 50, "l"));
      line.Append(TQStringUtils::fixedWidth("--", 8, "l"));
      line.Append(TQStringUtils::fixedWidth(errorMsg, 70, "l"));
      line.Append(TQStringUtils::fixedWidth("--", 12,"l"));
    }

    // print line
    std::cout << line << std::endl;

    // delete histogram
    delete histo;
    // delete list of sample folders
    delete sfList;
  }

  // reactivate verbose mode (of set before)
  f_Verbose = tmpVerbose;

}

//__________________________________________________________________________________|___________

void TQSampleDataReader::printListOfCounterLocations(const TString& name) {
  TList* sfList = new TList();
  TQCounter* cnt = this->getCounter(".", name, "", sfList);
  delete cnt;
  TQIterator itr(sfList,true);
  while(itr.hasNext()){
    TQSampleFolder* sf = dynamic_cast<TQSampleFolder*>(itr.readNext());
    if(!sf) continue;
    TQCounter* cnt = dynamic_cast<TQCounter*>(sf->getObject(name,f_pathCutflow));
    std::cout << TQStringUtils::fixedWidth(sf->getPath(),40,"l");
    if(cnt) cnt->getAsString();
    std::cout << std::endl;
  }
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::printListOfCounters(TString options) {

  // temporarily disable verbose mode
  int tmpVerbose = f_Verbose;
  f_Verbose = 0;

  // read the path to print
  TString path = TQStringUtils::readPrefix(options, ":", ".");

  // get the list of counter names matching <path>
  TList * names = this->getListOfCounterNames(path);

  // ===== print header =====
  TString line;
  line.Append(TQStringUtils::fixedWidth("Counter name", 30, "l"));
  line.Append(TQStringUtils::fixedWidth("Counter title", 50, "l"));
  line.Append(TQStringUtils::fixedWidth("Details", 50));
  line.Append(TQStringUtils::fixedWidth("# Folders", 10));
  std::cout << TQStringUtils::makeBoldWhite(line) << std::endl;
  std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::repeat("=", TQStringUtils::getWidth(line))) << std::endl;

  // stop if no counters were found
  if (!names) {
    return;
  }

  // loop over list of counter names
  TQIterator itr(names->MakeIterator(kIterBackward),true);
  while (itr.hasNext()){
    TObject* obj = itr.readNext();
    // get the counter name
    TString name(obj->GetName());

    // get the counter and the list of contributing sample folders
    TList * sfList = new TList();
    TQCounter * cnt = getCounter(path, name, "", sfList);
    TString title(cnt->GetTitle());

    // remember the error message for this counter
    TString errorMsg = this->getErrorMessage();

    // prepare line to print
    line.Clear();

    if (cnt) {
      // counter details
      TString details = cnt->getAsString();

      line.Append(TQStringUtils::fixedWidth(TQStringUtils::makeBoldWhite(name),30,"l"));
      line.Append(TQStringUtils::fixedWidth(title,50,"l"));
      line.Append(TQStringUtils::fixedWidth(details, 50, "l"));
      line.Append(TQStringUtils::fixedWidth(TString::Format("%d", sfList->GetEntries()), 10,"l"));
    } else {
      line.Append(TQStringUtils::fixedWidth(TQStringUtils::makeBoldWhite(name), 60, "l"));
      line.Append(TQStringUtils::fixedWidth(errorMsg, 50, "l"));
      line.Append(TQStringUtils::fixedWidth("--", 10,"c"));
    }

    // print line
    std::cout << line << std::endl;

    // delete counter
    delete cnt;
    // delete list of sample folders
    delete sfList;
  }
  delete names;

  // reactivate verbose mode (of set before)
  f_Verbose = tmpVerbose;

}


//__________________________________________________________________________________|___________

TQSampleDataReader::~TQSampleDataReader() {
}

//__________________________________________________________________________________|___________

TFolder* TQSampleDataReader::exportHistograms(const TString& sfpath, const TString& tags){
  // export all histograms from a certain path to a TDirectory object
  TQTaggable taggable(tags);
  return this->exportHistograms(sfpath,taggable);
}

//__________________________________________________________________________________|___________

TFolder* TQSampleDataReader::exportHistograms(const TString& sfpath, TQTaggable& tags){
  // export all histograms from a certain path to a TFolder object
  // tags will be passed along to the histogram retrieval
  // the tag "filter" allows to filter the histogram names
  // if the tag "cutdiagram" is set, it will be used to retrieve a cut hierarchy from a folder
  // under the path given as value to this tag and export a cut diagram as TNamed
  // tags prefixed with "cutdiagram." will be passed through to the cut diagram making
  TList* sflist = NULL;
  TQSampleFolder* sf = this->f_baseSampleFolder->getSampleFolder(sfpath);
  if(!sf){
    ERRORclass("invalid path '%s'",sfpath.Data());
    return NULL;
  }
  TQFolder* basesf = this->f_baseSampleFolder->findCommonBaseFolder(sflist);
  TFolder* base = basesf ? new TFolder(basesf->GetName(),basesf->getTagStringDefault("style.default.title",basesf->GetTitle())) : new TFolder("histograms",sfpath);
  // objects
  bool includeObjects = tags.getTagBoolDefault("includeObjects",false);
  if(includeObjects){
    TQIterator itr(sf->GetListOfFolders());
    while(itr.hasNext()){
      TObject* obj = itr.readNext();
      if(obj->InheritsFrom(TH1::Class())){
        TH1* hist = TQHistogramUtils::copyHistogram((TH1*)obj);
        base->Add(hist);
      } else if(!obj->InheritsFrom(TQFolder::Class())){
        TObject* clone = obj->Clone();
        base->Add(clone);
      }
    }
  }
  // histograms
  TList* histnames = this->getListOfHistogramNames();
  if(!histnames || histnames->GetEntries() < 1){
    if(histnames) delete histnames;
    ERRORclass("no histograms found in '%s'",sfpath.Data());
    return NULL;
  } else {
    TQIterator histitr(histnames,true);
    TString filter = tags.getTagStringDefault("filter","*");
    while(histitr.hasNext()){
      TFolder* current = base;
      TObject* obj = histitr.readNext();
      if(!obj) continue;
      TString path(obj->GetName());
      if(!TQStringUtils::matches(path,filter)) continue;
      TH1* hist = this->getHistogram(sfpath,path,&tags);
      if(!hist){
        WARNclass("unable to retrieve histogram '%s'",path.Data());
        continue;
      }
      TString name = TQFolder::getPathTail(path);
      while(!path.IsNull()){
        TString fname = TQFolder::getPathHead(path);
        TFolder* newFolder = dynamic_cast<TFolder*>(current->FindObject(fname));
        if(!newFolder){
          newFolder = current->AddFolder(fname,fname);
        }
        current = newFolder;
      }
      current->Add(hist);
    }
  }
  //counters
  bool includeCounters = tags.getTagBoolDefault("includeCounters",false);
  if(includeCounters){
    TList* cntnames = this->getListOfCounterNames();
    TQIterator cntitr(cntnames,true);
    TString filter = tags.getTagStringDefault("filter","*");
    while(cntitr.hasNext()){
      TFolder* current = base;
      TObject* obj = cntitr.readNext();
      if(!obj) continue;
      TString name(obj->GetName());
      if(!TQStringUtils::matches(name,filter)) continue;
      TQCounter* cnt = this->getCounter(sfpath,name,&tags);
      if(!cnt){
        WARNclass("unable to retrieve counter '%s'",name.Data());
        continue;
      }
      TH1* hist = TQHistogramUtils::counterToHistogram(cnt);
      current->Add(hist);
      delete cnt;
    }
  }
  delete sflist;
  // create the cut diagram
  TString cutinfo;
  if(tags.getTagString("cutdiagram",cutinfo)){
    TQFolder* f = this->f_baseSampleFolder->getFolder(cutinfo);
    if(!f){
      WARNclass("unable to load cut hierarchy from folder '%s' - no such folder!",cutinfo.Data());
    } else {
      TQTaggable cutdiagramtags;
      cutdiagramtags.importTagsWithoutPrefix(tags,"cutdiagram.");
      TQCut* cut = TQCut::importFromFolder(f);
      if(!cut){
        WARNclass("unable to load cut hierarchy from folder '%s' - invalid folder structure!",cutinfo.Data());
      } else {
        TString diagram = cut->writeDiagramToString(cutdiagramtags);
        TNamed* cutDiagram = new TNamed("cutdiagram.tex",diagram.Data());
        base->Add(cutDiagram);
        delete cut;
      }
    }
  }
  return base;
}

//__________________________________________________________________________________|___________

bool TQSampleDataReader::exportHistograms(TDirectory* d, const TString& sfpath, const TString& tags){
  // export all histograms from a certain path to a TDirectory object
  // tags will be passed along to the histogram retrieval
  // the tag "filter" allows to filter the histogram names
  TQTaggable t(tags);
  return exportHistograms(d,sfpath,t);
}

//__________________________________________________________________________________|___________

bool TQSampleDataReader::exportHistograms(TDirectory* d, const TString& sfpath, TQTaggable& tags){
  // export all histograms from a certain path to a TDirectory object
  // tags will be passed along to the histogram retrieval
  // the tag "filter" allows to filter the histogram names
  TList* names = this->getListOfHistogramNames();
  if(!names || names->GetEntries() < 1){
    if(names) delete names;
    ERRORclass("no histograms found in '%s'",sfpath.Data());
    return false;
  }
  TQIterator itr(names,true);
  TString filter = tags.getTagStringDefault("filter","*");
  while(itr.hasNext()){
    TObject* obj = itr.readNext();
    if(!obj) continue;
    TString path(obj->GetName());
    if(!TQStringUtils::matches(path,filter)) continue;
    TH1* hist = this->getHistogram(sfpath,path,&tags);
    if(!hist){
      WARNclass("unable to retrieve histogram '%s'",path.Data());
      continue;
    }
    if (tags.getTagBoolDefault("useShortNames",false)) TQStringUtils::readPrefix(path,"/");
    TString name = tags.getTagBoolDefault("useShortNames",false) ? path : TQFolder::makeValidIdentifier(path,"_");
    hist->SetName(name);
    d->Add(hist);
  }
  return true;
}


//__________________________________________________________________________________|___________

bool TQSampleDataReader::exportHistogramsToFile(const TString& fname, const TString& sfpath, const TString& tags){
  // export all histograms from a certain path to a file with the given name
  // the file will be opened with the RECREATE option, and if ensureDirectory=true is passed,
  // missing parent directories will be created
  TQTaggable taggable(tags);
  return this->exportHistogramsToFile(fname,sfpath,taggable);
}

//__________________________________________________________________________________|___________

bool TQSampleDataReader::exportHistogramsToFile(const TString& fname, const TString& sfpath, TQTaggable& tags){
  // export all histograms from a certain path to a file with the given name
  // the file will be opened with the RECREATE option, and if ensureDirectory=true is passed,
  // missing parent directories will be created
  bool flat = tags.getTagBoolDefault("flat",false);
  TFolder* result = flat ? NULL : this->exportHistograms(sfpath,tags);
  if(result || flat){
    if(tags.getTagBoolDefault("ensureDirectory",false)){
      if(!TQUtils::ensureDirectoryForFile(fname)){
        ERRORclass("unable to ensure directory for file '%s'!",fname.Data());
        return false;
      }
    }
  } else {
    return false;
  }
  TFile* f = TFile::Open(fname,"RECREATE");
  if(!f || !f->IsOpen()){
    ERRORclass("unable to open file '%s' for writing",fname.Data());
    if(f) delete f;
    return false;
  }
  bool retval = true;
  if(flat){
    retval = this->exportHistograms(f,sfpath,tags);
  } else {
    f->Add(result);
  }
  f->Write();
  f->Close();
  return retval;
}

//__________________________________________________________________________________|___________

TQFolder* TQSampleDataReader::getCorrelationFolderByIdentifier(const TString& id, bool forceUpdate) {
//resolves a sample identifier for its path in the folder hierarchy
  TString path;
  if ( !(f_identifierToFolderMap.count(id) > 0) || !f_identifierToFolderMap.count(id) || forceUpdate ) {
    f_identifierToFolderMap[id] = this->f_baseSampleFolder->getFolder(TQFolder::concatPaths("*",".correlations",id));
    DEBUGclass("Added folder with path '%s' to folder map (id: '%s')",f_identifierToFolderMap[id]->getPath().Data(), id.Data());
  }
  return f_identifierToFolderMap[id];
}

//__________________________________________________________________________________|___________

void TQSampleDataReader::copyData(const TString& source, const TString&target, const TString&options){
  // copy the data from one part of the sample folder to another
  TQSampleFolder* targetFolder = this->f_baseSampleFolder->getSampleFolder(target+"+");
  if(!targetFolder) return;
  TQIterator itr(this->getListOfHistogramNames(),true);
  while(itr.hasNext()){
    TObject* histname = itr.readNext();
    if(!histname) continue;
    TString path(histname->GetName());
    TH1* hist = this->getHistogram(source,path,options);
    TString name(TQFolder::getPathTail(path));
    TQFolder* histograms = targetFolder->getFolder(TQFolder::concatPaths(this->f_pathHistograms,path)+"+");
    hist->SetName(name);
    histograms->addObject(hist);
  }
}

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