#include "QFramework/TQSampleInitializerBase.h"
#include "QFramework/TQSample.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQXSecParser.h"

#include "definitions.h"

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

#include "TFile.h"
#include "TSystem.h"

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

////////////////////////////////////////////////////////////////////////////////////////////////
//
// TQSampleInitializerBase:
//
// A base class that provides some helper functions for different types of sample initializers.
// Do not instantiate this class!
//
////////////////////////////////////////////////////////////////////////////////////////////////

ClassImp(TQSampleInitializerBase)

TQSampleInitializerBase::TQSampleInitializerBase(){
  // default constructor
}

void TQSampleInitializerBase::reset(){
  // resets the initializer
  if(this->fPaths) delete this->fPaths;
  this->fPaths = NULL;
}

TQSampleInitializerBase::~TQSampleInitializerBase(){
  // default destructor
  if(this->fPaths) delete this->fPaths;
}


//#ifdef ROOTCORE
//#include <RootCore/Packages.h>
//#endif

#ifdef HAS_XAOD
#define ASG_RELEASE 1
namespace TQUtils {
  xAOD::TEvent* xAODMakeEvent(TFile* file);
}
#define XAOD_STANDALONE 1
#include "xAODRootAccess/TEvent.h"
#include "xAODCutFlow/CutBookkeeper.h"
#include "xAODCutFlow/CutBookkeeperContainer.h"
#include "xAODCutFlow/CutBookkeeperAuxContainer.h"

namespace {
  bool extractCountersHelper(xAOD::TEvent& event, const char* cbkname, TQFolder* folder, double scale){
    if(!folder){
      throw std::runtime_error("TQSampleInitializerBase::extractCountersHelper called with invalid folder!");
    }
    const xAOD::CutBookkeeperContainer* constCont = NULL;
    if(event.retrieveMetaInput(constCont, cbkname).isSuccess()){
      xAOD::CutBookkeeperContainer* cont = const_cast<xAOD::CutBookkeeperContainer*>(constCont);
      if(!cont){
        return false;
      }
      int ok = 0;
      for(size_t i=0; i<cont->size(); ++i){
        const xAOD::CutBookkeeper* cbk = cont->at(i);
        if(!cbk) {
          WARNfunc("Found invalid CutBookkeeper in container.");
          continue;
        }
        xAOD::CutBookkeeper::Payload payload = cbk->payload();
        TQCounter* cnt = new TQCounter(cbk->name(),scale*payload.sumOfEventWeights,scale*sqrt(payload.sumOfEventWeightsSquared),payload.nAcceptedEvents);
        cnt->SetTitle(cbk->description().c_str());
        const TString cycleName(TString::Format("cycle%d+",cbk->cycle()));
        TQFolder* cycle = folder->getFolder(cycleName);
        if(!cycle){
          throw std::runtime_error(TString::Format("TQSampleInitializerBase::extractCountersHelper unable to create subfolder %s!",cycleName.Data()).Data());
        }
        // Adding input stream as folder to circumvent the "same cycle" bug for CutBookkeepers
        TString streamName(cbk->inputStream().c_str());
        if(streamName.IsNull()){
          streamName="UNKNOWN";
        }
        streamName.Append("+");
        TQFolder* stream = cycle->getFolder(streamName);
        if(!stream){
          throw std::runtime_error(TString::Format("TQSampleInitializerBase::extractCountersHelper unable to create subfolder %s!",streamName.Data()).Data());
        }
        stream->addObject(cnt);
        ok++;
      }
      if(ok > 0) return true;
    }
    return false;
  }
}

#endif



TQFolder* TQSampleInitializerBase::extractCounters(TFile* file, double scale){
  // extract thecounters from the CutBookkeepers of an xAOD MetaData tree and return the cutflow folder
  TQFolder* cutflow = new TQFolder(".cutflow");
  if(TQSampleInitializerBase::extractCounters(file,cutflow,scale)){
    return cutflow;
  } else {
    delete cutflow;
    return NULL;
  }
}

bool TQSampleInitializerBase::extractCountersFromSample(TQSample* sf){
  // Extract the counters from the CutBookkeepers of the input file and deposit them in a sample
  TQFolder* cutflow = sf->getFolder(".cutflow+");
  TString fileName = sf->getFilename();

  TFile* f = TFile::Open(fileName,"READ");
  if(!f) {
    throw std::runtime_error(TString::Format("something went wrong when trying to read file for sample '%s'",sf->getPath().Data()).Data());
    return false;
  }
  if(!f->IsOpen()){
    throw std::runtime_error(TString::Format("unable to open file for sample '%s'",sf->getPath().Data()).Data());
    delete f;
    return false;
  }

  bool ok = TQSampleInitializerBase::extractCounters(f,cutflow,sf->getNormalisation());
  f->Close();
  delete f;
  return ok;
}

bool TQSampleInitializerBase::extractCounters(TFile* file, TQFolder* cutflow, double scale){
  // extract thecounters from the CutBookkeepers of an xAOD MetaData tree and deposit them in the cutflow folder
#ifndef ASG_RELEASE
  ERRORclass("can only extract counters from xAOD::CutBookkeeper in ASG Release!");
  return false;
#else
  if (!cutflow) return false;

  std::shared_ptr<xAOD::TEvent> event(TQUtils::xAODMakeEvent(file));
  bool incompleteOK = extractCountersHelper(*event, "IncompleteCutBookkeepers", cutflow->getFolder("IncompleteCutBookkeepers+"),scale);
  bool completeOK   = extractCountersHelper(*event, "CutBookkeepers", cutflow->getFolder("CutBookkeepers+"),scale);
  if(completeOK) return true;
  if(incompleteOK){
    WARNclass("received only incomplete cutbookkeepers");
    return true;
  }
  ERRORclass("unable to read cutbookkeepers");
  return false;
#endif
}


