#include "QFramework/TQSampleInitializerBase.h"
#include "QFramework/TQSample.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQXSecParser.h"
#include "definitions.h"
#include "QFramework/TQLibrary.h"
#include "TFile.h"
#include "TSystem.h"
#include <iostream>
#include <string>
#include <fstream>
#include <stdexcept>
#include <sstream>
#include <cstdlib>
ClassImp(TQSampleInitializerBase)
TQSampleInitializerBase::TQSampleInitializerBase(){
}
void TQSampleInitializerBase::reset(){
if(this->fPaths) delete this->fPaths;
this->fPaths = NULL;
}
TQSampleInitializerBase::~TQSampleInitializerBase(){
if(this->fPaths) delete this->fPaths;
}
#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());
}
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){
TQFolder* cutflow = new TQFolder(".cutflow");
if(TQSampleInitializerBase::extractCounters(file,cutflow,scale)){
return cutflow;
} else {
delete cutflow;
return NULL;
}
}
bool TQSampleInitializerBase::extractCountersFromSample(TQSample* sf){
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){
#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){
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);
bool isxAOD = false;
for( TString& name : treeNamePatterns ) {
isxAOD = this->getTagBoolDefault("xAOD",TQStringUtils::equal(name,"CollectionTree"));
if( isxAOD ) break;
}
sample->setTagBool("isxAOD",isxAOD);
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;
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");
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;
}
TDirectory* dr = t->GetDirectory();
TString path = dr->GetPath();
int pos = TQStringUtils::rfindFirstOf(path, ":", path.Length()) + 2;
path = path(pos, path.Length() - pos);
treeName = TQFolder::concatPaths(path, t->GetName());
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)){
message = "successfully retrieved sumOfWeights from sample tag";
} else if(isxAOD && this->getTagBoolDefault("useCutBookKeeper",true)){
#ifdef ASG_RELEASE
DEBUGclass("Trying to create TEvent from file '%s'",f->GetPath());
xAOD::TEvent* event = TQUtils::xAODMakeEvent(f);
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
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){
DEBUGclass("entering function");
this->reset();
DEBUGclass("reading directory '%s'",path.Data());
TQFolder * directory = TQFolder::copyDirectoryStructure(path, maxdepth);
if (!this->fPaths) this->fPaths = new TQFolder();
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){
if (reset) {
this->reset();
}
std::ifstream ifs(listpath.Data());
if(!ifs.good()) return false;
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;
}
}
if (!this->fPaths) this->fPaths = new TQFolder();
this->setTagString("filenamePrefix","*");
for (auto path : fileList){
TQStringUtils::removeLeadingBlanks(path);
if (path.BeginsWith("#")) continue;
gSystem->ExpandPathName(path);
TString name = TQFolder::getPathTail(path);
TQFolder* fnew = nullptr;
TQFolder* storageInstance = nullptr;
if(path.IsNull()){
fnew = this->fPaths->getFolder("local+");
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) {
basepath = TQFolder::getPathHead(pathToFind);
storageInstance = this->fPaths->getFolder(basepath+"+");
basepath = "/"+basepath+"/";
storageInstance->setTagString("basepath",basepath);
}
if (!storageInstance) storageInstance = this->fPaths->getFolder("local+");
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()); };
}
}
return true;
}
TQFolder* TQSampleInitializerBase::getDirectory(){
return this->fPaths;
}
void TQSampleInitializerBase::printDirectory(const TString& opts){
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){
bool success = true;
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) {
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){
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;
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;
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