#include "TObjArray.h"
#include "TList.h"
#include "TObjString.h"
#include "TFolder.h"
#include "TH1.h"
#include "TH2.h"
#include "TH3.h"
#include "TH1F.h"
#include "TH2F.h"
#include "TH1D.h"
#include "TH2D.h"
#include "TProfile.h"
#include "TProfile2D.h"
#include "QFramework/TQHistoMakerAnalysisJob.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQObservable.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQCut.h"
#include "QFramework/TQTaggable.h"
#include "QFramework/TQSample.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQLibrary.h"
#include <iostream>
#include <fstream>
#include <stdexcept>
#include <sstream>
#include <cstdlib>
TQMessageStream TQHistoMakerAnalysisJob::f_ErrMsg(new std::stringstream());
bool TQHistoMakerAnalysisJob::g_useHistogramObservableNames(false);
TString TQHistoMakerAnalysisJob::gDefaultAuthor = "histoJob";
ClassImp(TQHistoMakerAnalysisJob)
void TQHistoMakerAnalysisJob::setDefaultAuthor(const TString& name){
TQHistoMakerAnalysisJob::gDefaultAuthor = name;
}
TQHistoMakerAnalysisJob::TQHistoMakerAnalysisJob() :
TQAnalysisJob(TQHistoMakerAnalysisJob::gDefaultAuthor.Data()),
f_Verbose(0),
poolAt(NULL)
{
}
TQHistoMakerAnalysisJob::TQHistoMakerAnalysisJob(TQHistoMakerAnalysisJob* other) :
TQAnalysisJob(other ? other->GetName() : TQHistoMakerAnalysisJob::gDefaultAuthor.Data()),
f_Verbose(other ? other->f_Verbose : 0),
poolAt(other ? other->poolAt : NULL)
{
for(size_t i=0; i<other->fHistogramTemplates.size(); ++i){
this->fHistogramTemplates.push_back(TQHistogramUtils::copyHistogram(other->fHistogramTemplates[i]));
this->fFillSynchronized.push_back(other->fFillSynchronized[i]);
this->fFillRaw.push_back(other->fFillRaw[i]);
this->fHistoTypes.push_back(other->fHistoTypes[i]);
this->fExpressions.push_back(std::vector<TString>());
for(size_t j=0; j<other->fExpressions[i].size(); ++j){
this->fExpressions[i].push_back(other->fExpressions[i][j]);
}
this->fWeightExpressions.push_back(other->fWeightExpressions[i]);
}
}
void TQHistoMakerAnalysisJob::setVerbose(int verbose) {
f_Verbose = verbose;
}
int TQHistoMakerAnalysisJob::getVerbose() {
return f_Verbose;
}
void TQHistoMakerAnalysisJob::setErrorMessage(TString message) {
f_ErrMsg.sendClassFunctionMessage(TQMessageStream::INFO,this->Class(),"<anonymous>",message);
if (f_Verbose > 0) INFOclass(message);
}
void TQHistoMakerAnalysisJob::clearMessages(){
f_ErrMsg.clearMessages();
}
TString TQHistoMakerAnalysisJob::getErrorMessage() {
return f_ErrMsg.getMessages();
}
const TString& TQHistoMakerAnalysisJob::getValidNameCharacters() {
return TQFolder::getValidNameCharacters();
}
void TQHistoMakerAnalysisJob::cancelHistogram(const TString& name) {
for(size_t i=fHistogramTemplates.size(); i >0 ; i--){
if(fHistogramTemplates.at(i)->GetName() == name){
fHistogramTemplates.erase(fHistogramTemplates.begin()+i-1);
fFillSynchronized.erase(fFillSynchronized.begin()+i-1);
fFillRaw.erase(fFillRaw.begin()+i-1);
fExpressions.at(i-1).clear();
fExpressions.erase(fExpressions.begin()+i-1);
fWeightExpressions.erase(fWeightExpressions.begin()+i-1);
fHistoTypes.erase(fHistoTypes.begin()+i-1);
return;
}
}
}
namespace {
void setupAxis(TAxis* axis, const TString& title, const TString& expr, const std::vector<TString>& labels){
axis->SetTitle(title);
axis->SetName(expr);
for(size_t i=0; i<labels.size(); ++i){
axis->SetBinLabel(i+1,labels[i]);
}
}
}
bool TQHistoMakerAnalysisJob::bookHistogram(TString definition, TQTaggable* aliases) {
DEBUGclass("entering function - booking histogram '%s'",definition.Data());
if(definition.IsNull()){
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::INFO,this->Class(),__FUNCTION__,"obtained empty histogram definition");
return false;
}
TString histoDef;
TQStringUtils::readUpTo(definition, histoDef, "<", "()[]{}", "''\"\"");
TString msg;
DEBUGclass("creating histogram '%s'",histoDef.Data());
if(histoDef.IsNull()){
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"histogram constructor is empty, remainder is '%s'",definition.Data());
return false;
}
TH1 * histo = TQHistogramUtils::createHistogram(histoDef, msg);
DEBUGclass(histo ? "success" : "failure");
if (!histo) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,msg);
return false;
}
if (!TQFolder::isValidName(histo->GetName())) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"'%s' is an invalid histogram name", histo->GetName());
delete histo;
return false;
}
if (TQStringUtils::removeLeading(definition, "<") != 2) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::INFO,this->Class(),__FUNCTION__,"Operator '<<' expected after histogram definition");
delete histo;
return false;
}
std::vector<TString> settingTokens = TQStringUtils::tokenizeVector(definition, "<<", true, "()[]{}", "\"\"''");
if (settingTokens.size()<1) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"cannot parse definition block '%s'",definition.Data());
delete histo;
return false;
}
definition = settingTokens[0];
TQTaggable options;
if (settingTokens.size()>1) {
TString optionBlock;
TQStringUtils::readBlanksAndNewlines(settingTokens[1]);
if (!TQStringUtils::readBlock(settingTokens[1], optionBlock, "()[]{}", "''\"\"")) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"Failed to parse histogram option block '%s'", settingTokens[1].Data());
delete histo;
return false;
}
options.importTags(optionBlock);
}
TString expressionBlock;
TQStringUtils::readBlanksAndNewlines(definition);
if (!TQStringUtils::readBlock(definition, expressionBlock, "()[]{}", "''\"\"")) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"Missing or malformated expression block after '<<' operator");
delete histo;
return false;
}
TList * expressionTokens = TQStringUtils::tokenize(expressionBlock, ",", true, "()[]{}", "''\"\"");
if(expressionTokens->GetEntries() < 1){
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"cannot parse expression block '%s'",expressionBlock.Data());
delete histo;
return false;
}
DEBUGclass("parsing expression block '%s', found %d entries",expressionBlock.Data(),expressionTokens->GetEntries());
std::vector<TString> exprs;
std::vector<TString> titles;
std::vector<std::vector<TString> > labels ;
TQIterator itr(expressionTokens);
while (itr.hasNext()) {
TString token(itr.readNext()->GetName());
TString expr;
int nColon = 0;
while(nColon != 1){
TQStringUtils::readUpTo(token, expr, "\\:", "()[]{}", "''\"\"");
nColon = TQStringUtils::countLeading(token, ":");
if (nColon == 1) {
break;
} else if (nColon == 0) {
if(TQStringUtils::removeLeading(token,"\\")){
TQStringUtils::readToken(token,expr,":");
continue;
}
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"':' expected after expression");
DEBUGclass("':' expected after expression");
delete histo;
return false;
} else {
TQStringUtils::readToken(token,expr,":");
continue;
}
}
TQStringUtils::readBlanksAndNewlines(token);
TQStringUtils::removeLeading(token,":");
TQStringUtils::readBlanksAndNewlines(token);
TString buffer;
TString title;
std::vector<TString> binLabels;
if(TQStringUtils::readBlock(token,buffer,"''","",false,false) > 0 || TQStringUtils::readBlock(token,buffer,"\"\"","",false,false) > 0){
title = buffer;
buffer.Clear();
TQStringUtils::readBlanksAndNewlines(token);
if(TQStringUtils::removeLeading(token,":") == 1){
TQStringUtils::readBlanksAndNewlines(token);
TQStringUtils::readBlock(token,buffer,"(){}[]","",false,false);
binLabels = TQStringUtils::split(buffer,",");
for(size_t i=0; i<binLabels.size(); ++i){
TQStringUtils::removeLeading(binLabels[i]," ");
TQStringUtils::removeTrailing(binLabels[i]," ");
TQStringUtils::unquoteInPlace(binLabels[i]);
}
}
} else {
title = TQStringUtils::unquote(token);
}
const TString expression(aliases ? aliases->replaceInTextRecursive(expr) : expr);
exprs.push_back(TQStringUtils::trim(expression));
titles.push_back(TQStringUtils::trim(title));
labels.push_back(binLabels);
DEBUGclass("found expression and title: '%s' and '%s'",expr.Data(),title.Data());
}
TString name = histo->GetName();
int dim = TQHistogramUtils::getDimension(histo);
if ( ( dim > 0 && dim != (int)exprs.size() ) || ( dim < 0 && (int)exprs.size() != abs(dim)+1) ) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"Dimensionality of histogram (%d) and expression block (%d) don't match", dim, (int)(exprs.size()));
delete histo;
DEBUGclass("Dimensionality of histogram (%d) and expression block (%d) don't match", dim, (int)(exprs.size()));
return false;
}
if (!TQStringUtils::isValidIdentifier(name, getValidNameCharacters())) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,this->Class(),__FUNCTION__,"Invalid histogram name '%s'", name.Data());
DEBUGclass("Invalid histogram name '%s'", name.Data());
delete histo;
return false;
}
bool exists = false;
int i = 0;
while (!exists && i < (int)(fHistogramTemplates.size()))
exists = (name.CompareTo(fHistogramTemplates.at(i++)->GetName()) == 0);
if (exists) {
this->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::WARNING,this->Class(),__FUNCTION__,"Histogram with name '%s' has already been booked", name.Data());
DEBUGclass("Histogram with name '%s' has already been booked", name.Data());
delete histo;
return false;
}
for (int i = 0; i < (int)exprs.size(); i++) {
if (i == 0) {
setupAxis(histo->GetXaxis(),titles[i],exprs[i],labels[i]);
}
if (i == 1) {
setupAxis(histo->GetYaxis(),titles[i],exprs[i],labels[i]);
}
if (i == 2) {
setupAxis(histo->GetZaxis(),titles[i],exprs[i],labels[i]);
}
}
fExpressions.push_back(exprs);
fHistoTypes.push_back(TQHistogramUtils::getDimension(histo));
fHistogramTemplates.push_back(histo);
fFillSynchronized.push_back(options.getTagBoolDefault("fillSynchronized",false));
const TString wExpr(aliases ? aliases->replaceInTextRecursive(options.getTagStringDefault("weightExpression","")) : options.getTagStringDefault("weightExpression",""));
fWeightExpressions.push_back(wExpr);
fFillRaw.push_back(options.getTagBoolDefault("fillRaw",false));
return true;
}
void TQHistoMakerAnalysisJob::print(const TString& options) {
if(options.Contains("TeX")){
this->printBookingTeX(this->GetName());
} else {
this->printBooking(this->GetName());
}
}
void TQHistoMakerAnalysisJob::printBookingTeX(const TString& moretext) {
std::cout << "\\begin{tabular}{l l l l l}" << std::endl;;
std::cout << "\\multicolumn{2}{l}{\\bfseries Booked Histograms}" << " & \\multicolumn{2}{l}{" << moretext << "} & Options \\tabularnewline" << std::endl;
for (size_t i = 0;i < fHistogramTemplates.size(); i++) {
TString exp(TQStringUtils::concat(fExpressions.at(i),","));
exp.ReplaceAll("$","\\$");
std::vector<TString> options;
if (fFillSynchronized.size()>i && fFillSynchronized.at(i)) options.push_back(TString("fillSynchronized=true"));
if (fFillRaw.size()>i && fFillRaw.at(i)) options.push_back(TString("fillRaw=true"));
if (fWeightExpressions.size()>i && fWeightExpressions.at(i).Length()>0) options.push_back(TString::Format("weightExpression='%s'",fWeightExpressions.at(i).Data()).ReplaceAll("$","\\$"));
TString optionString(TQStringUtils::concat(options,","));
std::cout << fHistogramTemplates.at(i)->GetName() << " & "
<< fHistogramTemplates.at(i)->GetTitle() << " & "
<< TQHistogramUtils::getDetailsAsString(fHistogramTemplates.at(i), 2) << " & "
<< exp << " & "
<< (optionString.Length()>0 ? optionString.Data() : "");
if(i != fHistogramTemplates.size() -1) std::cout << " \\tabularnewline ";
std::cout<< std::endl;
}
std::cout << "\\end{tabular}" << std::endl;
}
void TQHistoMakerAnalysisJob::printBooking(const TString& moretext) {
std::cout << TQStringUtils::makeBoldBlue("Booked Histograms") << " " << TQStringUtils::makeBoldWhite(moretext) << std::endl;
for (size_t i = 0;i < fHistogramTemplates.size(); i++) {
std::vector<TString> options;
if (fFillSynchronized.size()>i && fFillSynchronized.at(i)) options.push_back(TString("fillSynchronized=true"));
if (fFillRaw.size()>i && fFillRaw.at(i)) options.push_back(TString("fillRaw=true"));
if (fWeightExpressions.size()>i && fWeightExpressions.at(i).Length()>0) options.push_back(TString::Format("weightExpression='%s'",fWeightExpressions.at(i).Data()).ReplaceAll("$","\\$"));
std::cout << TQStringUtils::fixedWidth(fHistogramTemplates.at(i)->GetName(),20)
<< TQStringUtils::fixedWidth(fHistogramTemplates.at(i)->GetTitle(),20)
<< TQHistogramUtils::getDetailsAsString(fHistogramTemplates.at(i), 2)
<< " << " << TQStringUtils::concat(fExpressions.at(i)," : ");
if (options.size()>0) std::cout << " << ( " << TQStringUtils::concat(options,",") << " ) ";
std::cout << std::endl;
}
}
bool TQHistoMakerAnalysisJob::execute(double weight) {
DEBUGclass("%s: filling histograms for event...",this->GetName());
int nEvals = 0;
int nWeightEvals = 0;
for (unsigned int i = 0; i < fHistograms.size(); ++i) {
#ifdef _DEBUG_
if(this->fObservables.size() < i){
throw std::runtime_error("insufficient size of observable vector!");
}
#endif
switch (fHistoTypes[i]) {
case -2:
if (this->fFillSynchronized[i]) {
TRY(
nEvals = std::max(std::max(fObservables[i][0]->getNevaluations(),fObservables[i][1]->getNevaluations()),fObservables[i][2]->getNevaluations());
,TString::Format("Failed to get number of evaluations from at least one of the observables '%s', '%s', '%s' for filling histogram '%s' at cut '%s'.", fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fObservables[i][2]->GetName(), fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (fObservables[i][0]->getNevaluations() != nEvals && fObservables[i][0]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
if (fObservables[i][1]->getNevaluations() != nEvals && fObservables[i][1]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
if (fObservables[i][2]->getNevaluations() != nEvals && fObservables[i][2]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1 && nWeightEvals != nEvals) {
throw std::runtime_error( TString::Format("Histogram specific weight is neither scalar nor does the number of evaluations of the responsible observable (%d) match the number of evaluations of the value observable(s) (%d). Please check the definition of histogram '%s' with weight observable '%s'! ",nWeightEvals,nEvals,fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<nEvals; ++a) {
((TProfile2D*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(fObservables[i][0]->getNevaluations()==1?0:a),
fObservables[i][1]->getValueAt(fObservables[i][1]->getNevaluations()==1?0:a),
fObservables[i][2]->getValueAt(fObservables[i][2]->getNevaluations()==1?0:a),
(this->fFillRaw[i]? 1. : weight*fSample->getNormalisation())
* ( fWeightObservables[i]?fWeightObservables[i]->getValueAt(std::min(a,std::max(0,nWeightEvals-1)) ) : 1.) );
}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fObservables[i][2]->GetName(), this->getCut()->GetName())
)
} else {
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1) {
throw std::runtime_error( TString::Format("Vector type observables cannot be used as entry specific weights for multidimensional histograms / profiles unless synchronized filling mode is chosen. Please verify your additional options for histogram '%s', weight observable '%s'",fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<fObservables[i][0]->getNevaluations(); a++) {
for (int b = 0; b<fObservables[i][1]->getNevaluations(); b++) {
for (int c = 0; c<fObservables[i][2]->getNevaluations(); c++) {
((TProfile2D*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(a),
fObservables[i][1]->getValueAt(b),
fObservables[i][2]->getValueAt(c),
(this->fFillRaw[i]? 1. : weight*fSample->getNormalisation())
* ( fWeightObservables[i] ? fWeightObservables[i]->getValueAt(0) : 1. ) );
}}}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fObservables[i][2]->GetName(), this->getCut()->GetName())
)
}
break;
case -1:
if (this->fFillSynchronized[i]) {
TRY(
nEvals = std::max(fObservables[i][0]->getNevaluations(),fObservables[i][1]->getNevaluations());
,TString::Format("Failed to get number of evaluations from at least one of the observables '%s', '%s' for filling histogram '%s' at cut '%s'.", fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (fObservables[i][0]->getNevaluations() != nEvals && fObservables[i][0]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
if (fObservables[i][1]->getNevaluations() != nEvals && fObservables[i][1]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1 && nWeightEvals != nEvals) {
throw std::runtime_error( TString::Format("Histogram specific weight is neither scalar nor does the number of evaluations of the responsible observable (%d) match the number of evaluations of the value observable(s) (%d). Please check the definition of histogram '%s' with weight observable '%s'! ",nWeightEvals,nEvals,fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<nEvals; a++) {
((TProfile*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(fObservables[i][0]->getNevaluations()==1?0:a),
fObservables[i][1]->getValueAt(fObservables[i][1]->getNevaluations()==1?0:a),
( this->fFillRaw[i]? 1. : weight*fSample->getNormalisation() )
* ( fWeightObservables[i]?fWeightObservables[i]->getValueAt(std::min(a,std::max(0,nWeightEvals-1)) ) : 1.) );
}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), this->getCut()->GetName())
)
} else {
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1) {
throw std::runtime_error( TString::Format("Vector type observables cannot be used as entry specific weights for multidimensional histograms / profiles unless synchronized filling mode is chosen. Please verify your additional options for histogram '%s', weight observable '%s'",fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<fObservables[i][0]->getNevaluations(); a++) {
for (int b = 0; b<fObservables[i][1]->getNevaluations(); b++) {
((TProfile*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(a),
fObservables[i][1]->getValueAt(b),
( this->fFillRaw[i]? 1. : weight*fSample->getNormalisation() )
* ( fWeightObservables[i] ? fWeightObservables[i]->getValueAt(0) : 1. ) );
}}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), this->getCut()->GetName())
)
}
break;
case 1:
{
#ifdef _DEBUG_
if(!this->fHistograms[i]){
throw std::runtime_error("histogram slot is empty!");
}
if(this->fObservables[i].size() < 1){
throw std::runtime_error("no observable found for this histogram!");
} else if(!this->fObservables[i][0]){
throw std::runtime_error("observable slot for histogram is empty!");
} else if(fObservables[i].size() != 1){
throw std::runtime_error("wrong number of observables for one-dimensional histogram!");
}
#endif
DEBUGclass("evaluating observable at %p",fObservables[i][0]);
DEBUGclass("observable is '%s' of type '%s'",fObservables[i][0]->GetName(),fObservables[i][0]->ClassName());
TRY(
nEvals = fObservables[i][0]->getNevaluations();
,TString::Format("Failed to get number of evaluations from observable '%s' for filling histogram '%s' at cut '%s'.", fObservables[i][0]->GetName(), fHistograms[i]->GetName(), this->getCut()->GetName())
)
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1 && nWeightEvals != nEvals) {
throw std::runtime_error( TString::Format("Histogram specific weight is neither scalar nor does the number of evaluations of the responsible observable (%d) match the number of evaluations of the value observable(s) (%d). Please check the definition of histogram '%s' with weight observable '%s'! ",nWeightEvals,nEvals,fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a=0; a<fObservables[i][0]->getNevaluations(); a++) {
const double val = fObservables[i][0]->getValueAt(a);
DEBUGclass("done evaluating");
DEBUGclass("filling histogram '%s' from '%s' with value %f %s",fHistograms[i]->GetName(),fObservables[i][0]->getActiveExpression().Data(),val, (fWeightObservables[i]? TString::Format("and individual weight %f",fWeightObservables[i]->getValueAt( std::min(a,std::max(0,nWeightEvals-1)) )).Data() : "") );
fHistograms[i]->Fill(val,
( this->fFillRaw[i]? 1. : weight*fSample->getNormalisation() ) * ( fWeightObservables[i]?fWeightObservables[i]->getValueAt(std::min(a,std::max(0,nWeightEvals-1)) ) : 1.) );
}
,TString::Format("Failed to fill histogram '%s' using the observable '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), this->getCut()->GetName())
)
}
break;
case 2:
if (this->fFillSynchronized[i]) {
TRY(
nEvals = std::max(fObservables[i][0]->getNevaluations(),fObservables[i][1]->getNevaluations());
,TString::Format("Failed to get number of evaluations from at least one of the observables '%s', '%s' for filling histogram '%s' at cut '%s'.", fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (fObservables[i][0]->getNevaluations() != nEvals && fObservables[i][0]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
if (fObservables[i][1]->getNevaluations() != nEvals && fObservables[i][1]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1 && nWeightEvals != nEvals) {
throw std::runtime_error( TString::Format("Histogram specific weight is neither scalar nor does the number of evaluations of the responsible observable (%d) match the number of evaluations of the value observable(s) (%d). Please check the definition of histogram '%s' with weight observable '%s'! ",nWeightEvals,nEvals,fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<nEvals; a++) {
((TH2*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(fObservables[i][0]->getNevaluations()==1?0:a),
fObservables[i][1]->getValueAt(fObservables[i][1]->getNevaluations()==1?0:a),
( this->fFillRaw[i]? 1. : weight*fSample->getNormalisation() )
* ( fWeightObservables[i]?fWeightObservables[i]->getValueAt(std::min(a,std::max(0,nWeightEvals-1)) ) : 1.) );
}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), this->getCut()->GetName())
)
} else {
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1) {
throw std::runtime_error( TString::Format("Vector type observables cannot be used as entry specific weights for multidimensional histograms / profiles unless synchronized filling mode is chosen. Please verify your additional options for histogram '%s', weight observable '%s'",fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<fObservables[i][0]->getNevaluations(); a++) {
for (int b = 0; b<fObservables[i][1]->getNevaluations(); b++) {
((TH2*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(a),
fObservables[i][1]->getValueAt(b),
( this->fFillRaw[i]? 1. : weight*fSample->getNormalisation() )
* ( fWeightObservables[i] ? fWeightObservables[i]->getValueAt(0) : 1. ) );
}}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), this->getCut()->GetName())
)
}
break;
case 3:
if (this->fFillSynchronized[i]) {
TRY(
nEvals = std::max(std::max(fObservables[i][0]->getNevaluations(),fObservables[i][1]->getNevaluations()),fObservables[i][2]->getNevaluations());
,TString::Format("Failed to get number of evaluations from at least one of the observables '%s', '%s', '%s' for filling histogram '%s' at cut '%s'.", fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fObservables[i][2]->GetName(), fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (fObservables[i][0]->getNevaluations() != nEvals && fObservables[i][0]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
if (fObservables[i][1]->getNevaluations() != nEvals && fObservables[i][1]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
if (fObservables[i][2]->getNevaluations() != nEvals && fObservables[i][2]->getNevaluations() != 1) throw std::runtime_error("Cannot perform synchonized histogram filling: Number of evaluations do not match!");
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1 && nWeightEvals != nEvals) {
throw std::runtime_error( TString::Format("Histogram specific weight is neither scalar nor does the number of evaluations of the responsible observable (%d) match the number of evaluations of the value observable(s) (%d). Please check the definition of histogram '%s' with weight observable '%s'! ",nWeightEvals,nEvals,fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<nEvals; ++a) {
((TH3*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(fObservables[i][0]->getNevaluations()==1?0:a),
fObservables[i][1]->getValueAt(fObservables[i][1]->getNevaluations()==1?0:a),
fObservables[i][2]->getValueAt(fObservables[i][2]->getNevaluations()==1?0:a),
(this->fFillRaw[i]? 1. : weight*fSample->getNormalisation() )
* ( fWeightObservables[i]?fWeightObservables[i]->getValueAt(std::min(a,std::max(0,nWeightEvals-1)) ) : 1.) );
}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fObservables[i][2]->GetName(), this->getCut()->GetName())
)
} else {
TRY(
nWeightEvals = fWeightObservables[i] ? fWeightObservables[i]->getNevaluations() : 1;
,TString::Format("Failed to get number of evaluations from histogram-entry-weight observable '%s' for filling histogram '%s' at cut '%s'", fWeightObservables[i]?fWeightObservables[i]->GetName():"", fHistograms[i]->GetName(), this->getCut()->GetName())
)
if (nWeightEvals != 1) {
throw std::runtime_error( TString::Format("Vector type observables cannot be used as entry specific weights for multidimensional histograms / profiles unless synchronized filling mode is chosen. Please verify your additional options for histogram '%s', weight observable '%s'",fHistograms[i]->GetName(),fWeightObservables[i]?fWeightObservables[i]->GetName():"").Data());
}
TRY(
for (int a = 0; a<fObservables[i][0]->getNevaluations(); ++a) {
for (int b = 0; b<fObservables[i][1]->getNevaluations(); ++b) {
for (int c = 0; c<fObservables[i][2]->getNevaluations(); ++c) {
((TH3*)(fHistograms[i]))->Fill(fObservables[i][0]->getValueAt(a),
fObservables[i][1]->getValueAt(b),
fObservables[i][2]->getValueAt(c),
( this->fFillRaw[i]? 1. : weight*fSample->getNormalisation() )
* ( fWeightObservables[i] ? fWeightObservables[i]->getValueAt(0) : 1. ) );
}}}
,TString::Format("Failed to fill histogram '%s' using the observables '%s', '%s', '%s' at cut '%s'.", fHistograms[i]->GetName(), fObservables[i][0]->GetName(), fObservables[i][1]->GetName(), fObservables[i][2]->GetName(), this->getCut()->GetName())
)
}
}
}
return true;
}
TObjArray * TQHistoMakerAnalysisJob::getBranchNames() {
if(!this->fSample){
throw std::runtime_error(TString::Format("TQHistoMakerAnalysisJob '%s': cannot retrieve branches on uninitialized object!", this->GetName()).Data());
}
TObjArray * bNames = new TObjArray();
for (size_t i = 0; i < fObservables.size(); ++i) {
for (size_t j = 0; j < fObservables[i].size(); ++j) {
TQObservable* obs = fObservables[i][j];
if(obs){
TCollection* c = obs->getBranchNames();
if(c){
if(c->GetEntries() > 0) bNames -> AddAll(c);
c->SetOwner(false);
delete c;
}
}
}
}
return bNames;
}
bool TQHistoMakerAnalysisJob::initializeSelf() {
DEBUGclass("initializing analysis job '%s'",this->GetName());
if(fHistograms.size() < 1){
this->poolAt = this->fSample;
DEBUGclass("initializing histograms");
this->initializeHistograms();
}
bool success = true;
DEBUGclass("initializing observables");
for (unsigned int i = 0; i < fExpressions.size(); ++i) {
std::vector<TQObservable*> observables;
for (unsigned int j = 0; j < fExpressions[i].size(); ++j) {
TQObservable* obs = TQObservable::getObservable(fExpressions[i][j],this->fSample);
if(obs && success){
DEBUGclass("initializing...");
if (!obs->initialize(this->fSample)) {
ERRORclass("Failed to initialize observable created from expression '%s' for sample '%s' in TQHistomakerAnalysisJob '%s' for histogram named '%s'",this->fExpressions[i][j].Data(), this->fSample->getPath().Data(), this->GetName(), this->fHistograms[i]->GetName());
success=false;
}
DEBUGclass("initialized observable '%s' of type '%s' with '%s'",
obs->getExpression().Data(),
obs->ClassName(),
obs->getActiveExpression().Data());
}
if(!obs){
DEBUGclass("creating const observable");
obs = TQObservable::getObservable("Const:nan",this->fSample);
obs->initialize(this->fSample);
}
observables.push_back(obs);
}
this->fObservables.push_back(observables);
}
for (unsigned int i=0; i< fWeightExpressions.size(); ++i) {
if (fWeightExpressions[i].Length()<1) {
fWeightObservables.push_back(NULL);
continue;
}
TQObservable* wObs = TQObservable::getObservable(fWeightExpressions[i],this->fSample);
if(wObs){
DEBUGclass("initializing...");
if (!wObs->initialize(this->fSample)) {
ERRORclass("Failed to initialize weight observable created from expression '%s' for sample '%s' in TQHistomakerAnalysisJob '%s' for histogram named '%s'",this->fWeightExpressions[i].Data(), this->fSample->getPath().Data(), this->GetName(), this->fHistograms[i]->GetName());
success=false;
}
DEBUGclass("initialized observable '%s' of type '%s' with '%s'",
wObs->getExpression().Data(),
wObs->ClassName(),
wObs->getActiveExpression().Data());
}
if(!wObs){
DEBUGclass("creating const observable");
wObs = TQObservable::getObservable("Const:nan",this->fSample);
wObs->initialize(this->fSample);
}
fWeightObservables.push_back(wObs);
}
DEBUG("successfully initialized histogram job");
return success;
}
void TQHistoMakerAnalysisJob::initializeHistograms(){
DEBUGclass("%s: Size of histogram template vector : %i", this->GetName(), fHistogramTemplates.size());
for (unsigned int i = 0; i < fHistogramTemplates.size(); i++) {
TH1 * histo = TQHistogramUtils::copyHistogram((fHistogramTemplates)[i]);
histo->SetDirectory(0);
fHistograms.push_back(histo);
}
}
bool TQHistoMakerAnalysisJob::finalizeSelf() {
for (unsigned int i = 0; i < fObservables.size(); ++i) {
for (unsigned int j = 0; j < fObservables[i].size(); ++j) {
fObservables[i][j]->finalize();
}
}
this->fObservables.clear();
for (unsigned int i = 0; i < fWeightObservables.size(); ++i) {
if (fWeightObservables[i]) fWeightObservables[i]->finalize();
}
this->fWeightObservables.clear();
if(this->poolAt == this->fSample)
if(!this->finalizeHistograms())
return false;
return true;
}
bool TQHistoMakerAnalysisJob::finalizeHistograms(){
if (!getCut()) { return false; }
TQFolder * folder = this->poolAt->getFolder(TString::Format(
".histograms/%s+", getCut()->GetName()));
if (!folder) { return false; }
DEBUGclass("%s: successfully created folder %s for cut %s", this->GetName(),poolAt->getPath().Data(), getCut()->GetName());
DEBUGclass("length of histogram list is %i", fHistograms.size());
for (unsigned int i = 0; i < fHistograms.size(); i++) {
TH1 * histo = (fHistograms)[i];
if (!histo){ DEBUGclass("Histogram is 0!"); };
TObject *h = folder->FindObject(histo->GetName());
if (h){
std::stringstream warnmessage;
warnmessage << "A histogram with the name '" << h->GetName() << "' is already in the sample folder. This can happen when you try to book the same histogram multiple times at the same cut. Authors are:\n";
TQIterator itr(folder->getListOfKeys(".author.*"), true);
while (itr.hasNext()) {
TObject* obj = itr.readNext();
warnmessage << obj->GetName() << "\t" << folder->getTagStringDefault(obj->GetName(),"") << "\n";
}
warnmessage << "Please check your histogram file. Removing previous object for now.";
folder->Remove(h);
WARNclass(warnmessage.str().c_str());
}
DEBUGclass("saving histogram %s", histo->GetName());
folder->Add(histo);
}
this->fHistograms.clear();
folder->setTagBool(TString::Format(".author.%s",this->GetName()),true);
if(this->poolAt){
folder->setTagString(TString::Format(".author.%s.pool",this->GetName()),this->poolAt->getPath());
}
this->poolAt = NULL;
return true;
}
bool TQHistoMakerAnalysisJob::initializeSampleFolder(TQSampleFolder* sf){
bool pool = false;
sf->getTagBool(".aj.pool.histograms",pool);
if(pool && (this->fHistograms.size() == 0)){
this->initializeHistograms();
this->poolAt = sf;
}
return true;
}
bool TQHistoMakerAnalysisJob::finalizeSampleFolder(TQSampleFolder* sf){
if(sf == this->poolAt)
return this->finalizeHistograms();
return true;
}
TQHistoMakerAnalysisJob::~TQHistoMakerAnalysisJob() {
for (unsigned int i = 0; i < fHistogramTemplates.size(); i++) {
delete (fHistogramTemplates)[i]; }
}
TQAnalysisJob* TQHistoMakerAnalysisJob::getClone(){
TQHistoMakerAnalysisJob* newJob = new TQHistoMakerAnalysisJob(this);
return newJob;
}
void TQHistoMakerAnalysisJob::reset() {
TQAnalysisJob::reset();
fHistograms.clear();
}
int TQHistoMakerAnalysisJob::importJobsFromTextFiles(const TString& files, TQCut* basecut, const TString& channelFilter, bool verbose){
std::vector <TString> filenames = TQStringUtils::split(files,",");
return TQHistoMakerAnalysisJob::importJobsFromTextFiles(filenames,basecut,channelFilter,verbose);
}
int TQHistoMakerAnalysisJob::importJobsFromTextFiles(const TString& files, TQCut* basecut, TQTaggable* aliases, const TString& channelFilter, bool verbose){
std::vector <TString> filenames = TQStringUtils::split(files,",");
return TQHistoMakerAnalysisJob::importJobsFromTextFiles(filenames,basecut,aliases,channelFilter,verbose);
}
int TQHistoMakerAnalysisJob::importJobsFromTextFiles(const std::vector<TString>& filenames, TQCut* basecut, const TString& channelFilter, bool verbose){
return TQHistoMakerAnalysisJob::importJobsFromTextFiles(filenames, basecut, NULL, channelFilter, verbose);
}
int TQHistoMakerAnalysisJob::importJobsFromTextFiles(const std::vector<TString>& filenames, TQCut* basecut, TQTaggable* aliases, const TString& channelFilter, bool verbose){
if(filenames.size() < 1){
ERRORfunc("importing no histograms from empty files list!");
return -1;
}
std::map<TString,TString> histogramDefinitions;
std::vector<TString> assignments;
TString buffer;
for(size_t i=0; i<filenames.size(); i++){
std::vector<TString>* lines = TQStringUtils::readFileLines(filenames[i],2048);
if(!lines){
ERRORfunc("unable to open file '%s'",filenames[i].Data());
continue;
}
for(size_t j=0; j<lines->size(); ++j){
TString line(TQStringUtils::trim(lines->at(j)));
DEBUGclass("looking at line '%s'",line.Data());
if(line.IsNull()) continue;
if(line.BeginsWith("T")){
size_t namestart = TQStringUtils::findFirstOf(line,"'\"",0)+1;
size_t nameend = TQStringUtils::findFirstOf(line,"'\"",namestart);
if(namestart == 0 || namestart > (size_t)line.Length() || nameend > (size_t)line.Length() || nameend == namestart){
ERRORfunc("unable to parse histogram definition '%s'",line.Data());
continue;
}
TString name(TQStringUtils::trim(line(namestart,nameend-namestart),"\t ,"));
DEBUGclass("found definition: '%s', assigning as '%s'",line.Data(),name.Data());
histogramDefinitions[name] = line;
} else if(TQStringUtils::removeLeading(line,"@") == 1){
DEBUGclass("found assignment: '%s'",line.Data());
assignments.push_back(line);
} else {
WARNfunc("encountered unknown token: '%s'",line.Data());
}
}
delete lines;
}
if(verbose) VERBOSEfunc("going to create '%d' jobs",(int)(assignments.size()));
int retval = 0;
for(size_t i=0; i<assignments.size(); i++){
TString assignment = assignments[i];
DEBUGclass("looking at assignment '%s'",assignment.Data());
TString channel;
if(TQStringUtils::readBlock(assignment,channel) && !channel.IsNull() && !TQStringUtils::matches(channel,channelFilter)) continue;
TString cuts,histograms;
TQStringUtils::readUpTo(assignment,cuts,":");
TQStringUtils::readToken(assignment,buffer," :");
TQStringUtils::readUpTo(assignment,histograms,";");
TQStringUtils::readToken(assignment,buffer,"; ");
DEBUGclass("histograms: '%s'",histograms.Data());
DEBUGclass("cuts: '%s'",cuts.Data());
if(verbose) VERBOSEfunc("building job for cuts '%s'",cuts.Data());
DEBUGclass("spare symbols: '%s'",buffer.Data());
std::vector<TString> vHistos = TQStringUtils::split(histograms,",");
if(vHistos.size() < 1){
ERRORfunc("no histograms listed in assignment '%s'",assignments[i].Data());
continue;
}
TQHistoMakerAnalysisJob* job = new TQHistoMakerAnalysisJob();
job->SetName(TQHistoMakerAnalysisJob::gDefaultAuthor);
for(size_t j=0; j<vHistos.size(); ++j){
const TString def = histogramDefinitions[TQStringUtils::trim(vHistos[j],"\t ,")];
if(def.IsNull()){
ERRORfunc("unable to find histogram definition for name '%s', skipping",TQStringUtils::trim(vHistos[j],"\t ,").Data());
continue;
}
bool ok = job->bookHistogram(def,aliases);
if(ok){
if(verbose) VERBOSEfunc("\tbooked histogram '%s'",def.Data());
} else {
retval += 1;
if(verbose) f_ErrMsg.writeMessagesToStdout();
job->f_ErrMsg.sendClassFunctionMessage(TQMessageStream::ERROR,job->Class(),__FUNCTION__,"'%s' caused an error when trying to book the histogram, the previous lines might provide some more information.", def.Data());
DEBUGclass("error booking histogram for '%s', function says '%s'",def.Data(),f_ErrMsg.getMessages().Data());
}
}
if(verbose) job->printBooking(cuts);
basecut->addAnalysisJob(job,cuts);
delete job;
}
DEBUGclass("end of function call, encountered %d error messages",retval);
return retval;
}
bool TQHistoMakerAnalysisJob::isPooling() const {
return this->poolAt;
}
TQHistoMakerAnalysisJob.cxx:1 TQHistoMakerAnalysisJob.cxx:2 TQHistoMakerAnalysisJob.cxx:3 TQHistoMakerAnalysisJob.cxx:4 TQHistoMakerAnalysisJob.cxx:5 TQHistoMakerAnalysisJob.cxx:6 TQHistoMakerAnalysisJob.cxx:7 TQHistoMakerAnalysisJob.cxx:8 TQHistoMakerAnalysisJob.cxx:9 TQHistoMakerAnalysisJob.cxx:10 TQHistoMakerAnalysisJob.cxx:11 TQHistoMakerAnalysisJob.cxx:12 TQHistoMakerAnalysisJob.cxx:13 TQHistoMakerAnalysisJob.cxx:14 TQHistoMakerAnalysisJob.cxx:15 TQHistoMakerAnalysisJob.cxx:16 TQHistoMakerAnalysisJob.cxx:17 TQHistoMakerAnalysisJob.cxx:18 TQHistoMakerAnalysisJob.cxx:19 TQHistoMakerAnalysisJob.cxx:20 TQHistoMakerAnalysisJob.cxx:21 TQHistoMakerAnalysisJob.cxx:22 TQHistoMakerAnalysisJob.cxx:23 TQHistoMakerAnalysisJob.cxx:24 TQHistoMakerAnalysisJob.cxx:25 TQHistoMakerAnalysisJob.cxx:26 TQHistoMakerAnalysisJob.cxx:27 TQHistoMakerAnalysisJob.cxx:28 TQHistoMakerAnalysisJob.cxx:29 TQHistoMakerAnalysisJob.cxx:30 TQHistoMakerAnalysisJob.cxx:31 TQHistoMakerAnalysisJob.cxx:32 TQHistoMakerAnalysisJob.cxx:33 TQHistoMakerAnalysisJob.cxx:34 TQHistoMakerAnalysisJob.cxx:35 TQHistoMakerAnalysisJob.cxx:36 TQHistoMakerAnalysisJob.cxx:37 TQHistoMakerAnalysisJob.cxx:38 TQHistoMakerAnalysisJob.cxx:39 TQHistoMakerAnalysisJob.cxx:40 TQHistoMakerAnalysisJob.cxx:41 TQHistoMakerAnalysisJob.cxx:42 TQHistoMakerAnalysisJob.cxx:43 TQHistoMakerAnalysisJob.cxx:44 TQHistoMakerAnalysisJob.cxx:45 TQHistoMakerAnalysisJob.cxx:46 TQHistoMakerAnalysisJob.cxx:47 TQHistoMakerAnalysisJob.cxx:48 TQHistoMakerAnalysisJob.cxx:49 TQHistoMakerAnalysisJob.cxx:50 TQHistoMakerAnalysisJob.cxx:51 TQHistoMakerAnalysisJob.cxx:52 TQHistoMakerAnalysisJob.cxx:53 TQHistoMakerAnalysisJob.cxx:54 TQHistoMakerAnalysisJob.cxx:55 TQHistoMakerAnalysisJob.cxx:56 TQHistoMakerAnalysisJob.cxx:57 TQHistoMakerAnalysisJob.cxx:58 TQHistoMakerAnalysisJob.cxx:59 TQHistoMakerAnalysisJob.cxx:60 TQHistoMakerAnalysisJob.cxx:61 TQHistoMakerAnalysisJob.cxx:62 TQHistoMakerAnalysisJob.cxx:63 TQHistoMakerAnalysisJob.cxx:64 TQHistoMakerAnalysisJob.cxx:65 TQHistoMakerAnalysisJob.cxx:66 TQHistoMakerAnalysisJob.cxx:67 TQHistoMakerAnalysisJob.cxx:68 TQHistoMakerAnalysisJob.cxx:69 TQHistoMakerAnalysisJob.cxx:70 TQHistoMakerAnalysisJob.cxx:71 TQHistoMakerAnalysisJob.cxx:72 TQHistoMakerAnalysisJob.cxx:73 TQHistoMakerAnalysisJob.cxx:74 TQHistoMakerAnalysisJob.cxx:75 TQHistoMakerAnalysisJob.cxx:76 TQHistoMakerAnalysisJob.cxx:77 TQHistoMakerAnalysisJob.cxx:78 TQHistoMakerAnalysisJob.cxx:79 TQHistoMakerAnalysisJob.cxx:80 TQHistoMakerAnalysisJob.cxx:81 TQHistoMakerAnalysisJob.cxx:82 TQHistoMakerAnalysisJob.cxx:83 TQHistoMakerAnalysisJob.cxx:84 TQHistoMakerAnalysisJob.cxx:85 TQHistoMakerAnalysisJob.cxx:86 TQHistoMakerAnalysisJob.cxx:87 TQHistoMakerAnalysisJob.cxx:88 TQHistoMakerAnalysisJob.cxx:89 TQHistoMakerAnalysisJob.cxx:90 TQHistoMakerAnalysisJob.cxx:91 TQHistoMakerAnalysisJob.cxx:92 TQHistoMakerAnalysisJob.cxx:93 TQHistoMakerAnalysisJob.cxx:94 TQHistoMakerAnalysisJob.cxx:95 TQHistoMakerAnalysisJob.cxx:96 TQHistoMakerAnalysisJob.cxx:97 TQHistoMakerAnalysisJob.cxx:98 TQHistoMakerAnalysisJob.cxx:99 TQHistoMakerAnalysisJob.cxx:100 TQHistoMakerAnalysisJob.cxx:101 TQHistoMakerAnalysisJob.cxx:102 TQHistoMakerAnalysisJob.cxx:103 TQHistoMakerAnalysisJob.cxx:104 TQHistoMakerAnalysisJob.cxx:105 TQHistoMakerAnalysisJob.cxx:106 TQHistoMakerAnalysisJob.cxx:107 TQHistoMakerAnalysisJob.cxx:108 TQHistoMakerAnalysisJob.cxx:109 TQHistoMakerAnalysisJob.cxx:110 TQHistoMakerAnalysisJob.cxx:111 TQHistoMakerAnalysisJob.cxx:112 TQHistoMakerAnalysisJob.cxx:113 TQHistoMakerAnalysisJob.cxx:114 TQHistoMakerAnalysisJob.cxx:115 TQHistoMakerAnalysisJob.cxx:116 TQHistoMakerAnalysisJob.cxx:117 TQHistoMakerAnalysisJob.cxx:118 TQHistoMakerAnalysisJob.cxx:119 TQHistoMakerAnalysisJob.cxx:120 TQHistoMakerAnalysisJob.cxx:121 TQHistoMakerAnalysisJob.cxx:122 TQHistoMakerAnalysisJob.cxx:123 TQHistoMakerAnalysisJob.cxx:124 TQHistoMakerAnalysisJob.cxx:125 TQHistoMakerAnalysisJob.cxx:126 TQHistoMakerAnalysisJob.cxx:127 TQHistoMakerAnalysisJob.cxx:128 TQHistoMakerAnalysisJob.cxx:129 TQHistoMakerAnalysisJob.cxx:130 TQHistoMakerAnalysisJob.cxx:131 TQHistoMakerAnalysisJob.cxx:132 TQHistoMakerAnalysisJob.cxx:133 TQHistoMakerAnalysisJob.cxx:134 TQHistoMakerAnalysisJob.cxx:135 TQHistoMakerAnalysisJob.cxx:136 TQHistoMakerAnalysisJob.cxx:137 TQHistoMakerAnalysisJob.cxx:138 TQHistoMakerAnalysisJob.cxx:139 TQHistoMakerAnalysisJob.cxx:140 TQHistoMakerAnalysisJob.cxx:141 TQHistoMakerAnalysisJob.cxx:142 TQHistoMakerAnalysisJob.cxx:143 TQHistoMakerAnalysisJob.cxx:144 TQHistoMakerAnalysisJob.cxx:145 TQHistoMakerAnalysisJob.cxx:146 TQHistoMakerAnalysisJob.cxx:147 TQHistoMakerAnalysisJob.cxx:148 TQHistoMakerAnalysisJob.cxx:149 TQHistoMakerAnalysisJob.cxx:150 TQHistoMakerAnalysisJob.cxx:151 TQHistoMakerAnalysisJob.cxx:152 TQHistoMakerAnalysisJob.cxx:153 TQHistoMakerAnalysisJob.cxx:154 TQHistoMakerAnalysisJob.cxx:155 TQHistoMakerAnalysisJob.cxx:156 TQHistoMakerAnalysisJob.cxx:157 TQHistoMakerAnalysisJob.cxx:158 TQHistoMakerAnalysisJob.cxx:159 TQHistoMakerAnalysisJob.cxx:160 TQHistoMakerAnalysisJob.cxx:161 TQHistoMakerAnalysisJob.cxx:162 TQHistoMakerAnalysisJob.cxx:163 TQHistoMakerAnalysisJob.cxx:164 TQHistoMakerAnalysisJob.cxx:165 TQHistoMakerAnalysisJob.cxx:166 TQHistoMakerAnalysisJob.cxx:167 TQHistoMakerAnalysisJob.cxx:168 TQHistoMakerAnalysisJob.cxx:169 TQHistoMakerAnalysisJob.cxx:170 TQHistoMakerAnalysisJob.cxx:171 TQHistoMakerAnalysisJob.cxx:172 TQHistoMakerAnalysisJob.cxx:173 TQHistoMakerAnalysisJob.cxx:174 TQHistoMakerAnalysisJob.cxx:175 TQHistoMakerAnalysisJob.cxx:176 TQHistoMakerAnalysisJob.cxx:177 TQHistoMakerAnalysisJob.cxx:178 TQHistoMakerAnalysisJob.cxx:179 TQHistoMakerAnalysisJob.cxx:180 TQHistoMakerAnalysisJob.cxx:181 TQHistoMakerAnalysisJob.cxx:182 TQHistoMakerAnalysisJob.cxx:183 TQHistoMakerAnalysisJob.cxx:184 TQHistoMakerAnalysisJob.cxx:185 TQHistoMakerAnalysisJob.cxx:186 TQHistoMakerAnalysisJob.cxx:187 TQHistoMakerAnalysisJob.cxx:188 TQHistoMakerAnalysisJob.cxx:189 TQHistoMakerAnalysisJob.cxx:190 TQHistoMakerAnalysisJob.cxx:191 TQHistoMakerAnalysisJob.cxx:192 TQHistoMakerAnalysisJob.cxx:193 TQHistoMakerAnalysisJob.cxx:194 TQHistoMakerAnalysisJob.cxx:195 TQHistoMakerAnalysisJob.cxx:196 TQHistoMakerAnalysisJob.cxx:197 TQHistoMakerAnalysisJob.cxx:198 TQHistoMakerAnalysisJob.cxx:199 TQHistoMakerAnalysisJob.cxx:200 TQHistoMakerAnalysisJob.cxx:201 TQHistoMakerAnalysisJob.cxx:202 TQHistoMakerAnalysisJob.cxx:203 TQHistoMakerAnalysisJob.cxx:204 TQHistoMakerAnalysisJob.cxx:205 TQHistoMakerAnalysisJob.cxx:206 TQHistoMakerAnalysisJob.cxx:207 TQHistoMakerAnalysisJob.cxx:208 TQHistoMakerAnalysisJob.cxx:209 TQHistoMakerAnalysisJob.cxx:210 TQHistoMakerAnalysisJob.cxx:211 TQHistoMakerAnalysisJob.cxx:212 TQHistoMakerAnalysisJob.cxx:213 TQHistoMakerAnalysisJob.cxx:214 TQHistoMakerAnalysisJob.cxx:215 TQHistoMakerAnalysisJob.cxx:216 TQHistoMakerAnalysisJob.cxx:217 TQHistoMakerAnalysisJob.cxx:218 TQHistoMakerAnalysisJob.cxx:219 TQHistoMakerAnalysisJob.cxx:220 TQHistoMakerAnalysisJob.cxx:221 TQHistoMakerAnalysisJob.cxx:222 TQHistoMakerAnalysisJob.cxx:223 TQHistoMakerAnalysisJob.cxx:224 TQHistoMakerAnalysisJob.cxx:225 TQHistoMakerAnalysisJob.cxx:226 TQHistoMakerAnalysisJob.cxx:227 TQHistoMakerAnalysisJob.cxx:228 TQHistoMakerAnalysisJob.cxx:229 TQHistoMakerAnalysisJob.cxx:230 TQHistoMakerAnalysisJob.cxx:231 TQHistoMakerAnalysisJob.cxx:232 TQHistoMakerAnalysisJob.cxx:233 TQHistoMakerAnalysisJob.cxx:234 TQHistoMakerAnalysisJob.cxx:235 TQHistoMakerAnalysisJob.cxx:236 TQHistoMakerAnalysisJob.cxx:237 TQHistoMakerAnalysisJob.cxx:238 TQHistoMakerAnalysisJob.cxx:239 TQHistoMakerAnalysisJob.cxx:240 TQHistoMakerAnalysisJob.cxx:241 TQHistoMakerAnalysisJob.cxx:242 TQHistoMakerAnalysisJob.cxx:243 TQHistoMakerAnalysisJob.cxx:244 TQHistoMakerAnalysisJob.cxx:245 TQHistoMakerAnalysisJob.cxx:246 TQHistoMakerAnalysisJob.cxx:247 TQHistoMakerAnalysisJob.cxx:248 TQHistoMakerAnalysisJob.cxx:249 TQHistoMakerAnalysisJob.cxx:250 TQHistoMakerAnalysisJob.cxx:251 TQHistoMakerAnalysisJob.cxx:252 TQHistoMakerAnalysisJob.cxx:253 TQHistoMakerAnalysisJob.cxx:254 TQHistoMakerAnalysisJob.cxx:255 TQHistoMakerAnalysisJob.cxx:256 TQHistoMakerAnalysisJob.cxx:257 TQHistoMakerAnalysisJob.cxx:258 TQHistoMakerAnalysisJob.cxx:259 TQHistoMakerAnalysisJob.cxx:260 TQHistoMakerAnalysisJob.cxx:261 TQHistoMakerAnalysisJob.cxx:262 TQHistoMakerAnalysisJob.cxx:263 TQHistoMakerAnalysisJob.cxx:264 TQHistoMakerAnalysisJob.cxx:265 TQHistoMakerAnalysisJob.cxx:266 TQHistoMakerAnalysisJob.cxx:267 TQHistoMakerAnalysisJob.cxx:268 TQHistoMakerAnalysisJob.cxx:269 TQHistoMakerAnalysisJob.cxx:270 TQHistoMakerAnalysisJob.cxx:271 TQHistoMakerAnalysisJob.cxx:272 TQHistoMakerAnalysisJob.cxx:273 TQHistoMakerAnalysisJob.cxx:274 TQHistoMakerAnalysisJob.cxx:275 TQHistoMakerAnalysisJob.cxx:276 TQHistoMakerAnalysisJob.cxx:277 TQHistoMakerAnalysisJob.cxx:278 TQHistoMakerAnalysisJob.cxx:279 TQHistoMakerAnalysisJob.cxx:280 TQHistoMakerAnalysisJob.cxx:281 TQHistoMakerAnalysisJob.cxx:282 TQHistoMakerAnalysisJob.cxx:283 TQHistoMakerAnalysisJob.cxx:284 TQHistoMakerAnalysisJob.cxx:285 TQHistoMakerAnalysisJob.cxx:286 TQHistoMakerAnalysisJob.cxx:287 TQHistoMakerAnalysisJob.cxx:288 TQHistoMakerAnalysisJob.cxx:289 TQHistoMakerAnalysisJob.cxx:290 TQHistoMakerAnalysisJob.cxx:291 TQHistoMakerAnalysisJob.cxx:292 TQHistoMakerAnalysisJob.cxx:293 TQHistoMakerAnalysisJob.cxx:294 TQHistoMakerAnalysisJob.cxx:295 TQHistoMakerAnalysisJob.cxx:296 TQHistoMakerAnalysisJob.cxx:297 TQHistoMakerAnalysisJob.cxx:298 TQHistoMakerAnalysisJob.cxx:299 TQHistoMakerAnalysisJob.cxx:300 TQHistoMakerAnalysisJob.cxx:301 TQHistoMakerAnalysisJob.cxx:302 TQHistoMakerAnalysisJob.cxx:303 TQHistoMakerAnalysisJob.cxx:304 TQHistoMakerAnalysisJob.cxx:305 TQHistoMakerAnalysisJob.cxx:306 TQHistoMakerAnalysisJob.cxx:307 TQHistoMakerAnalysisJob.cxx:308 TQHistoMakerAnalysisJob.cxx:309 TQHistoMakerAnalysisJob.cxx:310 TQHistoMakerAnalysisJob.cxx:311 TQHistoMakerAnalysisJob.cxx:312 TQHistoMakerAnalysisJob.cxx:313 TQHistoMakerAnalysisJob.cxx:314 TQHistoMakerAnalysisJob.cxx:315 TQHistoMakerAnalysisJob.cxx:316 TQHistoMakerAnalysisJob.cxx:317 TQHistoMakerAnalysisJob.cxx:318 TQHistoMakerAnalysisJob.cxx:319 TQHistoMakerAnalysisJob.cxx:320 TQHistoMakerAnalysisJob.cxx:321 TQHistoMakerAnalysisJob.cxx:322 TQHistoMakerAnalysisJob.cxx:323 TQHistoMakerAnalysisJob.cxx:324 TQHistoMakerAnalysisJob.cxx:325 TQHistoMakerAnalysisJob.cxx:326 TQHistoMakerAnalysisJob.cxx:327 TQHistoMakerAnalysisJob.cxx:328 TQHistoMakerAnalysisJob.cxx:329 TQHistoMakerAnalysisJob.cxx:330 TQHistoMakerAnalysisJob.cxx:331 TQHistoMakerAnalysisJob.cxx:332 TQHistoMakerAnalysisJob.cxx:333 TQHistoMakerAnalysisJob.cxx:334 TQHistoMakerAnalysisJob.cxx:335 TQHistoMakerAnalysisJob.cxx:336 TQHistoMakerAnalysisJob.cxx:337 TQHistoMakerAnalysisJob.cxx:338 TQHistoMakerAnalysisJob.cxx:339 TQHistoMakerAnalysisJob.cxx:340 TQHistoMakerAnalysisJob.cxx:341 TQHistoMakerAnalysisJob.cxx:342 TQHistoMakerAnalysisJob.cxx:343 TQHistoMakerAnalysisJob.cxx:344 TQHistoMakerAnalysisJob.cxx:345 TQHistoMakerAnalysisJob.cxx:346 TQHistoMakerAnalysisJob.cxx:347 TQHistoMakerAnalysisJob.cxx:348 TQHistoMakerAnalysisJob.cxx:349 TQHistoMakerAnalysisJob.cxx:350 TQHistoMakerAnalysisJob.cxx:351 TQHistoMakerAnalysisJob.cxx:352 TQHistoMakerAnalysisJob.cxx:353 TQHistoMakerAnalysisJob.cxx:354 TQHistoMakerAnalysisJob.cxx:355 TQHistoMakerAnalysisJob.cxx:356 TQHistoMakerAnalysisJob.cxx:357 TQHistoMakerAnalysisJob.cxx:358 TQHistoMakerAnalysisJob.cxx:359 TQHistoMakerAnalysisJob.cxx:360 TQHistoMakerAnalysisJob.cxx:361 TQHistoMakerAnalysisJob.cxx:362 TQHistoMakerAnalysisJob.cxx:363 TQHistoMakerAnalysisJob.cxx:364 TQHistoMakerAnalysisJob.cxx:365 TQHistoMakerAnalysisJob.cxx:366 TQHistoMakerAnalysisJob.cxx:367 TQHistoMakerAnalysisJob.cxx:368 TQHistoMakerAnalysisJob.cxx:369 TQHistoMakerAnalysisJob.cxx:370 TQHistoMakerAnalysisJob.cxx:371 TQHistoMakerAnalysisJob.cxx:372 TQHistoMakerAnalysisJob.cxx:373 TQHistoMakerAnalysisJob.cxx:374 TQHistoMakerAnalysisJob.cxx:375 TQHistoMakerAnalysisJob.cxx:376 TQHistoMakerAnalysisJob.cxx:377 TQHistoMakerAnalysisJob.cxx:378 TQHistoMakerAnalysisJob.cxx:379 TQHistoMakerAnalysisJob.cxx:380 TQHistoMakerAnalysisJob.cxx:381 TQHistoMakerAnalysisJob.cxx:382 TQHistoMakerAnalysisJob.cxx:383 TQHistoMakerAnalysisJob.cxx:384 TQHistoMakerAnalysisJob.cxx:385 TQHistoMakerAnalysisJob.cxx:386 TQHistoMakerAnalysisJob.cxx:387 TQHistoMakerAnalysisJob.cxx:388 TQHistoMakerAnalysisJob.cxx:389 TQHistoMakerAnalysisJob.cxx:390 TQHistoMakerAnalysisJob.cxx:391 TQHistoMakerAnalysisJob.cxx:392 TQHistoMakerAnalysisJob.cxx:393 TQHistoMakerAnalysisJob.cxx:394 TQHistoMakerAnalysisJob.cxx:395 TQHistoMakerAnalysisJob.cxx:396 TQHistoMakerAnalysisJob.cxx:397 TQHistoMakerAnalysisJob.cxx:398 TQHistoMakerAnalysisJob.cxx:399 TQHistoMakerAnalysisJob.cxx:400 TQHistoMakerAnalysisJob.cxx:401 TQHistoMakerAnalysisJob.cxx:402 TQHistoMakerAnalysisJob.cxx:403 TQHistoMakerAnalysisJob.cxx:404 TQHistoMakerAnalysisJob.cxx:405 TQHistoMakerAnalysisJob.cxx:406 TQHistoMakerAnalysisJob.cxx:407 TQHistoMakerAnalysisJob.cxx:408 TQHistoMakerAnalysisJob.cxx:409 TQHistoMakerAnalysisJob.cxx:410 TQHistoMakerAnalysisJob.cxx:411 TQHistoMakerAnalysisJob.cxx:412 TQHistoMakerAnalysisJob.cxx:413 TQHistoMakerAnalysisJob.cxx:414 TQHistoMakerAnalysisJob.cxx:415 TQHistoMakerAnalysisJob.cxx:416 TQHistoMakerAnalysisJob.cxx:417 TQHistoMakerAnalysisJob.cxx:418 TQHistoMakerAnalysisJob.cxx:419 TQHistoMakerAnalysisJob.cxx:420 TQHistoMakerAnalysisJob.cxx:421 TQHistoMakerAnalysisJob.cxx:422 TQHistoMakerAnalysisJob.cxx:423 TQHistoMakerAnalysisJob.cxx:424 TQHistoMakerAnalysisJob.cxx:425 TQHistoMakerAnalysisJob.cxx:426 TQHistoMakerAnalysisJob.cxx:427 TQHistoMakerAnalysisJob.cxx:428 TQHistoMakerAnalysisJob.cxx:429 TQHistoMakerAnalysisJob.cxx:430 TQHistoMakerAnalysisJob.cxx:431 TQHistoMakerAnalysisJob.cxx:432 TQHistoMakerAnalysisJob.cxx:433 TQHistoMakerAnalysisJob.cxx:434 TQHistoMakerAnalysisJob.cxx:435 TQHistoMakerAnalysisJob.cxx:436 TQHistoMakerAnalysisJob.cxx:437 TQHistoMakerAnalysisJob.cxx:438 TQHistoMakerAnalysisJob.cxx:439 TQHistoMakerAnalysisJob.cxx:440 TQHistoMakerAnalysisJob.cxx:441 TQHistoMakerAnalysisJob.cxx:442 TQHistoMakerAnalysisJob.cxx:443 TQHistoMakerAnalysisJob.cxx:444 TQHistoMakerAnalysisJob.cxx:445 TQHistoMakerAnalysisJob.cxx:446 TQHistoMakerAnalysisJob.cxx:447 TQHistoMakerAnalysisJob.cxx:448 TQHistoMakerAnalysisJob.cxx:449 TQHistoMakerAnalysisJob.cxx:450 TQHistoMakerAnalysisJob.cxx:451 TQHistoMakerAnalysisJob.cxx:452 TQHistoMakerAnalysisJob.cxx:453 TQHistoMakerAnalysisJob.cxx:454 TQHistoMakerAnalysisJob.cxx:455 TQHistoMakerAnalysisJob.cxx:456 TQHistoMakerAnalysisJob.cxx:457 TQHistoMakerAnalysisJob.cxx:458 TQHistoMakerAnalysisJob.cxx:459 TQHistoMakerAnalysisJob.cxx:460 TQHistoMakerAnalysisJob.cxx:461 TQHistoMakerAnalysisJob.cxx:462 TQHistoMakerAnalysisJob.cxx:463 TQHistoMakerAnalysisJob.cxx:464 TQHistoMakerAnalysisJob.cxx:465 TQHistoMakerAnalysisJob.cxx:466 TQHistoMakerAnalysisJob.cxx:467 TQHistoMakerAnalysisJob.cxx:468 TQHistoMakerAnalysisJob.cxx:469 TQHistoMakerAnalysisJob.cxx:470 TQHistoMakerAnalysisJob.cxx:471 TQHistoMakerAnalysisJob.cxx:472 TQHistoMakerAnalysisJob.cxx:473 TQHistoMakerAnalysisJob.cxx:474 TQHistoMakerAnalysisJob.cxx:475 TQHistoMakerAnalysisJob.cxx:476 TQHistoMakerAnalysisJob.cxx:477 TQHistoMakerAnalysisJob.cxx:478 TQHistoMakerAnalysisJob.cxx:479 TQHistoMakerAnalysisJob.cxx:480 TQHistoMakerAnalysisJob.cxx:481 TQHistoMakerAnalysisJob.cxx:482 TQHistoMakerAnalysisJob.cxx:483 TQHistoMakerAnalysisJob.cxx:484 TQHistoMakerAnalysisJob.cxx:485 TQHistoMakerAnalysisJob.cxx:486 TQHistoMakerAnalysisJob.cxx:487 TQHistoMakerAnalysisJob.cxx:488 TQHistoMakerAnalysisJob.cxx:489 TQHistoMakerAnalysisJob.cxx:490 TQHistoMakerAnalysisJob.cxx:491 TQHistoMakerAnalysisJob.cxx:492 TQHistoMakerAnalysisJob.cxx:493 TQHistoMakerAnalysisJob.cxx:494 TQHistoMakerAnalysisJob.cxx:495 TQHistoMakerAnalysisJob.cxx:496 TQHistoMakerAnalysisJob.cxx:497 TQHistoMakerAnalysisJob.cxx:498 TQHistoMakerAnalysisJob.cxx:499 TQHistoMakerAnalysisJob.cxx:500 TQHistoMakerAnalysisJob.cxx:501 TQHistoMakerAnalysisJob.cxx:502 TQHistoMakerAnalysisJob.cxx:503 TQHistoMakerAnalysisJob.cxx:504 TQHistoMakerAnalysisJob.cxx:505 TQHistoMakerAnalysisJob.cxx:506 TQHistoMakerAnalysisJob.cxx:507 TQHistoMakerAnalysisJob.cxx:508 TQHistoMakerAnalysisJob.cxx:509 TQHistoMakerAnalysisJob.cxx:510 TQHistoMakerAnalysisJob.cxx:511 TQHistoMakerAnalysisJob.cxx:512 TQHistoMakerAnalysisJob.cxx:513 TQHistoMakerAnalysisJob.cxx:514 TQHistoMakerAnalysisJob.cxx:515 TQHistoMakerAnalysisJob.cxx:516 TQHistoMakerAnalysisJob.cxx:517 TQHistoMakerAnalysisJob.cxx:518 TQHistoMakerAnalysisJob.cxx:519 TQHistoMakerAnalysisJob.cxx:520 TQHistoMakerAnalysisJob.cxx:521 TQHistoMakerAnalysisJob.cxx:522 TQHistoMakerAnalysisJob.cxx:523 TQHistoMakerAnalysisJob.cxx:524 TQHistoMakerAnalysisJob.cxx:525 TQHistoMakerAnalysisJob.cxx:526 TQHistoMakerAnalysisJob.cxx:527 TQHistoMakerAnalysisJob.cxx:528 TQHistoMakerAnalysisJob.cxx:529 TQHistoMakerAnalysisJob.cxx:530 TQHistoMakerAnalysisJob.cxx:531 TQHistoMakerAnalysisJob.cxx:532 TQHistoMakerAnalysisJob.cxx:533 TQHistoMakerAnalysisJob.cxx:534 TQHistoMakerAnalysisJob.cxx:535 TQHistoMakerAnalysisJob.cxx:536 TQHistoMakerAnalysisJob.cxx:537 TQHistoMakerAnalysisJob.cxx:538 TQHistoMakerAnalysisJob.cxx:539 TQHistoMakerAnalysisJob.cxx:540 TQHistoMakerAnalysisJob.cxx:541 TQHistoMakerAnalysisJob.cxx:542 TQHistoMakerAnalysisJob.cxx:543 TQHistoMakerAnalysisJob.cxx:544 TQHistoMakerAnalysisJob.cxx:545 TQHistoMakerAnalysisJob.cxx:546 TQHistoMakerAnalysisJob.cxx:547 TQHistoMakerAnalysisJob.cxx:548 TQHistoMakerAnalysisJob.cxx:549 TQHistoMakerAnalysisJob.cxx:550 TQHistoMakerAnalysisJob.cxx:551 TQHistoMakerAnalysisJob.cxx:552 TQHistoMakerAnalysisJob.cxx:553 TQHistoMakerAnalysisJob.cxx:554 TQHistoMakerAnalysisJob.cxx:555 TQHistoMakerAnalysisJob.cxx:556 TQHistoMakerAnalysisJob.cxx:557 TQHistoMakerAnalysisJob.cxx:558 TQHistoMakerAnalysisJob.cxx:559 TQHistoMakerAnalysisJob.cxx:560 TQHistoMakerAnalysisJob.cxx:561 TQHistoMakerAnalysisJob.cxx:562 TQHistoMakerAnalysisJob.cxx:563 TQHistoMakerAnalysisJob.cxx:564 TQHistoMakerAnalysisJob.cxx:565 TQHistoMakerAnalysisJob.cxx:566 TQHistoMakerAnalysisJob.cxx:567 TQHistoMakerAnalysisJob.cxx:568 TQHistoMakerAnalysisJob.cxx:569 TQHistoMakerAnalysisJob.cxx:570 TQHistoMakerAnalysisJob.cxx:571 TQHistoMakerAnalysisJob.cxx:572 TQHistoMakerAnalysisJob.cxx:573 TQHistoMakerAnalysisJob.cxx:574 TQHistoMakerAnalysisJob.cxx:575 TQHistoMakerAnalysisJob.cxx:576 TQHistoMakerAnalysisJob.cxx:577 TQHistoMakerAnalysisJob.cxx:578 TQHistoMakerAnalysisJob.cxx:579 TQHistoMakerAnalysisJob.cxx:580 TQHistoMakerAnalysisJob.cxx:581 TQHistoMakerAnalysisJob.cxx:582 TQHistoMakerAnalysisJob.cxx:583 TQHistoMakerAnalysisJob.cxx:584 TQHistoMakerAnalysisJob.cxx:585 TQHistoMakerAnalysisJob.cxx:586 TQHistoMakerAnalysisJob.cxx:587 TQHistoMakerAnalysisJob.cxx:588 TQHistoMakerAnalysisJob.cxx:589 TQHistoMakerAnalysisJob.cxx:590 TQHistoMakerAnalysisJob.cxx:591 TQHistoMakerAnalysisJob.cxx:592 TQHistoMakerAnalysisJob.cxx:593 TQHistoMakerAnalysisJob.cxx:594 TQHistoMakerAnalysisJob.cxx:595 TQHistoMakerAnalysisJob.cxx:596 TQHistoMakerAnalysisJob.cxx:597 TQHistoMakerAnalysisJob.cxx:598 TQHistoMakerAnalysisJob.cxx:599 TQHistoMakerAnalysisJob.cxx:600 TQHistoMakerAnalysisJob.cxx:601 TQHistoMakerAnalysisJob.cxx:602 TQHistoMakerAnalysisJob.cxx:603 TQHistoMakerAnalysisJob.cxx:604 TQHistoMakerAnalysisJob.cxx:605 TQHistoMakerAnalysisJob.cxx:606 TQHistoMakerAnalysisJob.cxx:607 TQHistoMakerAnalysisJob.cxx:608 TQHistoMakerAnalysisJob.cxx:609 TQHistoMakerAnalysisJob.cxx:610 TQHistoMakerAnalysisJob.cxx:611 TQHistoMakerAnalysisJob.cxx:612 TQHistoMakerAnalysisJob.cxx:613 TQHistoMakerAnalysisJob.cxx:614 TQHistoMakerAnalysisJob.cxx:615 TQHistoMakerAnalysisJob.cxx:616 TQHistoMakerAnalysisJob.cxx:617 TQHistoMakerAnalysisJob.cxx:618 TQHistoMakerAnalysisJob.cxx:619 TQHistoMakerAnalysisJob.cxx:620 TQHistoMakerAnalysisJob.cxx:621 TQHistoMakerAnalysisJob.cxx:622 TQHistoMakerAnalysisJob.cxx:623 TQHistoMakerAnalysisJob.cxx:624 TQHistoMakerAnalysisJob.cxx:625 TQHistoMakerAnalysisJob.cxx:626 TQHistoMakerAnalysisJob.cxx:627 TQHistoMakerAnalysisJob.cxx:628 TQHistoMakerAnalysisJob.cxx:629 TQHistoMakerAnalysisJob.cxx:630 TQHistoMakerAnalysisJob.cxx:631 TQHistoMakerAnalysisJob.cxx:632 TQHistoMakerAnalysisJob.cxx:633 TQHistoMakerAnalysisJob.cxx:634 TQHistoMakerAnalysisJob.cxx:635 TQHistoMakerAnalysisJob.cxx:636 TQHistoMakerAnalysisJob.cxx:637 TQHistoMakerAnalysisJob.cxx:638 TQHistoMakerAnalysisJob.cxx:639 TQHistoMakerAnalysisJob.cxx:640 TQHistoMakerAnalysisJob.cxx:641 TQHistoMakerAnalysisJob.cxx:642 TQHistoMakerAnalysisJob.cxx:643 TQHistoMakerAnalysisJob.cxx:644 TQHistoMakerAnalysisJob.cxx:645 TQHistoMakerAnalysisJob.cxx:646 TQHistoMakerAnalysisJob.cxx:647 TQHistoMakerAnalysisJob.cxx:648 TQHistoMakerAnalysisJob.cxx:649 TQHistoMakerAnalysisJob.cxx:650 TQHistoMakerAnalysisJob.cxx:651 TQHistoMakerAnalysisJob.cxx:652 TQHistoMakerAnalysisJob.cxx:653 TQHistoMakerAnalysisJob.cxx:654 TQHistoMakerAnalysisJob.cxx:655 TQHistoMakerAnalysisJob.cxx:656 TQHistoMakerAnalysisJob.cxx:657 TQHistoMakerAnalysisJob.cxx:658 TQHistoMakerAnalysisJob.cxx:659 TQHistoMakerAnalysisJob.cxx:660 TQHistoMakerAnalysisJob.cxx:661 TQHistoMakerAnalysisJob.cxx:662 TQHistoMakerAnalysisJob.cxx:663 TQHistoMakerAnalysisJob.cxx:664 TQHistoMakerAnalysisJob.cxx:665 TQHistoMakerAnalysisJob.cxx:666 TQHistoMakerAnalysisJob.cxx:667 TQHistoMakerAnalysisJob.cxx:668 TQHistoMakerAnalysisJob.cxx:669 TQHistoMakerAnalysisJob.cxx:670 TQHistoMakerAnalysisJob.cxx:671 TQHistoMakerAnalysisJob.cxx:672 TQHistoMakerAnalysisJob.cxx:673 TQHistoMakerAnalysisJob.cxx:674 TQHistoMakerAnalysisJob.cxx:675 TQHistoMakerAnalysisJob.cxx:676 TQHistoMakerAnalysisJob.cxx:677 TQHistoMakerAnalysisJob.cxx:678 TQHistoMakerAnalysisJob.cxx:679 TQHistoMakerAnalysisJob.cxx:680 TQHistoMakerAnalysisJob.cxx:681 TQHistoMakerAnalysisJob.cxx:682 TQHistoMakerAnalysisJob.cxx:683 TQHistoMakerAnalysisJob.cxx:684 TQHistoMakerAnalysisJob.cxx:685 TQHistoMakerAnalysisJob.cxx:686 TQHistoMakerAnalysisJob.cxx:687 TQHistoMakerAnalysisJob.cxx:688 TQHistoMakerAnalysisJob.cxx:689 TQHistoMakerAnalysisJob.cxx:690 TQHistoMakerAnalysisJob.cxx:691 TQHistoMakerAnalysisJob.cxx:692 TQHistoMakerAnalysisJob.cxx:693 TQHistoMakerAnalysisJob.cxx:694 TQHistoMakerAnalysisJob.cxx:695 TQHistoMakerAnalysisJob.cxx:696 TQHistoMakerAnalysisJob.cxx:697 TQHistoMakerAnalysisJob.cxx:698 TQHistoMakerAnalysisJob.cxx:699 TQHistoMakerAnalysisJob.cxx:700 TQHistoMakerAnalysisJob.cxx:701 TQHistoMakerAnalysisJob.cxx:702 TQHistoMakerAnalysisJob.cxx:703 TQHistoMakerAnalysisJob.cxx:704 TQHistoMakerAnalysisJob.cxx:705 TQHistoMakerAnalysisJob.cxx:706 TQHistoMakerAnalysisJob.cxx:707 TQHistoMakerAnalysisJob.cxx:708 TQHistoMakerAnalysisJob.cxx:709 TQHistoMakerAnalysisJob.cxx:710 TQHistoMakerAnalysisJob.cxx:711 TQHistoMakerAnalysisJob.cxx:712 TQHistoMakerAnalysisJob.cxx:713 TQHistoMakerAnalysisJob.cxx:714 TQHistoMakerAnalysisJob.cxx:715 TQHistoMakerAnalysisJob.cxx:716 TQHistoMakerAnalysisJob.cxx:717 TQHistoMakerAnalysisJob.cxx:718 TQHistoMakerAnalysisJob.cxx:719 TQHistoMakerAnalysisJob.cxx:720 TQHistoMakerAnalysisJob.cxx:721 TQHistoMakerAnalysisJob.cxx:722 TQHistoMakerAnalysisJob.cxx:723 TQHistoMakerAnalysisJob.cxx:724 TQHistoMakerAnalysisJob.cxx:725 TQHistoMakerAnalysisJob.cxx:726 TQHistoMakerAnalysisJob.cxx:727 TQHistoMakerAnalysisJob.cxx:728 TQHistoMakerAnalysisJob.cxx:729 TQHistoMakerAnalysisJob.cxx:730 TQHistoMakerAnalysisJob.cxx:731 TQHistoMakerAnalysisJob.cxx:732 TQHistoMakerAnalysisJob.cxx:733 TQHistoMakerAnalysisJob.cxx:734 TQHistoMakerAnalysisJob.cxx:735 TQHistoMakerAnalysisJob.cxx:736 TQHistoMakerAnalysisJob.cxx:737 TQHistoMakerAnalysisJob.cxx:738 TQHistoMakerAnalysisJob.cxx:739 TQHistoMakerAnalysisJob.cxx:740 TQHistoMakerAnalysisJob.cxx:741 TQHistoMakerAnalysisJob.cxx:742 TQHistoMakerAnalysisJob.cxx:743 TQHistoMakerAnalysisJob.cxx:744 TQHistoMakerAnalysisJob.cxx:745 TQHistoMakerAnalysisJob.cxx:746 TQHistoMakerAnalysisJob.cxx:747 TQHistoMakerAnalysisJob.cxx:748 TQHistoMakerAnalysisJob.cxx:749 TQHistoMakerAnalysisJob.cxx:750 TQHistoMakerAnalysisJob.cxx:751 TQHistoMakerAnalysisJob.cxx:752 TQHistoMakerAnalysisJob.cxx:753 TQHistoMakerAnalysisJob.cxx:754 TQHistoMakerAnalysisJob.cxx:755 TQHistoMakerAnalysisJob.cxx:756 TQHistoMakerAnalysisJob.cxx:757 TQHistoMakerAnalysisJob.cxx:758 TQHistoMakerAnalysisJob.cxx:759 TQHistoMakerAnalysisJob.cxx:760 TQHistoMakerAnalysisJob.cxx:761 TQHistoMakerAnalysisJob.cxx:762 TQHistoMakerAnalysisJob.cxx:763 TQHistoMakerAnalysisJob.cxx:764 TQHistoMakerAnalysisJob.cxx:765 TQHistoMakerAnalysisJob.cxx:766 TQHistoMakerAnalysisJob.cxx:767 TQHistoMakerAnalysisJob.cxx:768 TQHistoMakerAnalysisJob.cxx:769 TQHistoMakerAnalysisJob.cxx:770 TQHistoMakerAnalysisJob.cxx:771 TQHistoMakerAnalysisJob.cxx:772 TQHistoMakerAnalysisJob.cxx:773 TQHistoMakerAnalysisJob.cxx:774 TQHistoMakerAnalysisJob.cxx:775 TQHistoMakerAnalysisJob.cxx:776 TQHistoMakerAnalysisJob.cxx:777 TQHistoMakerAnalysisJob.cxx:778 TQHistoMakerAnalysisJob.cxx:779 TQHistoMakerAnalysisJob.cxx:780 TQHistoMakerAnalysisJob.cxx:781 TQHistoMakerAnalysisJob.cxx:782 TQHistoMakerAnalysisJob.cxx:783 TQHistoMakerAnalysisJob.cxx:784 TQHistoMakerAnalysisJob.cxx:785 TQHistoMakerAnalysisJob.cxx:786 TQHistoMakerAnalysisJob.cxx:787 TQHistoMakerAnalysisJob.cxx:788 TQHistoMakerAnalysisJob.cxx:789 TQHistoMakerAnalysisJob.cxx:790 TQHistoMakerAnalysisJob.cxx:791 TQHistoMakerAnalysisJob.cxx:792 TQHistoMakerAnalysisJob.cxx:793 TQHistoMakerAnalysisJob.cxx:794 TQHistoMakerAnalysisJob.cxx:795 TQHistoMakerAnalysisJob.cxx:796 TQHistoMakerAnalysisJob.cxx:797 TQHistoMakerAnalysisJob.cxx:798 TQHistoMakerAnalysisJob.cxx:799 TQHistoMakerAnalysisJob.cxx:800 TQHistoMakerAnalysisJob.cxx:801 TQHistoMakerAnalysisJob.cxx:802 TQHistoMakerAnalysisJob.cxx:803 TQHistoMakerAnalysisJob.cxx:804 TQHistoMakerAnalysisJob.cxx:805 TQHistoMakerAnalysisJob.cxx:806 TQHistoMakerAnalysisJob.cxx:807 TQHistoMakerAnalysisJob.cxx:808 TQHistoMakerAnalysisJob.cxx:809 TQHistoMakerAnalysisJob.cxx:810 TQHistoMakerAnalysisJob.cxx:811 TQHistoMakerAnalysisJob.cxx:812 TQHistoMakerAnalysisJob.cxx:813 TQHistoMakerAnalysisJob.cxx:814 TQHistoMakerAnalysisJob.cxx:815 TQHistoMakerAnalysisJob.cxx:816 TQHistoMakerAnalysisJob.cxx:817 TQHistoMakerAnalysisJob.cxx:818 TQHistoMakerAnalysisJob.cxx:819 TQHistoMakerAnalysisJob.cxx:820 TQHistoMakerAnalysisJob.cxx:821 TQHistoMakerAnalysisJob.cxx:822 TQHistoMakerAnalysisJob.cxx:823 TQHistoMakerAnalysisJob.cxx:824 TQHistoMakerAnalysisJob.cxx:825 TQHistoMakerAnalysisJob.cxx:826 TQHistoMakerAnalysisJob.cxx:827 TQHistoMakerAnalysisJob.cxx:828 TQHistoMakerAnalysisJob.cxx:829 TQHistoMakerAnalysisJob.cxx:830 TQHistoMakerAnalysisJob.cxx:831 TQHistoMakerAnalysisJob.cxx:832 TQHistoMakerAnalysisJob.cxx:833 TQHistoMakerAnalysisJob.cxx:834 TQHistoMakerAnalysisJob.cxx:835 TQHistoMakerAnalysisJob.cxx:836 TQHistoMakerAnalysisJob.cxx:837 TQHistoMakerAnalysisJob.cxx:838 TQHistoMakerAnalysisJob.cxx:839 TQHistoMakerAnalysisJob.cxx:840 TQHistoMakerAnalysisJob.cxx:841 TQHistoMakerAnalysisJob.cxx:842 TQHistoMakerAnalysisJob.cxx:843 TQHistoMakerAnalysisJob.cxx:844 TQHistoMakerAnalysisJob.cxx:845 TQHistoMakerAnalysisJob.cxx:846 TQHistoMakerAnalysisJob.cxx:847 TQHistoMakerAnalysisJob.cxx:848 TQHistoMakerAnalysisJob.cxx:849 TQHistoMakerAnalysisJob.cxx:850 TQHistoMakerAnalysisJob.cxx:851 TQHistoMakerAnalysisJob.cxx:852 TQHistoMakerAnalysisJob.cxx:853 TQHistoMakerAnalysisJob.cxx:854 TQHistoMakerAnalysisJob.cxx:855 TQHistoMakerAnalysisJob.cxx:856 TQHistoMakerAnalysisJob.cxx:857 TQHistoMakerAnalysisJob.cxx:858 TQHistoMakerAnalysisJob.cxx:859 TQHistoMakerAnalysisJob.cxx:860 TQHistoMakerAnalysisJob.cxx:861 TQHistoMakerAnalysisJob.cxx:862 TQHistoMakerAnalysisJob.cxx:863 TQHistoMakerAnalysisJob.cxx:864 TQHistoMakerAnalysisJob.cxx:865 TQHistoMakerAnalysisJob.cxx:866 TQHistoMakerAnalysisJob.cxx:867 TQHistoMakerAnalysisJob.cxx:868 TQHistoMakerAnalysisJob.cxx:869 TQHistoMakerAnalysisJob.cxx:870 TQHistoMakerAnalysisJob.cxx:871 TQHistoMakerAnalysisJob.cxx:872 TQHistoMakerAnalysisJob.cxx:873 TQHistoMakerAnalysisJob.cxx:874 TQHistoMakerAnalysisJob.cxx:875 TQHistoMakerAnalysisJob.cxx:876 TQHistoMakerAnalysisJob.cxx:877 TQHistoMakerAnalysisJob.cxx:878 TQHistoMakerAnalysisJob.cxx:879 TQHistoMakerAnalysisJob.cxx:880 TQHistoMakerAnalysisJob.cxx:881 TQHistoMakerAnalysisJob.cxx:882 TQHistoMakerAnalysisJob.cxx:883 TQHistoMakerAnalysisJob.cxx:884 TQHistoMakerAnalysisJob.cxx:885 TQHistoMakerAnalysisJob.cxx:886 TQHistoMakerAnalysisJob.cxx:887 TQHistoMakerAnalysisJob.cxx:888 TQHistoMakerAnalysisJob.cxx:889 TQHistoMakerAnalysisJob.cxx:890 TQHistoMakerAnalysisJob.cxx:891 TQHistoMakerAnalysisJob.cxx:892 TQHistoMakerAnalysisJob.cxx:893 TQHistoMakerAnalysisJob.cxx:894 TQHistoMakerAnalysisJob.cxx:895 TQHistoMakerAnalysisJob.cxx:896 TQHistoMakerAnalysisJob.cxx:897 TQHistoMakerAnalysisJob.cxx:898 TQHistoMakerAnalysisJob.cxx:899 TQHistoMakerAnalysisJob.cxx:900 TQHistoMakerAnalysisJob.cxx:901 TQHistoMakerAnalysisJob.cxx:902 TQHistoMakerAnalysisJob.cxx:903 TQHistoMakerAnalysisJob.cxx:904 TQHistoMakerAnalysisJob.cxx:905 TQHistoMakerAnalysisJob.cxx:906 TQHistoMakerAnalysisJob.cxx:907 TQHistoMakerAnalysisJob.cxx:908 TQHistoMakerAnalysisJob.cxx:909 TQHistoMakerAnalysisJob.cxx:910 TQHistoMakerAnalysisJob.cxx:911 TQHistoMakerAnalysisJob.cxx:912 TQHistoMakerAnalysisJob.cxx:913 TQHistoMakerAnalysisJob.cxx:914 TQHistoMakerAnalysisJob.cxx:915 TQHistoMakerAnalysisJob.cxx:916 TQHistoMakerAnalysisJob.cxx:917 TQHistoMakerAnalysisJob.cxx:918 TQHistoMakerAnalysisJob.cxx:919 TQHistoMakerAnalysisJob.cxx:920 TQHistoMakerAnalysisJob.cxx:921 TQHistoMakerAnalysisJob.cxx:922 TQHistoMakerAnalysisJob.cxx:923 TQHistoMakerAnalysisJob.cxx:924 TQHistoMakerAnalysisJob.cxx:925 TQHistoMakerAnalysisJob.cxx:926 TQHistoMakerAnalysisJob.cxx:927 TQHistoMakerAnalysisJob.cxx:928 TQHistoMakerAnalysisJob.cxx:929 TQHistoMakerAnalysisJob.cxx:930 TQHistoMakerAnalysisJob.cxx:931 TQHistoMakerAnalysisJob.cxx:932 TQHistoMakerAnalysisJob.cxx:933 TQHistoMakerAnalysisJob.cxx:934 TQHistoMakerAnalysisJob.cxx:935 TQHistoMakerAnalysisJob.cxx:936 TQHistoMakerAnalysisJob.cxx:937 TQHistoMakerAnalysisJob.cxx:938 TQHistoMakerAnalysisJob.cxx:939 TQHistoMakerAnalysisJob.cxx:940 TQHistoMakerAnalysisJob.cxx:941 TQHistoMakerAnalysisJob.cxx:942 TQHistoMakerAnalysisJob.cxx:943 TQHistoMakerAnalysisJob.cxx:944 TQHistoMakerAnalysisJob.cxx:945 TQHistoMakerAnalysisJob.cxx:946 TQHistoMakerAnalysisJob.cxx:947 TQHistoMakerAnalysisJob.cxx:948 TQHistoMakerAnalysisJob.cxx:949 TQHistoMakerAnalysisJob.cxx:950 TQHistoMakerAnalysisJob.cxx:951 TQHistoMakerAnalysisJob.cxx:952 TQHistoMakerAnalysisJob.cxx:953 TQHistoMakerAnalysisJob.cxx:954 TQHistoMakerAnalysisJob.cxx:955 TQHistoMakerAnalysisJob.cxx:956 TQHistoMakerAnalysisJob.cxx:957 TQHistoMakerAnalysisJob.cxx:958 TQHistoMakerAnalysisJob.cxx:959 TQHistoMakerAnalysisJob.cxx:960 TQHistoMakerAnalysisJob.cxx:961 TQHistoMakerAnalysisJob.cxx:962 TQHistoMakerAnalysisJob.cxx:963 TQHistoMakerAnalysisJob.cxx:964 TQHistoMakerAnalysisJob.cxx:965 TQHistoMakerAnalysisJob.cxx:966 TQHistoMakerAnalysisJob.cxx:967 TQHistoMakerAnalysisJob.cxx:968 TQHistoMakerAnalysisJob.cxx:969 TQHistoMakerAnalysisJob.cxx:970 TQHistoMakerAnalysisJob.cxx:971 TQHistoMakerAnalysisJob.cxx:972 TQHistoMakerAnalysisJob.cxx:973 TQHistoMakerAnalysisJob.cxx:974 TQHistoMakerAnalysisJob.cxx:975 TQHistoMakerAnalysisJob.cxx:976 TQHistoMakerAnalysisJob.cxx:977 TQHistoMakerAnalysisJob.cxx:978 TQHistoMakerAnalysisJob.cxx:979 TQHistoMakerAnalysisJob.cxx:980 TQHistoMakerAnalysisJob.cxx:981 TQHistoMakerAnalysisJob.cxx:982 TQHistoMakerAnalysisJob.cxx:983 TQHistoMakerAnalysisJob.cxx:984 TQHistoMakerAnalysisJob.cxx:985 TQHistoMakerAnalysisJob.cxx:986 TQHistoMakerAnalysisJob.cxx:987 TQHistoMakerAnalysisJob.cxx:988 TQHistoMakerAnalysisJob.cxx:989 TQHistoMakerAnalysisJob.cxx:990 TQHistoMakerAnalysisJob.cxx:991 TQHistoMakerAnalysisJob.cxx:992 TQHistoMakerAnalysisJob.cxx:993 TQHistoMakerAnalysisJob.cxx:994 TQHistoMakerAnalysisJob.cxx:995 TQHistoMakerAnalysisJob.cxx:996 TQHistoMakerAnalysisJob.cxx:997 TQHistoMakerAnalysisJob.cxx:998 TQHistoMakerAnalysisJob.cxx:999 TQHistoMakerAnalysisJob.cxx:1000 TQHistoMakerAnalysisJob.cxx:1001 TQHistoMakerAnalysisJob.cxx:1002 TQHistoMakerAnalysisJob.cxx:1003 TQHistoMakerAnalysisJob.cxx:1004 TQHistoMakerAnalysisJob.cxx:1005 TQHistoMakerAnalysisJob.cxx:1006 TQHistoMakerAnalysisJob.cxx:1007 TQHistoMakerAnalysisJob.cxx:1008 TQHistoMakerAnalysisJob.cxx:1009 TQHistoMakerAnalysisJob.cxx:1010 TQHistoMakerAnalysisJob.cxx:1011 TQHistoMakerAnalysisJob.cxx:1012 TQHistoMakerAnalysisJob.cxx:1013 TQHistoMakerAnalysisJob.cxx:1014 TQHistoMakerAnalysisJob.cxx:1015 TQHistoMakerAnalysisJob.cxx:1016 TQHistoMakerAnalysisJob.cxx:1017 TQHistoMakerAnalysisJob.cxx:1018 TQHistoMakerAnalysisJob.cxx:1019 TQHistoMakerAnalysisJob.cxx:1020 TQHistoMakerAnalysisJob.cxx:1021 TQHistoMakerAnalysisJob.cxx:1022 TQHistoMakerAnalysisJob.cxx:1023 TQHistoMakerAnalysisJob.cxx:1024 TQHistoMakerAnalysisJob.cxx:1025 TQHistoMakerAnalysisJob.cxx:1026 TQHistoMakerAnalysisJob.cxx:1027 TQHistoMakerAnalysisJob.cxx:1028 TQHistoMakerAnalysisJob.cxx:1029 TQHistoMakerAnalysisJob.cxx:1030 TQHistoMakerAnalysisJob.cxx:1031 TQHistoMakerAnalysisJob.cxx:1032 TQHistoMakerAnalysisJob.cxx:1033 TQHistoMakerAnalysisJob.cxx:1034 TQHistoMakerAnalysisJob.cxx:1035 TQHistoMakerAnalysisJob.cxx:1036 TQHistoMakerAnalysisJob.cxx:1037 TQHistoMakerAnalysisJob.cxx:1038 TQHistoMakerAnalysisJob.cxx:1039 TQHistoMakerAnalysisJob.cxx:1040 TQHistoMakerAnalysisJob.cxx:1041 TQHistoMakerAnalysisJob.cxx:1042 TQHistoMakerAnalysisJob.cxx:1043 TQHistoMakerAnalysisJob.cxx:1044 TQHistoMakerAnalysisJob.cxx:1045 TQHistoMakerAnalysisJob.cxx:1046 TQHistoMakerAnalysisJob.cxx:1047 TQHistoMakerAnalysisJob.cxx:1048 TQHistoMakerAnalysisJob.cxx:1049 TQHistoMakerAnalysisJob.cxx:1050 TQHistoMakerAnalysisJob.cxx:1051 TQHistoMakerAnalysisJob.cxx:1052 TQHistoMakerAnalysisJob.cxx:1053 TQHistoMakerAnalysisJob.cxx:1054 TQHistoMakerAnalysisJob.cxx:1055 TQHistoMakerAnalysisJob.cxx:1056 TQHistoMakerAnalysisJob.cxx:1057 TQHistoMakerAnalysisJob.cxx:1058 TQHistoMakerAnalysisJob.cxx:1059 TQHistoMakerAnalysisJob.cxx:1060 TQHistoMakerAnalysisJob.cxx:1061 TQHistoMakerAnalysisJob.cxx:1062 TQHistoMakerAnalysisJob.cxx:1063 TQHistoMakerAnalysisJob.cxx:1064 TQHistoMakerAnalysisJob.cxx:1065 TQHistoMakerAnalysisJob.cxx:1066 TQHistoMakerAnalysisJob.cxx:1067 TQHistoMakerAnalysisJob.cxx:1068 TQHistoMakerAnalysisJob.cxx:1069 TQHistoMakerAnalysisJob.cxx:1070 TQHistoMakerAnalysisJob.cxx:1071 TQHistoMakerAnalysisJob.cxx:1072 TQHistoMakerAnalysisJob.cxx:1073 TQHistoMakerAnalysisJob.cxx:1074 TQHistoMakerAnalysisJob.cxx:1075 TQHistoMakerAnalysisJob.cxx:1076 TQHistoMakerAnalysisJob.cxx:1077 TQHistoMakerAnalysisJob.cxx:1078 TQHistoMakerAnalysisJob.cxx:1079 TQHistoMakerAnalysisJob.cxx:1080 TQHistoMakerAnalysisJob.cxx:1081 TQHistoMakerAnalysisJob.cxx:1082 TQHistoMakerAnalysisJob.cxx:1083 TQHistoMakerAnalysisJob.cxx:1084 TQHistoMakerAnalysisJob.cxx:1085 TQHistoMakerAnalysisJob.cxx:1086 TQHistoMakerAnalysisJob.cxx:1087 TQHistoMakerAnalysisJob.cxx:1088 TQHistoMakerAnalysisJob.cxx:1089 TQHistoMakerAnalysisJob.cxx:1090 TQHistoMakerAnalysisJob.cxx:1091 TQHistoMakerAnalysisJob.cxx:1092 TQHistoMakerAnalysisJob.cxx:1093 TQHistoMakerAnalysisJob.cxx:1094 TQHistoMakerAnalysisJob.cxx:1095 TQHistoMakerAnalysisJob.cxx:1096 TQHistoMakerAnalysisJob.cxx:1097 TQHistoMakerAnalysisJob.cxx:1098 TQHistoMakerAnalysisJob.cxx:1099 TQHistoMakerAnalysisJob.cxx:1100 TQHistoMakerAnalysisJob.cxx:1101 TQHistoMakerAnalysisJob.cxx:1102 TQHistoMakerAnalysisJob.cxx:1103 TQHistoMakerAnalysisJob.cxx:1104 TQHistoMakerAnalysisJob.cxx:1105 TQHistoMakerAnalysisJob.cxx:1106 TQHistoMakerAnalysisJob.cxx:1107 TQHistoMakerAnalysisJob.cxx:1108 TQHistoMakerAnalysisJob.cxx:1109 TQHistoMakerAnalysisJob.cxx:1110 TQHistoMakerAnalysisJob.cxx:1111 TQHistoMakerAnalysisJob.cxx:1112 TQHistoMakerAnalysisJob.cxx:1113 TQHistoMakerAnalysisJob.cxx:1114 TQHistoMakerAnalysisJob.cxx:1115 TQHistoMakerAnalysisJob.cxx:1116 TQHistoMakerAnalysisJob.cxx:1117 TQHistoMakerAnalysisJob.cxx:1118 TQHistoMakerAnalysisJob.cxx:1119