bool TQSampleInitializerBase::getTreeInformation(TQSample* sample, const TString& filename, TString& treeName, double& sumOfWeights, int& nEvents, int& nEntries, TString& message){
  // retrieve the tree information on the given sample
  TQLibrary::redirect_stderr("/dev/null");
  TFile* f = TFile::Open(filename,"READ");
  TQLibrary::restore_stderr();
  if(!f){
    message = TString::Format("no such file: %s",filename.Data());
    return false;
  }
  if(!f->IsOpen()){
    message = TString::Format("unable to open file: %s",filename.Data());
    delete f;
    return false;
  }
  TString treeNamePattern;
  std::vector<TString> treeNamePatterns;
  if(this->getTagString("treeName",treeNamePattern)){
    treeNamePatterns.push_back(treeNamePattern);
  }
  if(sample && sample->getTagString("~.xsp.treename",treeNamePattern)){
    treeNamePatterns.push_back(treeNamePattern);
  }
  if(!treeName.IsNull())
    treeNamePatterns.push_back(treeName);
  // Going to do a quite dirty way to avoid interference between xAOD and NTuple handling (needed for proper MetaData storing in xAODs)
  // Check if any of the treeNamePatterns is "CollectionTree", if yes set isxAOD true
  bool isxAOD = false;
  for( TString& name : treeNamePatterns ) {
    isxAOD = this->getTagBoolDefault("xAOD",TQStringUtils::equal(name,"CollectionTree"));
    if( isxAOD ) break;
  }
  // Tell the sample if it is an xAOD or not
  sample->setTagBool("isxAOD",isxAOD);

  // For now excluding md5sum calculation, it's simply too slow
  // TString md5sum = TQUtils::getMD5(filename);
  // sample->setTagString(".init.filestamp.md5sum",md5sum);
  // Just store file size as a (arguably poor) substitute
  Long64_t fileSize = f->GetSize();
  double fileSize_MB = fileSize/1e6;
  sample->setTagDouble(".init.filestamp.size",fileSize_MB);
  TString moddate = TQUtils::getModificationDate(f);
  sample->setTagString(".init.filestamp.moddate",moddate);

  TTree* t = NULL;
  // Do the next steps only if we are using NTuples as input
  if( !isxAOD ) {
    for(size_t i=0; i<treeNamePatterns.size(); i++){
      treeNamePattern = this->replaceInText(treeNamePatterns[i]);
      DEBUG("trying tree name pattern '%s'",treeNamePattern.Data());
      TList* l = TQUtils::getObjects(treeNamePattern,TTree::Class(), f);
      if(l->GetEntries() == 0){
        DEBUG("failure - no such tree");
        delete l;
      } else if(l->GetEntries() > 1){
        message = TString::Format("ambiguous tree name specification '%s', candidates are %s",treeNamePattern.Data(),TQStringUtils::concatNames(l,", ","''").Data());
        DEBUG("failure - multiple matches");
        delete l;
        f->Close();
        delete f;
        return false;
      } else {
        DEBUG("success");

        // check if we have the tree already
        t = dynamic_cast<TTree*>(l->At(0));
        if (!t) {
          DEBUG("List did not contain a tree.");
          t = dynamic_cast<TTree*>(f->Get(l->At(0)->GetName()));
        }
        delete l;
        break;
      }
    }
    if(!t){
      message = TString::Format("no tree matching %s in file: '%s'",TQStringUtils::concat(treeNamePatterns,"'").Data(),filename.Data());
      f->Close();
      delete f;
      return false;
    }

    // Extract tree path inside root file
    TDirectory* dr = t->GetDirectory();
    TString path = dr->GetPath();  // path is of form /path/to/file:/tdir/subdir
    int pos = TQStringUtils::rfindFirstOf(path, ":", path.Length()) + 2;  // +2 to remove :/
    path = path(pos, path.Length() - pos);
    treeName = TQFolder::concatPaths(path, t->GetName());  // append tree name
    nEntries = t->GetEntries();
    nEvents = t->GetEntries();
  }
  else {
    treeName = "CollectionTree";
    TTree* tree = (TTree*)f->Get(treeName.Data());
    nEntries = (tree) ? tree->GetEntries() : 0;
    nEvents = 0;
  }

  bool extractBookkeepingInformation = sample->getTagBoolDefault("~usemcweights",false);
  if(extractBookkeepingInformation){
    if(this->getTagBoolDefault("useSummarytree",false)){
      TTree* summary = dynamic_cast<TTree*>(f->Get(this->getTagStringDefault("summaryTree.name","summary")));
      if(!summary){
          message = "error retrieving summary tree with name '";
          message += this->getTagStringDefault("summaryTree.name","summary");
          message += "', using tree entry count instead";
          sumOfWeights = nEvents;
      } else {
        sumOfWeights = TQUtils::getSum(summary,this->getTagStringDefault("summaryTree.expression","initialSumW"));
        if(!TQUtils::isNum(sumOfWeights)){
          message = "unable to retrieve sum of weights from summary tree, using tree count instead";
          sumOfWeights = nEvents;
        } else {
          message = TString::Format("successfully retrieved sumOfWeights from summary tree %s : %f",summary->GetName(),sumOfWeights);
        }
      }
    } else if(this->getTagBoolDefault("useCountHistogram",false)){
      TString hname = sample->getTagStringDefault("~.init.countHistogram.name",sample->replaceInText(this->getTagStringDefault("countHistogram.name","Count")));
      TH1* hist = 0;
      TQIterator itr(f->GetListOfKeys());
      while(itr.hasNext()){
        TObject* obj = itr.readNext();
        if(TQStringUtils::matches(obj->GetName(),hname)){
          hist = dynamic_cast<TH1*>(f->Get(obj->GetName()));
          break;
        }
      }
      if(!hist){
        message = "error retrieving count histogram from file, using tree entry count instead";
        sumOfWeights = nEvents;
      } else {
        sumOfWeights = hist->GetBinContent(sample->getTagIntegerDefault("~.init.countHistogram.bin.offset",0) + sample->getTagIntegerDefault("~.init.countHistogram.bin",this->getTagIntegerDefault("countHistogram.bin",1)));
        message = "successfully retrieved sumOfWeights from count histogram";
      }
    }
    else if (this->getTagBoolDefault("useSumOfWeightsBranch", false)){
      DEBUGclass("Reading sum of weights from a branch. Assume that all branch entries are the same and only read the first entry.");
      TString sowBranchName;
      float sowFloat = 0;
      bool success = false;
      if (!this->getTagString("sumOfWeightsBranchName", sowBranchName)){
        message = "no sumOfWeightsBranchName defined, using tree entry count instead";
      }
      else if (!t->FindBranch(sowBranchName)){
        message = TString::Format("no branch %s in tree", sowBranchName.Data());
      }
      else if (nEvents <= 0){
        message = "tree has no entries, setting sum of weights to 0";
      }
      else if (t->SetBranchAddress(sowBranchName, &sowFloat) == 0){
        t->GetEntry(0);
        sumOfWeights = sowFloat;
        DEBUGclass("sum of weights: %f", sumOfWeights);
        message = TString::Format("read sum of weights from first entry of branch %s", sowBranchName.Data());
        success = true;
      }
      else if (t->SetBranchAddress(sowBranchName, &sumOfWeights) == 0){
        DEBUGclass("branch %s is no float, using double", sowBranchName.Data());
        DEBUGclass("sum of weights before reading: %d", sumOfWeights);
        t->GetEntry(0);
        DEBUGclass("sum of weights after reading: %d", sumOfWeights);
        message = TString::Format("read sum of weights from first entry of branch %s", sowBranchName.Data());
        success = true;
      }
      else{
        message = TString::Format("the branch %s is neither float nor double, using tree entry count instead", sowBranchName.Data());
      }
      if (!success){
        sumOfWeights = nEvents;
      }
    }
    else if(sample->getTagDouble("~.xsp.sumOfWeights",sumOfWeights)){
      // nothing to do here, as the operation in the if-statement has already stored the value
      message = "successfully retrieved sumOfWeights from sample tag";
    } else if(isxAOD && this->getTagBoolDefault("useCutBookKeeper",true)){
#ifdef ASG_RELEASE
// #pragma message "using ASG_RELEASE compilation scheme"
      // Make a TEvent object and connect it with the input file
      DEBUGclass("Trying to create TEvent from file '%s'",f->GetPath());
      xAOD::TEvent* event = TQUtils::xAODMakeEvent(f);
      // this is the proper way of reading the book-keeping information from the xAOD, available from ATHENA 20.X on
      double averageWeight;
      TString contname = sample->getTagStringDefault("~xAODCutBookKeeperContainer",this->getTagStringDefault("xAODCutBookKeeperContainer","StreamDAOD_PHYS"));
      TString bkname = sample->getTagStringDefault("~xAODCutBookKeeperName",this->getTagStringDefault("xAODCutBookKeeperName","AllExecutedEvents"));
      nEvents = TQUtils::xAODMetaDataGetNEventsInitialFromCutBookkeeper(*event,contname.Data(),bkname.Data());
      TString averageWeightName = this->getTagStringDefault("averageWeightName","~.xsp.averageWeight");
      if(sample->getTagDouble(averageWeightName,averageWeight)){
        DEBUGclass("averageWeight=%f",averageWeight);
        sumOfWeights = averageWeight * nEvents;
        message = "successfully used '" + averageWeightName + "' with event count from cutBookkeeper";
      } else {
        sumOfWeights = TQUtils::xAODMetaDataGetSumWeightsInitialFromCutBookkeeper(*event,contname.Data(),bkname.Data());
        message = "successfully retrieved sumOfWeights from cutBookkeeper";
      }
      if(!TQUtils::isNum(sumOfWeights)){
        ERRORclass("no valid sumOfWeights could be retrieved from cutBookkeepers for file '%s'. If the file is expected to be a valid xAOD file it might have been corrupted.",filename.Data());
        message = "unable to retrieve xAOD MetaData information, using tree event count instead";
        sumOfWeights = nEvents;
      }
      delete event;
#else
// #pragma message "using plain ROOT compilation scheme"
      message = "unable to retrieve xAOD MetaData information, using tree event count instead";
      ERRORclass("unable to retrieve xAOD MetaData information: please recompile inside an ASG release environment!");
      sumOfWeights = nEvents;
#endif
    } else {
      sumOfWeights = nEvents;
      message = "successfully retrieved sumOfWeights from tree entry count";
    }
  } else {
    message="not normalizing";
  }
  f->Close();
  delete f;
  if(message.IsNull()){
    throw std::runtime_error("passed through initialization without well-defined normalization scheme!");
  }
  return true;
}

void TQSampleInitializerBase::readDirectory(const TString& path, int maxdepth){
  // read a directory from some given path
  DEBUGclass("entering function");
  this->reset();
  DEBUGclass("reading directory '%s'",path.Data());
  TQFolder * directory = TQFolder::copyDirectoryStructure(path, maxdepth);
  if (!this->fPaths) this->fPaths = new TQFolder();
  //some paths from the file system might contain characters which are not allows in TQFolders (and might cause issues further down the line!). We therefore transform the name into a valid TQFolder name but also store the original name in a tag
  directory->setTag("representingName",directory->GetName());
  directory->SetName(TQFolder::makeValidIdentifier(directory->GetName()));
  this->fPaths->addFolder(directory);
  this->fPaths->SetName(TQFolder::makeValidIdentifier(path));
  DEBUGclass("leaving function");
}


bool TQSampleInitializerBase::readInputFilesList(const TString& listpath, bool verbose, bool reset){
  // read a directory from some given path
  if (reset) {
    this->reset();
  }
  // read a string containing the list of input files via file since long string causes memory error in CINT when it is read via stdin
  std::ifstream ifs(listpath.Data());
  if(!ifs.good()) return false;
  // split by ','
  std::vector<TString> fileList;
  std::stringstream ss;
  TString delims(",\n\0");
  while(ifs.good()){
    char next;
    ifs.get(next);
    if(delims.Contains(next) || !ifs.good()){
      TString s(ss.str().c_str());
      if(s.IsNull()) continue;
      if(verbose){ VERBOSEclass("adding input: %s",s.Data()); }
      fileList.push_back(s);
      ss.str("");
    } else {
      ss << next;
    }
  }
  // open input files
  if (!this->fPaths) this->fPaths = new TQFolder();
  this->setTagString("filenamePrefix","*");
  for (auto path : fileList){
    TQStringUtils::removeLeadingBlanks(path);    
    if (path.BeginsWith("#")) continue; // skip commented paths
    gSystem->ExpandPathName(path);
    TString name = TQFolder::getPathTail(path);
    TQFolder* fnew = nullptr;
    TQFolder* storageInstance = nullptr;
    if(path.IsNull()){
      fnew = this->fPaths->getFolder("local+"); //store the file name amongst the local files (i.e. for mounted file systems)
      if(verbose){ VERBOSEclass("adding file '%s' in './'",name.Data()); };
    } else {
      TString pathToFind = TQStringUtils::trim(path);
      TString basepath = "";
      size_t protpos = TQStringUtils::find(path,"://",0);
      if(protpos < (size_t)(path.Length())){
	      size_t protend = TQStringUtils::find(path,"/",protpos+3);
	      size_t pathstart = TQStringUtils::findFirstNotOf(path,"/",protend);
	      pathToFind = pathToFind(pathstart,pathToFind.Length()-pathstart);
	      basepath = path(0,pathstart);
	      storageInstance = this->fPaths->getFolder(TQFolder::makeValidIdentifier(basepath,"_").Append("+"));
	      storageInstance->setTagString("basepath",basepath);
      } else if (TQStringUtils::countLeading(pathToFind,"/",1) > 0) { //slightly special treatment for absolute paths as storing a leading "/" in a TQFolder path is not possible
        basepath = TQFolder::getPathHead(pathToFind);
        storageInstance = this->fPaths->getFolder(basepath+"+");
        basepath = "/"+basepath+"/"; //make sure the physical path will be correctly reconstructed (TQFolder::concatPaths will simply ignore a single "/" as one of it's arguments!)
        storageInstance->setTagString("basepath",basepath);
      }

      if (!storageInstance) storageInstance = this->fPaths->getFolder("local+"); //if no explicit storage instance is set, we use the default (for files on a local (mounted) file system)
      fnew = storageInstance->getFolder(pathToFind+"+!");
      if(verbose){ VERBOSEclass("adding file '%s' in '%s'",name.Data(),TQFolder::concatPaths(basepath,pathToFind).Data()); };
    }
    if(fnew) {
      fnew->addObject(new TObjString(name));
      if(verbose){ VERBOSEclass("succesfully added '%s'/'%s' in %s",path.Data(),name.Data(),fnew->getPath().Data()); };
    }
  }//end of loop over input files
  return true;
}


TQFolder* TQSampleInitializerBase::getDirectory(){
  // retrieve the directory of this sample initializer
  // NOTE: the folder is owned by the sample initializer - do not delete!
  return this->fPaths;
}

void TQSampleInitializerBase::printDirectory(const TString& opts){
  // print the currently active directory for sample localization
  if(this->fPaths){
    this->fPaths->print(opts);
  } else {
    std::cout << TQStringUtils::makeBoldWhite("< no active directory, read with TQSampleInitializerBase::readDirectory(\"...\") >") << std::endl;
  }
}

bool TQSampleInitializerBase::setSampleNormalization(TQSample* sample, double samplefraction){
  // set the sample normalization from the tags already present on the sample
  // if a samplefraction is given, it will be applied as a multiplicative factor (default is unity)
  // The idea behind the normalization is to multiply the initial unskimmed number of events in analysed
  // sample (usually provided by some book-keeping tools through the different skimming steps) by the
  // SumOfWeights/#events computed on the full unskimmed sample of events
  // (see https://its.cern.ch/jira/secure/attachment/52844/OArnaez_SumOfWeights.pdf)
  bool success = true;
  //@tag:[ignoreSampleNormalization] Determines if a (global) normalization should be applied for the sample (based on cross section, luminosity, k-factor,...) or ignored. Intended to explicity disable sample normalization. Default: false, value is being searched for recursively towards the root (sample) folder.
  if(sample->getTagBoolDefault("~ignoreSampleNormalization",false)) return true;
  if(sample->getTagBoolDefault("~isInitialized",false)) return true;
  double sumOfWeights = 0.;
  if(!sample->getTagDouble(".init.sumOfWeights",sumOfWeights) || sumOfWeights == 0.) success = false;
  double xsec = 0.;
  if (!sample->getTagDouble("~.xsp.xSection", xsec) && !sample->getTagDouble("~.xsection",xsec)) success = false;
  double kfactor = sample->getTagDoubleDefault("~kfactor",sample->getTagDoubleDefault("~.xsp.kFactor",1.));
  double filtereff = sample->getTagDoubleDefault("~filtereff", sample->getTagDoubleDefault("~.xsp.filterEfficiency", 1.));
  double luminosity = sample->getTagDoubleDefault("~luminosity",this->getTagDoubleDefault("luminosity",1.));
  const TString lumiUnitStr = sample->getTagStringDefault("~luminosityUnit",this->getTagStringDefault("luminosityUnit","pb"));
  double lumi = luminosity / TQXSecParser::unit(lumiUnitStr);
  double xSecScale = sample->getTagDoubleDefault("~.xsp.xSecScale",1.);

  if (!success) {
    //if we did not retrieve one of the required values we only set a sample normalization according to the xSecScale
    sample->setNormalisation(xSecScale);
    return false;
  }
  DEBUGclass("sampleName=%s, path=%s",sample->getName().Data(),sample->getPath().Data());
  DEBUGclass("xsec=%f, xsecscale=%f",xsec,xSecScale);
  DEBUGclass("filtereff=%f,kfactor=%f",filtereff,kfactor);
  DEBUGclass("sumOfWeights(unskimmed)=%f,samplefraction=%f",sumOfWeights,samplefraction);
  DEBUGclass("luminosity=%f",lumi);
  double nomval = samplefraction * lumi * xsec * xSecScale * kfactor * filtereff;
  double normalization =  nomval / sumOfWeights;
  DEBUGclass("nominalValue=%f,normalization=%f",nomval,normalization);
  sample->setNormalisation(normalization);
  sample->setTagDouble(".init.normalization", normalization);

  if(sample->getTagBoolDefault("isxAOD",false) && this->getTagBoolDefault("extractCounters",false)){
    bool ok = TQSampleInitializerBase::extractCountersFromSample(sample);
    if(!ok) this->setTagBool("extractCounters",false);
  }
  return true;
}


bool TQSampleInitializerBase::initializeSample(TQSample* sample, const TString& fullpath, TString& message){
  // initialize the sample, given a known file path
  TString treeName = this->getTagStringDefault("treeName","*");
  double sumOfWeights = 0;
  int nEntries = 0;
  int nEvents = 0;
  TString fullpath_ = TQStringUtils::makeASCII(fullpath);

  bool initialize = this->getTagBoolDefault("initialize",true);
  bool success = false;
  //the followign call seems to be the largest memory consumer in this function, however, the remainder is also rather significant (to be checked later)
  if(initialize) success = this->getTreeInformation(sample,fullpath_,treeName,sumOfWeights,nEvents,nEntries,message);
  sample->setTagString(".init.filepath",fullpath_);
  sample->setTagString(".init.treename",treeName);

  sample->setTreeLocation(fullpath_ + ":" + treeName);

  if(!success){
    return !initialize;
  }

  sample->setTagDouble(".init.sumOfWeights", sumOfWeights);
  sample->setTagDouble(".init.nEvents", nEvents);
  sample->setTagDouble(".init.nEntries", nEntries);

  TString countername;
  //@tag: makeNominalCounter, makeSWCounter: string tag that, if
  //@tag    present, will create counters containing the initial, nominal sum
  //@tag    of weights with a name given by the argument.
  if(this->getTagString("makeNominalCounter",countername) || this->getTagString("makeSWCounter",countername)){
    TString foldername = TQStringUtils::readPrefix(countername,":",".cutflow");
    TQFolder* f = sample->getFolder(foldername+"+");
    if(f){
      TQCounter* c = new TQCounter(countername,sumOfWeights,0,nEvents);
      f->addObject(c);
    }
  }
  return true;
}
 TQSampleInitializerBase.cxx:1
 TQSampleInitializerBase.cxx:2
 TQSampleInitializerBase.cxx:3
 TQSampleInitializerBase.cxx:4
 TQSampleInitializerBase.cxx:5
 TQSampleInitializerBase.cxx:6
 TQSampleInitializerBase.cxx:7
 TQSampleInitializerBase.cxx:8
 TQSampleInitializerBase.cxx:9
 TQSampleInitializerBase.cxx:10
 TQSampleInitializerBase.cxx:11
 TQSampleInitializerBase.cxx:12
 TQSampleInitializerBase.cxx:13
 TQSampleInitializerBase.cxx:14
 TQSampleInitializerBase.cxx:15
 TQSampleInitializerBase.cxx:16
 TQSampleInitializerBase.cxx:17
 TQSampleInitializerBase.cxx:18
 TQSampleInitializerBase.cxx:19
 TQSampleInitializerBase.cxx:20
 TQSampleInitializerBase.cxx:21
 TQSampleInitializerBase.cxx:22
 TQSampleInitializerBase.cxx:23
 TQSampleInitializerBase.cxx:24
 TQSampleInitializerBase.cxx:25
 TQSampleInitializerBase.cxx:26
 TQSampleInitializerBase.cxx:27
 TQSampleInitializerBase.cxx:28
 TQSampleInitializerBase.cxx:29
 TQSampleInitializerBase.cxx:30
 TQSampleInitializerBase.cxx:31
 TQSampleInitializerBase.cxx:32
 TQSampleInitializerBase.cxx:33
 TQSampleInitializerBase.cxx:34
 TQSampleInitializerBase.cxx:35
 TQSampleInitializerBase.cxx:36
 TQSampleInitializerBase.cxx:37
 TQSampleInitializerBase.cxx:38
 TQSampleInitializerBase.cxx:39
 TQSampleInitializerBase.cxx:40
 TQSampleInitializerBase.cxx:41
 TQSampleInitializerBase.cxx:42
 TQSampleInitializerBase.cxx:43
 TQSampleInitializerBase.cxx:44
 TQSampleInitializerBase.cxx:45
 TQSampleInitializerBase.cxx:46
 TQSampleInitializerBase.cxx:47
 TQSampleInitializerBase.cxx:48
 TQSampleInitializerBase.cxx:49
 TQSampleInitializerBase.cxx:50
 TQSampleInitializerBase.cxx:51
 TQSampleInitializerBase.cxx:52
 TQSampleInitializerBase.cxx:53
 TQSampleInitializerBase.cxx:54
 TQSampleInitializerBase.cxx:55
 TQSampleInitializerBase.cxx:56
 TQSampleInitializerBase.cxx:57
 TQSampleInitializerBase.cxx:58
 TQSampleInitializerBase.cxx:59
 TQSampleInitializerBase.cxx:60
 TQSampleInitializerBase.cxx:61
 TQSampleInitializerBase.cxx:62
 TQSampleInitializerBase.cxx:63
 TQSampleInitializerBase.cxx:64
 TQSampleInitializerBase.cxx:65
 TQSampleInitializerBase.cxx:66
 TQSampleInitializerBase.cxx:67
 TQSampleInitializerBase.cxx:68
 TQSampleInitializerBase.cxx:69
 TQSampleInitializerBase.cxx:70
 TQSampleInitializerBase.cxx:71
 TQSampleInitializerBase.cxx:72
 TQSampleInitializerBase.cxx:73
 TQSampleInitializerBase.cxx:74
 TQSampleInitializerBase.cxx:75
 TQSampleInitializerBase.cxx:76
 TQSampleInitializerBase.cxx:77
 TQSampleInitializerBase.cxx:78
 TQSampleInitializerBase.cxx:79
 TQSampleInitializerBase.cxx:80
 TQSampleInitializerBase.cxx:81
 TQSampleInitializerBase.cxx:82
 TQSampleInitializerBase.cxx:83
 TQSampleInitializerBase.cxx:84
 TQSampleInitializerBase.cxx:85
 TQSampleInitializerBase.cxx:86
 TQSampleInitializerBase.cxx:87
 TQSampleInitializerBase.cxx:88
 TQSampleInitializerBase.cxx:89
 TQSampleInitializerBase.cxx:90
 TQSampleInitializerBase.cxx:91
 TQSampleInitializerBase.cxx:92
 TQSampleInitializerBase.cxx:93
 TQSampleInitializerBase.cxx:94
 TQSampleInitializerBase.cxx:95
 TQSampleInitializerBase.cxx:96
 TQSampleInitializerBase.cxx:97
 TQSampleInitializerBase.cxx:98
 TQSampleInitializerBase.cxx:99
 TQSampleInitializerBase.cxx:100
 TQSampleInitializerBase.cxx:101
 TQSampleInitializerBase.cxx:102
 TQSampleInitializerBase.cxx:103
 TQSampleInitializerBase.cxx:104
 TQSampleInitializerBase.cxx:105
 TQSampleInitializerBase.cxx:106
 TQSampleInitializerBase.cxx:107
 TQSampleInitializerBase.cxx:108
 TQSampleInitializerBase.cxx:109
 TQSampleInitializerBase.cxx:110
 TQSampleInitializerBase.cxx:111
 TQSampleInitializerBase.cxx:112
 TQSampleInitializerBase.cxx:113
 TQSampleInitializerBase.cxx:114
 TQSampleInitializerBase.cxx:115
 TQSampleInitializerBase.cxx:116
 TQSampleInitializerBase.cxx:117
 TQSampleInitializerBase.cxx:118
 TQSampleInitializerBase.cxx:119
 TQSampleInitializerBase.cxx:120
 TQSampleInitializerBase.cxx:121
 TQSampleInitializerBase.cxx:122
 TQSampleInitializerBase.cxx:123
 TQSampleInitializerBase.cxx:124
 TQSampleInitializerBase.cxx:125
 TQSampleInitializerBase.cxx:126
 TQSampleInitializerBase.cxx:127
 TQSampleInitializerBase.cxx:128
 TQSampleInitializerBase.cxx:129
 TQSampleInitializerBase.cxx:130
 TQSampleInitializerBase.cxx:131
 TQSampleInitializerBase.cxx:132
 TQSampleInitializerBase.cxx:133
 TQSampleInitializerBase.cxx:134
 TQSampleInitializerBase.cxx:135
 TQSampleInitializerBase.cxx:136
 TQSampleInitializerBase.cxx:137
 TQSampleInitializerBase.cxx:138
 TQSampleInitializerBase.cxx:139
 TQSampleInitializerBase.cxx:140
 TQSampleInitializerBase.cxx:141
 TQSampleInitializerBase.cxx:142
 TQSampleInitializerBase.cxx:143
 TQSampleInitializerBase.cxx:144
 TQSampleInitializerBase.cxx:145
 TQSampleInitializerBase.cxx:146
 TQSampleInitializerBase.cxx:147
 TQSampleInitializerBase.cxx:148
 TQSampleInitializerBase.cxx:149
 TQSampleInitializerBase.cxx:150
 TQSampleInitializerBase.cxx:151
 TQSampleInitializerBase.cxx:152
 TQSampleInitializerBase.cxx:153
 TQSampleInitializerBase.cxx:154
 TQSampleInitializerBase.cxx:155
 TQSampleInitializerBase.cxx:156
 TQSampleInitializerBase.cxx:157
 TQSampleInitializerBase.cxx:158
 TQSampleInitializerBase.cxx:159
 TQSampleInitializerBase.cxx:160
 TQSampleInitializerBase.cxx:161
 TQSampleInitializerBase.cxx:162
 TQSampleInitializerBase.cxx:163
 TQSampleInitializerBase.cxx:164
 TQSampleInitializerBase.cxx:165
 TQSampleInitializerBase.cxx:166
 TQSampleInitializerBase.cxx:167
 TQSampleInitializerBase.cxx:168
 TQSampleInitializerBase.cxx:169
 TQSampleInitializerBase.cxx:170
 TQSampleInitializerBase.cxx:171
 TQSampleInitializerBase.cxx:172
 TQSampleInitializerBase.cxx:173
 TQSampleInitializerBase.cxx:174
 TQSampleInitializerBase.cxx:175
 TQSampleInitializerBase.cxx:176
 TQSampleInitializerBase.cxx:177
 TQSampleInitializerBase.cxx:178
 TQSampleInitializerBase.cxx:179
 TQSampleInitializerBase.cxx:180
 TQSampleInitializerBase.cxx:181
 TQSampleInitializerBase.cxx:182
 TQSampleInitializerBase.cxx:183
 TQSampleInitializerBase.cxx:184
 TQSampleInitializerBase.cxx:185
 TQSampleInitializerBase.cxx:186
 TQSampleInitializerBase.cxx:187
 TQSampleInitializerBase.cxx:188
 TQSampleInitializerBase.cxx:189
 TQSampleInitializerBase.cxx:190
 TQSampleInitializerBase.cxx:191
 TQSampleInitializerBase.cxx:192
 TQSampleInitializerBase.cxx:193
 TQSampleInitializerBase.cxx:194
 TQSampleInitializerBase.cxx:195
 TQSampleInitializerBase.cxx:196
 TQSampleInitializerBase.cxx:197
 TQSampleInitializerBase.cxx:198
 TQSampleInitializerBase.cxx:199
 TQSampleInitializerBase.cxx:200
 TQSampleInitializerBase.cxx:201
 TQSampleInitializerBase.cxx:202
 TQSampleInitializerBase.cxx:203
 TQSampleInitializerBase.cxx:204
 TQSampleInitializerBase.cxx:205
 TQSampleInitializerBase.cxx:206
 TQSampleInitializerBase.cxx:207
 TQSampleInitializerBase.cxx:208
 TQSampleInitializerBase.cxx:209
 TQSampleInitializerBase.cxx:210
 TQSampleInitializerBase.cxx:211
 TQSampleInitializerBase.cxx:212
 TQSampleInitializerBase.cxx:213
 TQSampleInitializerBase.cxx:214
 TQSampleInitializerBase.cxx:215
 TQSampleInitializerBase.cxx:216
 TQSampleInitializerBase.cxx:217
 TQSampleInitializerBase.cxx:218
 TQSampleInitializerBase.cxx:219
 TQSampleInitializerBase.cxx:220
 TQSampleInitializerBase.cxx:221
 TQSampleInitializerBase.cxx:222
 TQSampleInitializerBase.cxx:223
 TQSampleInitializerBase.cxx:224
 TQSampleInitializerBase.cxx:225
 TQSampleInitializerBase.cxx:226
 TQSampleInitializerBase.cxx:227
 TQSampleInitializerBase.cxx:228
 TQSampleInitializerBase.cxx:229
 TQSampleInitializerBase.cxx:230
 TQSampleInitializerBase.cxx:231
 TQSampleInitializerBase.cxx:232
 TQSampleInitializerBase.cxx:233
 TQSampleInitializerBase.cxx:234
 TQSampleInitializerBase.cxx:235
 TQSampleInitializerBase.cxx:236
 TQSampleInitializerBase.cxx:237
 TQSampleInitializerBase.cxx:238
 TQSampleInitializerBase.cxx:239
 TQSampleInitializerBase.cxx:240
 TQSampleInitializerBase.cxx:241
 TQSampleInitializerBase.cxx:242
 TQSampleInitializerBase.cxx:243
 TQSampleInitializerBase.cxx:244
 TQSampleInitializerBase.cxx:245
 TQSampleInitializerBase.cxx:246
 TQSampleInitializerBase.cxx:247
 TQSampleInitializerBase.cxx:248
 TQSampleInitializerBase.cxx:249
 TQSampleInitializerBase.cxx:250
 TQSampleInitializerBase.cxx:251
 TQSampleInitializerBase.cxx:252
 TQSampleInitializerBase.cxx:253
 TQSampleInitializerBase.cxx:254
 TQSampleInitializerBase.cxx:255
 TQSampleInitializerBase.cxx:256
 TQSampleInitializerBase.cxx:257
 TQSampleInitializerBase.cxx:258
 TQSampleInitializerBase.cxx:259
 TQSampleInitializerBase.cxx:260
 TQSampleInitializerBase.cxx:261
 TQSampleInitializerBase.cxx:262
 TQSampleInitializerBase.cxx:263
 TQSampleInitializerBase.cxx:264
 TQSampleInitializerBase.cxx:265
 TQSampleInitializerBase.cxx:266
 TQSampleInitializerBase.cxx:267
 TQSampleInitializerBase.cxx:268
 TQSampleInitializerBase.cxx:269
 TQSampleInitializerBase.cxx:270
 TQSampleInitializerBase.cxx:271
 TQSampleInitializerBase.cxx:272
 TQSampleInitializerBase.cxx:273
 TQSampleInitializerBase.cxx:274
 TQSampleInitializerBase.cxx:275
 TQSampleInitializerBase.cxx:276
 TQSampleInitializerBase.cxx:277
 TQSampleInitializerBase.cxx:278
 TQSampleInitializerBase.cxx:279
 TQSampleInitializerBase.cxx:280
 TQSampleInitializerBase.cxx:281
 TQSampleInitializerBase.cxx:282
 TQSampleInitializerBase.cxx:283
 TQSampleInitializerBase.cxx:284
 TQSampleInitializerBase.cxx:285
 TQSampleInitializerBase.cxx:286
 TQSampleInitializerBase.cxx:287
 TQSampleInitializerBase.cxx:288
 TQSampleInitializerBase.cxx:289
 TQSampleInitializerBase.cxx:290
 TQSampleInitializerBase.cxx:291
 TQSampleInitializerBase.cxx:292
 TQSampleInitializerBase.cxx:293
 TQSampleInitializerBase.cxx:294
 TQSampleInitializerBase.cxx:295
 TQSampleInitializerBase.cxx:296
 TQSampleInitializerBase.cxx:297
 TQSampleInitializerBase.cxx:298
 TQSampleInitializerBase.cxx:299
 TQSampleInitializerBase.cxx:300
 TQSampleInitializerBase.cxx:301
 TQSampleInitializerBase.cxx:302
 TQSampleInitializerBase.cxx:303
 TQSampleInitializerBase.cxx:304
 TQSampleInitializerBase.cxx:305
 TQSampleInitializerBase.cxx:306
 TQSampleInitializerBase.cxx:307
 TQSampleInitializerBase.cxx:308
 TQSampleInitializerBase.cxx:309
 TQSampleInitializerBase.cxx:310
 TQSampleInitializerBase.cxx:311
 TQSampleInitializerBase.cxx:312
 TQSampleInitializerBase.cxx:313
 TQSampleInitializerBase.cxx:314
 TQSampleInitializerBase.cxx:315
 TQSampleInitializerBase.cxx:316
 TQSampleInitializerBase.cxx:317
 TQSampleInitializerBase.cxx:318
 TQSampleInitializerBase.cxx:319
 TQSampleInitializerBase.cxx:320
 TQSampleInitializerBase.cxx:321
 TQSampleInitializerBase.cxx:322
 TQSampleInitializerBase.cxx:323
 TQSampleInitializerBase.cxx:324
 TQSampleInitializerBase.cxx:325
 TQSampleInitializerBase.cxx:326
 TQSampleInitializerBase.cxx:327
 TQSampleInitializerBase.cxx:328
 TQSampleInitializerBase.cxx:329
 TQSampleInitializerBase.cxx:330
 TQSampleInitializerBase.cxx:331
 TQSampleInitializerBase.cxx:332
 TQSampleInitializerBase.cxx:333
 TQSampleInitializerBase.cxx:334
 TQSampleInitializerBase.cxx:335
 TQSampleInitializerBase.cxx:336
 TQSampleInitializerBase.cxx:337
 TQSampleInitializerBase.cxx:338
 TQSampleInitializerBase.cxx:339
 TQSampleInitializerBase.cxx:340
 TQSampleInitializerBase.cxx:341
 TQSampleInitializerBase.cxx:342
 TQSampleInitializerBase.cxx:343
 TQSampleInitializerBase.cxx:344
 TQSampleInitializerBase.cxx:345
 TQSampleInitializerBase.cxx:346
 TQSampleInitializerBase.cxx:347
 TQSampleInitializerBase.cxx:348
 TQSampleInitializerBase.cxx:349
 TQSampleInitializerBase.cxx:350
 TQSampleInitializerBase.cxx:351
 TQSampleInitializerBase.cxx:352
 TQSampleInitializerBase.cxx:353
 TQSampleInitializerBase.cxx:354
 TQSampleInitializerBase.cxx:355
 TQSampleInitializerBase.cxx:356
 TQSampleInitializerBase.cxx:357
 TQSampleInitializerBase.cxx:358
 TQSampleInitializerBase.cxx:359
 TQSampleInitializerBase.cxx:360
 TQSampleInitializerBase.cxx:361
 TQSampleInitializerBase.cxx:362
 TQSampleInitializerBase.cxx:363
 TQSampleInitializerBase.cxx:364
 TQSampleInitializerBase.cxx:365
 TQSampleInitializerBase.cxx:366
 TQSampleInitializerBase.cxx:367
 TQSampleInitializerBase.cxx:368
 TQSampleInitializerBase.cxx:369
 TQSampleInitializerBase.cxx:370
 TQSampleInitializerBase.cxx:371
 TQSampleInitializerBase.cxx:372
 TQSampleInitializerBase.cxx:373
 TQSampleInitializerBase.cxx:374
 TQSampleInitializerBase.cxx:375
 TQSampleInitializerBase.cxx:376
 TQSampleInitializerBase.cxx:377
 TQSampleInitializerBase.cxx:378
 TQSampleInitializerBase.cxx:379
 TQSampleInitializerBase.cxx:380
 TQSampleInitializerBase.cxx:381
 TQSampleInitializerBase.cxx:382
 TQSampleInitializerBase.cxx:383
 TQSampleInitializerBase.cxx:384
 TQSampleInitializerBase.cxx:385
 TQSampleInitializerBase.cxx:386
 TQSampleInitializerBase.cxx:387
 TQSampleInitializerBase.cxx:388
 TQSampleInitializerBase.cxx:389
 TQSampleInitializerBase.cxx:390
 TQSampleInitializerBase.cxx:391
 TQSampleInitializerBase.cxx:392
 TQSampleInitializerBase.cxx:393
 TQSampleInitializerBase.cxx:394
 TQSampleInitializerBase.cxx:395
 TQSampleInitializerBase.cxx:396
 TQSampleInitializerBase.cxx:397
 TQSampleInitializerBase.cxx:398
 TQSampleInitializerBase.cxx:399
 TQSampleInitializerBase.cxx:400
 TQSampleInitializerBase.cxx:401
 TQSampleInitializerBase.cxx:402
 TQSampleInitializerBase.cxx:403
 TQSampleInitializerBase.cxx:404
 TQSampleInitializerBase.cxx:405
 TQSampleInitializerBase.cxx:406
 TQSampleInitializerBase.cxx:407
 TQSampleInitializerBase.cxx:408
 TQSampleInitializerBase.cxx:409
 TQSampleInitializerBase.cxx:410
 TQSampleInitializerBase.cxx:411
 TQSampleInitializerBase.cxx:412
 TQSampleInitializerBase.cxx:413
 TQSampleInitializerBase.cxx:414
 TQSampleInitializerBase.cxx:415
 TQSampleInitializerBase.cxx:416
 TQSampleInitializerBase.cxx:417
 TQSampleInitializerBase.cxx:418
 TQSampleInitializerBase.cxx:419
 TQSampleInitializerBase.cxx:420
 TQSampleInitializerBase.cxx:421
 TQSampleInitializerBase.cxx:422
 TQSampleInitializerBase.cxx:423
 TQSampleInitializerBase.cxx:424
 TQSampleInitializerBase.cxx:425
 TQSampleInitializerBase.cxx:426
 TQSampleInitializerBase.cxx:427
 TQSampleInitializerBase.cxx:428
 TQSampleInitializerBase.cxx:429
 TQSampleInitializerBase.cxx:430
 TQSampleInitializerBase.cxx:431
 TQSampleInitializerBase.cxx:432
 TQSampleInitializerBase.cxx:433
 TQSampleInitializerBase.cxx:434
 TQSampleInitializerBase.cxx:435
 TQSampleInitializerBase.cxx:436
 TQSampleInitializerBase.cxx:437
 TQSampleInitializerBase.cxx:438
 TQSampleInitializerBase.cxx:439
 TQSampleInitializerBase.cxx:440
 TQSampleInitializerBase.cxx:441
 TQSampleInitializerBase.cxx:442
 TQSampleInitializerBase.cxx:443
 TQSampleInitializerBase.cxx:444
 TQSampleInitializerBase.cxx:445
 TQSampleInitializerBase.cxx:446
 TQSampleInitializerBase.cxx:447
 TQSampleInitializerBase.cxx:448
 TQSampleInitializerBase.cxx:449
 TQSampleInitializerBase.cxx:450
 TQSampleInitializerBase.cxx:451
 TQSampleInitializerBase.cxx:452
 TQSampleInitializerBase.cxx:453
 TQSampleInitializerBase.cxx:454
 TQSampleInitializerBase.cxx:455
 TQSampleInitializerBase.cxx:456
 TQSampleInitializerBase.cxx:457
 TQSampleInitializerBase.cxx:458
 TQSampleInitializerBase.cxx:459
 TQSampleInitializerBase.cxx:460
 TQSampleInitializerBase.cxx:461
 TQSampleInitializerBase.cxx:462
 TQSampleInitializerBase.cxx:463
 TQSampleInitializerBase.cxx:464
 TQSampleInitializerBase.cxx:465
 TQSampleInitializerBase.cxx:466
 TQSampleInitializerBase.cxx:467
 TQSampleInitializerBase.cxx:468
 TQSampleInitializerBase.cxx:469
 TQSampleInitializerBase.cxx:470
 TQSampleInitializerBase.cxx:471
 TQSampleInitializerBase.cxx:472
 TQSampleInitializerBase.cxx:473
 TQSampleInitializerBase.cxx:474
 TQSampleInitializerBase.cxx:475
 TQSampleInitializerBase.cxx:476
 TQSampleInitializerBase.cxx:477
 TQSampleInitializerBase.cxx:478
 TQSampleInitializerBase.cxx:479
 TQSampleInitializerBase.cxx:480
 TQSampleInitializerBase.cxx:481
 TQSampleInitializerBase.cxx:482
 TQSampleInitializerBase.cxx:483
 TQSampleInitializerBase.cxx:484
 TQSampleInitializerBase.cxx:485
 TQSampleInitializerBase.cxx:486
 TQSampleInitializerBase.cxx:487
 TQSampleInitializerBase.cxx:488
 TQSampleInitializerBase.cxx:489
 TQSampleInitializerBase.cxx:490
 TQSampleInitializerBase.cxx:491
 TQSampleInitializerBase.cxx:492
 TQSampleInitializerBase.cxx:493
 TQSampleInitializerBase.cxx:494
 TQSampleInitializerBase.cxx:495
 TQSampleInitializerBase.cxx:496
 TQSampleInitializerBase.cxx:497
 TQSampleInitializerBase.cxx:498
 TQSampleInitializerBase.cxx:499
 TQSampleInitializerBase.cxx:500
 TQSampleInitializerBase.cxx:501
 TQSampleInitializerBase.cxx:502
 TQSampleInitializerBase.cxx:503
 TQSampleInitializerBase.cxx:504
 TQSampleInitializerBase.cxx:505
 TQSampleInitializerBase.cxx:506
 TQSampleInitializerBase.cxx:507
 TQSampleInitializerBase.cxx:508
 TQSampleInitializerBase.cxx:509
 TQSampleInitializerBase.cxx:510
 TQSampleInitializerBase.cxx:511
 TQSampleInitializerBase.cxx:512
 TQSampleInitializerBase.cxx:513
 TQSampleInitializerBase.cxx:514
 TQSampleInitializerBase.cxx:515
 TQSampleInitializerBase.cxx:516
 TQSampleInitializerBase.cxx:517
 TQSampleInitializerBase.cxx:518
 TQSampleInitializerBase.cxx:519
 TQSampleInitializerBase.cxx:520
 TQSampleInitializerBase.cxx:521
 TQSampleInitializerBase.cxx:522
 TQSampleInitializerBase.cxx:523
 TQSampleInitializerBase.cxx:524
 TQSampleInitializerBase.cxx:525
 TQSampleInitializerBase.cxx:526
 TQSampleInitializerBase.cxx:527
 TQSampleInitializerBase.cxx:528
 TQSampleInitializerBase.cxx:529
 TQSampleInitializerBase.cxx:530
 TQSampleInitializerBase.cxx:531
 TQSampleInitializerBase.cxx:532
 TQSampleInitializerBase.cxx:533
 TQSampleInitializerBase.cxx:534
 TQSampleInitializerBase.cxx:535
 TQSampleInitializerBase.cxx:536
 TQSampleInitializerBase.cxx:537
 TQSampleInitializerBase.cxx:538
 TQSampleInitializerBase.cxx:539
 TQSampleInitializerBase.cxx:540
 TQSampleInitializerBase.cxx:541
 TQSampleInitializerBase.cxx:542
 TQSampleInitializerBase.cxx:543
 TQSampleInitializerBase.cxx:544
 TQSampleInitializerBase.cxx:545
 TQSampleInitializerBase.cxx:546
 TQSampleInitializerBase.cxx:547
 TQSampleInitializerBase.cxx:548
 TQSampleInitializerBase.cxx:549
 TQSampleInitializerBase.cxx:550
 TQSampleInitializerBase.cxx:551
 TQSampleInitializerBase.cxx:552
 TQSampleInitializerBase.cxx:553
 TQSampleInitializerBase.cxx:554
 TQSampleInitializerBase.cxx:555
 TQSampleInitializerBase.cxx:556
 TQSampleInitializerBase.cxx:557
 TQSampleInitializerBase.cxx:558
 TQSampleInitializerBase.cxx:559
 TQSampleInitializerBase.cxx:560
 TQSampleInitializerBase.cxx:561
 TQSampleInitializerBase.cxx:562
 TQSampleInitializerBase.cxx:563
 TQSampleInitializerBase.cxx:564
 TQSampleInitializerBase.cxx:565
 TQSampleInitializerBase.cxx:566
 TQSampleInitializerBase.cxx:567
 TQSampleInitializerBase.cxx:568
 TQSampleInitializerBase.cxx:569
 TQSampleInitializerBase.cxx:570
 TQSampleInitializerBase.cxx:571
 TQSampleInitializerBase.cxx:572