#include "TPDF.h"
#include "TGraphAsymmErrors.h"
#include "TLegend.h"
#include "TMath.h"
#include "TMatrixD.h"
#include "TGraph.h"
#include "TGraph2D.h"
#include "TMultiGraph.h"
#include "TH1.h"
#include "TStyle.h"
#include "TCanvas.h"
#include "TH1F.h"
#include "TH1D.h"
#include "TH2.h"
#include "TLine.h"
#include "THStack.h"
#include "TPrincipal.h"
#include "TProfile.h"
#include "TProfile2D.h"
#include "TH2F.h"
#include "TH2D.h"
#include "TH3.h"
#include "THashList.h"
#include "TH3F.h"
#include "TH3D.h"
#include "TROOT.h"
#include "TFile.h"
#include "TLatex.h"
#include "TRandom3.h"
#include "QFramework/TQHistogramUtils.h"
#include "QFramework/TQStringUtils.h"
#include "QFramework/TQTaggable.h"
#include "QFramework/TQCounter.h"
#include "QFramework/TQIterator.h"
#include "QFramework/TQUtils.h"
#include "QFramework/TQLibrary.h"
#include <iostream>
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <limits>
#include <stdio.h>
#include <stdarg.h>
#include "Math/Math.h"
#include "Math/QuantFuncMathCore.h"
#include "Math/SpecFuncMathCore.h"
#if ROOT_VERSION_CODE < ROOT_VERSION(6,23,0)
template <typename TAxisTag>
struct TAxisHackResult {
typedef typename TAxisTag::type type;
static type ptr;
};
template <typename TAxisTag>
typename TAxisHackResult<TAxisTag>::type TAxisHackResult<TAxisTag>::ptr;
template<typename TAxisTag, typename TAxisTag::type p>
struct TAxisRob : TAxisHackResult<TAxisTag> {
struct TAxisFiller {
TAxisFiller() {TAxisHackResult<TAxisTag>::ptr = p;}
};
static TAxisFiller taxisfiller_obj;
};
template<typename TAxisTag, typename TAxisTag::type p>
typename TAxisRob<TAxisTag, p>::TAxisFiller TAxisRob<TAxisTag, p>::taxisfiller_obj;
struct TAxisIsAlphanumeric { typedef Bool_t(TAxis::*type)(); };
template class TAxisRob<TAxisIsAlphanumeric, &TAxis::IsAlphanumeric>;
bool TQHistogramUtils::isAlphanumeric(const TAxis* ax){
return ((*const_cast<TAxis*>(ax)).*TAxisHackResult<TAxisIsAlphanumeric>::ptr)();
}
#else
bool TQHistogramUtils::isAlphanumeric(const TAxis* ax){
return ax->IsAlphanumeric();
}
#endif
bool TQHistogramUtils::isEmpty(const TH1 * hist, double threshold, double mean) {
for(int i=1; i<=hist->GetNbinsX(); ++i){
for(int j=1; j<=hist->GetNbinsY(); ++j){
for(int k=1; k<=hist->GetNbinsZ(); ++k){
if(fabs(hist->GetBinContent(i,j,k) - mean) > threshold && fabs(hist->GetBinContent(i,j,k)) > threshold) return false;
}
}
}
return true;
}
TString TQHistogramUtils::getGraphDefinition(const TNamed * graph) {
if (!graph) {
return "";
}
TString title(graph->GetTitle());
for(size_t idx=0; idx<3; idx++){
const TAxis* axis = TQHistogramUtils::getAxis(graph,idx);
if(!axis) break;
TString axtitle = axis->GetTitle();
if (!axtitle.IsNull()) {
TQStringUtils::append(title, axtitle, ";");
}
}
TString def = TString::Format("%s(\"%s\", \"%s\")", graph->IsA()->GetName(), graph->GetName(),graph->GetTitle());
return def;
}
TString TQHistogramUtils::getHistogramDefinition(const TH1 * histo) {
if (!histo) {
return "";
}
TString def = TString::Format("%s(\"%s\", ", histo->IsA()->GetName(), histo->GetName());
TString titleDef = histo->GetTitle();
TString binDef;
int dim = getDimension(histo);
for (int i = 1; i <= abs(dim); ++i) {
const TAxis * axis = NULL;
if (i == 1) {
axis = histo->GetXaxis();
} else if (i == 2) {
axis = histo->GetYaxis();
} else if (i == 3) {
axis = histo->GetZaxis();
}
if (!axis) {
break;
}
TString title(axis->GetTitle());
if (!title.IsNull()) {
TQStringUtils::append(titleDef, title, ";");
}
TQStringUtils::append(binDef, getBinningDefinition(axis), ", ");
const TProfile* p=dynamic_cast<const TProfile*>(histo);
if(p){
TQStringUtils::append(binDef, TString::Format("%g, %g",p->GetYmin(),p->GetYmax()));
}
}
def.Append(TString::Format("\"%s\", ", titleDef.Data()));
def.Append(binDef + ")");
return def;
}
TString TQHistogramUtils::getHistogramContents(const TH1 * histo) {
std::stringstream ss;
ss << histo->GetEntries() << "@{";
for(size_t i=0; i<(size_t)(histo->GetNbinsX())+2; ++i){
if(i!=0) ss << ",";
if(histo->GetNbinsY()>1){
ss << "{";
for(size_t j=0; j<(size_t)(histo->GetNbinsY())+2; ++j){
if(j!=0) ss << ",";
if(histo->GetNbinsZ()>1){
for(size_t k=0; k<(size_t)(histo->GetNbinsZ())+2; ++k){
if(k!=0) ss << ",";
ss << histo->GetBinContent(i,j,k) << "+-"<<histo->GetBinError(i,j,k);
}
ss << "}";
} else {
ss << histo->GetBinContent(i,j) << "+-"<<histo->GetBinError(i,j);
}
}
ss << "}";
} else {
ss << histo->GetBinContent(i) << "+-"<<histo->GetBinError(i);
}
}
ss << "}";
return ss.str();
}
TH1* TQHistogramUtils::convertFromText(TString input){
TString def;
TQStringUtils::readUpToText(input,def,"<<");
TString contents;
TQStringUtils::removeLeading(input,"< ");
TH1* hist = TQHistogramUtils::createHistogram(def);
if(!TQStringUtils::readUpToText(input,contents,"<<")){
if(!TQHistogramUtils::setHistogramContents(hist,input)){
ERROR("unable to read histogram contents!");
}
} else {
TQStringUtils::removeLeading(input,"< ");
if(!TQHistogramUtils::setHistogramContents(hist,contents)){
ERROR("unable to read histogram contents!");
}
TQTaggable tags(input);
TQHistogramUtils::applyStyle(hist,&tags);
}
return hist;
}
TString TQHistogramUtils::convertToText(const TH1 * histo, int detailLevel) {
TString histstr = TQHistogramUtils::getHistogramDefinition(histo);
if(detailLevel > 0){
histstr += " << ";
histstr += TQHistogramUtils::getHistogramContents(histo);
}
if(detailLevel > 1){
histstr += " << ";
TQTaggable tags;
TQHistogramUtils::extractStyle(histo,&tags);
histstr += tags.exportTagsAsString();
}
return histstr;
}
namespace {
inline char* next(std::stringstream& ss, int nchars){
ss.unget();
char* text = (char*)malloc((nchars+1)*sizeof(char));
ss.read(text,nchars);
text[nchars]='\0';
return text;
}
}
namespace {
bool checknan(std::stringstream& ss){
ss.clear();
char c = (char)ss.get();
if(ss.good()){
if(c == 'n' || c == 'a'){
char c2 = (char)ss.get();
if(ss.good() && (c == 'n' && c2 == 'a')){
char c3 = (char)ss.get();
ss.clear();
if(c3 == 'n') return true;
} else if(ss.good() && c == 'a' && c2 == 'n'){
ss.clear();
return true;
}
}
}
ss.clear();
return false;
}
}
bool TQHistogramUtils::setHistogramContents(TH1 * histo, const TString& contents) {
if(contents.IsNull()) return false;
size_t headlen = contents.First("{");
if(headlen > unsigned(contents.Length())){
ERRORfile("missing initial '{'!");
}
size_t bodylen = TQStringUtils::findParenthesisMatch(contents,headlen,"{","}");
if(bodylen > unsigned(contents.Length())){
TString errmsg(contents(0,headlen+5));
ERRORfile("missing terminating character '}' matching '%s' !",errmsg.Data());
}
if(unsigned(contents.First("=")) < bodylen){
int nentries = atoi(contents(0,headlen).Data());
TQTaggable values(contents(headlen+1,bodylen-headlen-1));
if(!TQHistogramUtils::hasBinLabels(histo)){
TQIterator itr(values.getListOfTagNames(),true);
int i = 0;
while(itr.hasNext()){
TObject* key = itr.readNext();
histo->GetXaxis()->SetBinLabel(++i,key->GetName());
}
}
TQIterator itr(values.getListOfTagNames(),true);
while(itr.hasNext()){
TObject* key = itr.readNext();
int bin = histo->GetXaxis()->FindBin(key->GetName());
histo->SetBinContent(bin,values.getTagDoubleDefault(key->GetName(),0));
}
histo->SetEntries(nentries);
} else {
std::stringstream ss(contents.Data());
int nentries;
ss >> nentries;
while(ss.good() && ss.peek() != '{'){
ss.get();
}
if(!ss.good() || ss.get() != '{'){
ERRORfunc("ill-formatted string '%s'",TString(contents(0,10)).Data());
return false;
}
double val, err;
for(size_t i=0; i<(size_t)(histo->GetNbinsX())+2 && ss.good(); ++i){
if(histo->GetNbinsY() > 1){
if(ss.get() != '{'){
ERRORfile("missing opening brace at '%s'!",next(ss,10));
return false;
}
for(size_t j=0; j<(size_t)(histo->GetNbinsY())+2 && ss.good(); ++j){
if(histo->GetNbinsZ() > 1){
if(ss.get() != '{'){
ERRORfile("missing opening brace at '%s'!",next(ss,10));
return false;
}
for(size_t k=0; k<(size_t)(histo->GetNbinsZ())+2 && ss.good(); ++k){
ss >> val;
if(!ss.good()){
if(::checknan(ss)){
val = std::numeric_limits<double>::quiet_NaN();
} else {
ERRORfile("stream ended after reading '%g' at '%d'/'%d'/'%d'",val,i,j,k);
return false;
}
}
if(ss.get() != '+'){
ERRORfile("missing '+' at '%s'!",next(ss,10));
return false;
}
if(ss.get() != '-'){
ERRORfile("missing '-' at '%s'!",next(ss,10));
return false;
}
ss >> err;
if(!ss.good()){
if(::checknan(ss)){
err = std::numeric_limits<double>::quiet_NaN();
} else {
ERRORfile("stream ended after reading '%g' at '%d'/'%d'/'%d'",err,i,j,k);
return false;
}
}
if(ss.peek() != ',' && ss.peek() != '}'){
ERRORfile("missing terminating character at '%s'",next(ss,10));
return false;
} else ss.get();
histo->SetBinContent(i,j,k,val);
histo->SetBinError(i,j,k,err);
}
if(ss.peek() != ',' && ss.peek() != '}'){
ERRORfile("missing terminating character at '%s'",next(ss,10));
return false;
} else ss.get();
} else {
ss >> val;
if(!ss.good()){
if(::checknan(ss)){
val = std::numeric_limits<double>::quiet_NaN();
} else {
ERRORfile("stream ended after reading '%g' at '%d'/'%d'",val,i,j);
return false;
}
}
if(ss.get() != '+'){
ERRORfile("missing '+' at '%s'!",next(ss,10));
return false;
}
if(ss.get() != '-'){
ERRORfile("missing '-' at '%s'!",next(ss,10));
return false;
}
ss >> err;
if(!ss.good()){
if(::checknan(ss)){
err = std::numeric_limits<double>::quiet_NaN();
} else {
ERRORfile("stream ended after reading '%g' at '%d'/'%d'",err,i,j);
return false;
}
}
if(ss.peek() != ',' && ss.peek() != '}'){
ERRORfile("missing terminating character at '%s'",next(ss,10));
return false;
} else ss.get();
histo->SetBinContent(i,j,val);
histo->SetBinError(i,j,err);
}
}
if(ss.peek() != ',' && ss.peek() != '}'){
ERRORfile("missing terminating character at '%s'",next(ss,10));
return false;
} else ss.get();
} else {
ss >> val;
if(!ss.good()){
if(::checknan(ss)){
val = std::numeric_limits<double>::quiet_NaN();
} else {
ERRORfile("stream ended after reading '%g' at '%d'",val,i);
return false;
}
}
if(ss.get() != '+'){
ERRORfile("missing '+' at '%s'!",next(ss,10));
return false;
}
if(ss.get() != '-'){
ERRORfile("missing '-' at '%s'!",next(ss,10));
return false;
}
ss >> err;
if(!ss.good()){
if(::checknan(ss)){
err = std::numeric_limits<double>::quiet_NaN();
} else {
ERRORfile("stream ended after reading '%g' at '%d'",err,i);
return false;
}
}
if(ss.peek() != ',' && ss.peek() != '}'){
ERRORfile("missing terminating character at '%s'",next(ss,10));
return false;
} else ss.get();
histo->SetBinContent(i,val);
histo->SetBinError(i,err);
}
}
histo->SetEntries(nentries);
}
return true;
}
bool TQHistogramUtils::hasUniformBinning(const TH1 * hist) {
const int n = TQHistogramUtils::getDimension(hist);
if(n==1){
return hasUniformBinning(hist->GetXaxis());
} else if(n==2){
return
hasUniformBinning(hist->GetXaxis()) &&
hasUniformBinning(hist->GetYaxis());
} else if(n==3){
return
hasUniformBinning(hist->GetXaxis()) &&
hasUniformBinning(hist->GetYaxis()) &&
hasUniformBinning(hist->GetZaxis());
}
return false;
}
bool TQHistogramUtils::hasUniformBinning(const TAxis * axis) {
bool uniform = true;
double binWidth = -1.;
int n = axis->GetNbins();
for (int i = 1; i < n + 1; i++) {
double l = axis->GetBinLowEdge(i);
double u = axis->GetBinUpEdge(i);
double w = u - l;
if (binWidth < 0.) {
binWidth = w;
} else if (!TMath::AreEqualRel(binWidth, w, 1E-06)) {
uniform = false;
}
}
return uniform;
}
TString TQHistogramUtils::getBinningDefinition(const TAxis * axis) {
if (!axis) {
return "";
}
const int n = axis->GetNbins();
if (!TQHistogramUtils::hasUniformBinning(axis)) {
TString edges;
for (int i = 1; i <= n + 1; i++) {
double l = axis->GetBinLowEdge(i);
TQStringUtils::append(edges, TString::Format("%g", l), ", ");
}
edges.Prepend("{");
edges.Append("}");
return edges;
} else {
return TString::Format("%d, %g, %g", n, axis->GetBinLowEdge(1), axis->GetBinUpEdge(n));
}
}
TH1* TQHistogramUtils::invertShift(TH1* var, TH1* nom){
TH1* inv = TQHistogramUtils::copyHistogram(var);
TQHistogramUtils::scaleHistogram(inv,-1);
TQHistogramUtils::addHistogram(inv,nom);
TQHistogramUtils::addHistogram(inv,nom);
return inv;
}
TH1* TQHistogramUtils::invertShiftWithoutError(TH1* var, TH1* nom){
TH1* inv = TQHistogramUtils::copyHistogram(var);
TQHistogramUtils::scaleHistogram(inv,-1);
TQHistogramUtils::addHistogramWithoutError(inv,nom);
TQHistogramUtils::addHistogramWithoutError(inv,nom);
return inv;
}
TH1* TQHistogramUtils::symmetrizeFromTwo(const TH1* var1, const TH1* var2, TH1* nom){
TH1D* tmp1 = (TH1D* )var1->Clone();
tmp1->Divide(nom);
TH1D* tmp2 = (TH1D* )var2->Clone();
tmp2->Divide(nom);
TH1D* unit = (TH1D* )nom->Clone();
for (int bin=1; bin<= unit->GetNbinsX(); bin++){
unit->SetBinContent(bin,1);
unit->SetBinError(bin,0.0);
}
tmp1->Add(unit,-1);
tmp2->Add(unit,-1);
tmp1->Add(tmp2,-1);
tmp1->Scale(0.5);
tmp1->Add(unit);
tmp1->Multiply(nom);
for (int bin=1; bin<= unit->GetNbinsX(); bin++){
tmp1->SetBinError(bin,nom->GetBinError(bin));
}
return tmp1;
}
TH1 * TQHistogramUtils::createHistogram(const TString& definition, bool printErrMsg) {
TString errMsg;
TH1 * histo = createHistogram(definition, errMsg);
if (!histo && printErrMsg) {
std::cout << TQStringUtils::makeBoldRed(errMsg.Prepend("TQHistogramUtils::createHistogram(...): ")).Data() << std::endl;
}
return histo;
}
TH1 * TQHistogramUtils::createHistogram(TQTaggable* values, const TString& prefix) {
std::map<TString,double> vals;
TQIterator itr(values->getListOfKeys(prefix+".*"),true);
while(itr.hasNext()){
TObject* key = itr.readNext();
TString name(key->GetName());
TQStringUtils::removeLeadingText(name,prefix+".");
vals[name]=values->getTagDoubleDefault(key->GetName(),0.);
}
if(vals.size() == 0) return NULL;
TH1* histo = new TH1F(prefix,prefix,vals.size(),0,vals.size());
histo->SetDirectory(NULL);
size_t i=1;
for(auto it:vals){
histo->GetXaxis()->SetBinLabel(i,it.first);
histo->SetBinContent(i,it.second);
i++;
}
return histo;
}
TNamed * TQHistogramUtils::createGraph(const TString& definition, bool printErrMsg) {
TString errMsg;
TNamed * graph = createGraph(definition, errMsg);
if (!graph && printErrMsg) {
std::cout << TQStringUtils::makeBoldRed(errMsg.Prepend("TQHistogramUtils::createGraph(...): ")).Data() << std::endl;
}
return graph;
}
namespace {
double getMedianDistance(const std::vector<double>& values, int precision){
std::vector<double> distances;
double lastval;
bool first = true;
for(auto val:values){
if(first){
first = false;
lastval = val;
continue;
}
if(fabs(val-lastval) < pow(10,-precision)) continue;
distances.push_back(fabs(lastval-val));
lastval = val;
}
std::sort(distances.begin(),distances.end());
return distances[distances.size()/2];
}
}
int TQHistogramUtils::fillHoles2DAverage(TH2* hist, double threshold, bool allowUnderflowOverflow, int dx, int dy, int minSources){
std::map<int,double> fixes;
for(int i=1; i<=hist->GetNbinsX(); ++i){
for(int j=1; j<=hist->GetNbinsY(); ++j){
int bin = hist->GetBin(i,j);
if(hist->GetBinContent(bin) == 0){
double sum = 0;
int count = 0;
for(int k = i-dx; k<=i+dx; ++k){
for(int l = j-dy; l<=j+dy; ++l){
if(k==i && l==j) continue;
if( ( k>=!allowUnderflowOverflow && k<=hist->GetNbinsX()+allowUnderflowOverflow) && (l>=!allowUnderflowOverflow && l<=hist->GetNbinsY()+allowUnderflowOverflow ) ){
const double val = hist->GetBinContent(k,l);
if(fabs(val) > fabs(threshold)){
sum+=val;
count++;
}
}
}
}
if(count >= minSources){
fixes[bin] = sum/count;
}
}
}
}
for(auto fix:fixes){
hist->SetBinContent(fix.first,fix.second);
}
return fixes.size();;
}
int TQHistogramUtils::fillHoles2DMax(TH2* hist, double threshold, bool allowUnderflowOverflow, int dx, int dy, int minSources){
std::map<int,double> fixes;
for(int i=1; i<=hist->GetNbinsX(); ++i){
for(int j=1; j<=hist->GetNbinsY(); ++j){
int bin = hist->GetBin(i,j);
if(hist->GetBinContent(bin) == 0){
double m = 0;
int count = 0;
for(int k = i-dx; k<=i+dx; ++k){
for(int l = j-dy; l<=j+dy; ++l){
if(k==i && l==j) continue;
if( ( k>=!allowUnderflowOverflow && k<=hist->GetNbinsX()+allowUnderflowOverflow) && (l>=!allowUnderflowOverflow && l<=hist->GetNbinsY()+allowUnderflowOverflow ) ){
const double val = hist->GetBinContent(k,l);
if(fabs(val) > fabs(threshold)){
m=std::max(m,val);
count++;
}
}
}
}
if(count >= minSources){
fixes[bin] = m;
}
}
}
}
for(auto fix:fixes){
hist->SetBinContent(fix.first,fix.second);
}
return fixes.size();;
}
int TQHistogramUtils::countHoles(TH2* hist){
int remainingHoles = 0;
for(int i=1; i<=hist->GetNbinsX(); ++i){
for(int j=1; j<=hist->GetNbinsY(); ++j){
int bin = hist->GetBin(i,j);
if(hist->GetBinContent(bin) == 0){
remainingHoles++;
}
}
}
return remainingHoles;
}
TH2* TQHistogramUtils::createHistogram(const TGraph2D* g, int nbinsx, int nbinsy){
size_t npoints = g->GetN();
std::vector<double> xvals(g->GetX(),g->GetX()+npoints);
std::vector<double> yvals(g->GetY(),g->GetY()+npoints);
std::sort(xvals.begin(),xvals.end());
std::sort(yvals.begin(),yvals.end());
double xmin = xvals[0];
double xmax = xvals[xvals.size()-1];
double ymin = yvals[0];
double ymax = yvals[yvals.size()-1];
double dx = (xmax-xmin)/(nbinsx-1);
double dy = (ymax-ymin)/(nbinsy-1);
TH2* hist = new TH2F(g->GetName(),g->GetTitle(),nbinsx,xmin-.5*dx,xmax+.5*dx,nbinsy,ymin-.5*dy,ymax+.5*dy);
hist->SetDirectory(NULL);
for(int i=0; i<nbinsx+2; ++i){
double x = hist->GetXaxis()->GetBinCenter(i);
for(int j=0; j<nbinsy+2; ++j){
double y = hist->GetYaxis()->GetBinCenter(j);
double val = const_cast<TGraph2D*>(g)->Interpolate(x,y);
hist->SetBinContent(i,j,val);
}
}
return hist;
}
TH2* TQHistogramUtils::createHistogram(const TGraph2D* g, int precision){
size_t npoints = g->GetN();
std::vector<double> xvals(g->GetX(),g->GetX()+npoints);
std::vector<double> yvals(g->GetY(),g->GetY()+npoints);
std::sort(xvals.begin(),xvals.end());
std::sort(yvals.begin(),yvals.end());
double mdx = getMedianDistance(xvals,precision);
double mdy = getMedianDistance(yvals,precision);
double xmin = TQUtils::roundAuto(xvals[0], precision)-.5*mdx;
double xmax = TQUtils::roundAuto(xvals[xvals.size()-1],precision)+.5*mdx;
double ymin = TQUtils::roundAuto(yvals[0], precision)-.5*mdy;
double ymax = TQUtils::roundAuto(yvals[yvals.size()-1],precision)+.5*mdy;
int nbinsx = (xmax - xmin)/mdx;
int nbinsy = (ymax - ymin)/mdy;
TH2* hist = new TH2F(g->GetName(),g->GetTitle(),nbinsx,xmin,xmax,nbinsy,ymin,ymax);
hist->SetDirectory(NULL);
for(size_t i=0; i<npoints; ++i){
double x = g->GetX()[i];
double y = g->GetY()[i];
double z = g->GetZ()[i];
int bin = hist->FindBin(x,y);
if(hist->GetBinContent(bin) > 0){
ERRORfunc("attempting to double-fill bin %d at %g/%g from values %g/%g while making graph from histogram!",
(int)i,
hist->GetXaxis()->GetBinCenter(hist->GetXaxis()->FindBin(x)),
hist->GetYaxis()->GetBinCenter(hist->GetYaxis()->FindBin(y)),
x,
y
);
}
hist->SetBinContent(bin,z);
}
return hist;
}
std::vector<TList*> TQHistogramUtils::getContourList(TH2* hist, const std::vector<double>& thresholds){
bool isBatch = gROOT->IsBatch();
gROOT->SetBatch(true);
TCanvas tmp;
hist->SetContour(thresholds.size(), &thresholds[0]);
hist->Draw("CONT Z LIST");
tmp.Update();
std::vector<TList*> retval;
TQIterator contItr2(dynamic_cast<TObjArray*>(gROOT->GetListOfSpecials()->FindObject("contours")));
while(contItr2.hasNext()){
TList* contLevel = dynamic_cast<TList*>(contItr2.readNext());
TList* newList = new TList();
newList->SetOwner(true);
TQListUtils::addClones(contLevel,newList);
retval.push_back(newList);
}
hist->SetContour(20);
gROOT->SetBatch(isBatch);
return retval;
}
TNamed * TQHistogramUtils::createGraph(TString definition, TString &errMsg) {
TString type;
TQStringUtils::readBlanksAndNewlines(definition);
if (TQStringUtils::readToken(definition,type,TQStringUtils::getLetters() + TQStringUtils::getNumerals()) == 0) {
errMsg = TString::Format("Missing valid graph type, received '%s' from '%s'",type.Data(),definition.Data());
return NULL;
}
bool isTGraph = (type.CompareTo("TGraph") == 0);
bool isTGraph2D = (type.CompareTo("TGraph2D") == 0);
bool isTGraphAsymmErrors = (type.CompareTo("TGraphAsymmErrors") == 0);
if (!isTGraph && !isTGraph2D && !isTGraphAsymmErrors){
errMsg = TString::Format("Unknown graph type '%s'", type.Data());
return NULL;
}
TString parameter;
TQStringUtils::readBlanksAndNewlines(definition);
if (TQStringUtils::readBlock(definition, parameter, "()", "''\"\"", false) == 0) {
errMsg = TString::Format("Missing parameter block '(...)' after '%s'", type.Data());
return NULL;
}
TQStringUtils::readBlanksAndNewlines(definition);
if (!definition.IsNull()) {
errMsg = TString::Format("Unrecognized token '%s'", definition.Data());
return NULL;
}
TQTaggable * pars = TQTaggable::parseParameterList(parameter, ",", true, "{}[]()", "''\"\"");
if (!pars) {
errMsg = TString::Format("Failed to parse parameters '%s'", parameter.Data());
return NULL;
}
pars->resetReadFlags();
if (!pars->tagIsOfTypeString("0")) {
errMsg = "Missing valid graph name";
delete pars;
return NULL;
}
TString name = pars->getTagStringDefault("0");
if (!pars->tagIsOfTypeString("1")) {
errMsg = "Missing valid graph title";
delete pars;
return NULL;
}
TString title = pars->getTagStringDefault("1");
TNamed * graph = NULL;
if (isTGraph) {
graph = new TGraph();
} else if(isTGraph2D){
graph = new TGraph2D();
} else if(isTGraphAsymmErrors){
graph = new TGraphAsymmErrors();
}
graph->SetName(name);
graph->SetTitle(title);
delete pars;
if(!graph){
errMsg = "unknown error: graph type is '"+type+"'";
}
return graph;
}
TH1 * TQHistogramUtils::createHistogram(TString definition, TString &errMsg) {
TString type;
TQStringUtils::readBlanksAndNewlines(definition);
if (TQStringUtils::readToken(definition,type,TQStringUtils::getLetters() + TQStringUtils::getNumerals()) == 0) {
errMsg = TString::Format("Missing valid histogram type, received '%s' from '%s'",type.Data(),definition.Data());
return NULL;
}
bool isTH1F = (type.CompareTo("TH1F") == 0);
bool isTH1D = (type.CompareTo("TH1D") == 0);
bool isTH2F = (type.CompareTo("TH2F") == 0);
bool isTH2D = (type.CompareTo("TH2D") == 0);
bool isTH3F = (type.CompareTo("TH3F") == 0);
bool isTH3D = (type.CompareTo("TH3D") == 0);
bool isTProfile = (type.CompareTo("TProfile") == 0);
bool isTProfile2D = (type.CompareTo("TProfile2D") == 0);
if (!isTH1F && !isTH1D && !isTH2F && !isTH2D&& !isTH3F && !isTH3D && !isTProfile && !isTProfile2D) {
errMsg = TString::Format("Unknown histogram type '%s'", type.Data());
return NULL;
}
TString parameter;
TQStringUtils::readBlanksAndNewlines(definition);
if (TQStringUtils::readBlock(definition, parameter, "()", "''\"\"", false) == 0) {
errMsg = TString::Format("Missing parameter block '(...)' after '%s'", type.Data());
return NULL;
}
TQStringUtils::readBlanksAndNewlines(definition);
if (!definition.IsNull()) {
errMsg = TString::Format("Unrecognized token '%s'", definition.Data());
return NULL;
}
TQTaggable * pars = TQTaggable::parseParameterList(parameter, ",", true, "{}[]()", "''\"\"");
if (!pars) {
errMsg = TString::Format("Failed to parse parameters '%s'", parameter.Data());
return NULL;
}
pars->resetReadFlags();
if (!pars->tagIsOfTypeString("0")) {
errMsg = "Missing valid histogram name";
delete pars;
return NULL;
}
TString name = pars->getTagStringDefault("0");
if (!pars->tagIsOfTypeString("1")) {
errMsg = "Missing valid histogram title";
delete pars;
return NULL;
}
TString title = pars->getTagStringDefault("1");
int nBinsX = 0;
int nBinsY = 0;
int nBinsZ = 0;
double minX = 0.;
double maxX = 0.;
double minY = 0.;
double maxY = 0.;
double minZ = 0.;
double maxZ = 0.;
int pIndex = 2;
std::vector<double> edgesX;
std::vector<double> edgesY;
std::vector<double> edgesZ;
if (!extractBinning(pars, pIndex, nBinsX, minX, maxX, edgesX, errMsg)) {
errMsg.Append(" on X axis");
delete pars;
return NULL;
}
if ((isTH2F || isTH2D || isTH3F || isTH3D ||isTProfile2D) && !extractBinning(pars, pIndex, nBinsY, minY, maxY, edgesY, errMsg)) {
errMsg.Append(" on Y axis");
delete pars;
return NULL;
}
if (isTProfile && !extractRange(pars, pIndex, minY, maxY, errMsg)) {
errMsg.Append(" on Y axis");
delete pars;
return NULL;
}
if ((isTH3F || isTH3D) && !extractBinning(pars, pIndex, nBinsZ, minZ, maxZ, edgesZ, errMsg)) {
errMsg.Append(" on Z axis");
delete pars;
return NULL;
}
if (pars->hasUnreadKeys()) {
errMsg.Append(TString::Format("Too many parameters for '%s'", type.Data()));
delete pars;
return NULL;
}
if (isTH3F || isTH3D) {
if (edgesX.size()==0 && (edgesY.size()>0 || edgesZ.size()>0)) {
edgesX = getUniformBinEdges(nBinsX, minX, maxX);
}
if (edgesY.size()==0 && (edgesX.size()>0 || edgesZ.size()>0)) {
edgesY = getUniformBinEdges(nBinsY, minY, maxY);
}
if (edgesZ.size()==0 && (edgesX.size()>0 || edgesY.size()>0)) {
edgesZ = getUniformBinEdges(nBinsZ, minZ, maxZ);
}
}
int i = 2;
TString finalName = name;
while (gDirectory && gDirectory->FindObject(name.Data())) {
name = TString::Format("%s_i%d", finalName.Data(), i++);
}
TH1 * histo = NULL;
if (isTH1F) {
if (edgesX.size()>0) {
histo = new TH1F(name.Data(), title.Data(), nBinsX, &(edgesX[0]));
} else {
histo = new TH1F(name.Data(), title.Data(), nBinsX, minX, maxX);
}
} else if (isTH1D) {
if (edgesX.size()>0) {
histo = new TH1D(name.Data(), title.Data(), nBinsX, &(edgesX[0]));
} else {
histo = new TH1D(name.Data(), title.Data(), nBinsX, minX, maxX);
}
} else if (isTH2F) {
if (edgesX.size()>0 && edgesY.size()>0) {
histo = new TH2F(name.Data(), title.Data(), nBinsX, &(edgesX[0]), nBinsY, &(edgesY[0]));
} else if (edgesX.size()>0 && edgesY.size()==0) {
histo = new TH2F(name.Data(), title.Data(), nBinsX, &(edgesX[0]), nBinsY, minY, maxY);
} else if (edgesX.size()==0 && edgesY.size()>0) {
histo = new TH2F(name.Data(), title.Data(), nBinsX, minX, maxX, nBinsY, &(edgesY[0]));
} else {
histo = new TH2F(name.Data(), title.Data(), nBinsX, minX, maxX, nBinsY, minY, maxY);
}
} else if (isTH2D) {
if (edgesX.size()>0 && edgesY.size()>0) {
histo = new TH2D(name.Data(), title.Data(), nBinsX, &(edgesX[0]), nBinsY, &(edgesY[0]));
} else if (edgesX.size()>0 && edgesY.size()==0) {
histo = new TH2D(name.Data(), title.Data(), nBinsX, &(edgesX[0]), nBinsY, minY, maxY);
} else if (edgesX.size()==0 && edgesY.size()>0) {
histo = new TH2D(name.Data(), title.Data(), nBinsX, minX, maxX, nBinsY, &(edgesY[0]));
} else {
histo = new TH2D(name.Data(), title.Data(), nBinsX, minX, maxX, nBinsY, minY, maxY);
}
} else if (isTH3F) {
if (edgesX.size()==0 && edgesY.size()==0 && edgesZ.size()==0) {
histo = new TH3F(name.Data(), title.Data(), nBinsX, minX, maxX,
nBinsY, minY, maxY, nBinsZ, minZ, maxZ);
} else {
histo = new TH3F(name.Data(), title.Data(), nBinsX, &(edgesX[0]),
nBinsY, &(edgesY[0]), nBinsZ, &(edgesZ[0]));
}
} else if (isTH3D) {
if (edgesX.size()==0 && edgesY.size()==0 && edgesZ.size()==0) {
histo = new TH3D(name.Data(), title.Data(), nBinsX, minX, maxX,
nBinsY, minY, maxY, nBinsZ, minZ, maxZ);
} else {
histo = new TH3D(name.Data(), title.Data(), nBinsX, &(edgesX[0]),
nBinsY, &(edgesY[0]), nBinsZ, &(edgesZ[0]));
}
} else if (isTProfile) {
if (edgesX.size()>0) {
histo = new TProfile(name.Data(), title.Data(), nBinsX, &(edgesX[0]), minY, maxY);
} else {
histo = new TProfile(name.Data(), title.Data(), nBinsX, minX, maxX, minY, maxY);
}
} else if (isTProfile2D) {
if (edgesX.size()>0 && edgesY.size()>0) {
histo = new TProfile2D(name.Data(), title.Data(), nBinsX, &(edgesX[0]), nBinsY, &(edgesY[0]));
} else if (edgesX.size()>0 && edgesY.size()==0) {
histo = new TProfile2D(name.Data(), title.Data(), nBinsX, &(edgesX[0]), nBinsY, minY, maxY);
} else if (edgesX.size()==0 && edgesY.size()>0) {
histo = new TProfile2D(name.Data(), title.Data(), nBinsX, minX, maxX, nBinsY, &(edgesY[0]));
} else {
histo = new TProfile2D(name.Data(), title.Data(), nBinsX, minX, maxX, nBinsY, minY, maxY);
}
}
if (histo) {
histo->SetDirectory(NULL);
histo->SetName(finalName.Data());
histo->Sumw2();
}
delete pars;
if(!histo){
errMsg = "unknown error: histogram type is '"+type+"'";
}
return histo;
}
std::vector<double> TQHistogramUtils::getUniformBinEdges(int nBins, double min, double max) {
std::vector<double> edges;
if (nBins < 1 || max <= min) {
return edges;
}
double width = (max - min) / (double)nBins;
for (int i = 0; i <= nBins; i++) {
edges.push_back(min + (double)i * width);
}
return edges;
}
bool TQHistogramUtils::extractBinning(TQTaggable * p, int &index, int &nBins,
double &min, double &max, std::vector<double> &edges, TString &errMsg) {
TString p_bins = TString::Format("%d", index++);
int i = 0;
double edge = 0.;
while (p->hasTag(p_bins + TString::Format(".%d", i))) {
if (!p->getTagDouble(p_bins + TString::Format(".%d", i), edge)) {
errMsg = "Invalid array of bin edges";
return false;
}
if (edges.size() > 0 && edges.back() >= edge) {
errMsg = "Bin edges need to be in increasing order";
return false;
}
edges.push_back(edge);
i++;
}
if (edges.size()==0) {
TString p_min = TString::Format("%d", index++);
TString p_max = TString::Format("%d", index++);
if (!p->tagIsOfTypeInteger(p_bins)) {
errMsg = "Missing valid number of bins";
return false;
}
if (!(p->tagIsOfTypeInteger(p_min) || p->tagIsOfTypeDouble(p_min))) {
errMsg = "Missing valid lower bound";
return false;
}
if (!(p->tagIsOfTypeInteger(p_max) || p->tagIsOfTypeDouble(p_max))) {
errMsg = "Missing valid upper bound";
return false;
}
nBins = p->getTagIntegerDefault(p_bins);
min = p->getTagDoubleDefault(p_min);
max = p->getTagDoubleDefault(p_max);
if (min >= max) {
errMsg = "Empty range";
return false;
}
} else {
nBins = edges.size() - 1;
}
if (nBins <= 0) {
errMsg = "Number of bins needs to be larger than zero";
return false;
}
return true;
}
bool TQHistogramUtils::extractRange(TQTaggable * p, int &index,
double &min, double &max, TString &errMsg) {
TString p_min = TString::Format("%d", index++);
TString p_max = TString::Format("%d", index++);
if (!(p->tagIsOfTypeInteger(p_min) || p->tagIsOfTypeDouble(p_min))) {
errMsg = "Missing valid lower bound";
return false;
}
if (!(p->tagIsOfTypeInteger(p_max) || p->tagIsOfTypeDouble(p_max))) {
errMsg = "Missing valid upper bound";
return false;
}
min = p->getTagDoubleDefault(p_min);
max = p->getTagDoubleDefault(p_max);
if (min >= max) {
errMsg = "Empty range";
return false;
}
return true;
}
TString TQHistogramUtils::getDetailsAsString(const TGraph * g, int option) {
TString retval = TString::Format("%d points",g->GetN());
if(option > 0){
TQTaggable tags;
TQHistogramUtils::extractStyle(g,&tags);
retval.Append(", ");
retval.Append(tags.exportTagsAsString());
}
return retval;
}
TString TQHistogramUtils::getDetailsAsString(const TGraph2D * g, int) {
return TString::Format("%d points",g->GetN());
}
TString TQHistogramUtils::getDetailsAsString(const TH1 * histo, int option) {
int dim = TQHistogramUtils::getDimension(histo);
if (dim == 0) {
return TString("Invalid histogram");
}
TString details = getDetailsAsString(histo->GetXaxis(), option);
if (dim > 1) {
details.Append(TString(" X ") + getDetailsAsString(((TH2*)histo)->GetYaxis(), option));
}
if (dim > 2) {
details.Append(TString(" X ") + getDetailsAsString(((TH3*)histo)->GetZaxis(), option));
}
if (option < 2) {
details.Append(" bin(s)");
}
if (option > 0) {
double err = 0.;
double sum = TQHistogramUtils::getIntegralAndError(histo, err);
details.Append(TString::Format(", S(w) = %g +/- %g, N=%d", sum, err,(int)(histo->GetEntries())));
}
if(option > 3){
details.Append(TString::Format(" - linecolor=%d, fillcolor=%d, fillstyle=%d, markercolor=%d, markerstyle=%d, markersize=%.1f",histo->GetLineColor(),histo->GetFillColor(),histo->GetFillStyle(),histo->GetMarkerColor(),histo->GetMarkerStyle(),histo->GetMarkerSize()));
}
return details;
}
TString TQHistogramUtils::getDetailsAsString(const TAxis * axis, int option) {
if (!axis) {
return TString("");
} else if (option < 2) {
TString retval = TString::Format("%d", axis->GetNbins());
if(axis->GetLabels()){
retval.Append("l");
}
return retval;
} else {
TString s;
if (axis->GetNbins() > 1) {
s = "s";
}
TString unit;
if (option > 2) {
unit = TQStringUtils::getUnit(axis->GetTitle());
if (!unit.IsNull()) {
unit.Prepend(" ");
}
}
if(axis->GetLabels()){
unit.Append(", labeled");
}
return TString::Format("(%g ... %g%s, %d bin%s)", axis->GetBinLowEdge(1),
axis->GetBinUpEdge(axis->GetNbins()), unit.Data(), axis->GetNbins(), s.Data());
}
}
int TQHistogramUtils::getNDips(TH1 * histo) {
int nDips = 0;
int dim = getDimension(histo);
if (dim == 1) {
int nX = histo->GetXaxis()->GetNbins();
for (int iX = 0; iX <= nX - 1; iX++) {
if ((histo->GetBinContent(iX) > 0. || histo->GetBinError(iX) > 0.) &&
(histo->GetBinContent(iX + 1) == 0. && histo->GetBinError(iX + 1) == 0.) &&
(histo->GetBinContent(iX + 2) > 0. || histo->GetBinError(iX + 2) > 0.)) {
nDips++;
}
}
} else if (dim == 2) {
int nX = histo->GetNbinsX();
int nY = histo->GetNbinsY();
for (int iX = 0; iX <= nX - 1; iX++) {
for (int iY = 0; iY <= nY - 1; iY++) {
if ((histo->GetBinContent(iX, iY) > 0. || histo->GetBinError(iX, iY) > 0.) &&
(histo->GetBinContent(iX, iY + 1) > 0. || histo->GetBinError(iX, iY + 1) > 0.) &&
(histo->GetBinContent(iX, iY + 2) > 0. || histo->GetBinError(iX, iY + 2) > 0.) &&
(histo->GetBinContent(iX + 1, iY) > 0. || histo->GetBinError(iX + 1, iY) > 0.) &&
(histo->GetBinContent(iX + 1, iY + 1) == 0. && histo->GetBinError(iX + 1, iY + 1) == 0.) &&
(histo->GetBinContent(iX + 1, iY + 2) > 0. || histo->GetBinError(iX + 1, iY + 2) > 0.) &&
(histo->GetBinContent(iX + 2, iY) > 0. || histo->GetBinError(iX + 2, iY) > 0.) &&
(histo->GetBinContent(iX + 2, iY + 1) > 0. || histo->GetBinError(iX + 2, iY + 1) > 0.) &&
(histo->GetBinContent(iX + 2, iY + 2) > 0. || histo->GetBinError(iX + 2, iY + 2) > 0.)) {
nDips++;
}
}
}
} else {
nDips = -1;
}
return nDips;
}
bool TQHistogramUtils::getMaxArea2D(const TH2 * histo, double frac, int &maxX, int &maxY,
int &maxX_low, int &maxX_high, int &maxY_low, int &maxY_high) {
if (getDimension(histo) != 2) {
return false;
}
int iBinX, iBinY, iBinZ;
int iMaxBin = histo->GetMaximumBin();
histo->GetBinXYZ(iMaxBin, iBinX, iBinY, iBinZ);
double max = histo->GetBinContent(iBinX, iBinY);
int iBinX_low = iBinX;
int iBinX_high = iBinX;
int iBinY_low = iBinY;
int iBinY_high = iBinY;
for (int i = iBinX; i <= histo->GetNbinsX(); i++)
if (histo->GetBinContent(i, iBinY) > frac * max)
iBinX_high = i;
for (int i = iBinX; i > 0; i--)
if (histo->GetBinContent(i, iBinY) > frac * max)
iBinX_low = i;
for (int i = iBinY; i <= histo->GetNbinsY(); i++)
if (histo->GetBinContent(iBinX, i) > frac * max)
iBinY_high = i;
for (int i = iBinY; i > 0; i--)
if (histo->GetBinContent(iBinX, i) > frac * max)
iBinY_low = i;
maxX = iBinX;
maxY = iBinY;
maxX_high = iBinX_high;
maxX_low = iBinX_low;
maxY_high = iBinY_high;
maxY_low = iBinY_low;
return true;
}
std::vector<double> TQHistogramUtils::getBinLowEdges(const TH1* histo, const std::vector<int>& binBorders){
return TQHistogramUtils::getBinLowEdges(histo->GetXaxis(),binBorders);
}
std::vector<double> TQHistogramUtils::getBinLowEdges(const TAxis* axis, const std::vector<int>& binBorders){
std::vector<double> lowEdges;
std::vector<int> correctedBinBorders;
if (binBorders.size() > 0) {
if (binBorders[0] == 0) {
correctedBinBorders = std::vector<int>(binBorders.begin() + 1, binBorders.end());
} else {
correctedBinBorders = binBorders;
}
}
const size_t nBins = correctedBinBorders.size()+1;
for (size_t i = 0; i < nBins + 1; ++i) {
if (i == 0)
lowEdges.push_back(axis->GetBinLowEdge(1));
else if (i == nBins)
lowEdges.push_back(axis->GetBinLowEdge(axis->GetNbins() + 1));
else
lowEdges.push_back(axis->GetBinLowEdge(correctedBinBorders[i - 1]));
}
return lowEdges;
}
std::vector<int> TQHistogramUtils::getBinBorders(const TAxis* ax, const std::vector<double>& lowEdges){
std::vector<int> binBorders;
for (size_t i = 1; i < lowEdges.size() - 1; ++i) {
binBorders.push_back(ax->FindBin(lowEdges[i]));
}
return binBorders;
}
std::vector<int> TQHistogramUtils::getBinBorders(const TH1* h, const std::vector<double>& lowEdges){
return getBinBorders(h->GetXaxis(),lowEdges);
}
TH1 * TQHistogramUtils::getRebinned(const TH1 * histo, const std::vector<int>& binBorders, bool doRemap, bool keepOverFlowUnderFlowSeparate) {
std::vector<double> lowEdges = TQHistogramUtils::getBinLowEdges(histo,binBorders);
return TQHistogramUtils::getRebinned(histo, binBorders, lowEdges, doRemap, keepOverFlowUnderFlowSeparate);
}
TH1 * TQHistogramUtils::getRebinned(const TH1 * histo, const std::vector<double>& lowEdges, bool doRemap, bool keepOverFlowUnderFlowSeparate) {
std::vector<int> binBorders = TQHistogramUtils::getBinBorders(histo,lowEdges);
return TQHistogramUtils::getRebinned(histo, binBorders, lowEdges, doRemap, keepOverFlowUnderFlowSeparate);
}
TH1 * TQHistogramUtils::getRebinned(const TH1 * histo, const std::vector<int>& binBorders, const std::vector<double>& lowEdges, bool doRemap, bool keepOverFlowUnderFlowSeparate) {
if (!histo || getDimension(histo) != 1)
return 0;
std::vector<int> correctedBinBorders;
if (binBorders.size() > 0) {
if (binBorders[0] == 0) {
correctedBinBorders = std::vector<int>(binBorders.begin() + 1, binBorders.end());
} else {
correctedBinBorders = binBorders;
}
}
const int nBins = correctedBinBorders.size() + 1;
TH1 * newHisto = 0;
if(doRemap){
if (histo->InheritsFrom(TH1F::Class()))
newHisto = new TH1F(histo->GetName(), histo->GetTitle(),nBins, 0., 1.);
else if (histo->InheritsFrom(TH1D::Class()))
newHisto = new TH1D(histo->GetName(), histo->GetTitle(),nBins, 0., 1.);
if(newHisto){
TString label = TQStringUtils::getWithoutUnit(histo->GetXaxis()->GetTitle());
label.Prepend("Remapped ");
newHisto->GetXaxis()->SetTitle(label.Data());
}
} else {
if (histo->InheritsFrom(TH1F::Class())) {
newHisto = new TH1F(histo->GetName(), histo->GetTitle(), nBins, &(lowEdges[0]));
}
else if (histo->InheritsFrom(TH1D::Class()))
newHisto = new TH1D(histo->GetName(), histo->GetTitle(), nBins, &(lowEdges[0]));
if(newHisto){
newHisto->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
}
}
if (newHisto) {
newHisto->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
newHisto->Sumw2();
newHisto->SetDirectory(histo->GetDirectory());
copyStyle(newHisto, histo);
int overflowUnderflowFills = 0;
if (keepOverFlowUnderFlowSeparate) overflowUnderflowFills = 2;
for (int i = 0; i < nBins + overflowUnderflowFills; i++) {
int lowerBin = 0;
int upperBin = histo->GetNbinsX() + 1;
if (i == 0) {
lowerBin = 0;
upperBin = correctedBinBorders[i] - 1;
if (keepOverFlowUnderFlowSeparate) upperBin = 0;
}
if (i > 0 && i != (nBins + overflowUnderflowFills - 1)) {
lowerBin = correctedBinBorders[i - 1];
upperBin = correctedBinBorders[i] - 1;
if (keepOverFlowUnderFlowSeparate) {
lowerBin = correctedBinBorders[i - 2];
upperBin = correctedBinBorders[i - 1] - 1;
}
}
if (i == (nBins + overflowUnderflowFills - 1)) {
if (!keepOverFlowUnderFlowSeparate) {
lowerBin = correctedBinBorders[i - 1];
} else {
lowerBin = histo->GetNbinsX() + 1;
}
upperBin = histo->GetNbinsX() + 1;
}
if (keepOverFlowUnderFlowSeparate) {
if (i == 1) {
lowerBin = 1;
upperBin = correctedBinBorders[i - 1] - 1;
}
if (i == (nBins + overflowUnderflowFills - 2)) {
lowerBin = correctedBinBorders[i - 2];
upperBin = histo->GetNbinsX();
}
}
int filledBin = i + 1;
if (keepOverFlowUnderFlowSeparate) filledBin -= 1;
double binError = 0.;
newHisto->SetBinContent(filledBin ,histo->IntegralAndError(lowerBin, upperBin, binError));
newHisto->SetBinError(filledBin , binError);
}
if(!doRemap){
if (keepOverFlowUnderFlowSeparate) {
newHisto->SetBinContent(0, histo->GetBinContent(0));
newHisto->SetBinError (0, histo->GetBinError(0));
newHisto->SetBinContent(nBins + 1,histo->GetBinContent(histo->GetNbinsX() + 1));
newHisto->SetBinError (nBins + 1,histo->GetBinError(histo->GetNbinsX() + 1));
}
}
newHisto->SetEntries(histo->GetEntries());
}
return newHisto;
}
TH1 * TQHistogramUtils::getRemapped(TH1 * histo, const std::vector<double>& newBinBorders) {
if(newBinBorders.size() != (size_t)(histo->GetNbinsX()+1)){
throw std::runtime_error(TString::Format("Cannot remap axis if new bin boundaries don't match number of bins in histogram: %d vs. %d",int(newBinBorders.size()),histo->GetNbinsX()+1).Data());
}
TH1* newHisto = new TH1F(histo->GetName(),histo->GetTitle(),newBinBorders.size()-1,&newBinBorders[0]);
newHisto->SetDirectory(0);
for(int i=0; i<histo->GetNbinsX()+2; ++i){
newHisto->SetBinContent(i,histo->GetBinContent(i));
newHisto->SetBinError(i,histo->GetBinError(i));
}
newHisto->SetEntries(histo->GetEntries());
return newHisto;
}
TH2 * TQHistogramUtils::getRemapped2D(TH2 * histo, const std::vector<int>& binBorders, bool remapX) {
if (!histo || getDimension(histo) != 2)
return 0;
int nSlices = (remapX ? histo->GetNbinsY() : histo->GetNbinsX()) + 2;
if (binBorders.size() % nSlices != 0) {
return NULL;
}
int nBins = binBorders.size() / nSlices + 1;
TH2 * remappedHisto = 0;
if (histo->InheritsFrom(TH2F::Class())) {
if (remapX) {
remappedHisto = new TH2F(histo->GetName(), histo->GetTitle(),
nBins, 0., 1., nSlices - 2, histo->GetYaxis()->GetBinLowEdge(1),
histo->GetYaxis()->GetBinUpEdge(histo->GetNbinsY()));
} else {
remappedHisto = new TH2F(histo->GetName(), histo->GetTitle(),
nSlices - 2, histo->GetXaxis()->GetBinLowEdge(1),
histo->GetXaxis()->GetBinUpEdge(histo->GetNbinsX()), nBins, 0., 1.);
}
} else if (histo->InheritsFrom(TH2D::Class())) {
if (remapX) {
remappedHisto = new TH2D(histo->GetName(), histo->GetTitle(),
nBins, 0., 1., nSlices - 2, histo->GetYaxis()->GetBinLowEdge(1),
histo->GetYaxis()->GetBinUpEdge(histo->GetNbinsY()));
} else {
remappedHisto = new TH2D(histo->GetName(), histo->GetTitle(),
nSlices - 2, histo->GetXaxis()->GetBinLowEdge(1),
histo->GetXaxis()->GetBinUpEdge(histo->GetNbinsX()), nBins, 0., 1.);
}
}
if (remappedHisto) {
remappedHisto->Sumw2();
remappedHisto->SetDirectory(histo->GetDirectory());
if (remapX) {
TString label = TQStringUtils::getWithoutUnit(histo->GetXaxis()->GetTitle());
label.Prepend("Remapped ");
remappedHisto->GetXaxis()->SetTitle(label.Data());
remappedHisto->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
} else {
TString label = TQStringUtils::getWithoutUnit(histo->GetYaxis()->GetTitle());
label.Prepend("Remapped ");
remappedHisto->GetYaxis()->SetTitle(label.Data());
remappedHisto->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
}
copyStyle(remappedHisto, histo);
for (int j = 0; j < nSlices; j++) {
for (int i = 0; i < nBins; i++) {
int lowerBin = 0;
int upperBin = remapX ? histo->GetNbinsX() + 1 : histo->GetNbinsY() + 1;
if (i > 0)
lowerBin = binBorders[j * (nBins - 1) + i - 1] + 1;
if (i != (nBins - 1))
upperBin = binBorders[j * (nBins - 1) + i];
double binError = 0.;
if (remapX) {
remappedHisto->SetBinContent(i + 1, j,
histo->IntegralAndError(lowerBin, upperBin, j, j, binError));
remappedHisto->SetBinError(i + 1, j, binError);
} else {
remappedHisto->SetBinContent(j, i + 1,
histo->IntegralAndError(j, j, lowerBin, upperBin, binError));
remappedHisto->SetBinError(j, i + 1, binError);
}
}
}
remappedHisto->SetEntries(histo->GetEntries());
}
return remappedHisto;
}
TH1 * TQHistogramUtils::getRebinnedFlat(TH1 * histo, int nBins) {
if (getDimension(histo) != 1)
return 0;
std::vector<int> borders = getBinBordersFlat(histo, nBins, false);
TH1 * rebinnedHisto = getRebinned(histo, borders, false);
return rebinnedHisto;
}
TH1 * TQHistogramUtils::getRemappedFlat(TH1 * histo, int nBins) {
if (getDimension(histo) != 1)
return 0;
std::vector<int> borders = getBinBordersFlat(histo, nBins, true);
TH1 * rebinnedHisto = getRebinned(histo, borders, true);
return rebinnedHisto;
}
TH2 * TQHistogramUtils::getRemappedFlat2D(TH2 * histo, int nBins, bool remapX) {
if (getDimension(histo) != 2)
return 0;
std::vector<int> borders = getBinBordersFlat2D(histo, nBins, remapX, true);
TH2 * remappedHisto = getRemapped2D(histo, borders, remapX);
return remappedHisto;
}
TH1 * TQHistogramUtils::cutAndZoomHistogram(TH1 * histo,
int cutBinLowX, int cutBinHighX, int cutBinLowY, int cutBinHighY,
int zoomBinLowX, int zoomBinHighX, int zoomBinLowY, int zoomBinHighY) {
int dim = TQHistogramUtils::getDimension(histo);
if (dim == 0) {
return NULL;
}
if (cutBinLowX > 1 && zoomBinLowX >= 0) {
zoomBinLowX -= cutBinLowX - 1;
if (zoomBinLowX <= 0) {
return NULL;
}
}
if (cutBinLowX > 1 && zoomBinHighX >= 0) {
zoomBinHighX -= cutBinLowX - 1;
if (zoomBinHighX <= 0) {
return NULL;
}
}
if (cutBinLowY > 1 && zoomBinLowY >= 0) {
zoomBinLowY -= cutBinLowY - 1;
if (zoomBinLowY <= 0) {
return NULL;
}
}
if (cutBinLowY > 1 && zoomBinHighY >= 0) {
zoomBinHighY -= cutBinLowY - 1;
if (zoomBinHighY <= 0) {
return NULL;
}
}
TH1 * histo_cut = cutHistogram(histo, cutBinLowX, cutBinHighX, cutBinLowY, cutBinHighY);
if (!histo_cut) {
return NULL;
}
TH1 * histo_zoomed = NULL;
if (dim == 1) {
if (zoomBinHighX <= histo_cut->GetNbinsX()) {
histo_zoomed = cutHistogram(histo_cut, zoomBinLowX, zoomBinHighX,
zoomBinLowY, zoomBinHighY, true, true);
}
} else if (dim == 2) {
if (zoomBinHighX <= histo_cut->GetNbinsX() && zoomBinHighY <= histo_cut->GetNbinsY()) {
histo_zoomed = cutHistogram(histo_cut, zoomBinLowX, zoomBinHighX,
zoomBinLowY, zoomBinHighY, true, true, true, true);
}
}
delete histo_cut;
return histo_zoomed;
}
TH1 * TQHistogramUtils::cutHistogram(TH1 * histo,
int xBinLow, int xBinHigh, int yBinLow, int yBinHigh,
bool keepInUVX, bool keepInOVX, bool keepInUVY, bool keepInOVY) {
int dim = getDimension(histo);
if (dim < 1 || dim > 2) {
return NULL;
}
int nBinsX = histo->GetNbinsX();
int nEntries = histo->GetEntries();
if (xBinLow < 0) {
xBinLow = 0;
}
if (xBinHigh < 0) {
xBinHigh = nBinsX + 1;
}
if (xBinLow > nBinsX || xBinHigh == 0 || xBinHigh < xBinLow || xBinHigh > nBinsX + 1) {
return NULL;
}
if (dim < 2 && (yBinLow != -1 || yBinHigh != -1 || keepInUVY || keepInOVY)) {
return NULL;
}
if (xBinHigh > 0 && xBinHigh < nBinsX) {
nBinsX -= (nBinsX - xBinHigh);
}
if (xBinLow > 1) {
nBinsX -= (xBinLow - 1);
}
double xMin = histo->GetXaxis()->GetBinLowEdge(TMath::Max(xBinLow, 1));
double xMax = histo->GetXaxis()->GetBinUpEdge(TMath::Min(xBinHigh, histo->GetNbinsX()));
TH1 * newHisto = 0;
TString orig_name = histo->GetName();
histo->SetName(orig_name+"_copy");
if (dim == 1) {
if (histo->InheritsFrom(TH1F::Class())) {
newHisto = new TH1F(histo->GetName(), histo->GetTitle(), nBinsX, xMin, xMax);
} else if (histo->InheritsFrom(TH1D::Class())) {
newHisto = new TH1D(histo->GetName(), histo->GetTitle(), nBinsX, xMin, xMax);
}
if (newHisto) {
newHisto->SetDirectory(histo->GetDirectory());
newHisto->Sumw2();
double val;
double err;
for (int xBinOld = xBinLow; xBinOld <= xBinHigh; xBinOld++) {
int xBinNew = xBinOld;
if (xBinLow > 1) {
xBinNew -= (xBinLow - 1);
}
if (xBinLow > 0 && xBinNew <= 0) {
continue;
}
if (xBinHigh <= histo->GetNbinsX() && xBinNew > nBinsX) {
continue;
}
val = histo->GetBinContent(xBinOld);
err = histo->GetBinError(xBinOld);
if (val != 0.) {
newHisto->SetBinContent(xBinNew, val);
}
if (err != 0.) {
newHisto->SetBinError(xBinNew, err);
}
}
if (keepInUVX && xBinLow > 0) {
val = histo->IntegralAndError(0, xBinLow - 1, err);
if (val != 0.) {
newHisto->SetBinContent(0, val);
}
if (err != 0.) {
newHisto->SetBinError(0, err);
}
}
if (keepInOVX && xBinHigh < histo->GetNbinsX() + 1) {
val = histo->IntegralAndError(xBinHigh + 1, histo->GetNbinsX() + 1, err);
if (val != 0.) {
newHisto->SetBinContent(nBinsX + 1, val);
}
if (err != 0.) {
newHisto->SetBinError(nBinsX + 1, err);
}
}
}
} else if (dim == 2) {
TH2 * histo2d = (TH2*)histo;
int nBinsY = histo->GetNbinsY();
if (yBinLow < 0) {
yBinLow = 0;
}
if (yBinHigh < 0) {
yBinHigh = nBinsY + 1;
}
if (yBinLow > nBinsY || yBinHigh == 0 || yBinHigh < yBinLow || yBinHigh > nBinsY + 1) {
return NULL;
}
if (yBinHigh > 0 && yBinHigh < nBinsY) {
nBinsY -= (nBinsY - yBinHigh);
}
if (yBinLow > 1) {
nBinsY -= (yBinLow - 1);
}
double yMin = histo->GetYaxis()->GetBinLowEdge(TMath::Max(yBinLow, 1));
double yMax = histo->GetYaxis()->GetBinUpEdge(TMath::Min(yBinHigh, histo->GetNbinsY()));
if (histo->InheritsFrom(TH2F::Class())) {
newHisto = new TH2F(histo->GetName(), histo->GetTitle(), nBinsX, xMin, xMax, nBinsY, yMin, yMax);
} else if (histo->InheritsFrom(TH2D::Class())) {
newHisto = new TH2D(histo->GetName(), histo->GetTitle(), nBinsX, xMin, xMax, nBinsY, yMin, yMax);
}
if (newHisto) {
newHisto->SetDirectory(histo->GetDirectory());
newHisto->Sumw2();
double val;
double err;
for (int xBinOld = xBinLow; xBinOld <= xBinHigh; xBinOld++) {
int xBinNew = xBinOld;
if (xBinLow > 1) {
xBinNew -= (xBinLow - 1);
}
if (xBinLow > 0 && xBinNew <= 0) {
continue;
}
if (xBinHigh <= histo->GetNbinsX() && xBinNew > nBinsX) {
continue;
}
for (int yBinOld = yBinLow; yBinOld <= yBinHigh; yBinOld++) {
int yBinNew = yBinOld;
if (yBinLow > 1) {
yBinNew -= (yBinLow - 1);
}
if (yBinLow > 0 && yBinNew <= 0) {
continue;
}
if (yBinHigh <= histo->GetNbinsY() && yBinNew > nBinsY) {
continue;
}
val = histo->GetBinContent(xBinOld, yBinOld);
err = histo->GetBinError(xBinOld, yBinOld);
if (val != 0.) {
newHisto->SetBinContent(xBinNew, yBinNew, val);
}
if (err != 0.) {
newHisto->SetBinError(xBinNew, yBinNew, err);
}
if (xBinOld == xBinLow && keepInUVX && xBinLow > 0) {
val = histo2d->IntegralAndError(0, xBinLow - 1, yBinOld, yBinOld, err);
if (val != 0.) {
newHisto->SetBinContent(0, yBinNew, val);
}
if (err != 0.) {
newHisto->SetBinError(0, yBinNew, err);
}
}
if (xBinOld == xBinLow && keepInOVX && xBinHigh < histo->GetNbinsX() + 1) {
val = histo2d->IntegralAndError(xBinHigh + 1, histo->GetNbinsX() + 1, yBinOld, yBinOld, err);
if (val != 0.) {
newHisto->SetBinContent(nBinsX + 1, yBinNew, val);
}
if (err != 0.) {
newHisto->SetBinError(nBinsX + 1, yBinNew, err);
}
}
if (yBinOld == yBinLow && keepInUVY && yBinLow > 0) {
val = histo2d->IntegralAndError(xBinOld, xBinOld, 0, yBinLow - 1, err);
if (val != 0.) {
newHisto->SetBinContent(xBinNew, 0, val);
}
if (err != 0.) {
newHisto->SetBinError(xBinNew, 0, err);
}
}
if (yBinOld == yBinLow && keepInOVY && yBinHigh < histo->GetNbinsY() + 1) {
val = histo2d->IntegralAndError(xBinOld, xBinOld, yBinHigh + 1, histo->GetNbinsY() + 1, err);
if (val != 0.) {
newHisto->SetBinContent(xBinNew, nBinsY + 1, val);
}
if (err != 0.) {
newHisto->SetBinError(xBinNew, nBinsY + 1, err);
}
}
}
}
if (keepInUVX && keepInUVY && xBinLow > 0 && yBinLow > 0) {
val = histo2d->IntegralAndError(0, xBinLow - 1, 0, yBinLow - 1, err);
if (val != 0.) {
newHisto->SetBinContent(0, 0, val);
}
if (err != 0.) {
newHisto->SetBinError(0, 0, err);
}
}
if (keepInOVX && keepInUVY && xBinHigh < histo->GetNbinsX() + 1 && yBinLow > 0) {
val = histo2d->IntegralAndError(xBinHigh + 1, histo->GetNbinsX() + 1, 0, yBinLow - 1, err);
if (val != 0.) {
newHisto->SetBinContent(nBinsX + 1, 0, val);
}
if (err != 0.) {
newHisto->SetBinError(nBinsX + 1, 0, err);
}
}
if (keepInUVX && keepInOVY && xBinLow > 0 && yBinHigh < histo->GetNbinsY() + 1) {
val = histo2d->IntegralAndError(0, xBinLow - 1, yBinHigh + 1, histo->GetNbinsY() + 1, err);
if (val != 0.) {
newHisto->SetBinContent(0, nBinsY + 1, val);
}
if (err != 0.) {
newHisto->SetBinError(0, nBinsY + 1, err);
}
}
if (keepInOVX && keepInOVY && xBinHigh < histo->GetNbinsX() + 1 && yBinHigh < histo->GetNbinsY() + 1) {
val = histo2d->IntegralAndError(xBinHigh + 1, histo->GetNbinsX() + 1,
yBinHigh + 1, histo->GetNbinsY() + 1, err);
if (val != 0.) {
newHisto->SetBinContent(nBinsX + 1, nBinsY + 1, val);
}
if (err != 0.) {
newHisto->SetBinError(nBinsX + 1, nBinsY + 1, err);
}
}
}
}
if (newHisto) {
copyStyle(newHisto, histo);
newHisto->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
newHisto->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
newHisto->SetEntries(nEntries);
}
histo->SetName(orig_name);
newHisto->SetName(orig_name);
return newHisto;
}
TH2 * TQHistogramUtils::removeBins(TH2* in, TString blackList) {
std::vector<TString> bl;
bl.push_back(blackList);
return removeBins(in, bl);
}
TH2 * TQHistogramUtils::removeBins(TH2* in, const std::vector<TString>& blackList) {
if (!in) return NULL;
std::vector<int> binsX;
std::vector<int> binsY;
TAxis* xAxis = in->GetXaxis();
bool keep;
for (int i=1; i<xAxis->GetNbins()+1; i++) {
keep = true;
for(size_t j=0; j<blackList.size() && keep; j++) {
keep = keep && !TQStringUtils::matches(xAxis->GetBinLabel(i), blackList[j]);
}
if (keep) binsX.push_back(i);
}
TAxis* yAxis = in->GetYaxis();
for (int i=1; i<yAxis->GetNbins()+1; i++) {
keep = true;
for(size_t j=0; j<blackList.size() && keep; j++) {
keep = keep && !TQStringUtils::matches(yAxis->GetBinLabel(i), blackList[j]);
}
if (keep) binsY.push_back(i);
}
if (binsX.size()== 0 || binsY.size() == 0) return NULL;
int nX = binsX.size();
int nY = binsY.size();
TH2* retval = new TH2F(in->GetName(),in->GetTitle(),nX,0,nX,nY,0,nY);
retval->GetXaxis()->SetTitle(in->GetXaxis()->GetTitle());
retval->GetYaxis()->SetTitle(in->GetYaxis()->GetTitle());
retval->SetDirectory(NULL);
for (size_t x = 0; x<binsX.size(); x++) {
retval->GetXaxis()->SetBinLabel(x+1, in->GetXaxis()->GetBinLabel(binsX[x]));
}
for (size_t y = 0; y<binsY.size(); y++) {
retval->GetYaxis()->SetBinLabel(y+1, in->GetYaxis()->GetBinLabel(binsY[y]));
}
for (size_t x=0; x<binsX.size(); x++) {
for (size_t y = 0; y<binsY.size(); y++) {
retval->SetBinContent(x+1,y+1, in->GetBinContent(binsX[x],binsY[y]));
retval->SetBinError(x+1,y+1, in->GetBinError(binsX[x],binsY[y]));
}
}
return retval;
}
namespace {
std::vector<int> getBinBordersFlatPrivate(TH1 * histo, int nBins, int iFirstBin, double meanPerBin, double &quality, bool includeOverflows) {
if (nBins <= 1) {
quality = TMath::Power(histo->Integral(iFirstBin,
histo->GetNbinsX() + (includeOverflows ? 1 : 0)) - meanPerBin, 2.);
return std::vector<int>();
} else {
std::vector<double> nxtChi2;
std::vector<std::vector<int> > nxtBorders;
int left = iFirstBin;
int right = histo->GetNbinsX() + 1 - (nBins - (includeOverflows ? 2 : 1));
double thisBin = 0.;
int iThisBin = left;
while (iThisBin < right && thisBin < meanPerBin)
thisBin += histo->GetBinContent(iThisBin++);
left = TMath::Max(left, iThisBin - 2);
right = TMath::Min(right, iThisBin + 1);
for (int iBin = left; iBin < right; iBin++) {
double thisQuality = 0.;
nxtBorders.push_back(getBinBordersFlatPrivate(histo, nBins - 1, iBin + 1,
meanPerBin, thisQuality, includeOverflows));
thisQuality += TMath::Power(histo->Integral(iFirstBin, iBin) - meanPerBin, 2.);
nxtChi2.push_back(thisQuality);
}
int minIndex = -1;
for (unsigned int i = 0; i < nxtChi2.size(); i++)
if (minIndex < 0 || nxtChi2[i] < nxtChi2[minIndex])
minIndex = i;
std::vector<int> binBorders;
for (unsigned int i = 0; i < nxtChi2.size(); i++) {
if (i == (unsigned int)minIndex) {
binBorders.push_back(left + minIndex);
for (unsigned int j = 0; j < nxtBorders[i].size(); j++)
binBorders.push_back(nxtBorders[i][j]);
}
}
return binBorders;
}
}
}
std::vector<int> TQHistogramUtils::getBinBordersFlat2D(TH2 * histo, int nBins, bool remapX, bool includeOverflows, bool remapSlices) {
if (!histo) {
std::vector<int>();
}
int n = (remapX ? histo->GetNbinsY() : histo->GetNbinsX()) + 2;
std::vector<int> bordersRef;
std::vector<int> borders2D;
for (int i = 0; i < n; i++) {
TH1 * h_ref = NULL;
if (bordersRef.size()==0) {
h_ref = getProjection(histo, remapX);
} else {
h_ref = getProjection(histo, remapX, i, i);
}
if (h_ref && bordersRef.size() == 0) {
bordersRef = getBinBordersFlat(h_ref, nBins, includeOverflows);
delete h_ref;
}
for (size_t j = 0; j < bordersRef.size(); j++) {
borders2D.push_back(bordersRef[j]);
}
if (remapSlices) {
bordersRef.clear();
}
}
return borders2D;
}
std::vector<int> TQHistogramUtils::getBinBordersFlat(TH1 * histo, int nBins, bool includeOverflows) {
if (getDimension(histo) != 1 || nBins <= 1) {
return std::vector<int>();
}
double integral = getIntegral(histo);
if (!includeOverflows) {
integral -= histo->GetBinContent(0);
integral -= histo->GetBinContent(histo->GetNbinsX() + 1);
}
double meanPerBin = integral / (double)nBins;
double dummy = 0.;
return getBinBordersFlatPrivate(histo, nBins, includeOverflows ? 0 : 1, meanPerBin, dummy, includeOverflows);
}
std::vector<int> TQHistogramUtils::getOptimizedBinBorders(TH1 * hsig, TH1 * hbkg, double minSignal, double minBkg, double maxBkgUnc, bool significanceAgnostic, double maxSignal, double estimatedMaxSignInBin, bool verbose, double maxSigUnc, double minBinWidth, bool mergeBins)
{
if (getDimension(hsig) != 1 || getDimension(hbkg) != 1) {
return std::vector<int>();
}
int movingUpperBin = hsig->GetXaxis()->GetNbins() + 1;
if (verbose) {
INFO("********************************************************");
INFO("==>> Running binning optimization with the following settings");
INFO(TString::Format("-->> minimum signal per bin: %f", minSignal));
INFO(TString::Format("-->> minimum bkg per bin: %f", minBkg));
INFO(TString::Format("-->> maximum bkg uncertainty per bin: %f", maxBkgUnc));
INFO(TString::Format("-->> maximum sig uncertainty per bin: %f", maxSigUnc));
INFO(TString::Format("-->> run mode agnostic to significance? %d", significanceAgnostic));
INFO(TString::Format("-->> sufficient signal per bin to set boundary: %f", maxSignal));
INFO(TString::Format("-->> estimated significance of first bin to judge unsignificant part of distribution: %f", estimatedMaxSignInBin));
INFO(TString::Format("-->> minimum allowed binwidth: %f", minBinWidth));
INFO(TString::Format("-->> merge first two bins: %d", mergeBins));
INFO("*********************************************************");
}
if (significanceAgnostic && !(estimatedMaxSignInBin > 0.2)) {
WARN("Your binning optimization runs in significance agnostic mode but the provided " \
"significance estimate with the 'estimatedMaxSignInBin' argument is 0. " \
"This could lead to a very fine binning in a signal insensitive region which might not be desired! " \
"Consider increasing 'estimatedMaxSignInBin'");
}
std::vector<double> bestSigns = {};
std::vector<int> binBoundaries = {};
int i = -1;
while (movingUpperBin > 0) {
i += 1;
if (verbose) {INFO(TString::Format("============ %d Iteration =================", i+1));}
std::vector<double> signs = {};
std::vector<int> bins = {};
bool setBoundary = true;
double TotbinWidth = 0;
double sig_err;
double bkg_err;
double sign = -1;
for (int ibin = movingUpperBin; ibin >= 0; ibin--) {
double binWidth = hsig->GetBinWidth(ibin);
TotbinWidth += binWidth;
if (verbose) {
INFO(TString::Format("-->> ibin: %d", ibin));
INFO(TString::Format("-->> binWidth: %f", binWidth));
INFO(TString::Format("-->> TotbinWidth: %f", TotbinWidth));
}
double sig = hsig->IntegralAndError(ibin, movingUpperBin, sig_err);
double bkg = hbkg->IntegralAndError(ibin, movingUpperBin, bkg_err);
if (sig < minSignal || bkg < minBkg || TotbinWidth < minBinWidth ) {
if (verbose) {INFO(TString::Format("Integral(lowBin=%d, upBin=%d): skipping because of insufficient signal yield (%f) or bkg yield (%f) or BinWidth is lower than %f GeV", ibin, movingUpperBin, sig, bkg,minBinWidth));}
continue;
}
if (bkg_err / bkg > maxBkgUnc) {
if (verbose) {INFO(TString::Format("Integral(lowBin=%d, upBin=%d): skipping because rel. bkg MC uncertainty (%f) is larger than the maximum set (%f)", ibin, movingUpperBin, bkg_err / bkg, maxBkgUnc));}
continue;
}
if (sig_err / sig > maxSigUnc) {
if (verbose) {INFO(TString::Format("Integral(lowBin=%d, upBin=%d): skipping because rel. sig MC uncertainty (%f) is larger than the maximum set (%f)", ibin, movingUpperBin, sig_err / sig, maxSigUnc));}
continue;
}
if ( (sig_err / sig > maxSigUnc) && (sig > maxSignal) ) {
WARN(TString::Format("TQHistogramUtils::getOptimizedBinBorders failed to find binning configuration with MaxSignal (%f) and maxSigUnc (%f)", maxSignal, maxSigUnc));
}
if ( (sig > maxSignal) && (TotbinWidth <= minBinWidth) ) {
WARN(TString::Format("TQHistogramUtils::getOptimizedBinBorders failed to find binning configuration with MaxSignal (%f) and minBinWidth (%f) GeV", maxSignal, minBinWidth));
}
if (bkg != 0) {
sign = getSignificance(bkg, sig, "asymptoticPoissonPoisson", bkg_err);
if (verbose) {INFO(TString::Format("Criteria satisfied at Integral(lowBin=%d, upBin=%d): sig=%f +- %f (rel. unc. %f) , bkg=%f +- %f (rel. unc. %f), sigma=%f, sigmaUnc=%f, s/sqrt(b)=%f", ibin, movingUpperBin, sig, sig_err, sig_err / sig , bkg, bkg_err, bkg_err / bkg , sign, sign, sig / TMath::Sqrt(bkg)));}
signs.push_back(sign);
bins.push_back(ibin);
setBoundary = true;
if (significanceAgnostic) {
if (sign > 0.2 * estimatedMaxSignInBin) {
break;
} else {
if (verbose) {INFO(TString::Format("Criteria satisfied at Integral(lowBin=%d, upBin=%d) but not setting a bin boundary because significance is hardly contributing", ibin, movingUpperBin));}
}
}
} else {
if (verbose) {INFO(TString::Format("Integral(lowBin=%d, upBin=%d): sig=%f, bkg=%f, sigma='bkg is zero, cannot calculate significance'", ibin, movingUpperBin, sig, bkg));}
continue;
}
if (sig > maxSignal) {
if (estimatedMaxSignInBin > 0) {
if (*std::max_element(signs.begin(), signs.end()) < 0.2 * estimatedMaxSignInBin) {
if (verbose) {INFO(TString::Format("Reached maximum signal criterium at Integral(lowBin=%d, upBin=%d) but not setting a bin boundary because significance is hardly contributing", ibin, movingUpperBin));}
setBoundary = false;
continue;
} else {
if (verbose) {INFO(TString::Format("Criteria satisfied at Integral(lowBin=%d, upBin=%d): set bin boundary because plenty of signal is already contained in the current range", ibin, movingUpperBin));}
setBoundary = true;
break;
}
}
else {
if (verbose) {INFO(TString::Format("Criteria satisfied at Integral(lowBin=%d, upBin=%d): set bin boundary because plenty of signal is already contained in the current range", ibin, movingUpperBin));}
setBoundary = true;
break;
}
}
}
if (bins.size() == 0) {
signs.push_back(sign);
bestSigns.push_back(sign);
if (verbose) INFO(TString::Format("Integrate rest of distribution (bins %d-%d) with significance: %f", 0, movingUpperBin, sign));
movingUpperBin = 0;
binBoundaries.push_back(movingUpperBin);
} else {
if (setBoundary == true) {
if (!significanceAgnostic) {
int bestSignIndex = std::distance(signs.begin(), std::max_element(signs.begin(), signs.end()));
movingUpperBin = bins[bestSignIndex];
binBoundaries.push_back(movingUpperBin);
bestSigns.push_back(*std::max_element(signs.begin(), signs.end()));
movingUpperBin = movingUpperBin - 1;
} else{
movingUpperBin = bins.back();
binBoundaries.push_back(movingUpperBin);
bestSigns.push_back(signs.back());
movingUpperBin = movingUpperBin - 1;
}
} else {
if (verbose) INFO(TString::Format("Integrate rest of distribution (because significance is hardly contributing anymore) from bins %d-%d which gives a significance: %f", 0, movingUpperBin, signs[signs.size() - 1]));
movingUpperBin = bins[bins.size() - 1];
if (movingUpperBin != 0) {
WARN("In binning optimization an unexpected last bin was seen! Check inputs.");
} else {
binBoundaries.push_back(movingUpperBin);
bestSigns.push_back(signs[signs.size() - 1]);
}
}
if (verbose) INFO(TString::Format("Found new bin boundary: %d", movingUpperBin));
}
}
std::sort(binBoundaries.begin(), binBoundaries.end());
if (binBoundaries[0] == 0) {binBoundaries = std::vector<int>(binBoundaries.begin() + 1, binBoundaries.end());}
if (mergeBins) binBoundaries = std::vector<int>(binBoundaries.begin() + 1, binBoundaries.end());
if (verbose) {
INFO("\n*********************************************************");
INFO("==>> Final Results for binning optimization");
INFO(TString::Format("Found bin boundaries in %d iterations with significances per bin:", i+1));
INFO("border, significance");
for (size_t i=0; i < binBoundaries.size(); i++) {
INFO(TString::Format("%d, %f", binBoundaries[i], bestSigns[i]));
}
INFO("*********************************************************");
}
return binBoundaries;
}
TH1 * TQHistogramUtils::convertTo1D(const TH2 * histo, bool alongX, bool includeUnderflowsX,
bool includeOverflowsX, bool includeUnderflowsY, bool includeOverflowsY) {
if (!histo) {
return NULL;
}
int nX = histo->GetNbinsX() + (includeUnderflowsX ? 1 : 0) + (includeOverflowsX ? 1 : 0);
int nY = histo->GetNbinsY() + (includeUnderflowsY ? 1 : 0) + (includeOverflowsY ? 1 : 0);
int nBins;
int nBlocks;
if (alongX) {
nBins = nX;
nBlocks = nY;
} else {
nBins = nY;
nBlocks = nX;
}
TH1 * h_result = NULL;
if (histo->InheritsFrom(TH2F::Class())) {
h_result = new TH1F(histo->GetName(), histo->GetTitle(), nBins * nBlocks, 0., 1.);
} else if (histo->InheritsFrom(TH2D::Class())) {
h_result = new TH1D(histo->GetName(), histo->GetTitle(), nBins * nBlocks, 0., 1.);
}
if (h_result) {
h_result->SetDirectory(histo->GetDirectory());
} else {
return NULL;
}
h_result->Sumw2();
TString titleX = TQStringUtils::getWithoutUnit(histo->GetXaxis()->GetTitle());
TString titleY = TQStringUtils::getWithoutUnit(histo->GetYaxis()->GetTitle());
TString ufX;
TString ofX;
TString ufY;
TString ofY;
if (includeUnderflowsX) {
ufX = "<UF> ";
}
if (includeOverflowsX) {
ofX = " <OF>";
}
if (includeUnderflowsY) {
ufY = "<UF> ";
}
if (includeOverflowsY) {
ofY = " <OF>";
}
TString title = "Reordered (%s%s%s) #otimes (%s%s%s)";
if (alongX) {
h_result->GetXaxis()->SetTitle(TString::Format(title.Data(), ufX.Data(),
titleX.Data(), ofX.Data(), ufY.Data(), titleY.Data(), ofY.Data()).Data());
} else {
h_result->GetXaxis()->SetTitle(TString::Format(title.Data(), ufY.Data(),
titleY.Data(), ofY.Data(), ufX.Data(), titleX.Data(), ofX.Data()).Data());
}
int i = 1;
for (int iBlock = 0; iBlock < nBlocks; iBlock++) {
for (int iBin = 0; iBin < nBins; iBin++) {
int iX;
int iY;
if (alongX) {
iX = iBin + (includeUnderflowsX ? 0 : 1);
iY = iBlock + (includeUnderflowsY ? 0 : 1);
} else {
iX = iBlock + (includeUnderflowsX ? 0 : 1);
iY = iBin + (includeUnderflowsY ? 0 : 1);
}
h_result->SetBinContent(i, histo->GetBinContent(iX, iY));
h_result->SetBinError(i, histo->GetBinError(iX, iY));
i++;
}
}
copyStyle(h_result, histo);
return h_result;
}
void TQHistogramUtils::reorderBins(TH2* hist, const std::vector<TString>& ordering){
TMatrixD* mat = TQHistogramUtils::convertHistogramToMatrix(hist);
std::vector<TString> xaxis,yaxis;
std::vector<TString> newxaxis,newyaxis;
for(Int_t i=0; i<hist->GetNbinsX(); ++i){
xaxis.push_back(hist->GetXaxis()->GetBinLabel(i+1));
}
for(Int_t i=0; i<hist->GetNbinsY(); ++i){
yaxis.push_back(hist->GetYaxis()->GetBinLabel(i+1));
}
hist->Reset("ICE");
for(size_t j=0; j<ordering.size(); ++j){
for(size_t i=0; i<xaxis.size(); ++i){
if(ordering[j] == xaxis[i]) newxaxis.push_back(xaxis[i]);
}
for(size_t i=0; i<yaxis.size(); ++i){
if(ordering[j] == yaxis[i]) newyaxis.push_back(yaxis[i]);
}
}
for(size_t i=0; i<newxaxis.size(); ++i){
hist->GetXaxis()->SetBinLabel(i+1,newxaxis[i]);
}
for(size_t i=0; i<newyaxis.size(); ++i){
hist->GetYaxis()->SetBinLabel(i+1,newyaxis[i]);
}
for(size_t i=0; i<xaxis.size(); ++i){
for(size_t j=0; j<yaxis.size(); ++j){
int xidx = hist->GetXaxis()->FindBin(xaxis[i] );
int yidx = hist->GetYaxis()->FindBin(yaxis[j] );
hist->SetBinContent(xidx,yidx,(*mat)[i][j]);
}
}
delete mat;
}
TH1 * TQHistogramUtils::getProjection(TH1 * histo, bool onX, int binLow, int binHigh) {
if (getDimension(histo) != 2) {
return NULL;
}
if (binLow < 0) {
binLow = 0;
}
int nBins = (onX ? histo->GetNbinsY() : histo->GetNbinsX());
if (binHigh < 0 || binHigh > nBins + 1) {
binHigh = nBins + 1;
}
if (binLow > binHigh) {
return NULL;
}
TDirectory * histoDir = histo->GetDirectory();
TString prefix = TString::Format("__h_proj_%s", histo->GetName());
TString name = prefix;
int i = 2;
while ((gDirectory && gDirectory->FindObject(name.Data()))
|| (histoDir && histoDir->FindObject(name.Data()))) {
name = TString::Format("%s_i%d", prefix.Data(), i++);
}
TH1D * h_proj;
if (onX) {
h_proj = ((TH2*)histo)->ProjectionX(name.Data(), binLow, binHigh, "e");
} else {
h_proj = ((TH2*)histo)->ProjectionY(name.Data(), binLow, binHigh, "e");
}
if (h_proj) {
h_proj->SetDirectory(histoDir);
if (!histoDir) {
h_proj->SetName(histo->GetName());
}
copyStyle(h_proj, histo);
}
return h_proj;
}
TH1 * TQHistogramUtils::getProjectionX(TH1 * histo, int binLow, int binHigh) {
return getProjection(histo, true, binLow, binHigh);
}
TH1 * TQHistogramUtils::getProjectionY(TH1 * histo, int binLow, int binHigh) {
return getProjection(histo, false, binLow, binHigh);
}
bool TQHistogramUtils::applyPoissonErrors(TH1 * histo) {
if (!histo) {
return false;
}
bool neg = false;
int n = getNBins(histo);
for (int i = 0; i < n; i++) {
double bin = histo->GetBinContent(i);
if (bin >= 0.) {
histo->SetBinError(i, TMath::Sqrt(bin));
} else {
histo->SetBinError(i, 0.);
neg = true;
}
}
return !neg;
}
void TQHistogramUtils::copyGraphAxisTitles(TNamed* copy, const TNamed* graph) {
for(size_t idx=0; idx<3; idx++){
const TAxis* oaxis = TQHistogramUtils::getAxis(graph,idx);
TAxis* caxis = TQHistogramUtils::getAxis_nonconst(copy,idx);
if(!oaxis || !caxis) break;
caxis->SetTitle(oaxis->GetTitle());
}
}
TNamed * TQHistogramUtils::copyGraph(const TNamed* graph, const TString& newName) {
if (!graph) {
return NULL;
}
TNamed * copy = TQHistogramUtils::createGraph(TQHistogramUtils::getGraphDefinition(graph));
if (!copy) {
return NULL;
}
TQHistogramUtils::copyStyle(copy,graph);
TQHistogramUtils::addGraph(copy,graph);
TQHistogramUtils::copyGraphAxisTitles(copy,graph);
if (newName.IsNull()) {
copy->SetName(graph->GetName());
} else {
copy->SetName(newName);
}
return copy;
}
TH1 * TQHistogramUtils::copyHistogram(const TH1 * histo, const TString& newName) {
if (!histo) {
return NULL;
}
TH1 * copy = TQHistogramUtils::createHistogram(TQHistogramUtils::getHistogramDefinition(histo));
if (!copy) {
return NULL;
}
TQHistogramUtils::copyStyle(copy,histo);
if(histo->GetXaxis()) copy->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
if(histo->GetYaxis()) copy->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
if(histo->GetZaxis()) copy->GetZaxis()->SetTitle(histo->GetZaxis()->GetTitle());
TDirectory * histoDir = histo->GetDirectory();
if (newName.IsNull() || newName == "NODIR") {
TString prefix = histo->GetName();
TString name = prefix;
int i = 2;
while (histoDir && histoDir->FindObject(name.Data())) {
name = TString::Format("%s_i%d", prefix.Data(), i++);
}
copy->SetName(name.Data());
} else {
copy->SetName(newName);
}
if (!histoDir || newName == "NODIR") {
copy->SetDirectory(NULL);
} else {
copy->SetDirectory(histoDir);
}
TQHistogramUtils::addHistogram(copy,histo);
return copy;
}
bool TQHistogramUtils::copyBinLabels(const TH1* source, TH1* target) {
if (!source || !target) return false;
int dim = abs(TQHistogramUtils::getDimension(source));
if (dim != abs(TQHistogramUtils::getDimension(target))) return false;
switch (dim) {
case 3:
if (!TQHistogramUtils::copyBinLabels(source->GetZaxis(), target->GetZaxis())) return false;
break;
case 2:
if (!TQHistogramUtils::copyBinLabels(source->GetYaxis(), target->GetYaxis())) return false;
break;
case 1:
if (!TQHistogramUtils::copyBinLabels(source->GetXaxis(), target->GetXaxis())) return false;
if (TQHistogramUtils::hasBinLabels(target->GetXaxis())) target->GetXaxis()->LabelsOption("v");
break;
default:
WARN("Unsupported histogram dimension '%i' in TQHistogramUtils::copyBinLabels",dim);
return false;
break;
}
return true;
}
bool TQHistogramUtils::hasBinLabels(const TH1* h){
int dim = abs(TQHistogramUtils::getDimension(h));
bool retval = TQHistogramUtils::hasBinLabels(h->GetXaxis());
if(dim > 1) retval = retval && TQHistogramUtils::hasBinLabels(h->GetYaxis());
if(dim > 2) retval = retval && TQHistogramUtils::hasBinLabels(h->GetZaxis());
return retval;
}
bool TQHistogramUtils::hasBinLabels(const TAxis* a){
if (!a) return false;
THashList* labels = a->GetLabels();
return labels && labels->GetSize()>0;
}
bool TQHistogramUtils::copyBinLabels(const TAxis* source, TAxis* target) {
if (!source || !target) return false;
if (!TQHistogramUtils::hasBinLabels(source)) return true;
int nBins = source->GetNbins();
if (nBins != target->GetNbins()) return false;
for (int i=1; i<= nBins; i++) {
target->SetBinLabel(i,source->GetBinLabel(i));
}
return true;
}
bool TQHistogramUtils::copyAxisStyle(const TH1* source, TH1* target) {
if (!source || !target) return false;
int dim = abs(TQHistogramUtils::getDimension(source));
if (dim != abs(TQHistogramUtils::getDimension(target))) return false;
switch (dim) {
case 3:
if (!TQHistogramUtils::copyAxisStyle(source->GetZaxis(), target->GetZaxis())) return false;
break;
case 2:
if (!TQHistogramUtils::copyAxisStyle(source->GetYaxis(), target->GetYaxis())) return false;
break;
case 1:
if (!TQHistogramUtils::copyAxisStyle(source->GetXaxis(), target->GetXaxis())) return false;
break;
default:
WARN("Unsupported histogram dimension '%i' in TQHistogramUtils::copyAxisStyle",dim);
return false;
break;
}
return true;
}
bool TQHistogramUtils::copyAxisStyle(const TAxis* source, TAxis* target) {
if (!source || !target) return false;
target->SetAxisColor(source->GetAxisColor());
target->SetLabelColor(source->GetLabelColor());
target->SetLabelFont(source->GetLabelFont());
target->SetLabelOffset(source->GetLabelOffset());
target->SetLabelSize(source->GetLabelSize());
target->SetNdivisions(source->GetNdivisions());
target->SetTickLength(source->GetTickLength());
target->SetTitleColor(source->GetTitleColor());
target->SetTitleFont(source->GetTitleFont());
target->SetTitleOffset(source->GetTitleOffset());
target->SetTitleSize(source->GetTitleSize());
return true;
}
bool TQHistogramUtils::includeSystematics(TH1 * histo, TH1 * systematics) {
if (!checkConsistency(histo, systematics))
return false;
if (getDimension(histo) != 1)
return false;
int nBins = histo->GetNbinsX();
for (int iBin = 0; iBin < nBins + 2; iBin++) {
double binErrorSquared = TMath::Power(histo->GetBinError(iBin), 2.);
binErrorSquared += TMath::Power(systematics->GetBinError(iBin), 2.);
histo->SetBinError(iBin, TMath::Sqrt(binErrorSquared) + systematics->GetBinContent(iBin));
}
return true;
}
TH1 * TQHistogramUtils::getSystematics(TH1 * h_nominal, TList * singleVars, TList * pairVars) {
int nSingleVars = (singleVars ? singleVars->GetEntries() : 0);
int nPairVars = (pairVars ? pairVars->GetEntries() : 0);
if (nPairVars % 2 == 1)
return 0;
TH1 * systematics = copyHistogram(h_nominal);
if (!h_nominal)
return 0;
systematics->Reset();
int nBins = getNBins(systematics);
for (int iBin = 0; iBin < nBins; iBin++) {
double nom = h_nominal->GetBinContent(iBin);
double totalSysSquared = 0.;
for (int iVar = 0; iVar < nSingleVars; iVar++) {
TObject * obj = singleVars->At(iVar);
if (obj && obj->InheritsFrom(TH1::Class())
&& checkConsistency(h_nominal, (TH1*)obj))
totalSysSquared += TMath::Power(((TH1*)obj)->GetBinContent(iBin) - nom, 2.);
else
return 0;
}
for (int iVar = 0; iVar < (nPairVars / 2); iVar++) {
TObject * obj0 = pairVars->At(2*iVar);
TObject * obj1 = pairVars->At(2*iVar + 1);
if (obj0 && obj0->InheritsFrom(TH1::Class())
&& checkConsistency(h_nominal, (TH1*)obj0) &&
obj1 && obj1->InheritsFrom(TH1::Class())
&& checkConsistency(h_nominal, (TH1*)obj1))
totalSysSquared += .5 * (
TMath::Power(((TH1*)obj0)->GetBinContent(iBin) - nom, 2.) +
TMath::Power(((TH1*)obj1)->GetBinContent(iBin) - nom, 2.));
else
return 0;
}
systematics->SetBinError(iBin, TMath::Sqrt(totalSysSquared));
}
return systematics;
}
bool TQHistogramUtils::addHistogram(TH1 * histo1, const TH1 * histo2, TQCounter* scale, double corr12, bool includeScaleUncertainty) {
if(scale)
return TQHistogramUtils::addHistogram(histo1,histo2,scale->getCounter(),scale->getError(),corr12,includeScaleUncertainty);
else
return TQHistogramUtils::addHistogram(histo1,histo2,1.,0.,corr12,false);
}
bool TQHistogramUtils::addHistogramInQuadrature(TH1 * histo1, const TH1 * histo2, double factor) {
int nbins = TQHistogramUtils::getNbinsGlobal(histo1);
int binmin = 0;
int binmax = nbins+1;
if(TQHistogramUtils::hasBinLabels(histo1)){
binmin = 1;
binmax = nbins+1;
}
if (!histo1 || !histo2 || !checkConsistency(histo1, histo2)) {
return false;
}
int nentries = histo1->GetEntries();
for(int i=binmin; i<binmax; ++i){
auto a = histo1->GetBinContent(i);
auto b = histo2->GetBinContent(i);
histo1->SetBinContent(i,sqrt(a*a+factor*b*b));
histo1->SetBinError(i,0.0);
}
histo1->SetEntries(nentries);
return true;
}
bool TQHistogramUtils::addHistogramAsError(TH1 * hist, const TH1 * errhist, bool isRelative) {
int nbins = TQHistogramUtils::getNbinsGlobal(hist);
int binmin = 0;
int binmax = nbins+1;
if(TQHistogramUtils::hasBinLabels(hist)){
binmin = 1;
binmax = nbins+1;
}
if (!hist || !errhist || !checkConsistency(hist, errhist)) {
return false;
}
int nentries = hist->GetEntries();
for(int i=binmin; i<binmax; ++i){
auto a = hist->GetBinError(i);
auto b = errhist->GetBinContent(i);
if(isRelative) b *= a;
hist->SetBinError(i,sqrt(a*a+b*b));
}
hist->SetEntries(nentries);
return true;
}
bool TQHistogramUtils::addHistogramInQuadrature(TH1 * histo1, double value, double factor) {
if (!histo1){
return false;
}
int nbins = TQHistogramUtils::getNbinsGlobal(histo1);
int binmin = 0;
int binmax = nbins+1;
if(TQHistogramUtils::hasBinLabels(histo1)){
binmin = 1;
binmax = nbins+1;
}
int nentries = histo1->GetEntries();
for(int i=binmin; i<binmax; ++i){
auto a = histo1->GetBinContent(i);
histo1->SetBinContent(i,sqrt(a*a+factor*value*value));
histo1->SetBinError(i,0.0);
}
histo1->SetEntries(nentries);
return true;
}
TH1* TQHistogramUtils::sumOfSquares(const std::vector<TH1*>& histograms) {
TH1* result = nullptr;
int nBins=0;
int bin=0;
for (const TH1* hist: histograms) {
if (!result) {
result = TQHistogramUtils::createHistogram(TQHistogramUtils::getHistogramDefinition(hist));
nBins = TQHistogramUtils::getNbinsGlobal(result);
}
for (bin=0; bin<nBins; ++bin) {
result->SetBinContent( bin, result->GetBinContent(bin) + pow(hist->GetBinContent(bin), 2) );
}
}
return result;
}
TH1* TQHistogramUtils::sumHistogramsInQuadrature(const std::vector<TH1*>& histograms) {
TH1* result = TQHistogramUtils::sumOfSquares(histograms);
if (!result) return nullptr;
int nBins = TQHistogramUtils::getNbinsGlobal(result);
for (int bin=0; bin<nBins; ++bin) {
result->SetBinContent( bin, std::sqrt(result->GetBinContent(bin)) );
}
return result;
}
bool TQHistogramUtils::addHistogramWithoutError(TH1 * histo1, const TH1 * histo2, double scale) {
if(!histo1 || !histo2) return false;
int nbins = TQHistogramUtils::getNbinsGlobal(histo1);
int binmin = 0;
int binmax = nbins+1;
if(TQHistogramUtils::hasBinLabels(histo1)){
binmin = 1;
binmax = nbins+1;
}
const int n1 = histo1->GetEntries();
const int n2 = histo2->GetEntries();
for(int i=binmin; i<binmax; ++i){
const double val1 = histo1->GetBinContent(i);
const double val2 = histo2->GetBinContent(i);
const double err1 = histo1->GetBinError(i);
histo1->SetBinContent (i,val1+scale*val2);
histo1->SetBinError (i,err1);
}
histo1->SetEntries(n1+n2);
return true;
}
bool TQHistogramUtils::divideHistogramWithoutError(TH1 * histo1, const TH1 * histo2) {
int nbins = TQHistogramUtils::getNbinsGlobal(histo1);
int binmin = 0;
int binmax = nbins+1;
if(TQHistogramUtils::hasBinLabels(histo1)){
binmin = 1;
binmax = nbins+1;
}
const int n1 = histo1->GetEntries();
for(int i=binmin; i<binmax; ++i){
const double val1 = histo1->GetBinContent(i);
const double val2 = histo2->GetBinContent(i);
const double err1 = histo1->GetBinError(i);
if (val2 != 0) {
histo1->SetBinContent (i,val1/val2);
histo1->SetBinError (i,err1/val2);
} else {
histo1->SetBinContent (i,0.0);
histo1->SetBinError (i,0.0);
}
}
histo1->SetEntries(n1);
return true;
}
bool TQHistogramUtils::multiplyHistogramWithoutError(TH1 * histo1, const TH1 * histo2) {
int nbins = TQHistogramUtils::getNbinsGlobal(histo1);
int binmin = 0;
int binmax = nbins+1;
if(TQHistogramUtils::hasBinLabels(histo1)){
binmin = 1;
binmax = nbins+1;
}
const int n1 = histo1->GetEntries();
for(int i=binmin; i<binmax; ++i){
const double val1 = histo1->GetBinContent(i);
const double val2 = histo2->GetBinContent(i);
const double err1 = histo1->GetBinError(i);
histo1->SetBinContent (i,val1*val2);
histo1->SetBinError (i,err1*val2);
}
histo1->SetEntries(n1);
return true;
}
bool TQHistogramUtils::addHistogram(TH1 * histo1, const TH1 * histo2, double scale, double scaleUncertainty, double corr12, bool includeScaleUncertainty) {
if (!histo1 || !histo2 || !checkConsistency(histo1, histo2)) {
return false;
}
TProfile* p1 = dynamic_cast<TProfile*>(histo1);
const TProfile* p2 = dynamic_cast<const TProfile*>(histo2);
if(p1 && p2){
p1->Add(p2,scale);
} else {
const int n1 = histo1->GetEntries();
const int n2 = histo2->GetEntries();
int nbins = TQHistogramUtils::getNbinsGlobal(histo1);
int binmin = 0;
int binmax = nbins+1;
if(TQHistogramUtils::hasBinLabels(histo1)){
binmin = 1;
binmax = nbins+1;
}
for(int i=binmin; i<binmax; ++i){
const double val1 = histo1->GetBinContent(i);
const double err1 = histo1->GetBinError(i);
const double val2 = histo2->GetBinContent(i);
const double err2 = histo2->GetBinError(i);
const double val = val1 + scale*val2;
histo1->SetBinContent(i,val);
if(includeScaleUncertainty){
const double err_squared = err1*err1 + err2*err2*scale*scale + val2*val2*scaleUncertainty*scaleUncertainty + 2 * corr12 * scale * err1 * err2;
histo1->SetBinError (i,sqrt(err_squared));
} else {
const double err_squared = err1*err1 + err2*err2*scale*scale + 2 * corr12 * scale * err1 * err2;
histo1->SetBinError (i,sqrt(err_squared));
}
}
histo1->SetEntries(n1+n2);
}
return true;
}
bool TQHistogramUtils::replaceBins(TH1 * histo1, TH1 * histo2, std::vector<int> bins){
if (!histo1 || !histo2 || !checkConsistency(histo1, histo2)) {
return false;
}
int nentries = histo1->GetEntries();
for(auto bin:bins){
histo1->SetBinContent(bin,histo2->GetBinContent(bin));
histo1->SetBinError(bin,histo2->GetBinError(bin));
}
histo1->SetEntries(nentries);
return true;
}
bool TQHistogramUtils::scaleHistogram(TH1 * histo, TQCounter* scale, bool includeScaleUncertainty) {
if(scale)
return TQHistogramUtils::scaleHistogram(histo,scale->getCounter(),scale->getError(),includeScaleUncertainty);
else
return TQHistogramUtils::scaleHistogram(histo,1.,0.,false);
}
bool TQHistogramUtils::scaleHistogram(TH1 * histo, double scale, double scaleUncertainty, bool includeScaleUncertainty) {
if(histo->InheritsFrom(TProfile::Class())) return false;
const int nentries(histo->GetEntries());
for(int i=0; i<TQHistogramUtils::getNbinsGlobal(histo); ++i){
const double val = histo->GetBinContent(i);
const double err = histo->GetBinError(i);
const double val_new = val * scale;
histo->SetBinContent(i,val_new);
if(includeScaleUncertainty){
histo->SetBinError (i,sqrt(err * err * scale * scale + val * val * scaleUncertainty*scaleUncertainty));
} else {
histo->SetBinError (i,err * scale);
}
}
histo->SetEntries(nentries);
return true;
}
bool TQHistogramUtils::drawHistograms(TList * histograms,
TString drawOption, TString extOptions) {
if (!histograms)
return false;
bool applyColors = false;
bool drawLegend = false;
TString legendOptions = "l";
bool setTitle = false;
TString title;
if (!extOptions.IsNull()) {
TQTaggable * tags = new TQTaggable(extOptions);
tags->getTagBool ("applyColors", applyColors);
tags->getTagBool ("legend", drawLegend);
tags->getTagString ("legend.drawOptions", legendOptions);
setTitle = tags->getTagString("title", title);
delete tags;
}
bool success = true;
bool drawSame = false;
TLegend * legend = 0;
if (drawLegend) {
legend = new TLegend(0.65, 0.65, .95, .9);
legend->SetFillColor(kWhite);
}
Color_t color = 1;
TIterator * itr = histograms->MakeIterator();
TObject * obj;
while ((obj = itr->Next())) {
if (obj->InheritsFrom(TH1::Class())) {
TH1 * histo = (TH1*)obj;
if (applyColors)
histo->SetLineColor(color++);
if (legend)
legend->AddEntry(histo, histo->GetTitle(), legendOptions.Data());
if (setTitle)
histo->SetTitle(title.Data());
if (drawSame)
histo->Draw(TString::Format("%s same", drawOption.Data()).Data());
else
histo->Draw(drawOption.Data());
drawSame = true;
} else {
success = false;
}
}
if (legend)
legend->Draw("same");
delete itr;
return success;
}
bool TQHistogramUtils::resetBinErrors(TH1 * histo) {
if (!histo)
return false;
int nBins = getNBins(histo);
for (int iBin = 0; iBin < nBins; iBin++)
histo->SetBinError(iBin, 0.);
return true;
}
int TQHistogramUtils::getDimension(const TH1 * histo) {
if (!histo) {
return 0;
} else if (histo->InheritsFrom(TProfile2D::Class())) {
return -2;
} else if (histo->InheritsFrom(TProfile::Class())) {
return -1;
} else if (histo->InheritsFrom(TH3::Class())) {
return 3;
} else if (histo->InheritsFrom(TH2::Class())) {
return 2;
} else {
return 1;
}
}
const TAxis* TQHistogramUtils::getAxis(const TNamed* obj, int idx){
if(obj->InheritsFrom(TH1::Class())){
TH1* hist = (TH1*)obj;
switch(idx){
case 0: return hist->GetXaxis();
case 1: return hist->GetYaxis();
case 2: return hist->GetZaxis();
default: return NULL;
}
}
if(obj->InheritsFrom(TGraph::Class())){
TGraph* graph = (TGraph*)obj;
switch(idx){
case 0: return graph->GetXaxis();
case 1: return graph->GetYaxis();
default: return NULL;
}
}
if(obj->InheritsFrom(TGraph2D::Class())){
TGraph2D* graph = (TGraph2D*)obj;
switch(idx){
case 0: return graph->GetXaxis();
case 1: return graph->GetYaxis();
case 2: return graph->GetZaxis();
default: return NULL;
}
}
return NULL;
}
TAxis* TQHistogramUtils::getAxis_nonconst(TNamed* obj, int idx){
return const_cast<TAxis*>(getAxis(obj, idx));
}
int TQHistogramUtils::getNBins(const TH1 * histo, bool includeUnderflowOverflow) {
if (!histo)
return 0;
int nBins = histo->GetNbinsX() + (includeUnderflowOverflow ? 2 : 0);
if (histo->InheritsFrom(TH3::Class())) {
nBins *= histo->GetNbinsY() + (includeUnderflowOverflow ? 2 : 0);
nBins *= histo->GetNbinsZ() + (includeUnderflowOverflow ? 2 : 0);
} else if (histo->InheritsFrom(TH2::Class())) {
nBins *= histo->GetNbinsY() + (includeUnderflowOverflow ? 2 : 0);
}
return nBins;
}
int TQHistogramUtils::getSizePerBin(const TH1 * histo) {
if (!histo)
return 0;
else if ( histo->InheritsFrom(TH1F::Class()) ||
histo->InheritsFrom(TH2F::Class()) ||
histo->InheritsFrom(TH3F::Class()))
return 2 * 4;
else if ( histo->InheritsFrom(TH1D::Class()) ||
histo->InheritsFrom(TH2D::Class()) ||
histo->InheritsFrom(TH3D::Class()))
return 2 * 8;
else
return 0;
}
int TQHistogramUtils::estimateSize(const TH1 * histo) {
if (histo)
return getNBins(histo) * getSizePerBin(histo);
else
return 0;
}
bool TQHistogramUtils::checkConsistency(const TH1 * histo1, const TH1 * histo2, bool verbose) {
if (!histo1 || !histo2){
if(verbose) ERRORfunc("received NULL pointer");
return false;
}
DEBUGfunc("function called on histograms '%s' and '%s'",histo1->GetName(),histo2->GetName());
int dim = getDimension(histo1);
if (dim != getDimension(histo2)){
if(verbose) ERRORfunc("inconsistent histogram dimensions");
return false;
}
int nBinsX1 = histo1->GetNbinsX();
int nBinsX2 = histo2->GetNbinsX();
if (nBinsX1 != nBinsX2){
if(verbose) ERRORfunc("inconsistent number of bins in X-direction: %d vs. %d",nBinsX1,nBinsX2);
return false;
}
if (!TMath::AreEqualRel(
histo1->GetXaxis()->GetBinLowEdge(0),
histo2->GetXaxis()->GetBinLowEdge(0), 1E-12) ||
!TMath::AreEqualRel(
histo1->GetXaxis()->GetBinUpEdge(nBinsX1),
histo2->GetXaxis()->GetBinUpEdge(nBinsX2), 1E-12)){
if(verbose) ERRORfunc("inconsistent axis ranges in X-direction");
return false;
}
if (dim < 2)
return true;
int nBinsY1 = histo1->GetNbinsY();
int nBinsY2 = histo2->GetNbinsY();
if (nBinsY1 != nBinsY2){
if(verbose) ERRORfunc("inconsistent number of bins in Y-direction");
return false;
}
if (!TMath::AreEqualRel(
histo1->GetYaxis()->GetBinLowEdge(0),
histo2->GetYaxis()->GetBinLowEdge(0), 1E-12) ||
!TMath::AreEqualRel(
histo1->GetYaxis()->GetBinUpEdge(nBinsY1),
histo2->GetYaxis()->GetBinUpEdge(nBinsY2), 1E-12)){
if(verbose) ERRORfunc("inconsistent axis ranges in Y-direction");
return false;
}
if (dim < 3)
return true;
int nBinsZ1 = histo1->GetNbinsZ();
int nBinsZ2 = histo2->GetNbinsZ();
if (nBinsZ1 != nBinsZ2){
if(verbose) ERRORfunc("inconsistent number of bins in Y-direction");
return false;
}
if (!TMath::AreEqualRel(
histo1->GetZaxis()->GetBinLowEdge(0),
histo2->GetZaxis()->GetBinLowEdge(0), 1E-12) ||
!TMath::AreEqualRel(
histo1->GetZaxis()->GetBinUpEdge(nBinsZ1),
histo2->GetZaxis()->GetBinUpEdge(nBinsZ2), 1E-12)){
if(verbose) ERRORfunc("inconsistent axis ranges in Z-direction");
return false;
}
if(dim < 4)
return true;
if(verbose) ERRORfunc("histograms have unknown dimensionality!");
return false;
}
TGraphAsymmErrors * TQHistogramUtils::getGraph(const TH1 * histo) {
if (!histo)
return 0;
if (getDimension(histo) != 1)
return 0;
int nBins = getNBins(histo);
TGraphAsymmErrors * graph = new TGraphAsymmErrors(nBins);
graph->SetName(TString::Format("g_%s",histo->GetName()));
graph->SetTitle(histo->GetTitle());
for (int iBin = 1; iBin <= nBins; iBin++) {
graph->SetPoint(iBin,
histo->GetBinCenter(iBin),
histo->GetBinContent(iBin));
graph->SetPointError(iBin,
histo->GetBinWidth(iBin) / 2., histo->GetBinWidth(iBin) / 2.,
histo->GetBinError(iBin), histo->GetBinError(iBin));
}
graph->SetLineStyle(histo->GetLineStyle());
graph->SetLineColor(histo->GetLineColor());
graph->SetFillStyle(histo->GetFillStyle());
graph->SetFillColor(histo->GetFillColor());
graph->GetXaxis()->SetLimits(histo->GetXaxis()->GetXmin(),histo->GetXaxis()->GetXmax());
if(histo->GetXaxis()) graph->GetXaxis()->SetTitle(histo->GetXaxis()->GetTitle());
if(histo->GetYaxis()) graph->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
return graph;
}
TGraphAsymmErrors * TQHistogramUtils::getGraph(const TH1* nom, TObjArray* sys) {
if (!nom || !sys->GetEntries())
return 0;
if (getDimension(nom) != 1 || getDimension((TH1*)sys->First()) != 1)
return 0;
int nBins = getNBins(nom);
TH1* upper = (TH1*)nom->Clone();
TH1* lower = (TH1*)nom->Clone();
upper->Reset();
lower->Reset();
for (int iSys = 0; iSys < sys->GetEntries(); ++iSys) {
TH1* thisSys = (TH1*) sys->At(iSys);
for (int ibin = 0; ibin <= thisSys->GetNbinsX()+1; ++ibin) {
double add_sys = thisSys->GetBinContent(ibin);
double add_sys_err = thisSys->GetBinError(ibin);
double cur_sys = upper->GetBinContent(ibin);
double new_sys = TMath::Sqrt(cur_sys*cur_sys + add_sys*add_sys);
double cur_sys_err = upper->GetBinError(ibin);
double new_sys_err = TMath::Sqrt(cur_sys_err*cur_sys_err + add_sys_err*add_sys_err);
if (add_sys >= 0) {
upper->SetBinContent(ibin, new_sys);
upper->SetBinError(ibin, new_sys_err);
} else {
lower->SetBinContent(ibin, new_sys);
lower->SetBinError(ibin, new_sys_err);
}
}
}
TGraphAsymmErrors * graph = new TGraphAsymmErrors(nBins);
for (int iBin = 1; iBin <= nBins; iBin++) {
graph->SetPoint(iBin,
nom->GetBinCenter(iBin),
nom->GetBinContent(iBin));
double statErr = nom->GetBinError(iBin);
double lowerErr = TMath::Sqrt(statErr*statErr + lower->GetBinContent(iBin)*lower->GetBinContent(iBin));
double upperErr = TMath::Sqrt(statErr*statErr + upper->GetBinContent(iBin)*upper->GetBinContent(iBin));
graph->SetPointError(iBin,
nom->GetBinWidth(iBin) / 2., nom->GetBinWidth(iBin) / 2.,
lowerErr, upperErr);
}
return graph;
}
std::vector<TString> TQHistogramUtils::histoBinsToCutStrings(TH1* hist, const TString& varexpr, TString cutname, const TString& basecutname){
if(cutname.IsNull()) cutname = hist->GetName();
if(!cutname.Contains("%d")) cutname += "_%d";
cutname.Append(":");
if(!basecutname.IsNull()){
cutname.Append(" ");
cutname.Append(basecutname);
cutname.Append(" <<");
}
cutname.Append(" ");
std::vector<TString> cutstrings;
cutstrings.push_back(TString::Format(cutname.Data(),0) + varexpr + TString::Format(" < %f ;",hist->GetBinLowEdge(1)));
TString cutstringtemplate = cutname + "(%s < %f) && (%s > %f);";
for(int i=2; i<=hist->GetNbinsX(); i++){
cutstrings.push_back(TString::Format(cutstringtemplate.Data(),i-1,varexpr.Data(),hist->GetBinLowEdge(i),varexpr.Data(),hist->GetBinLowEdge(i-1)));
}
cutstrings.push_back(TString::Format(cutname.Data(),hist->GetNbinsX()) + varexpr + TString::Format(" > %f ;",hist->GetBinLowEdge(hist->GetNbinsX()+1)));
return cutstrings;
}
double TQHistogramUtils::getPoisson(double b, double s) {
if (b <= 0. || s < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
double sqrtInput = 2. * ((s + b) * TMath::Log(1. + s / b) - s);
if (sqrtInput < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
return TMath::Sqrt(sqrtInput);
}
double TQHistogramUtils::getPoissonError(double b, double s, double db, double ds) {
if (b <= 0. || s < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
double sqrtInput = 2. * ((s + b) * TMath::Log(1. + s / b) - s);
if (sqrtInput < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
double P = TMath::Sqrt(sqrtInput);
double logTerm = TMath::Log(1 + s / b);
double dPds = ( logTerm ) / P;
double dPdb = ( logTerm - s/b ) / P;
return TMath::Sqrt( TMath::Power((dPds * ds), 2) + TMath::Power((dPdb * db), 2) );
}
double TQHistogramUtils::getPoissonWithError(double b, double db, double s) {
if (b <= 0. || db < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
if (std::abs(s) < 1e-5) return 0.;
double sqrtInput = 2. * (
(s + b) * TMath::Log( (s + b) * (b + db*db) / ( b*b + (s + b) * db * db) ) -
b*b / (db*db) * TMath::Log( 1. + db*db*s / (b * (b + db*db) ) ) );
if (sqrtInput < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
return TMath::Sqrt(sqrtInput) * (s > 0. ? 1. : -1.);
}
double TQHistogramUtils::getPoissonWithErrorError(double b, double s, double db, double ds) {
if (b <= 0. || db < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
if (std::abs(s) < 1e-5) return 0.;
double LogA=TMath::Log( (s+b)*(b + db*db) /((s+b)*db*db + b*b) );
double LogB=TMath::Log( ((s+b)*db*db + b*b)/(b*(b+db*db)) );
double sqrtInput = 2. * ( ((s+b)*db*db)*LogA - b*b*LogB );
if (sqrtInput < 0.) {
return std::numeric_limits<double>::quiet_NaN();
}
double dPds = db*LogA / TMath::Sqrt(sqrtInput);
double dPdb = ( (b+db*db)*(db*db)*LogA - 2*b*(b+db*db)*LogB + s*db*db ) / (db*(b+db*db)*TMath::Sqrt(sqrtInput));
return TMath::Sqrt( TMath::Power((dPds * ds), 2) + TMath::Power((dPdb * db), 2) );
}
double TQHistogramUtils::getSoverSqrtB(double b, double s) {
if (b > 0. && s >= 0.) {
return s / TMath::Sqrt(b);
} else {
return 0.;
}
}
double TQHistogramUtils::getSoverSqrtSplusB(double b, double s) {
if (b > 0. && s >= 0.) {
return s / TMath::Sqrt(s+b);
} else {
return 0.;
}
}
double TQHistogramUtils::getSoverB(double b, double s) {
if (b > 0. && s >= 0.) {
return s / b;
} else {
return 0.;
}
}
double TQHistogramUtils::getSignificance(double b, double s,
TString sgnfName, double berr, TString * sgnfTitle) {
double sgnf = -1.;
if (sgnfName.CompareTo("poisson", TString::kIgnoreCase) == 0) {
if (sgnfTitle)
*sgnfTitle = "Poisson Significance";
sgnf = getPoisson(b, s);
} else if (sgnfName.CompareTo("soversqrtb", TString::kIgnoreCase) == 0) {
if (sgnfTitle)
*sgnfTitle = "signal / #sqrt{background}";
sgnf = getSoverSqrtB(b, s);
} else if (sgnfName.CompareTo("soversqrtsplusb", TString::kIgnoreCase) == 0) {
if (sgnfTitle)
*sgnfTitle = "signal / #sqrt{signal+background}";
sgnf = getSoverSqrtSplusB(b, s);
} else if (sgnfName.CompareTo("soverb", TString::kIgnoreCase) == 0) {
if (sgnfTitle)
*sgnfTitle = "signal / background";
sgnf = getSoverB(b, s);
} else if (sgnfName.CompareTo("asymptoticPoissonPoisson", TString::kIgnoreCase) == 0) {
if (sgnfTitle)
*sgnfTitle = "Poisson-Poisson model Significance";
sgnf = getPoissonWithError(b, berr, s);
}
return sgnf;
}
bool TQHistogramUtils::areEqual(TH1* first, TH1* second, bool includeUnderflowOverflow, bool compareErrors, double tolerance){
if(!first || !second) return false;
if(!checkConsistency(first,second)) return false;
if(first->GetNbinsX() != second->GetNbinsX()) return false;
double integral = first->Integral() + second->Integral();
for(int i= !includeUnderflowOverflow; i<first->GetNbinsX()-!includeUnderflowOverflow; i++){
if(fabs((first->GetBinContent(i) - second->GetBinContent(i))/integral) > tolerance) return false;
if(compareErrors && fabs((first->GetBinError(i) - second->GetBinError(i))/integral) > tolerance) return false;
}
return true;
}
void TQHistogramUtils::getSgnfAndErr(double b, double bErr, double s,
double sErr, double & sgnf, double & sgnfErr, TString sgnfName, TString * sgnfTitle) {
sgnf = getSignificance(b, s, sgnfName, bErr, sgnfTitle);
double sgnf_bkg_up = getSignificance(b + bErr, s, sgnfName, bErr);
double sgnf_bkg_down = getSignificance(b - bErr, s, sgnfName, bErr);
double sgnf_sig_up = getSignificance(b, s + sErr, sgnfName, bErr);
double sgnf_sig_down = getSignificance(b, s - sErr, sgnfName, bErr);
double sgnf_bkg_err = (TMath::Abs(sgnf - sgnf_bkg_up)
+ TMath::Abs(sgnf - sgnf_bkg_down)) / 2.;
double sgnf_sig_err = (TMath::Abs(sgnf - sgnf_sig_up)
+ TMath::Abs(sgnf - sgnf_sig_down)) / 2.;
sgnfErr = TMath::Sqrt(TMath::Power(sgnf_bkg_err, 2)
+ TMath::Power(sgnf_sig_err, 2));
}
TH1 * TQHistogramUtils::getCutEfficiencyHisto(TH1 * histo, TString options) {
if (!histo)
return 0;
TH1 * h_eff = copyHistogram(histo, TString(histo->GetName()) + "_CutEff");
h_eff->Reset();
bool normToUnity = false;
if (options.Contains("norm:yes", TString::kIgnoreCase))
normToUnity = true;
if (histo->InheritsFrom(TH3::Class())) {
return 0;
} else if (histo->InheritsFrom(TH2::Class())) {
TH2 * histo2 = (TH2*)histo;
bool upperBoundOnX = true;
bool upperBoundOnY = true;
if (options.Contains("x:lower", TString::kIgnoreCase))
upperBoundOnX = false;
if (options.Contains("y:lower", TString::kIgnoreCase))
upperBoundOnY = false;
TString axisLabel = histo2->GetXaxis()->GetTitle();
if (upperBoundOnX)
axisLabel.Prepend("upper bound on ");
else
axisLabel.Prepend("lower bound on ");
h_eff->GetXaxis()->SetTitle(axisLabel.Data());
axisLabel = histo2->GetYaxis()->GetTitle();
if (upperBoundOnY)
axisLabel.Prepend("upper bound on ");
else
axisLabel.Prepend("lower bound on ");
h_eff->GetYaxis()->SetTitle(axisLabel.Data());
int nBinsX = histo2->GetNbinsX();
int nBinsY = histo2->GetNbinsY();
for (int iBinX = 0; iBinX < nBinsX + 2; iBinX++) {
for (int iBinY = 0; iBinY < nBinsY + 2; iBinY++) {
int iBinXFrom = (upperBoundOnX ? 0 : iBinX);
int iBinXTo = (upperBoundOnX ? iBinX : nBinsX + 1);
int iBinYFrom = (upperBoundOnY ? 0 : iBinY);
int iBinYTo = (upperBoundOnY ? iBinY : nBinsY + 1);
double integral = histo2->Integral(iBinXFrom, iBinXTo, iBinYFrom, iBinYTo);
h_eff->SetBinContent(h_eff->GetBin(iBinX, iBinY), integral);
}
}
if (normToUnity)
h_eff->Scale(1. / histo2->Integral(0, nBinsX + 1, 0, nBinsY + 1));
} else {
bool upperBoundOnX = true;
if (options.Contains("x:lower", TString::kIgnoreCase))
upperBoundOnX = false;
TString axisLabel = histo->GetXaxis()->GetTitle();
if (upperBoundOnX)
axisLabel.Prepend("upper bound on ");
else
axisLabel.Prepend("lower bound on ");
h_eff->GetXaxis()->SetTitle(axisLabel.Data());
double integral = 0.;
double integralErr = 0.;
int nBinsX = histo->GetNbinsX();
for (int iBinX = (upperBoundOnX ? 0 : nBinsX + 1);
upperBoundOnX ? (iBinX <= nBinsX + 1) : iBinX >= 0;
iBinX += (upperBoundOnX ? 1 : -1)) {
integral += histo->GetBinContent(iBinX);
integralErr += TMath::Power(histo->GetBinError(iBinX), 2);
h_eff->SetBinContent(iBinX, integral);
h_eff->SetBinError(iBinX, TMath::Sqrt(integralErr));
}
if (normToUnity)
h_eff->Scale(1. / integral);
}
return h_eff;
}
TH1 * TQHistogramUtils::getSignificanceHisto(TH1 * histo_bkg,
TH1 * histo_sig, TString options) {
if (!checkConsistency(histo_bkg, histo_sig))
return 0;
if (histo_bkg->InheritsFrom(TH3::Class()))
return 0;
TString sgnfName;
if (options.Contains("sgnf:poisson", TString::kIgnoreCase))
sgnfName = "poisson";
else if (options.Contains("sgnf:soversqrtb", TString::kIgnoreCase))
sgnfName = "soversqrtb";
else if (options.Contains("sgnf:soversqrtsplusb", TString::kIgnoreCase))
sgnfName = "soversqrtsplusb";
else if (options.Contains("sgnf:soverb", TString::kIgnoreCase))
sgnfName = "soverb";
else if (options.Contains("sgnf:asymptoticPoissonPoisson", TString::kIgnoreCase))
sgnfName = "Poisson-Poisson model Significance";
else
return 0;
TH1 * h_bkg_CutEff = getCutEfficiencyHisto(histo_bkg, options);
TH1 * h_sig_CutEff = getCutEfficiencyHisto(histo_sig, options);
TH1 * h_sgnf = copyHistogram(h_sig_CutEff, TString(histo_sig->GetName()) + "_" + sgnfName);
h_sgnf->Reset();
TString * sgnfTitle = new TString();
if (histo_bkg->InheritsFrom(TH2::Class())) {
TH2 * h_bkg_CutEff2 = (TH2*)h_bkg_CutEff;
TH2 * h_sig_CutEff2 = (TH2*)h_sig_CutEff;
int nBinsX = h_sgnf->GetNbinsX();
int nBinsY = h_sgnf->GetNbinsY();
for (int iBinX = 0; iBinX < nBinsX + 2; iBinX++) {
for (int iBinY = 0; iBinY < nBinsY + 2; iBinY++) {
double significance = getPoisson(
h_bkg_CutEff2->GetBinContent(iBinX, iBinY),
h_sig_CutEff2->GetBinContent(iBinX, iBinY));
h_sgnf->SetBinContent(iBinX, iBinY, significance);
}
}
} else {
int nBinsX = h_sgnf->GetNbinsX();
for (int iBinX = 0; iBinX < nBinsX + 2; iBinX++) {
double sgnf = 0.;
double sgnfErr = 0.;
getSgnfAndErr( h_bkg_CutEff->GetBinContent(iBinX),
h_bkg_CutEff->GetBinError(iBinX),
h_sig_CutEff->GetBinContent(iBinX),
h_sig_CutEff->GetBinError(iBinX),
sgnf, sgnfErr, sgnfName, sgnfTitle);
h_sgnf->SetBinContent (iBinX, sgnf);
h_sgnf->SetBinError (iBinX, sgnfErr);
}
h_sgnf->GetYaxis()->SetTitle(sgnfTitle->Data());
}
delete h_bkg_CutEff;
delete h_sig_CutEff;
delete sgnfTitle;
return h_sgnf;
}
double TQHistogramUtils::getSummedBinByBinSignificance(TH1 * histo_bkg, TH1 * histo_sig, TString options) {
if (!checkConsistency(histo_bkg, histo_sig))
return 0;
if (histo_bkg->InheritsFrom(TH3::Class()))
return 0;
TString sgnfName;
if (options.Contains("sgnf:poisson", TString::kIgnoreCase))
sgnfName = "poisson";
else if (options.Contains("sgnf:soversqrtb", TString::kIgnoreCase))
sgnfName = "soversqrtb";
else if (options.Contains("sgnf:soversqrtsplusb", TString::kIgnoreCase))
sgnfName = "soversqrtsplusb";
else if (options.Contains("sgnf:soverb", TString::kIgnoreCase))
sgnfName = "soverb";
else if (options.Contains("sgnf:asymptoticPoissonPoisson", TString::kIgnoreCase))
sgnfName = "asymptoticPoissonPoisson";
else
return 0;
int nBinsX = histo_sig->GetNbinsX();
double Z0 = 0;
for (int iBinX = 0; iBinX < nBinsX + 2; iBinX++) {
if (histo_bkg->InheritsFrom(TH2::Class())) {
int nBinsY = histo_sig->GetNbinsY();
for (int iBinY = 0; iBinY < nBinsY + 2; iBinY++) {
double b = histo_bkg->GetBinContent(iBinX, iBinY);
double berr = histo_bkg->GetBinError(iBinX, iBinY);
double s = histo_sig->GetBinContent(iBinX, iBinY);
double Z = getSignificance(b, s, sgnfName, berr);
if(TQUtils::isNum(Z)) Z0 += TMath::Power(Z, 2);
}
} else {
double b = histo_bkg->GetBinContent(iBinX);
double berr = histo_bkg->GetBinError(iBinX);
double s = histo_sig->GetBinContent(iBinX);
double Z = getSignificance(b, s, sgnfName, berr);
if(TQUtils::isNum(Z)) Z0 += TMath::Power(Z, 2);
}
}
return TMath::Sqrt(Z0);
}
TGraphAsymmErrors * TQHistogramUtils::getROCGraph(TH1 * h_bkg, TH1 * h_sig, bool lowerBound) {
if (!checkConsistency(h_bkg, h_sig))
return 0;
if (getDimension(h_bkg) != 1)
return 0;
int nBins = getNBins(h_bkg);
TGraphAsymmErrors * graph = new TGraphAsymmErrors(nBins);
double B = getIntegral(h_bkg);
double S = getIntegral(h_sig);
double b = 0.;
double s = 0.;
double berr2 = 0.;
double serr2 = 0.;
for (int iBin = 0; iBin < nBins; iBin++) {
b += h_bkg->GetBinContent(lowerBound ? nBins - iBin - 1 : iBin);
s += h_sig->GetBinContent(lowerBound ? nBins - iBin - 1 : iBin);
berr2 += TMath::Power(h_bkg->GetBinError(lowerBound ? nBins - iBin - 1 : iBin), 2.);
serr2 += TMath::Power(h_sig->GetBinError(lowerBound ? nBins - iBin - 1 : iBin), 2.);
graph->SetPoint(iBin, s / S, 1. - b / B);
}
graph->GetXaxis()->SetTitle("Signal efficiency");
graph->GetYaxis()->SetTitle("Background rejection");
return graph;
}
TList * TQHistogramUtils::getProjectionHistograms(
TH2 * histo, bool projectOnX, bool normalize) {
if (!histo)
return 0;
TList * histograms = new TList();
int nBins;
TString axisTitle;
if (projectOnX) {
nBins = histo->GetNbinsY();
axisTitle = histo->GetYaxis()->GetTitle();
} else {
nBins = histo->GetNbinsX();
axisTitle = histo->GetXaxis()->GetTitle();
}
TString variable = axisTitle;
TString unit = TQStringUtils::cutUnit(variable);
for (int iBin = 0; iBin < nBins + 2; iBin++) {
TH1 * projection;
double lower;
double upper;
if (projectOnX) {
projection = histo->ProjectionX(TString::Format(
"%s_ProjX_%d", histo->GetName(), iBin).Data(), iBin, iBin, "e");
lower = histo->GetYaxis()->GetBinLowEdge(iBin);
upper = histo->GetYaxis()->GetBinUpEdge(iBin);
} else {
projection = histo->ProjectionY(TString::Format(
"%s_ProjY_%d", histo->GetName(), iBin).Data(), iBin, iBin, "e");
lower = histo->GetXaxis()->GetBinLowEdge(iBin);
upper = histo->GetXaxis()->GetBinUpEdge(iBin);
}
projection->SetDirectory(histo->GetDirectory());
if (iBin == 0)
projection->SetTitle(TString::Format("%s < %g %s",
variable.Data(), upper, unit.Data()).Data());
else if (iBin > nBins)
projection->SetTitle(TString::Format("%g %s #leq %s",
lower, unit.Data(), variable.Data()).Data());
else
projection->SetTitle(TString::Format("%g %s #leq %s < %g %s",
lower, unit.Data(), variable.Data(), upper, unit.Data()).Data());
if (normalize)
TQHistogramUtils::normalize(projection);
histograms->Add(projection);
}
return histograms;
}
TList * TQHistogramUtils::getProjectionHistogramsX(TH2 * histo, bool normalize) {
return getProjectionHistograms(histo, true, normalize);
}
TList * TQHistogramUtils::getProjectionHistogramsY(TH2 * histo, bool normalize) {
return getProjectionHistograms(histo, false, normalize);
}
TH1 * TQHistogramUtils::getReweightedHistogram(
TH2 * histo_input, TH1 * histo_weights, bool projectOnX) {
if (!histo_input || !histo_weights)
return 0;
TH1D * h_check = 0;
if (projectOnX)
h_check = histo_input->ProjectionY();
else
h_check = histo_input->ProjectionX();
h_check->SetDirectory(0);
bool consistent = checkConsistency(h_check, histo_weights);
delete h_check;
if (!consistent)
return 0;
TH1 * h_result = 0;
int nBinsRew = projectOnX ? histo_input->GetNbinsY() : histo_input->GetNbinsX();
for (int iBinRew = 0; iBinRew < nBinsRew + 2; iBinRew++) {
TString name = TString::Format("__h_proj_%s_%d", histo_input->GetName(), iBinRew);
TH1 * h_proj;
if (projectOnX)
h_proj = histo_input->ProjectionX(name.Data(), iBinRew, iBinRew, "e");
else
h_proj = histo_input->ProjectionY(name.Data(), iBinRew, iBinRew, "e");
h_proj->SetDirectory(0);
h_proj->Scale(histo_weights->GetBinContent(iBinRew));
if (h_result) {
h_result->Add(h_proj);
delete h_proj;
} else {
h_result = h_proj;
}
}
if (h_result) {
if (projectOnX)
h_result->SetName(TString::Format("%s_ProjXRewY", histo_input->GetName()).Data());
else
h_result->SetName(TString::Format("%s_ProjYRewX", histo_input->GetName()).Data());
}
return h_result;
}
TH1 * TQHistogramUtils::getReweightedHistogramX(TH2 * histo_input, TH1 * histo_weights) {
return getReweightedHistogram(histo_input, histo_weights, true);
}
TH1 * TQHistogramUtils::getReweightedHistogramY(TH2 * histo_input, TH1 * histo_weights) {
return getReweightedHistogram(histo_input, histo_weights, false);
}
TQCounter * TQHistogramUtils::histogramToCounter(TH1 * histo) {
if (!histo) {
return NULL;
}
double err = 0.;
double sum = getIntegralAndError(histo, err);
TQCounter* cnt = new TQCounter(histo->GetName(), sum, err);
cnt->setRawCounter(histo->GetEntries());
return cnt;
}
TH1 * TQHistogramUtils::counterToHistogram(TQCounter * counter) {
if (!counter) {
return NULL;
}
TH1 * histo = new TH1D(counter->GetName(), counter->GetName(), 1, 0., 1.);
histo->SetDirectory(NULL);
histo->Sumw2();
histo->SetBinContent(1, counter->getCounter());
histo->SetBinError(1, counter->getError());
histo->SetEntries(counter->getRawCounter());
return histo;
}
TH1 * TQHistogramUtils::countersToHistogram(TList * counters) {
int n = 0;
TQIterator itr(counters);
while (itr.hasNext()) {
TObject * obj = itr.readNext();
if (obj->InheritsFrom(TQCounter::Class())) {
n++;
}
}
TH1 * histo = NULL;
if (n > 0) {
TString prefix = counters->GetName();
if (prefix.IsNull()) {
prefix = "histogramFromCounters";
}
TString name = prefix;
int i = 2;
while (gDirectory && gDirectory->FindObject(name.Data())) {
name = TString::Format("%s_i%d", prefix.Data(), i++);
}
histo = new TH1D(name, name, n, 0., (double)n);
histo->SetDirectory(NULL);
histo->Sumw2();
i = 1;
itr.reset();
while (itr.hasNext()) {
TObject * obj = itr.readNext();
if (obj->InheritsFrom(TQCounter::Class())) {
TQCounter * cnt = (TQCounter*)obj;
histo->SetBinContent(i, cnt->getCounter());
histo->SetBinError(i, cnt->getError());
histo->GetXaxis()->SetBinLabel(i++, cnt->GetName());
}
}
}
return histo;
}
double TQHistogramUtils::getIntegral(const TH1 * histo, bool useUnderOverflow) {
if (histo) {
int xLow, xHigh, yLow, yHigh, zLow, zHigh;
xLow = yLow = zLow = 0;
xHigh = histo->GetNbinsX() + 1;
yHigh = histo->GetNbinsY() + 1;
zHigh = histo->GetNbinsZ() + 1;
if (!useUnderOverflow) {
xLow++; yLow++; zLow++;
xHigh--; yHigh--; zHigh--;
}
double integral = 0.;
if (histo->InheritsFrom(TH3::Class())) {
integral = ((TH3*)histo)->Integral(
xLow, xHigh,
zLow, yHigh,
zLow, zHigh);
} else if (histo->InheritsFrom(TH2::Class())) {
integral = ((TH2*)histo)->Integral(
xLow, xHigh,
yLow, yHigh);
} else {
integral = histo->Integral(xLow, xHigh);
}
return integral;
} else {
return 0.;
}
}
TH1* TQHistogramUtils::getEfficiencyHistogram(TH1* numerator, TH1* denominator) {
if (!numerator || !denominator) return NULL;
if (!TQHistogramUtils::checkConsistency(numerator,denominator)) {
WARN("Cannot create efficiency histogram, input histograms ('%s' and '%s') have inconsistent binning!",numerator->GetName(),denominator->GetName());
return NULL;
}
TH1* copy = dynamic_cast<TH1*>( numerator->Clone("hcopy") );
if (!copy) {
WARN("Failed to create clone of numerator histogram '%s' !",numerator->GetName());
return NULL;
}
if (!copy->Divide(numerator,denominator,1.,1.,"B")) {
WARN("Failed to divide histograms");
delete copy;
return NULL;
}
return copy;
}
TH1* TQHistogramUtils::getRelativeVariationHistogram(TH1* variation, TH1* nominal, double epsilon) {
if (!variation || !nominal) return NULL;
if (!TQHistogramUtils::checkConsistency(variation,nominal)) {
WARN("Cannot create efficiency histogram, input histograms ('%s' and '%s') have inconsistent binning!",variation->GetName(),nominal->GetName());
return NULL;
}
TH1* copy = dynamic_cast<TH1*>( variation->Clone("hcopy") );
if (!copy) {
WARN("Failed to create clone of variation(numerator) histogram '%s' !",variation->GetName());
return NULL;
}
if (!copy->Divide(variation,nominal,1.,1.)) {
WARN("Failed to divide histograms");
delete copy;
return NULL;
}
int nBins = TQHistogramUtils::getNbinsGlobal(copy,true);
double nomContent=0;
for (int i=0; i<nBins; ++i) {
nomContent = nominal->GetBinContent(i);
if(variation->GetBinContent(i) <= epsilon || nominal->GetBinContent(i) <= epsilon){
copy->SetBinError(i,std::numeric_limits<double>::infinity());
copy->SetBinContent(i,1);
} else {
copy->SetBinError(i, variation->GetBinError(i)/nomContent);
}
}
return copy;
}
double TQHistogramUtils::getIntegralError(const TH1 * histo) {
if (histo) {
double error = 0.;
getIntegralAndError(histo, error);
return error;
} else {
return 0.;
}
}
double TQHistogramUtils::getIntegralAndError(const TH1 * histo, double &error, bool useUnderOverflow) {
if (histo) {
int xLow, xHigh, yLow, yHigh, zLow, zHigh;
xLow = yLow = zLow = 0;
xHigh = histo->GetNbinsX() + 1;
yHigh = histo->GetNbinsY() + 1;
zHigh = histo->GetNbinsZ() + 1;
if (!useUnderOverflow) {
xLow++; yLow++; zLow++;
xHigh--; yHigh--; zHigh--;
}
double integral = 0.;
if (histo->InheritsFrom(TH3::Class())) {
integral = ((TH3*)histo)->IntegralAndError(
xLow, xHigh,
zLow, yHigh,
zLow, zHigh, error);
} else if (histo->InheritsFrom(TH2::Class())) {
integral = ((TH2*)histo)->IntegralAndError(
xLow, xHigh,
yLow, yHigh, error);
} else {
integral = histo->IntegralAndError(xLow, xHigh, error);
}
return integral;
} else {
return 0.;
}
}
TH1 * TQHistogramUtils::normalize(TH1 * histo, double normalizeTo, bool includeUnderOverflow) {
if (histo) {
double integral = getIntegral(histo, includeUnderOverflow);
if (integral != 0.)
histo->Scale(normalizeTo / integral);
return histo;
} else {
return 0;
}
}
TH1 * TQHistogramUtils::normalize(TH1 * histo, const TH1 * normalizeToHisto, bool includeUnderOverflow) {
if (histo && normalizeToHisto) {
normalize(histo, getIntegral(normalizeToHisto, includeUnderOverflow), includeUnderOverflow);
return histo;
} else {
return 0;
}
}
TH1 * TQHistogramUtils::power(TH1 * histo, double exp) {
if (!histo) {
return 0;
}
int n = TQHistogramUtils::getNBins(histo);
for (int i = 0; i < n; i++) {
double bin = histo->GetBinContent(i);
double err = histo->GetBinError(i);
histo->SetBinContent(i, TMath::Power(bin, exp));
histo->SetBinError(i, exp * TMath::Power(bin, exp - 1.) * err);
}
return histo;
}
TH1 * TQHistogramUtils::getSlopeHistogram(TH1 * input, double slope) {
if (TQHistogramUtils::getDimension(input) != 1) {
return NULL;
}
double min = input->GetXaxis()->GetBinLowEdge(1);
double max = input->GetXaxis()->GetBinUpEdge(input->GetNbinsX());
double avg = (max + min) / 2.;
TH1 * output = TQHistogramUtils::copyHistogram(input);
output->Reset();
for (int i = 1; i <= input->GetNbinsX(); i++) {
output->SetBinContent(i, 1. + slope * (avg - input->GetXaxis()->GetBinCenter(i)));
}
return output;
}
TH1 * TQHistogramUtils::applySlopeToHistogram(TH1 * input, double slope) {
TH1 * h_slope = getSlopeHistogram(input, slope);
if (!h_slope || !input) {
return NULL;
}
input->Multiply(h_slope);
delete h_slope;
return input;
}
double TQHistogramUtils::getChi2(TH1 * histo1, TH1 * histo2) {
if (!histo1 || !histo2)
return -1.;
if (!checkConsistency(histo1, histo2))
return -1.;
if (getDimension(histo1) == 1) {
double chi2 = 0.;
int nBins = histo1->GetNbinsX();
for (int iBin = 0; iBin <= nBins + 1; iBin++) {
double cnt1 = histo1->GetBinContent(iBin);
double cnt2 = histo2->GetBinContent(iBin);
double err1 = histo1->GetBinError(iBin);
double err2 = histo2->GetBinError(iBin);
double diff = cnt1 - cnt2;
double error = TMath::Sqrt(TMath::Power(err1, 2.) + TMath::Power(err2, 2.));
if (error != 0.)
chi2 += TMath::Power(diff, 2.) / TMath::Power(error, 2.);
}
return chi2 / (double)(nBins + 2);
} else {
return -1.;
}
}
TH1 * TQHistogramUtils::includeOverflowBins(TH1 * histo, bool underflow, bool overflow) {
if(!underflow && !overflow) return histo;
if (histo) {
size_t nentries = histo->GetEntries();
if (histo->InheritsFrom(TH3::Class()) || histo->InheritsFrom(TH2::Class())) {
return 0;
} else {
if (underflow) {
histo->SetBinContent(1,
histo->GetBinContent(0) +
histo->GetBinContent(1));
histo->SetBinContent(0, 0.);
histo->SetBinError(1, TMath::Sqrt(
TMath::Power(histo->GetBinError(0), 2) +
TMath::Power(histo->GetBinError(1), 2)));
histo->SetBinError(0, 0.);
}
if (overflow) {
int nBins = histo->GetNbinsX();
histo->SetBinContent(nBins,
histo->GetBinContent(nBins) +
histo->GetBinContent(nBins + 1));
histo->SetBinContent(nBins + 1, 0.);
histo->SetBinError(nBins, TMath::Sqrt(
TMath::Power(histo->GetBinError(nBins), 2) +
TMath::Power(histo->GetBinError(nBins + 1), 2)));
histo->SetBinError(nBins + 1, 0.);
}
}
histo->SetEntries(nentries);
return histo;
} else {
return 0;
}
}
TH1 * TQHistogramUtils::extraOverflowBins(TH1*& histo, bool underflow, bool overflow, bool remap) {
if(!underflow && !overflow) return histo;
if(!histo) return 0;
if (histo->InheritsFrom(TH3::Class()) || histo->InheritsFrom(TH2::Class())) {
return 0;
}
if(!remap){
WARN("Function TQHistogramUtils::extraOverflowBins requires usage of remapping (tag 'remap=true'). Return unchanged histogram.");
return histo;
}
int newNBins = histo->GetNbinsX();
if(underflow) newNBins+=1;
if(overflow) newNBins+=1;
TH1 * newHisto = 0;
if (histo->InheritsFrom(TH1F::Class()))
newHisto = new TH1F(histo->GetName(), histo->GetTitle(),newNBins, 0., 1.);
else if (histo->InheritsFrom(TH1D::Class()))
newHisto = new TH1D(histo->GetName(), histo->GetTitle(),newNBins, 0., 1.);
if(!newHisto){
ERROR("TQHistogramUtils::extraOverflowBins failed creating new histogram. Return unchanged histogram.");
return histo;
}
TString label = TQStringUtils::getWithoutUnit(histo->GetXaxis()->GetTitle());
label.Prepend("Remapped ");
newHisto->GetXaxis()->SetTitle(label.Data());
newHisto->GetYaxis()->SetTitle(histo->GetYaxis()->GetTitle());
newHisto->Sumw2();
newHisto->SetDirectory(histo->GetDirectory());
copyStyle(newHisto, histo);
for (int i = 0; i <= histo->GetNbinsX()+1; i++) {
int binOffset=0;
if (underflow) binOffset=1;
newHisto->SetBinContent(i+binOffset,histo->GetBinContent(i));
newHisto->SetBinError(i+binOffset,histo->GetBinError(i));
}
size_t nentries = histo->GetEntries();
newHisto->SetEntries(nentries);
histo = newHisto;
return histo;
}
void TQHistogramUtils::unifyMinMax(TCollection * histograms, double vetoFraction) {
if (!histograms)
return;
double max = 0.;
double min = 0.;
bool first = true;
TQTH1Iterator itr(histograms);
while(itr.hasNext()){
TH1 * histo = itr.readNext();
if(!histo) continue;
double thisMax = histo->GetBinContent(histo->GetMaximumBin());
double thisMin = histo->GetBinContent(histo->GetMinimumBin());
max = (first || thisMax > max) ? thisMax : max;
min = (first || thisMin < min) ? thisMin : min;
first = false;
}
max = min + (max - min)/(1-vetoFraction);
itr.reset();
while(itr.hasNext()){
TH1 * histo = itr.readNext();
if(!histo) continue;
histo->SetMaximum(max);
histo->SetMinimum(min);
}
}
void TQHistogramUtils::unifyMinMax(TH1 * h1, TH1 * h2, TH1 * h3, double vetoFraction) {
TList * histograms = new TList();
if (h1) histograms->Add(h1);
if (h2) histograms->Add(h2);
if (h3) histograms->Add(h3);
unifyMinMax(histograms, vetoFraction);
delete histograms;
}
void TQHistogramUtils::unifyMinMax(TH1 * h1, TH1 * h2, double vetoFraction) {
unifyMinMax(h1, h2, (TH1*)0, vetoFraction);
}
bool TQHistogramUtils::getMinMaxBin(
const TH1 * histo,
int &iBinMin,
int &iBinMax,
bool includeError,
bool includeUnderflowOverflow,
double minMin,
double maxMax) {
if (!histo)
return false;
int nBins = getNBins(histo);
double min = std::numeric_limits<double>::infinity();
double max = -std::numeric_limits<double>::infinity();
for (int i = 0; i < nBins; ++i) {
if (!includeUnderflowOverflow && (histo->IsBinUnderflow(i) || histo->IsBinOverflow(i)) ) continue;
double lower = (histo->GetBinContent(i) - (includeError ? histo->GetBinError(i) : 0.));
double upper = (histo->GetBinContent(i) + (includeError ? histo->GetBinError(i) : 0.));
if ( (iBinMin == -1 || lower < min) && lower>minMin ){
min = lower;
iBinMin = i;
}
if ( (iBinMax == -1 || upper > max) && upper<maxMax ){
max = upper;
iBinMax = i;
}
}
return true;
}
bool TQHistogramUtils::getMinMax(
const TH1 * histo,
double &min,
double &max,
bool includeError,
bool includeUnderflowOverflow,
double minMin,
double maxMax) {
int minBin = -1;
int maxBin = -1;
if (getMinMaxBin(histo, minBin, maxBin, includeError, includeUnderflowOverflow, minMin, maxMax) && (minBin!=-1 || maxBin!=-1) ) {
if (minBin!=-1) min = histo->GetBinContent(minBin) - (includeError ? histo->GetBinError(minBin) : 0.);
if (maxBin!=-1) max = histo->GetBinContent(maxBin) + (includeError ? histo->GetBinError(maxBin) : 0.);
return true;
} else {
return false;
}
}
int TQHistogramUtils::getMinBin(const TH1 * histo, bool includeError, bool includeUnderflowOverflow, double minMin) {
int minBin = -1;
int maxBin = -1;
getMinMaxBin(histo, minBin, maxBin, includeError, includeUnderflowOverflow, minMin, std::numeric_limits<double>::infinity() );
return minBin;
}
int TQHistogramUtils::getMaxBin(const TH1 * histo, bool includeError, bool includeUnderflowOverflow, double maxMax) {
int minBin = -1;
int maxBin = -1;
getMinMaxBin(histo, minBin, maxBin, includeError, includeUnderflowOverflow, -std::numeric_limits<double>::infinity(), maxMax );
return maxBin;
}
double TQHistogramUtils::getMin(const TH1 * histo, bool includeError, bool includeUnderflowOverflow, double minMin) {
double min = 0.;
double max = 0.;
getMinMax(histo, min, max, includeError, includeUnderflowOverflow, minMin, std::numeric_limits<double>::infinity() );
return min;
}
double TQHistogramUtils::getMax(const TH1 * histo, bool includeError, bool includeUnderflowOverflow, double maxMax) {
double min = 0.;
double max = 0.;
getMinMax(histo, min, max, includeError, includeUnderflowOverflow, -std::numeric_limits<double>::infinity(), maxMax);
return max;
}
bool TQHistogramUtils::extractStyle(const TH1 * histo, TQTaggable * tags, const TString& styleScheme) {
if (!histo || !tags) {
return false;
}
TString prefix;
if (!styleScheme.IsNull()) {
if (TQTaggable::isValidKey(styleScheme)) {
prefix = TString("style.") + styleScheme + ".";
} else {
prefix = TString("style.");
}
}
tags->setTagString (prefix + "title", histo->GetTitle());
tags->setTagInteger (prefix + "histFillColor", histo->GetFillColor());
tags->setTagInteger (prefix + "histFillStyle", histo->GetFillStyle());
tags->setTagInteger (prefix + "histLineColor", histo->GetLineColor());
tags->setTagInteger (prefix + "histLineWidth", histo->GetLineWidth());
tags->setTagInteger (prefix + "histLineStyle", histo->GetLineStyle());
tags->setTagInteger (prefix + "histMarkerColor", histo->GetMarkerColor());
tags->setTagDouble (prefix + "histMarkerSize", histo->GetMarkerSize());
tags->setTagInteger (prefix + "histMarkerStyle", histo->GetMarkerStyle());
if(TQHistogramUtils::hasBinLabels(histo->GetXaxis())){
for(int i=0; i<histo->GetXaxis()->GetNbins(); ++i){
tags->setTagString(TString::Format("%sxLabels.%d",prefix.Data(),i),histo->GetXaxis()->GetBinLabel(i+1));
}
}
if(TQHistogramUtils::hasBinLabels(histo->GetYaxis())){
for(int i=0; i<histo->GetYaxis()->GetNbins(); ++i){
tags->setTagString(TString::Format("%syLabels.%d",prefix.Data(),i),histo->GetXaxis()->GetBinLabel(i+1));
}
}
return true;
}
bool TQHistogramUtils::extractStyle(const TGraph* graph, TQTaggable * tags, const TString& styleScheme) {
if (!graph || !tags) {
return false;
}
TString prefix;
if (!styleScheme.IsNull()) {
if (TQTaggable::isValidKey(styleScheme)) {
prefix = TString("style.") + styleScheme + ".";
} else {
prefix = TString("style.");
}
}
tags->setTagString (prefix + "title", graph->GetTitle());
tags->setTagInteger (prefix + "fillColor", graph->GetFillColor());
tags->setTagInteger (prefix + "fillStyle", graph->GetFillStyle());
tags->setTagInteger (prefix + "lineColor", graph->GetLineColor());
tags->setTagInteger (prefix + "lineWidth", graph->GetLineWidth());
tags->setTagInteger (prefix + "lineStyle", graph->GetLineStyle());
tags->setTagInteger (prefix + "markerColor", graph->GetMarkerColor());
tags->setTagDouble (prefix + "markerSize", graph->GetMarkerSize());
tags->setTagInteger (prefix + "markerStyle", graph->GetMarkerStyle());
return true;
}
int TQHistogramUtils::applyStyle(TH1 * histo, TQTaggable * tags, const TString& styleScheme, bool allowRecursion) {
if (!histo || !tags) {
return 0;
}
int nStyleTags = 0;
TString prefix;
if (!styleScheme.IsNull()) {
if (TQTaggable::isValidKey(styleScheme)) {
prefix = TString(allowRecursion ? "~style." : "style.") + styleScheme + ".";
} else {
prefix = TString(allowRecursion ? "~style." : "style.");
}
}
TString title;
if (tags->getTagString(prefix + "title", title)) {
histo->SetTitle(title.Data());
nStyleTags++;
}
int commonColor;
if (tags->getTagInteger(prefix + "color", commonColor)) {
histo->SetFillColor (commonColor);
histo->SetLineColor (commonColor);
histo->SetMarkerColor (commonColor);
nStyleTags += 3;
}
int histFillColor;
if (tags->getTagInteger(prefix + "histFillColor", histFillColor)) {
histo->SetFillColor(histFillColor);
nStyleTags++;
}
int histFillStyle;
if (tags->getTagInteger(prefix + "histFillStyle", histFillStyle)) {
histo->SetFillStyle(histFillStyle);
nStyleTags++;
}
int histLineColor;
if (tags->getTagInteger(prefix + "histLineColor", histLineColor)) {
histo->SetLineColor(histLineColor);
if (histo->InheritsFrom(TProfile::Class()))
histo->SetLineColor(histFillColor);
nStyleTags++;
}
int histLineWidth;
if (tags->getTagInteger(prefix + "histLineWidth", histLineWidth)) {
histo->SetLineWidth(histLineWidth);
nStyleTags++;
}
int histLineStyle;
if (tags->getTagInteger(prefix + "histLineStyle", histLineStyle)) {
histo->SetLineStyle(histLineStyle);
nStyleTags++;
}
int histMarkerColor;
if (tags->getTagInteger(prefix + "histMarkerColor", histMarkerColor)) {
histo->SetMarkerColor(histMarkerColor);
nStyleTags++;
}
double histMarkerSize;
if (tags->getTagDouble(prefix + "histMarkerSize", histMarkerSize)) {
histo->SetMarkerSize(histMarkerSize);
nStyleTags++;
}
int histMarkerStyle;
if (tags->getTagInteger(prefix + "histMarkerStyle", histMarkerStyle)) {
histo->SetMarkerStyle(histMarkerStyle);
nStyleTags++;
}
std::vector<TString> xlabels = tags->getTagVString(prefix+"xLabels");
for(size_t i=0; i<xlabels.size(); ++i){
histo->GetXaxis()->SetBinLabel(i+1,xlabels[i]);
}
std::vector<TString> ylabels = tags->getTagVString(prefix+"yLabels");
for(size_t i=0; i<ylabels.size(); ++i){
histo->GetYaxis()->SetBinLabel(i+1,ylabels[i]);
}
return nStyleTags;
}
bool TQHistogramUtils::copyStyle(TH1 * h_dest, const TH1 * h_src) {
if (!h_dest || !h_src) {
return false;
}
h_dest->SetFillColor(h_src->GetFillColor());
h_dest->SetFillStyle(h_src->GetFillStyle());
h_dest->SetLineColor(h_src->GetLineColor());
h_dest->SetLineStyle(h_src->GetLineStyle());
h_dest->SetLineWidth(h_src->GetLineWidth());
h_dest->SetMarkerSize(h_src->GetMarkerSize());
h_dest->SetMarkerColor(h_src->GetMarkerColor());
h_dest->SetMarkerStyle(h_src->GetMarkerStyle());
TQHistogramUtils::copyBinLabels(h_src,h_dest);
TQHistogramUtils::copyAxisStyle(h_src,h_dest);
return true;
}
bool TQHistogramUtils::copyStyle(TGraph * g_dest, const TH1 * h_src) {
if (!g_dest || !h_src) {
return false;
}
g_dest->SetFillColor(h_src->GetFillColor());
g_dest->SetFillStyle(h_src->GetFillStyle());
g_dest->SetLineColor(h_src->GetLineColor());
g_dest->SetLineStyle(h_src->GetLineStyle());
g_dest->SetLineWidth(h_src->GetLineWidth());
g_dest->SetMarkerSize(h_src->GetMarkerSize());
g_dest->SetMarkerColor(h_src->GetMarkerColor());
g_dest->SetMarkerStyle(h_src->GetMarkerStyle());
return true;
}
bool TQHistogramUtils::copyStyle(TNamed * dest, const TNamed * src) {
if(dest->InheritsFrom(TH1::Class())&&src->InheritsFrom(TH1::Class())) return TQHistogramUtils::copyStyle(static_cast<TH1*>(dest),static_cast<const TH1*>(src));
if(dest->InheritsFrom(TGraph::Class())&&src->InheritsFrom(TGraph::Class())) return TQHistogramUtils::copyStyle(static_cast<TGraph*>(dest),static_cast<const TGraph*>(src));
if(dest->InheritsFrom(TGraph2D::Class())&&src->InheritsFrom(TGraph2D::Class())) return TQHistogramUtils::copyStyle(static_cast<TGraph2D*>(dest),static_cast<const TGraph2D*>(src));
return false;
}
bool TQHistogramUtils::copyStyle(TGraph * g_dest, const TGraph * g_src) {
if (!g_dest || !g_src) {
return false;
}
g_dest->SetFillColor(g_src->GetFillColor());
g_dest->SetFillStyle(g_src->GetFillStyle());
g_dest->SetLineColor(g_src->GetLineColor());
g_dest->SetLineStyle(g_src->GetLineStyle());
g_dest->SetLineWidth(g_src->GetLineWidth());
g_dest->SetMarkerSize(g_src->GetMarkerSize());
g_dest->SetMarkerColor(g_src->GetMarkerColor());
g_dest->SetMarkerStyle(g_src->GetMarkerStyle());
TQHistogramUtils::copyAxisStyle(g_src->GetXaxis(),g_dest->GetXaxis());
TQHistogramUtils::copyAxisStyle(g_src->GetYaxis(),g_dest->GetYaxis());
return true;
}
bool TQHistogramUtils::copyStyle(TGraph2D * g_dest, const TGraph2D * g_src) {
if (!g_dest || !g_src) {
return false;
}
g_dest->SetFillColor(g_src->GetFillColor());
g_dest->SetFillStyle(g_src->GetFillStyle());
g_dest->SetLineColor(g_src->GetLineColor());
g_dest->SetLineStyle(g_src->GetLineStyle());
g_dest->SetLineWidth(g_src->GetLineWidth());
g_dest->SetMarkerSize(g_src->GetMarkerSize());
g_dest->SetMarkerColor(g_src->GetMarkerColor());
g_dest->SetMarkerStyle(g_src->GetMarkerStyle());
TQHistogramUtils::copyAxisStyle(g_src->GetXaxis(),g_dest->GetXaxis());
TQHistogramUtils::copyAxisStyle(g_src->GetYaxis(),g_dest->GetYaxis());
TQHistogramUtils::copyAxisStyle(g_src->GetZaxis(),g_dest->GetZaxis());
return true;
}
bool TQHistogramUtils::isCloseToOneRel(double val, double rel) {
if (val < 0.) {
return false;
} else if (val > 1.) {
return (val - 1.) < rel;
} else if (val < 1.) {
return (1. / val - 1.) < rel;
} else {
return true;
}
}
bool TQHistogramUtils::areEqualRel(double val1, double val2, double rel) {
if (val1 * val2 > 0.) {
return isCloseToOneRel(val1 / val2, rel);
} else {
return false;
}
}
bool TQHistogramUtils::haveEqualShapeRel(TH1 * h1, TH1 * h2, double rel) {
if (!h1 || !h2)
return false;
if (!checkConsistency(h1, h2))
return false;
bool equal = true;
int nBins = getNBins(h1);
for (int i = 0; equal && i < nBins; i++) {
double bin1 = h1->GetBinContent(i);
double bin2 = h2->GetBinContent(i);
if (bin1 > 0. && bin2 > 0.)
equal = areEqualRel(bin1, bin2, rel);
else if (bin1 < 0. && bin2 < 0.)
equal = areEqualRel(-bin1, -bin2, rel);
else if (bin1 != 0. || bin2 != 0.)
equal = false;
}
return equal;
}
bool TQHistogramUtils::ensureMinimumContent(double &content,
double &uncertainty,
double min,
bool ignoreNegative,
bool flipToPositive,
bool assignUncertainty){
bool varsChanged = false;
if (content < 0){
double absContent = TMath::Abs(content);
if ((assignUncertainty) && (uncertainty < absContent)){
uncertainty = absContent;
varsChanged = true;
}
if (ignoreNegative){
return varsChanged;
}
if (flipToPositive){
content = absContent;
varsChanged = true;
return varsChanged;
}
}
if (content < min){
content = min;
varsChanged = true;
return varsChanged;
}
return varsChanged;
}
int TQHistogramUtils::ensureMinimumBinError( TH1 * histo, double averageWeight) {
int set = 0;
int nBins = histo->GetNbinsX()*histo->GetNbinsY()*histo->GetNbinsZ();
for (int iBin=1; iBin<nBins+1; ++iBin) {
double origStatUncert = histo->GetBinError(iBin);
double binContent = histo->GetBinContent(iBin);
histo->SetBinContent(iBin, 0);
histo->SetBinError(iBin, 0);
double nRawApprox = std::max(binContent/averageWeight,0.);
size_t nRawLow = size_t(nRawApprox);
if (nRawLow>= poisson68percLimits.size()) {
continue;
}
double inflateTo = 0.;
if (nRawLow == poisson68percLimits.size()-1) {
inflateTo = averageWeight*TMath::Sqrt(poisson68percLimits.back());
} else {
double limitLow = poisson68percLimits[nRawLow];
double limitHigh = poisson68percLimits[nRawLow+1];
inflateTo = averageWeight * TMath::Sqrt( limitLow + (nRawApprox-nRawLow) * (limitHigh-limitLow) );
}
if (inflateTo > origStatUncert) {
set++;
histo->SetBinError(iBin,sqrt(inflateTo*inflateTo-origStatUncert*origStatUncert));
}
}
return set;
}
int TQHistogramUtils::ensureMinimumBinContent(
TH1 * histo,
double min,
bool ignoreNegative,
bool flipToPositive,
bool assignUncertainty) {
int dim = getDimension(histo);
if (dim < 1 || dim > 2) {
return -1;
}
int nEntries = histo->GetEntries();
int set = 0;
int nBinsX = histo->GetNbinsX();
if (dim == 1) {
for (int iX = 1; iX <= nBinsX; iX++) {
double content = histo->GetBinContent(iX);
double uncertainty = histo->GetBinError(iX);
if (ensureMinimumContent(content, uncertainty, min, ignoreNegative, flipToPositive, assignUncertainty)){
histo->SetBinContent(iX, content);
histo->SetBinError(iX, uncertainty);
set++;
}
}
} else if (dim == 2) {
int nBinsY = histo->GetNbinsY();
for (int iX = 1; iX <= nBinsX; iX++) {
for (int iY = 1; iY <= nBinsY; iY++) {
double content = histo->GetBinContent(iX, iY);
double uncertainty = histo->GetBinError(iX, iY);
if (ensureMinimumContent(content, uncertainty, min, ignoreNegative, flipToPositive, assignUncertainty)){
histo->SetBinContent(iX, iY, content);
histo->SetBinError(iX, iY, uncertainty);
set++;
}
}
}
}
histo->SetEntries(nEntries);
return set;
}
bool TQHistogramUtils::ensureAbsMinimumContent(double &content,
double min){
bool varsChanged = false;
if (content < 0){
double absContent = TMath::Abs(content);
if (absContent < min){
content = -min;
varsChanged = true;
return varsChanged;
} else {
return varsChanged;
}
}
if (content < min){
content = min;
varsChanged = true;
return varsChanged;
}
return varsChanged;
}
int TQHistogramUtils::ensureAbsMinimumBinContent(
TH1 * histo,
double min) {
int dim = getDimension(histo);
if (dim < 1 || dim > 2) {
return -1;
}
int nEntries = histo->GetEntries();
int set = 0;
int nBinsX = histo->GetNbinsX();
if (dim == 1) {
for (int iX = 1; iX <= nBinsX; iX++) {
double content = histo->GetBinContent(iX);
double uncertainty = histo->GetBinError(iX);
if (ensureAbsMinimumContent(content, min)){
histo->SetBinContent(iX, content);
histo->SetBinError(iX, uncertainty);
set++;
}
}
} else if (dim == 2) {
int nBinsY = histo->GetNbinsY();
for (int iX = 1; iX <= nBinsX; iX++) {
for (int iY = 1; iY <= nBinsY; iY++) {
double content = histo->GetBinContent(iX, iY);
double uncertainty = histo->GetBinError(iX, iY);
if (ensureAbsMinimumContent(content, min)){
histo->SetBinContent(iX, iY, content);
histo->SetBinError(iX, iY, uncertainty);
set++;
}
}
}
}
histo->SetEntries(nEntries);
return set;
}
double TQHistogramUtils::pValuePoisson(unsigned nObs,
double nExp){
if (nObs>nExp)
return 1-ROOT::Math::inc_gamma_c(nObs,nExp);
else
return ROOT::Math::inc_gamma_c(nObs+1,nExp);
}
double TQHistogramUtils::pValuePoissonError(unsigned nObs,
double E,
double V){
if (E<=0 || V<=0) {
std::cerr << "ERROR in pValuePoissonError(): expectation and variance must be positive" << std::endl;
return 0;
}
double B = E/V;
double A = E*B;
if (A>100*nObs) return TQHistogramUtils::pValuePoisson(nObs,E);
unsigned stop=nObs;
if (nObs>E) --stop;
double logProb = A*log(B/(1+B));
double sum=exp(logProb);
for (unsigned u=1; u<stop; ++u) {
logProb += log((A+u-1)/(u*(1+B)));
sum += exp(logProb);
}
if (nObs>E)
return 1-sum;
else
return sum;
}
double TQHistogramUtils::pValueToSignificance(double p,
bool excess){
if (p<0 || p>1) {
std::cerr << "ERROR: p-value must belong to [0,1] but input value is " << p << std::endl;
return 0;
}
if (excess)
return ROOT::Math::normal_quantile(1-p,1);
else
return ROOT::Math::normal_quantile(p,1);
}
TH1* TQHistogramUtils::pcmpObsVsExp(TH1* hObs, TH1* hExp, bool ignoreExpUnc){
if (hObs==0 || hExp==0)
return 0;
TString name=hObs->GetName();
name+="_cmp_";
name+=hExp->GetName();
int Nbins = hObs->GetNbinsX();
TH1* hOut = 0;
if (hObs->InheritsFrom(TH1F::Class()))
hOut = new TH1F(name.Data(),hObs->GetTitle(), hObs->GetNbinsX(), hObs->GetXaxis()->GetXmin(), hObs->GetXaxis()->GetXmax() );
else if (hObs->InheritsFrom(TH1D::Class()))
hOut = new TH1D(name.Data(),hObs->GetTitle(), hObs->GetNbinsX(), hObs->GetXaxis()->GetXmin(), hObs->GetXaxis()->GetXmax() );
hOut->GetXaxis()->SetTitle( hObs->GetXaxis()->GetTitle() );
hOut->GetYaxis()->SetTitle("significance");
hOut->SetFillColor(2);
for (int i=1; i<Nbins; ++i) {
int nObs = (int) hObs->GetBinContent(i);
if (nObs<=0)
continue;
float nExp = hExp->GetBinContent(i);
float vrnc = hExp->GetBinError(i);
vrnc *= vrnc;
float sig = 0;
if (vrnc>0 && !ignoreExpUnc) {
float pValue = pValuePoissonError(nObs, nExp, vrnc);
if (pValue<0.5) sig = pValueToSignificance(pValue, (nObs>nExp));
} else {
float pValue = pValuePoisson(nObs,nExp);
if (pValue<0.5) sig = pValueToSignificance(pValue, (nObs>nExp));
}
hOut->SetBinContent(i, sig);
}
return hOut;
}
TH1* TQHistogramUtils::getUncertaintyHistogram(TH1* hist) {
if (!hist) return 0;
TH1* histUncert = copyHistogram(hist, TString(hist->GetName())+"_uncertanties");
histUncert->SetDirectory(NULL);
for (int i=0; i<=getNbinsGlobal(histUncert); i++) {
histUncert->SetBinContent(i,hist->GetBinError(i));
histUncert->SetBinError(i,0.);
}
return histUncert;
}
void TQHistogramUtils::setRelativeUncertainties(TH1* hist,double relunc,bool addToInitialValue) {
if (!hist) return;
for (int i=0; i<=getNbinsGlobal(hist); ++i) {
double val = hist->GetBinContent(i);
double initVal = addToInitialValue ? hist->GetBinError(i) : 0;
double addVal = val*relunc;
double newVal = sqrt(initVal*initVal+addVal*addVal);
hist->SetBinError(i,newVal);
}
}
TGraph* TQHistogramUtils::scatterPlot(const TString& name, double* vec1, double* vec2, int vLength, const TString& labelX, const TString& labelY) {
std::vector<double> v1(vec1, vec1 + vLength);
std::vector<double> v2(vec2, vec2 + vLength);
return TQHistogramUtils::scatterPlot(name , v1 , v2 , labelX , labelY);
}
TGraph* TQHistogramUtils::scatterPlot(const TString& name, std::vector<double>& vec1, std::vector<double>& vec2, const TString& labelX, const TString& labelY) {
if (vec1.size() != vec2.size()) {
ERRORfunc("Vectors have different length!");
return NULL;
}
TGraph* graph = new TGraph(vec1.size(),&vec1[0],&vec2[0]);
if (!graph) {
ERRORfunc("Failed to create graph");
return NULL;
}
graph->SetNameTitle(name.Data(),name.Data());
graph->GetXaxis()->SetTitle(labelX.Data());
graph->GetYaxis()->SetTitle(labelY.Data());
return graph;
}
TMultiGraph* TQHistogramUtils::makeMultiColorGraph(const std::vector<double>& vecX, const std::vector<double>& vecY, const std::vector<short>& vecColors) {
if (vecX.size() != vecY.size() || vecX.size() != vecColors.size()) {
WARN("Cannot create multiColorGraph: input sizes do not match!");
return nullptr;
}
std::map< short,std::pair < std::vector<double>,std::vector<double> > > pointMap;
for (size_t i=0; i<vecX.size(); ++i) {
short color = vecColors[i];
if (pointMap.count(color)<1) {
std::pair< std::vector<double>,std::vector<double> > points;
pointMap[color] = points;
}
pointMap[color].first.push_back(vecX[i]);
pointMap[color].second.push_back(vecY[i]);
}
TMultiGraph* multi = new TMultiGraph();
for (auto const& graphDef : pointMap) {
TGraph* gr = new TGraph(graphDef.second.first.size(), &(graphDef.second.first[0]), &(graphDef.second.second[0]) );
gr->SetMarkerColor(graphDef.first);
multi->Add(gr);
}
return multi;
}
void TQHistogramUtils::setSliceX(TH2* hist2d, TH1* hist, double value){
for(int i=1; i<hist->GetNbinsX()+2; i++){
int bin = hist2d->FindBin(value,hist->GetBinCenter(i));
if(bin <= 0) continue;
hist2d->SetBinContent(bin,hist->GetBinContent(i));
hist2d->SetBinError(bin,hist->GetBinError(i));
}
}
void TQHistogramUtils::setSliceY(TH2* hist2d, TH1* hist, double value){
for(int i=1; i<hist->GetNbinsX()+2; i++){
int bin = hist2d->FindBin(hist->GetBinCenter(i),value);
if(bin <= 0) continue;
hist2d->SetBinContent(bin,hist->GetBinContent(i));
hist2d->SetBinError(bin,hist->GetBinError(i));
}
}
int TQHistogramUtils::purgePeaks1D(TH1* hist, double threshold, int mode){
if(!hist) return 0;
int n=0;
for(int i=1; i<hist->GetNbinsX()+1; ++i){
if(hist->GetBinContent(i) > threshold*hist->GetBinContent(i+1) && hist->GetBinContent(i) > threshold*hist->GetBinContent(i-1)){
if(mode == 0){
hist->SetBinContent(i,0);
} else {
hist->SetBinContent(i,0.5*(hist->GetBinContent(i+1)+hist->GetBinContent(i-1)));
}
++n;
}
}
return n;
}
void TQHistogramUtils::getFilteredRange(TCollection* histograms, double xmin, double xmax, double minContent, double maxContent, double& lower, double& upper, double logMin){
double maxErr=0.;
int eventCounter=0;
TQTH1Iterator itr(histograms);
while(itr.hasNext()){
TH1 * hist = itr.readNext();
if(!hist) continue;
int minbin = hist->FindBin(xmin);
int maxbin = hist->FindBin(xmax);
for(int i=minbin; i<maxbin; i++){
double val = hist->GetBinContent(i);
double err = hist->GetBinError(i);
if(val < minContent || val > maxContent || err==0.) continue;
maxErr=std::max(maxErr, err);
eventCounter++;
}
}
TH1F* errors = new TH1F("error distribution","", eventCounter, 0., maxErr);
itr.reset();
while(itr.hasNext()){
TH1 * hist = itr.readNext();
if(!hist) continue;
int minbin = hist->FindBin(xmin);
int maxbin = hist->FindBin(xmax);
for(int i=minbin; i<maxbin; i++){
double val = hist->GetBinContent(i);
double err = hist->GetBinError(i);
if(val < minContent || val > maxContent || err==0) continue;
errors->Fill(err);
}
}
int collectedEvents=0;
int percentile95=1;
while (collectedEvents < (eventCounter-1)*0.95){
collectedEvents+=errors->GetBinContent(percentile95);
percentile95++;
}
errors->GetXaxis()->SetRange(1,percentile95-1);
double maxAllowedErr=errors->GetMean()+3*errors->GetRMS();
maxAllowedErr=std::max(maxAllowedErr, (maxContent-minContent)*0.1);
delete errors;
lower=maxContent;
upper=minContent;
itr.reset();
while(itr.hasNext()){
TH1 * hist = itr.readNext();
if(!hist) continue;
int minbin = hist->FindBin(xmin);
int maxbin = hist->FindBin(xmax);
for(int i=minbin; i<maxbin; i++){
double val = hist->GetBinContent(i);
double err = hist->GetBinError(i);
if(TQUtils::isNum(val) && TQUtils::isNum(err) && val > minContent && val < maxContent && err<maxAllowedErr){
if (val+err>upper) upper = val+err;
if (logMin<0 || val-err>logMin) {
if (val-err<lower) lower = val-err;
} else {
if (val-err<lower) lower=std::min(lower,logMin);
if (val<lower) lower=val/1.05;
}
}
}
}
}
void TQHistogramUtils::getUnFilteredRange(TCollection* histograms, double xmin, double xmax, double minContent, double maxContent, double& lower, double& upper){
lower=minContent;
upper=maxContent;
TQTH1Iterator itr(histograms);
while(itr.hasNext()){
TH1 * hist = itr.readNext();
if(!hist) continue;
int minbin = hist->FindBin(xmin);
int maxbin = hist->FindBin(xmax);
for(int i=minbin; i<maxbin; i++){
double val = hist->GetBinContent(i);
double err = hist->GetBinError(i);
if(TQUtils::isNum(val) && TQUtils::isNum(err)) {
if (val-err<lower) lower = val-err;
if (val+err>upper) upper = val+err;
}
}
}
}
double TQHistogramUtils::getMinimumBinValue(TH1* hist, double xmin, double xmax, bool includeErrors, double minContent, double maxContent){
double min = std::numeric_limits<double>::infinity();
if(!hist) return min;
int minbin = hist->FindBin(xmin);
int maxbin = hist->FindBin(xmax);
for(int i=minbin; i<maxbin; i++){
double val = hist->GetBinContent(i);
if(includeErrors){
double err = hist->GetBinError(i);
if(TQUtils::isNum(err)) val -= err;
}
if(TQUtils::isNum(val) && val < min && val > minContent && val < maxContent)
min = val;
}
return min;
}
double TQHistogramUtils::getMinimumBinValue(TCollection* histograms, double xmin, double xmax, bool includeErrors, double minContent, double maxContent){
double min = std::numeric_limits<double>::infinity();
TQTH1Iterator itr(histograms);
while(itr.hasNext()){
TH1 * histo = itr.readNext();
if(!histo) continue;
min = std::min(min,TQHistogramUtils::getMinimumBinValue(histo,xmin,xmax,includeErrors,minContent,maxContent));
}
return min;
}
double TQHistogramUtils::getMaximumBinValue(TH1* hist, double xmin, double xmax, bool includeErrors, double minContent, double maxContent){
double max = -std::numeric_limits<double>::infinity();
if(!hist) return max;
int minbin = hist->FindBin(xmin);
int maxbin = hist->FindBin(xmax);
for(int i=minbin; i<maxbin; i++){
double val = hist->GetBinContent(i);
if(includeErrors){
double err = hist->GetBinError(i);
if(TQUtils::isNum(err)) val += err;
}
if(TQUtils::isNum(val) && val > max && val > minContent && val < maxContent)
max = val;
}
return max;
}
double TQHistogramUtils::getMaximumBinValue(TCollection* histograms, double xmin, double xmax, bool includeErrors, double minContent, double maxContent){
double max = -std::numeric_limits<double>::infinity();
TQTH1Iterator itr(histograms);
while(itr.hasNext()){
TH1 * histo = itr.readNext();
if(!histo) continue;
max = std::max(max,TQHistogramUtils::getMaximumBinValue(histo,xmin,xmax,includeErrors,minContent,maxContent));
}
return max;
}
double TQHistogramUtils::getHistogramMaximum(size_t n, ...){
va_list vl;
va_start(vl,n);
double max = -std::numeric_limits<double>::infinity();
for(size_t i=0; i<n; i++){
TH1* h = va_arg(vl,TH1*);
if(h) max = std::max(max,h->GetMaximum());
}
va_end(vl);
return max;
}
double TQHistogramUtils::getHistogramMinimum(size_t n, ...){
va_list vl;
va_start(vl,n);
double min = std::numeric_limits<double>::infinity();
for(size_t i=0; i<n; i++){
TH1* h = va_arg(vl,TH1*);
if(h) min = std::min(min,h->GetMinimum());
}
va_end(vl);
return min;
}
double TQHistogramUtils::getHistogramXmax(size_t n, ...){
va_list vl;
va_start(vl,n);
double max = -std::numeric_limits<double>::infinity();
for(size_t i=0; i<n; i++){
TH1* h = va_arg(vl,TH1*);
if(h) max = std::max(max,h->GetXaxis()->GetXmax());
}
va_end(vl);
return max;
}
double TQHistogramUtils::getHistogramXmin(size_t n, ...){
va_list vl;
va_start(vl,n);
double min = std::numeric_limits<double>::infinity();
for(size_t i=0; i<n; i++){
TH1* h = va_arg(vl,TH1*);
if(h) min = std::min(min,h->GetXaxis()->GetXmin());
}
va_end(vl);
return min;
}
double TQHistogramUtils::getHistogramYmax(size_t n, ...){
va_list vl;
va_start(vl,n);
double max = -std::numeric_limits<double>::infinity();
for(size_t i=0; i<n; i++){
TH1* h = va_arg(vl,TH1*);
if(h) max = std::max(max,h->GetYaxis()->GetXmax());
}
va_end(vl);
return max;
}
double TQHistogramUtils::getHistogramYmin(size_t n, ...){
va_list vl;
va_start(vl,n);
double min = std::numeric_limits<double>::infinity();
for(size_t i=0; i<n; i++){
TH1* h = va_arg(vl,TH1*);
if(h) min = std::min(min,h->GetYaxis()->GetXmin());
}
va_end(vl);
return min;
}
double TQHistogramUtils::getAxisYmin(const TH1* hist){
if(!hist) return std::numeric_limits<double>::quiet_NaN();
return hist->GetYaxis()->GetBinLowEdge(hist->GetYaxis()->GetFirst());
}
double TQHistogramUtils::getAxisYmax(const TH1* hist){
if(!hist) return std::numeric_limits<double>::quiet_NaN();
return hist->GetYaxis()->GetBinUpEdge(hist->GetYaxis()->GetLast());
}
double TQHistogramUtils::getAxisXmin(const TH1* hist){
if(!hist) return std::numeric_limits<double>::quiet_NaN();
return hist->GetXaxis()->GetBinLowEdge(hist->GetXaxis()->GetFirst());
}
double TQHistogramUtils::getAxisXmax(const TH1* hist){
if(!hist) return std::numeric_limits<double>::quiet_NaN();
return hist->GetXaxis()->GetBinUpEdge(hist->GetXaxis()->GetLast());
}
double TQHistogramUtils::getAxisXmin(const TGraph* graph){
if(!graph) return std::numeric_limits<double>::quiet_NaN();
return graph->GetXaxis()->GetBinLowEdge(graph->GetXaxis()->GetFirst());
}
double TQHistogramUtils::getAxisXmax(const TGraph* graph){
if(!graph) return std::numeric_limits<double>::quiet_NaN();
return graph->GetXaxis()->GetBinUpEdge(graph->GetXaxis()->GetLast());
}
double TQHistogramUtils::getHistogramBinContentFromFile(const TString& fname, const TString& hname, const TString binlabel){
TFile* f = TFile::Open(fname,"READONLY");
if(!f){
ERRORfunc("unable to open file: '%s'",fname.Data());
return std::numeric_limits<double>::quiet_NaN();
}
if(!f->IsOpen()){
delete f;
ERRORfunc("unable to open file '%s'",fname.Data());
return std::numeric_limits<double>::quiet_NaN();
}
TH1* h = dynamic_cast<TH1*>(f->Get(hname));
if(!h){
f->Close();
delete f;
ERRORfunc("unable to obtain histogram '%s' from file '%s'",hname.Data(),fname.Data());
return std::numeric_limits<double>::quiet_NaN();
}
TAxis* a = h->GetXaxis();
if(!a){
f->Close();
delete f;
ERRORfunc("unable to obtain x-axis from histogram '%s' in file '%s'",hname.Data(),fname.Data());
return std::numeric_limits<double>::quiet_NaN();
}
int bin = a->FindBin(binlabel);
if(bin < 0){
f->Close();
delete f;
ERRORfunc("histogram '%s' from file '%s' does not have any bin labeled '%s'",hname.Data(),fname.Data(),binlabel.Data());
return std::numeric_limits<double>::quiet_NaN();
}
double val = h->GetBinContent(bin);
f->Close();
delete f;
return val;
}
double TQHistogramUtils::getHistogramBinContentFromFile(const TString& fname, const TString& hname, int bin){
TFile* f = TFile::Open(fname,"READONLY");
if(!f){
ERRORfunc("unable to open file: '%s'",fname.Data());
return std::numeric_limits<double>::quiet_NaN();
}
if(!f->IsOpen()){
delete f;
ERRORfunc("unable to open file '%s'",fname.Data());
return std::numeric_limits<double>::quiet_NaN();
}
TH1* h = dynamic_cast<TH1*>(f->Get(hname));
if(!h){
f->Close();
delete f;
ERRORfunc("unable to obtain histogram '%s' from file '%s'",hname.Data(),fname.Data());
return std::numeric_limits<double>::quiet_NaN();
}
double val = h->GetBinContent(bin);
f->Close();
delete f;
return val;
}
std::vector<int> TQHistogramUtils::getBinsSortedByRatio(TH1* sig, TH1* bkg, double epsilon){
const int nbins = sig->GetNbinsX();
std::vector<double> sigbkg(nbins);
std::vector<int> bin(nbins);
struct comparator {
comparator(const std::vector<double>& _content):
content(_content) {}
bool operator() (int i, int j) {
return (content[i] < content[j]);
}
std::vector<double> content;
} ;
if (!checkConsistency(sig,bkg,true)){
throw std::runtime_error("Cannot calculate signal over background per bin, histograms are not the same size");
}
for (int i = 0; i < nbins; ++i){
double bkgContent = std::max(bkg->GetBinContent(i+1),epsilon);
double sigContent = std::max(sig->GetBinContent(i+1),0.);
sigbkg[i] = sigContent/bkgContent;
bin[i] = i;
}
std::sort(bin.begin(), bin.end(), comparator(sigbkg));
return bin;
}
int TQHistogramUtils::edge(TH1* hist, double cutoff){
if (hist->GetMaximum() < cutoff) {
WARN("In TQHistogramUtils::edge() : Edging of histogram not possible! Cutoff value is larger than histogram maximum.");
return 0;
}
if(!hist) return -1;
TAxis* a = hist->GetXaxis();
if(!a) return -1;
size_t min=1;
size_t max = hist->GetNbinsX();
for(int i=min; i<hist->GetNbinsX(); i++){
if(hist->GetBinContent(i) <= cutoff) min++;
else break;
}
for(int i=max; i>0; i--){
if(hist->GetBinContent(i) <= cutoff) max--;
else break;
}
a->SetRange(min,max);
return (hist->GetNbinsX() - max + min);
}
int TQHistogramUtils::edge(TH2* hist, double cutoff){
if(!hist) return -1;
TAxis* ax = hist->GetXaxis();
TAxis* ay = hist->GetYaxis();
if(!ax || !ay) return -1;
size_t xmin=1;
size_t xmax = hist->GetNbinsX();
size_t ymin=1;
size_t ymax = hist->GetNbinsY();
for(int i=xmin; i<hist->GetNbinsX(); i++){
bool emptyline = true;
for(size_t j=1; j<ymax; j++){
int bin = hist->GetBin(i,j);
if(hist->GetBinContent(bin) > cutoff){
emptyline = false;
break;
}
}
if(emptyline) xmin++;
else break;
}
for(size_t i=xmax; i>0; i--){
bool emptyline = true;
for(size_t j=1; j<ymax; j++){
int bin = hist->GetBin(i,j);
if(hist->GetBinContent(bin) > cutoff){
emptyline = false;
break;
}
}
if(emptyline) xmax--;
else break;
}
for(int i=ymin; i<hist->GetNbinsY(); i++){
bool emptyline = true;
for(size_t j=xmin; j<xmax; j++){
int bin = hist->GetBin(j,i);
if(hist->GetBinContent(bin) > cutoff){
emptyline = false;
break;
}
}
if(emptyline) ymin++;
else break;
}
for(size_t i=ymax; i>0; i--){
bool emptyline = true;
for(size_t j=xmin; j<xmax; j++){
int bin = hist->GetBin(j,i);
if(hist->GetBinContent(bin) > cutoff){
emptyline = false;
break;
}
}
if(emptyline) ymax--;
else break;
}
ax->SetRange(xmin,xmax);
ay->SetRange(ymin,ymax);
return hist->GetNbinsX()*hist->GetNbinsY() - (xmax + xmin -1 )*(ymax+ymin-1);
}
bool TQHistogramUtils::rebin(TH1*& hist, const std::vector<int>& boundaries, bool doRemap) {
std::vector<double> bounds = TQHistogramUtils::getBinLowEdges(hist,boundaries);
return TQHistogramUtils::rebin(hist,bounds,doRemap);
}
bool TQHistogramUtils::rebin(TH1*& hist, const std::vector<int>& boundariesX, const std::vector<int>& boundariesY, bool doRemap) {
std::vector<double> boundsX = TQHistogramUtils::getBinLowEdges(hist->GetXaxis(),boundariesX);
std::vector<double> boundsY = TQHistogramUtils::getBinLowEdges(hist->GetYaxis(),boundariesY);
return TQHistogramUtils::rebin(hist,boundsX,boundsY,doRemap);
}
TH1* TQHistogramUtils::getRebinned(const TH1* hist, const std::vector<int>& boundariesX, const std::vector<int>& boundariesY, bool doRemap, bool keepOverFlowUnderFlowSeparate) {
std::vector<double> boundsX = TQHistogramUtils::getBinLowEdges(hist->GetXaxis(),boundariesX);
std::vector<double> boundsY = TQHistogramUtils::getBinLowEdges(hist->GetYaxis(),boundariesY);
return TQHistogramUtils::getRebinned(hist,boundsX,boundsY,doRemap, keepOverFlowUnderFlowSeparate);
}
void TQHistogramUtils::reorder(TH1* hist, const std::vector<int>& bins) {
if(!hist) return;
const int nentries = hist->GetEntries();
std::vector<double> contents(hist->GetNbinsX());
std::vector<double> errors(hist->GetNbinsX());
for (int i = 0; i < hist->GetNbinsX(); ++i){
contents[i] = hist->GetBinContent(bins[i]+1);
errors[i] = hist->GetBinError(bins[i]+1);
}
for (unsigned i = 0; i < contents.size(); ++i){
hist->SetBinContent( i+1, contents[i] );
hist->SetBinError( i+1, errors[i] );
}
TQHistogramUtils::remap(hist->GetXaxis(),0,1);
hist->SetEntries(nentries);
}
bool TQHistogramUtils::rebin(TH1*& hist, const std::vector<double>& boundaries, bool doRemap) {
if(!hist) return false;
TH1* oldhist = hist;
hist = NULL;
TString name(oldhist->GetName());
TDirectory* dir = oldhist->GetDirectory();
if(dir) dir->Remove(oldhist);
hist = oldhist->Rebin(boundaries.size()-1, name, &boundaries[0]);
if (doRemap) {
remap(hist->GetXaxis(),0,1);
}
hist->SetDirectory(dir);
delete oldhist;
return true;
}
bool TQHistogramUtils::rebin(TH1*& hist, const std::vector<double>& boundariesX, const std::vector<double>& boundariesY, bool doRemap) {
TH1* oldhist = hist;
hist = TQHistogramUtils::getRebinned(hist,boundariesX,boundariesY,doRemap);
if(!hist) return false;
TDirectory* dir = oldhist->GetDirectory();
if(dir) dir->Remove(oldhist);
hist->SetDirectory(dir);
delete oldhist;
return true;
}
TH1* TQHistogramUtils::getRebinned(const TH1* oldhist, const std::vector<double>& boundariesX, const std::vector<double>& boundariesY, bool doRemap, bool ) {
if(!oldhist) return NULL;
TH1* hist = new TH2F(oldhist->GetName(),oldhist->GetTitle(),boundariesX.size()-1,&boundariesX[0],boundariesY.size()-1,&boundariesY[0]);
for(int i=0; i<oldhist->GetNbinsX()+2; ++i){
for(int j=0; j<oldhist->GetNbinsY()+2; ++j){
double xval = oldhist->GetXaxis()->GetBinCenter(i);
double yval = oldhist->GetYaxis()->GetBinCenter(j);
int ibin = hist->FindBin(xval,yval);
double val = hist->GetBinContent(ibin);
double err2 = pow(hist->GetBinError(ibin),2);
val += oldhist->GetBinContent(i,j);
err2 += pow(oldhist->GetBinError(i,j),2);
hist->SetBinContent(ibin,val);
hist->SetBinError(ibin,sqrt(err2));
}
}
if (doRemap) {
remap(hist->GetXaxis(),0,1);
remap(hist->GetYaxis(),0,1);
}
return hist;
}
TH1 * TQHistogramUtils::getSmoothedManually(const TH1 * histo, const std::vector<double>& lowEdges, bool keepOverFlowUnderFlowSeparate) {
std::vector<int> binBorders;
for (size_t i = 0; i < lowEdges.size(); ++i) {
binBorders.push_back(histo->GetXaxis()->FindBin(lowEdges[i]));
}
return TQHistogramUtils::getSmoothedManually(histo, binBorders, keepOverFlowUnderFlowSeparate);
}
TH1 * TQHistogramUtils::getSmoothedManually(const TH1 * histo, const std::vector<int>& binBorders, bool keepOverFlowUnderFlowSeparate) {
if (!histo || getDimension(histo) != 1)
return 0;
if (binBorders.size() == 0) {
WARN("Not possible to return smoothed histogram with name '%s' because" \
" no bin borders provided.", histo->GetName());
return 0;
}
std::vector<int> correctedBinBorders;
if (binBorders.size() > 0) {
if (binBorders[0] == 0) {
correctedBinBorders = std::vector<int>(binBorders.begin() + 1, binBorders.end());
} else {
correctedBinBorders = binBorders;
}
if (correctedBinBorders[correctedBinBorders.size()-1] <= histo->GetNbinsX() ) {
if (!keepOverFlowUnderFlowSeparate) {
correctedBinBorders.push_back( histo->GetNbinsX() + 2 );
} else {
correctedBinBorders.push_back( histo->GetNbinsX() + 1 );
}
}
if (keepOverFlowUnderFlowSeparate) {
if (correctedBinBorders[0] != 1) {
correctedBinBorders.insert(correctedBinBorders.begin(), 1);
}
if (correctedBinBorders[correctedBinBorders.size()-1] != histo->GetNbinsX() + 2) {
correctedBinBorders.push_back(histo->GetNbinsX() + 2);
}
if (correctedBinBorders[correctedBinBorders.size()-2] != histo->GetNbinsX() + 1) {
int tmpBin = correctedBinBorders[correctedBinBorders.size() - 1];
correctedBinBorders.pop_back();
correctedBinBorders.push_back(histo->GetNbinsX() + 1); correctedBinBorders.push_back(tmpBin);
}
} else {
if (correctedBinBorders[correctedBinBorders.size()-1] != histo->GetNbinsX() + 2) {
correctedBinBorders.push_back( histo->GetNbinsX() + 2 );
}
}
}
TH1 * newHisto;
if (histo->InheritsFrom(TH1F::Class()))
newHisto = (TH1F*)histo->Clone();
else if (histo->InheritsFrom(TH1D::Class()))
newHisto = (TH1D*)histo->Clone();
else return nullptr;
if(newHisto){
TString label = TQStringUtils::getWithoutUnit(histo->GetXaxis()->GetTitle());
label.Prepend("Smoothed ");
newHisto->GetXaxis()->SetTitle(label.Data());
newHisto->SetDirectory(histo->GetDirectory());
std::vector<double> binContents;
std::vector<double> binErrors;
for (size_t i = 0; i < correctedBinBorders.size(); i++) {
int lowerBin = 0;
int upperBin = histo->GetNbinsX() + 1;
if (i == 0) {
lowerBin = 0;
upperBin = correctedBinBorders[0] - 1;
} else {
lowerBin = correctedBinBorders[i - 1];
upperBin = correctedBinBorders[i] - 1;
}
double binError = 0.;
for (int i=0; i < upperBin - lowerBin + 1; i++) {
int nAveragedBins = upperBin - lowerBin + 1;
binContents.push_back(histo->IntegralAndError(lowerBin, upperBin, binError) / nAveragedBins);
binErrors.push_back(binError / nAveragedBins);
}
}
for (size_t i = 0; i < binContents.size(); i++) {
newHisto->SetBinContent(i, binContents[i]);
newHisto->SetBinError(i, binErrors[i]);
}
newHisto->SetEntries(histo->GetEntries());
}
return newHisto;
}
TH1 * TQHistogramUtils::getSmoothedVariation(const TH1 * h_nom, TH1 * h_var, const std::vector<int>& binBorders, bool keepOverFlowUnderFlowSeparate) {
if (binBorders.empty()) {
DEBUG("No bin borders specified, returning varied histogram!");
return h_var;
}
TH1* h_nom_smoothed = TQHistogramUtils::getSmoothedManually(h_nom, binBorders, keepOverFlowUnderFlowSeparate);
TH1* h_var_smoothed = TQHistogramUtils::getSmoothedManually(h_var, binBorders, keepOverFlowUnderFlowSeparate);
if (h_var_smoothed) {
h_var_smoothed->Divide(h_nom_smoothed);
h_var_smoothed->Multiply(h_nom);
h_var = TQHistogramUtils::copyHistogram(h_var_smoothed);
} else{
DEBUG("Couldn't return smoothed variation!");
}
return h_var;
}
bool TQHistogramUtils::rebin(TH1* histo, int rebinX, int rebinY, int rebinZ, bool doRemap){
if(!histo) return false;
int tmp = gErrorIgnoreLevel;
gErrorIgnoreLevel = 5000;
bool ok = true;
int dim = TQHistogramUtils::getDimension(histo);
if (dim == 1 && rebinX > 0 && rebinY == 0 && rebinZ == 0) {
histo->Rebin(rebinX);
if(doRemap) remap(histo->GetXaxis(),0,1);
} else if (dim == 2 && (rebinX > 0 || rebinY > 0) && rebinZ == 0) {
if (rebinX > 0){
((TH2*)histo)->RebinX(rebinX);
if(doRemap) remap(histo->GetXaxis(),0,1);
}
if (rebinY > 0) {
((TH2*)histo)->RebinY(rebinY);
if(doRemap) remap(histo->GetYaxis(),0,1);
}
} else if (dim == 3 && (rebinX > 0 || rebinY > 0 || rebinZ > 0)) {
if (rebinX > 0){
((TH3*)histo)->Rebin3D(rebinX, 1, 1, "");
if(doRemap) remap(histo->GetXaxis(),0,1);
}
if (rebinY > 0){
((TH3*)histo)->Rebin3D(1, rebinY, 1, "");
if(doRemap) remap(histo->GetYaxis(),0,1);
}
if (rebinZ > 0){
((TH3*)histo)->Rebin3D(1, 1, rebinZ, "");
if(doRemap) remap(histo->GetZaxis(),0,1);
}
} else {
ok = false;
}
gErrorIgnoreLevel = tmp;
return ok;
}
void TQHistogramUtils::remap(TAxis* ax,double min, double max) {
if(!ax) return;
TString label = TQStringUtils::getWithoutUnit(ax->GetTitle());
label.Prepend("Remapped ");
ax->SetTitle(label.Data());
ax->Set(ax->GetNbins(),min,max);
}
void TQHistogramUtils::remapAndRelabel(TAxis* ax) {
TString label = TQStringUtils::getWithoutUnit(ax->GetTitle());
TString unit = TQStringUtils::getUnit(ax->GetTitle());
std::vector<double> boundaries;
for(int i=0; i<=ax->GetNbins(); ++i){
boundaries.push_back(ax->GetBinLowEdge(i));
}
ax->Set(ax->GetNbins(),0,1);
for(int i=0; i<ax->GetNbins(); ++i){
TString binlabel = TString::Format("%g %s < %s < %g %s",boundaries[i],unit.Data(),label.Data(),boundaries[i+1],unit.Data());
ax->SetBinLabel(i+1,binlabel);
}
}
void TQHistogramUtils::print(THStack* s, TString){
TQIterator itr(s->GetHists());
while(itr.hasNext()){
TH1* hist = dynamic_cast<TH1*>(itr.readNext());
if(!hist) continue;
std::cout<<TQStringUtils::fixedWidth(hist->GetName(),20) << TQStringUtils::fixedWidth(hist->GetTitle(),20) << TQHistogramUtils::getDetailsAsString(hist,4) << std::endl;
}
}
double TQHistogramUtils::getMax(const TCollection* c, bool includeUnderflowOverflow, double maxMax){
TQIterator itr(c);
double max = -std::numeric_limits<double>::infinity();
while(itr.hasNext()){
TH1* hist = dynamic_cast<TH1*>(itr.readNext());
if(!hist) continue;
max = std::max(TQHistogramUtils::getMax(hist,false,includeUnderflowOverflow, maxMax) , max);
}
return max;
}
double TQHistogramUtils::getMin(const TCollection* c, bool includeUnderflowOverflow, double minMin){
TQIterator itr(c);
double min = std::numeric_limits<double>::infinity();
while(itr.hasNext()){
TH1* hist = dynamic_cast<TH1*>(itr.readNext());
if(!hist) continue;
min = std::min(TQHistogramUtils::getMin(hist,false,includeUnderflowOverflow, minMin) , min);
}
return min;
}
double TQHistogramUtils::evaluateGraph(const TGraph* g, double x, int mode){
if(!g) return std::numeric_limits<double>::quiet_NaN();
Int_t fNpoints = g->GetN();
double* fX = g->GetX();
double* fY = g->GetY();
Int_t low = -1;
Int_t up = -1;
if(true){
low = TMath::BinarySearch(fNpoints, fX, x);
if (low == -1) {
low = 0;
}
if (fX[low] == x) return fY[low];
if (low == fNpoints-1) low--;
up = low+1;
} else {
Int_t low2 = -1;
Int_t up2 = -1;
for (Int_t i = 0; i < fNpoints; ++i) {
if (fX[i] < x) {
if (low == -1 || fX[i] > fX[low]) {
low2 = low;
low = i;
} else if (low2 == -1) low2 = i;
} else if (fX[i] > x) {
if (up == -1 || fX[i] < fX[up]) {
up2 = up;
up = i;
} else if (up2 == -1) up2 = i;
} else
return fY[i];
}
if (up == -1) {
up = low;
low = low2;
}
if (low == -1) {
low = up;
up = up2;
}
}
if(mode == 0){
return fY[up] + (x - fX[up]) * (fY[low] - fY[up]) / (fX[low] - fX[up]);
} else if(mode==1){
const double a = ( log(fY[low]) - log(fY[up]) ) / (fX[low] - fX[up] );
const double c = fY[low] / exp( a * fX[low] );
return c * exp ( a * x );
} else {
throw std::runtime_error("unknown interpolation method!");
}
}
double TQHistogramUtils::findIntersection(const TGraph* a, const TGraph* b, int mode, double left, double right, double epsilon){
if(!a || !b) return std::numeric_limits<double>::quiet_NaN();
if(!TQUtils::isNum(left)) left = a->GetX()[0];
if(!TQUtils::isNum(right)) right = a->GetX()[a->GetN()-1];
DEBUGfunc("a=%s, b=%s, mode=%d",a->GetName(),b->GetName(),mode);
while(true){
bool larger_left = TQHistogramUtils::evaluateGraph(a,left,mode) > TQHistogramUtils::evaluateGraph(b,left,mode);
bool larger_right = TQHistogramUtils::evaluateGraph(a,right,mode) > TQHistogramUtils::evaluateGraph(b,right,mode);
DEBUGfunc("left: x=%g, a=%g, b=%g; right: x=%g, a=%g, b=%g",left,TQHistogramUtils::evaluateGraph(a,left,mode),TQHistogramUtils::evaluateGraph(b,left,mode),right,TQHistogramUtils::evaluateGraph(a,right,mode),TQHistogramUtils::evaluateGraph(b,right,mode));
if(larger_left == larger_right) return std::numeric_limits<double>::quiet_NaN();
double mid = 0.5*(left+right);
bool larger_mid = TQHistogramUtils::evaluateGraph(a,mid,mode) > TQHistogramUtils::evaluateGraph(b,mid,mode);
if(larger_mid == larger_left){
left = mid;
} else {
right = mid;
}
if(fabs(TQHistogramUtils::evaluateGraph(a,mid,mode)-TQHistogramUtils::evaluateGraph(b,mid,mode)) < epsilon) return mid;
}
return std::numeric_limits<double>::quiet_NaN();
}
double TQHistogramUtils::getContourArea(const TGraph* g){
if(!g) return std::numeric_limits<double>::quiet_NaN();
double x,y,xOld,yOld;
g->GetPoint(0,xOld,yOld);
int i=1;
double_t area = 0;
while(g->GetPoint(i,x,y) > 0){
area += y*xOld -x*yOld;
xOld = x;
yOld = y;
i++;
}
g->GetPoint(0,x,y);
area += y*xOld -x*yOld;
return 0.5*area;
}
double TQHistogramUtils::getContourJump(const TGraph* g){
if(!g) return std::numeric_limits<double>::quiet_NaN();
double x,y,xOld,yOld;
g->GetPoint(0,xOld,yOld);
g->GetPoint(g->GetN(),x,y);
return sqrt(pow(x-xOld,2)+pow(y-yOld,2));
}
void TQHistogramUtils::interpolateGraph(TGraph* g, size_t increasePoints, const char* option){
if(!g) return;
g->Sort();
const size_t n = g->GetN();
std::map<double,double> morePoints;
std::map<double,double> moreErrorsHigh;
std::map<double,double> moreErrorsLow;
for(size_t i=0; i<n-1; ++i){
double minx,maxx,miny,maxy;
g->GetPoint( i,minx,miny);
g->GetPoint(i+1,maxx,maxy);
if(minx >= maxx) continue;
double stepsize = fabs(maxx-minx) / (increasePoints);
minx+=stepsize;
maxx-=stepsize;
for (double thisX = minx; thisX <= maxx; thisX += stepsize) {
double thisY = g->Eval(thisX, NULL, option);
if(TQUtils::isNum(thisY)){
morePoints[thisX]=thisY;
}
}
}
size_t i=n;
for(auto it:morePoints){
g->SetPoint(i,it.first,it.second);
i++;
}
g->Sort();
}
double TQHistogramUtils::getMinBinWidth(TAxis*a){
if(!a) return std::numeric_limits<double>::quiet_NaN();
double min = std::numeric_limits<double>::infinity();
for(int i=1; i<=a->GetNbins(); i++){
min = std::min(a->GetBinWidth(i),min);
}
return min;
}
double TQHistogramUtils::getMinBinArea(TH2* hist){
if(!hist) return std::numeric_limits<double>::quiet_NaN();
return TQHistogramUtils::getMinBinWidth(hist->GetXaxis())*TQHistogramUtils::getMinBinWidth(hist->GetYaxis());
}
int TQHistogramUtils::addPCA(TPrincipal* orig, TPrincipal* add){
if(!orig || !add) return -1;
if(orig->GetSigmas()->GetNrows() != orig->GetSigmas()->GetNrows()) return -1;
int nRow = 0;
while(true){
const double * row = add->GetRow(nRow);
if(!row) break;
orig->AddRow(row);
nRow++;
}
return nRow;
}
bool TQHistogramUtils::addGraph(TGraph * orig, const TGraph * add){
if(!orig || !add) return false;
const size_t n = orig->GetN();
const size_t nnew = add->GetN();
orig->Expand(n+nnew);
for(size_t i=0; i<nnew; ++i){
double x,y;
add->GetPoint(i,x,y);
orig->SetPoint(n+i,x,y);
}
return true;
}
bool TQHistogramUtils::addGraph(TGraph2D * orig, const TGraph2D * add){
if(!orig || !add) return false;
const size_t n = orig->GetN();
const size_t nnew = add->GetN();
const double* x = add->GetX();
const double* y = add->GetY();
const double* z = add->GetZ();
for(size_t i=0; i<nnew; ++i){
orig->SetPoint(n+i,x[i],y[i],z[i]);
}
return true;
}
bool TQHistogramUtils::addGraph(TNamed * orig, const TNamed * add){
if(!orig || !add) return false;
if(orig->InheritsFrom(TGraph::Class()) && add->InheritsFrom(TGraph::Class())){
return addGraph(static_cast<TGraph*>(orig),static_cast<const TGraph*>(add));
}
if(orig->InheritsFrom(TGraph2D::Class()) && add->InheritsFrom(TGraph2D::Class())){
return addGraph(static_cast<TGraph2D*>(orig),static_cast<const TGraph2D*>(add));
}
ERRORfunc("unable to add graphs of types '%s' and '%s'",orig->ClassName(),add->ClassName());
return false;
}
TString TQHistogramUtils::getDetailsAsString(const TNamed * obj, int option) {
if(obj->InheritsFrom(TH1::Class())) return TQHistogramUtils::getDetailsAsString((TH1*)obj,option);
if(obj->InheritsFrom(TGraph::Class())) return TQHistogramUtils::getDetailsAsString((TGraph*)obj,option);
if(obj->InheritsFrom(TPrincipal::Class())) return TQHistogramUtils::getDetailsAsString((TPrincipal*)obj,option);
if(obj->InheritsFrom(TAxis::Class())) return TQHistogramUtils::getDetailsAsString((TAxis*)obj,option);
if(obj->InheritsFrom(TGraph2D::Class())) return TQHistogramUtils::getDetailsAsString((TGraph2D*)obj,option);
return TString::Format("%s: %s (unknown)",obj->GetName(),obj->GetTitle());
}
TString TQHistogramUtils::getDetailsAsString(const TPrincipal * p, int) {
if(!p) return "NULL";
TQTaggable tags(p->GetTitle());
std::vector<TString> varnames;
TString retval = TString::Format("%d entries",p->GetUserData()->GetNrows());
if(tags.getTag("varname",varnames) > 0){
retval += " in " + TQStringUtils::concat(varnames,",");
} else {
retval += TString::Format("(%s)",p->GetTitle());
}
return retval;
}
int TQHistogramUtils::dumpData(TPrincipal * p, int cutoff){
if(!p) return -1;
TQTaggable tags(p->GetTitle());
size_t nVars = p->GetSigmas()->GetNrows();
int width = 20;
int numWidth = std::min((int)ceil(log10(cutoff))+1,10);
std::vector<TString> varnames;
if(tags.getTag("varname",varnames) == (int)nVars){
for(size_t i=0; i<varnames.size(); i++){
std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::fixedWidth(varnames[i],width,"r"));
}
} else {
for(size_t i=0; i<nVars; i++){
std::cout << TQStringUtils::makeBoldWhite(TQStringUtils::fixedWidth(TString::Format("var%u",(unsigned int)i),width,"r"));
}
}
std::cout << std::endl;
int nRows = 0;
while(nRows < cutoff){
const double * row = p->GetRow(nRows);
if(!row) break;
std::cout << TQStringUtils::fixedWidth(TString::Format("%d",nRows),numWidth,"r");
for(size_t i=0; i<nVars; i++){
std::cout << TQStringUtils::fixedWidth(TString::Format("%f",row[i]),width,"r");
}
nRows++;
std::cout << std::endl;
}
if(nRows >= cutoff){
std::cout << " ... truncated after " << nRows << " entries ..." << std::endl;
}
return nRows;
}
TH1* TQHistogramUtils::getSoverSqrtBScan(TH1* sig, TH1* bkg, bool fromleft, double cutoff, bool verbose) {
return TQHistogramUtils::getFOMScan(TQHistogramUtils::kSoSqB,sig,bkg,fromleft,cutoff,verbose);
}
double TQHistogramUtils::getFOM(TQHistogramUtils::FOM fom, double b, double berr, double s, double){
switch(fom){
case kSoSqB:
return s/sqrt(b);
case kSoSqBpdB:
return s/sqrt(b + berr*berr);
case kPoisson:
return TQHistogramUtils::getPoisson(b,s);
case kPoissonWErr:
return TQHistogramUtils::getPoissonWithError(b,berr,s);
case kSoB:
return s/b;
case kSoSqSpB:
return s/sqrt(s+b);
default :
return std::numeric_limits<double>::quiet_NaN();
}
return std::numeric_limits<double>::quiet_NaN();
}
TQHistogramUtils::FOM TQHistogramUtils::readFOM(TString fom){
fom.ToLower();
fom.ReplaceAll(" ","");
if(TQStringUtils::matches(fom,"s/sqrt(s+b)")){
return TQHistogramUtils::kSoSqSpB;
}
if(TQStringUtils::matches(fom,"s/b")){
return TQHistogramUtils::kSoB;
}
if(TQStringUtils::matches(fom,"poisson")){
return TQHistogramUtils::kPoisson;
}
if(TQStringUtils::matches(fom,"poissonwerr")){
return TQHistogramUtils::kPoissonWErr;
}
if(TQStringUtils::matches(fom,"s/sqrt(b)")){
return TQHistogramUtils::kSoSqB;
}
if(TQStringUtils::matches(fom,"s/sqrt(b+db2)")){
return TQHistogramUtils::kSoSqBpdB;
}
return TQHistogramUtils::kUndefined;
}
TString TQHistogramUtils::getFOMTitleROOT(TQHistogramUtils::FOM fom){
switch(fom){
case TQHistogramUtils::kSoSqB: return "s/#sqrt{b}";
case TQHistogramUtils::kSoSqBpdB: return "s/#sqrt{b+db^{2}}";
case TQHistogramUtils::kPoisson: return "#sqrt{2((s+b)ln(1+s/b)-s)}";
case TQHistogramUtils::kPoissonWErr: return "Significance";
case TQHistogramUtils::kSoB: return "s/b";
case TQHistogramUtils::kSoSqSpB: return "s/#sqrt{s+b}";
default: return "<unknown>";
}
return "<unknown>";
}
TString TQHistogramUtils::getFOMTitleLaTeX(TQHistogramUtils::FOM fom){
switch(fom){
case TQHistogramUtils::kSoSqB: return "$s/\\sqrt{b}$";
case TQHistogramUtils::kSoSqBpdB: return "$s/\\sqrt{b+db^{2}}$";
case TQHistogramUtils::kPoisson: return "$\\sqrt{2((s+b)\\ln(1+s/b)-s)}$";
case TQHistogramUtils::kPoissonWErr: return "$\\sqrt{2{(s+b)\\ln[\\frac{(s+b)(b+\\sigma^{2})}{b^{2}+(s+b)\\sigma^{2}}] - \\frac{b^{2}}{\\sigma^{2}}\\ln[1+\\frac{\\sigma^{2}s}{b(b+\\sigma^{2})}]}}$";
case TQHistogramUtils::kSoB: return "$s/b$";
case TQHistogramUtils::kSoSqSpB: return "$s/\\sqrt{s+b}$";
default: return "<unknown>";
}
return "<unknown>";
}
TH1* TQHistogramUtils::getSoverSqrtB(TH1* sig, TH1* bkg) {
return TQHistogramUtils::getFOMHistogram(TQHistogramUtils::kSoSqB,sig,bkg);
}
TH1* TQHistogramUtils::getFOMHistogram(TQHistogramUtils::FOM fom, TH1* sig, TH1* bkg, double cutoff, const std::vector<TH1*>& bkgSystHistos) {
if(!checkConsistency(sig,bkg,true)) return NULL;
std::unique_ptr<TH1> sumOfSqSys ( TQHistogramUtils::sumOfSquares(bkgSystHistos) );
TH1* retval = (TH1*)copyHistogram(sig,"NODIR");
retval->Reset();
retval->GetYaxis()->SetTitle(TQHistogramUtils::getFOMTitleROOT(fom));
double bkgErr=0;
for(int i=0; i<=sig->GetNbinsX(); i++){
if(bkg->GetBinContent(i) > cutoff){
bkgErr = sumOfSqSys ? std::sqrt( pow(bkg->GetBinError(i),2) + sumOfSqSys->GetBinContent(i) ) : bkg->GetBinError(i);
retval->SetBinContent(i,TQHistogramUtils::getFOM(fom,bkg->GetBinContent(i),bkgErr,sig->GetBinContent(i),sig->GetBinError(i)));
} else {
retval->SetBinContent(i,0);
}
retval->SetBinError(i,0);
}
return retval;
}
TH1* TQHistogramUtils::getFOMScan(TQHistogramUtils::FOM fom, TH1* sig, TH1* bkg, bool fromleft, double cutoff, bool verbose, const std::vector<TH1*>& bkgSystHistos) {
if(!checkConsistency(sig,bkg,true)) return NULL;
if(!(getDimension(sig) == 1)){
ERRORfunc("cannot perform scan on multi-dimensional histograms!");
}
std::unique_ptr<TH1> hCdfBkgSyst;
for (const TH1* hSys: bkgSystHistos) {
if (!hSys) continue;
if (!hCdfBkgSyst) {
hCdfBkgSyst = std::unique_ptr<TH1>(hSys->GetCumulative(!fromleft));
if (!hCdfBkgSyst) continue;
hCdfBkgSyst->Multiply(hCdfBkgSyst.get());
} else {
TH1* hTemp = hSys->GetCumulative(!fromleft);
if (!hTemp) continue;
hTemp->Multiply(hTemp);
hCdfBkgSyst->Add(hTemp);
delete hTemp;
}
}
TH1* retval = (TH1*)copyHistogram(sig,"NODIR");
if (fromleft)
retval->SetLineColor(2);
else
retval->SetLineColor(4);
int lbound = 0;
int rbound = sig->GetNbinsX()+1;
for (int ib = 0; ib <= sig->GetNbinsX(); ++ib) {
double cutval = 0;
if (fromleft){
lbound = ib;
cutval = sig->GetBinLowEdge(ib);
} else {
rbound = ib;
cutval = sig->GetBinLowEdge(ib) + sig->GetBinWidth(ib);
}
double serr = 0;
double s = sig->IntegralAndError(lbound,rbound,serr);
double berr = 0;
double b = bkg->IntegralAndError(lbound,rbound,berr);
if (hCdfBkgSyst) berr = std::sqrt( pow(berr,2) + hCdfBkgSyst->GetBinContent(ib) );
double z = TQHistogramUtils::getFOM(fom,b,berr,s,serr);
if (b<cutoff)
z = 0;
if(verbose) VERBOSEfunc("@%s=%g: s=%g, b=%g, z=%g",bkg->GetXaxis()->GetTitle(),cutval,s,b,z);
retval->SetBinContent(ib, z);
}
retval->GetYaxis()->SetTitle(TQHistogramUtils::getFOMTitleROOT(fom));
return retval;
}
double TQHistogramUtils::sumLineDistSquares(TH2* hist, double a, double b, bool useUnderflowOverflow){
if(!hist) return 0;
double sum = 0;
for(size_t i=1 - useUnderflowOverflow; i<=(size_t)hist->GetNbinsX() + useUnderflowOverflow; i++){
for(size_t j=1 - useUnderflowOverflow; j<=(size_t)hist->GetNbinsY() + useUnderflowOverflow; j++){
sum += (hist->GetBinContent(i,j))*calculateBinLineDistSquare(hist,a,b,i,j);
}
}
return sum;
}
double TQHistogramUtils::calculateBinLineDistSquare(TH2* hist, double a, double b, int i, int j){
double xp = hist->GetXaxis()->GetBinCenter(i);
double yp = hist->GetYaxis()->GetBinCenter(j);
if(b == 0) return pow(yp,2);
if(!TQUtils::isNum(b)) return pow(xp,2);
double yf = a + b*xp;
double xf = (yp - a)/b;
if((yf == yp) && (xf == xp)) return 0;
double firstLeg2 = pow(xp-xf,2);
double secondLeg2 = pow(yp-yf,2);
double dist2 = firstLeg2 * secondLeg2 / (firstLeg2 + secondLeg2);
return dist2;
}
TH1* TQHistogramUtils::getLineDistSquares(TH2* hist, double a, double b, bool useUnderflowOverflow){
if(!hist) return 0;
double maxDist2 = pow(TQHistogramUtils::getAxisXmax(hist) - TQHistogramUtils::getAxisXmin(hist),2) + pow(TQHistogramUtils::getAxisYmax(hist) - TQHistogramUtils::getAxisYmin(hist),2);
TH1F* distances = new TH1F(hist->GetName(),hist->GetTitle(),sqrt(hist->GetNbinsX()*hist->GetNbinsY()),0,maxDist2);
distances->SetDirectory(NULL);
for(size_t i=1 - useUnderflowOverflow; i<=(size_t)hist->GetNbinsX() + useUnderflowOverflow; i++){
for(size_t j=1 - useUnderflowOverflow; j<=(size_t)hist->GetNbinsY() + useUnderflowOverflow; j++){
distances->Fill(calculateBinLineDistSquare(hist,a,b,i,j),hist->GetBinContent(i,j));
}
}
return distances;
}
TH1* TQHistogramUtils::rotationProfile(TH2* hist, double xUnit, double yUnit, int nStep, double xOrig, double yOrig){
if(!hist) return NULL;
if(xUnit <= 0) xUnit = TQHistogramUtils::getAxisXmax(hist) - xOrig;
if(yUnit <= 0) yUnit = TQHistogramUtils::getAxisYmax(hist) - yOrig;
double steprad = 0.5*TMath::Pi()/nStep;
double stepdeg = 90./nStep;
TH1F* profile = new TH1F(hist->GetName(), hist->GetTitle(), nStep+1, -stepdeg*0.5 , 0.5*stepdeg+90.);
profile->SetDirectory(NULL);
profile->GetXaxis()->SetTitle("#alpha [deg]");
profile->GetYaxis()->SetTitle("\\left(\\sum_{N} n\\cdot d^{2}\\right)^{-1}");
for(size_t i=0; i<(size_t)nStep+1; i++){
double angle = i * steprad;
double slope = (sin(angle)*yUnit) / (cos(angle)*xUnit);
double yOffset = yOrig - slope*xOrig;
double value = 1./TQHistogramUtils::sumLineDistSquares(hist,yOffset,slope);
profile->SetBinContent(i+1,value);
}
return profile;
}
TH2* TQHistogramUtils::rotationYtranslationProfile(TH2* hist, double xUnit, double yUnit, int nStepAngle, int nStepOffset, double xOrig, double y0){
if(!hist) return NULL;
if(xUnit <= 0) xUnit = TQHistogramUtils::getAxisXmax(hist) - xOrig;
if(yUnit <= 0) yUnit = TQHistogramUtils::getAxisYmax(hist);
if(nStepOffset < 1) nStepOffset = hist->GetYaxis()->GetLast();
double steprad = 0.5*TMath::Pi()/nStepAngle;
double stepdeg = 90./nStepAngle;
if(!TQUtils::isNum(y0)) y0 = TQHistogramUtils::getAxisYmin(hist);
double yStep = (TQHistogramUtils::getAxisYmax(hist) - y0)/nStepOffset;
TH2F* profile = new TH2F(hist->GetName(), hist->GetTitle(), nStepAngle+1, -stepdeg*0.5 , 0.5*stepdeg+90., nStepOffset+1, y0-0.5*yStep, y0 + (0.5+nStepOffset)*yStep);
profile->SetDirectory(NULL);
profile->GetXaxis()->SetTitle("#alpha [deg]");
profile->GetYaxis()->SetTitle(hist->GetYaxis()->GetTitle());
profile->GetZaxis()->SetTitle("\\left(\\sum_{N} n\\cdot d^{2}\\right)^{-1}");
for(size_t i=0; i<(size_t)nStepAngle+1; i++){
double angle = i * steprad;
double slope = (sin(angle)*yUnit) / (cos(angle)*xUnit);
for(size_t j=0; j<(size_t)nStepOffset+1; j++){
double yOffset = y0 + j*yStep;
double value = 1./TQHistogramUtils::sumLineDistSquares(hist,yOffset,slope);
profile->SetBinContent(i+1,j+1,value);
}
}
return profile;
}
TH2* TQHistogramUtils::rotationXtranslationProfile(TH2* hist, double xUnit, double yUnit, int nStepAngle, int nStepOffset, double yOrig, double x0){
if(!hist) return NULL;
if(xUnit <= 0) xUnit = TQHistogramUtils::getAxisXmax(hist);
if(yUnit <= 0) yUnit = TQHistogramUtils::getAxisYmax(hist) - yOrig;;
if(nStepOffset < 1) nStepOffset = hist->GetXaxis()->GetLast();
double steprad = 0.5*TMath::Pi()/nStepAngle;
double stepdeg = 90./nStepAngle;
double y0 = TQHistogramUtils::getAxisXmin(hist);
if(!TQUtils::isNum(x0)) x0 = TQHistogramUtils::getAxisXmin(hist);
double xStep = (TQHistogramUtils::getAxisXmax(hist) - x0)/nStepOffset;
TH2F* profile = new TH2F(hist->GetName(), hist->GetTitle(), nStepAngle+1, -stepdeg*0.5 , 0.5*stepdeg+90., nStepOffset+1, x0-0.5*xStep, x0 + (0.5+nStepOffset)*xStep);
profile->SetDirectory(NULL);
profile->GetXaxis()->SetTitle("#alpha [deg]");
profile->GetYaxis()->SetTitle(hist->GetXaxis()->GetTitle());
profile->GetZaxis()->SetTitle("\\left(\\sum_{N} n\\cdot d^{2}\\right)^{-1}");
for(size_t i=0; i<(size_t)nStepAngle+1; i++){
double angle = i * steprad;
double slope = (angle == 0.5*TMath::Pi() ? std::numeric_limits<double>::infinity() : (sin(angle)*yUnit) / (cos(angle)*xUnit));
for(size_t j=0; j<(size_t)nStepOffset+1; j++){
double xOffset = x0 + j*xStep;
double yOffset = (angle == 0.5*TMath::Pi() ? std::numeric_limits<double>::quiet_NaN() : y0 - xOffset*slope);
double value = 1./TQHistogramUtils::sumLineDistSquares(hist,yOffset,slope);
profile->SetBinContent(i+1,j+1,value);
}
}
return profile;
}
TLine* TQHistogramUtils::makeBisectorLine(TH1* hist, double angle, double xUnit, double yUnit, double xOrig, double yOrig){
if(!hist) return NULL;
if(xUnit <= 0) xUnit = TQHistogramUtils::getAxisXmax(hist);
if(yUnit <= 0) yUnit = TQHistogramUtils::getAxisYmax(hist);
double angleRad = angle / 180. * TMath::Pi();
double slope = (sin(angleRad)*yUnit) / (cos(angleRad)*xUnit);
double yOffset = yOrig - slope*xOrig;
double xAxMin = TQHistogramUtils::getAxisXmin(hist);
double yAxMin = TQHistogramUtils::getAxisYmin(hist);
double xAxMax = TQHistogramUtils::getAxisXmax(hist);
double yAxMax = TQHistogramUtils::getAxisYmax(hist);
if(!TQUtils::isNum(slope)){
return new TLine(xOrig, yAxMin, xOrig, yAxMax);
} else if(slope > 0){
double xMin = std::max(xAxMin,(yAxMin-yOffset)/slope);
double yMin = std::max(yAxMin,slope*xAxMin+yOffset);
double xMax = std::min(xAxMax,(yAxMax-yOffset)/slope);
double yMax = std::min(yAxMax,slope*xAxMax+yOffset);
TLine* l = new TLine(xMin, yMin, xMax, yMax);
return l;
} else if (slope < 0){
double xMin = std::max(xAxMin,(yAxMax-yOffset)/slope);
double yMin = std::max(yAxMin,slope*xAxMax+yOffset);
double xMax = std::min(xAxMax,(yAxMin-yOffset)/slope);
double yMax = std::min(yAxMax,slope*xAxMin+yOffset);
TLine* l = new TLine(xMin, yMax, xMax, yMin);
return l;
} else {
return new TLine(xAxMin, yOrig, xAxMax, yOrig);
}
return NULL;
}
bool TQHistogramUtils::cropLine(TH1* hist, TLine* l){
if(!hist) return false;
if(!l) return false;
double xAxMin = TQHistogramUtils::getAxisXmin(hist);
double yAxMin = TQHistogramUtils::getAxisYmin(hist);
double xAxMax = TQHistogramUtils::getAxisXmax(hist);
double yAxMax = TQHistogramUtils::getAxisYmax(hist);
double x1 = std::min(l->GetX1(),l->GetX2());
double x2 = std::max(l->GetX1(),l->GetX2());
double y1 = (l->GetX2() > l->GetX1()) ? l->GetY1() : l->GetY2();
double y2 = (l->GetX2() > l->GetX1()) ? l->GetY2() : l->GetY1();
double slope = (y2-y1)/(x2-x1);
if(x2 < xAxMin) return false;
if(x1 > xAxMax) return false;
if(std::min(y1,y2) > yAxMax) return false;
if(std::max(y1,y2) < yAxMin) return false;
if(x2 > xAxMax){
if(slope > 0){
l->SetX2(std::min(xAxMax,x1 + (yAxMax - y1)/slope));
} else if (slope < 0){
l->SetX2(std::min(xAxMax,x1 - (y1 - yAxMin)/slope));
} else {
l->SetX2(xAxMax);
}
} else {
l->SetX2(x2);
}
if(l->GetX2() < xAxMin) return false;
if(x1 < xAxMin){
if(slope > 0){
l->SetX1(std::max(xAxMin,x2 - (y1 - yAxMin)/slope));
} else if (slope < 0){
l->SetX1(std::max(xAxMin,x2 + (yAxMin - y1)/slope));
} else {
l->SetX1(xAxMin);
}
} else {
l->SetX1(x1);
}
if(l->GetX1() > xAxMax) return false;
if(y2 > yAxMax){
l->SetY2(std::min(yAxMax,y1 + slope*(l->GetX2() - x1)));
l->SetX2(std::min(l->GetX2(),x1 + (l->GetY2() - y1)/slope));
} else if(y2 < yAxMin){
l->SetY2(std::max(yAxMin,y1 + slope*(l->GetX2() - x1)));
l->SetX2(std::min(l->GetX2(),x1 + (l->GetY2() - y1)/slope));
} else {
l->SetY2(y2);
}
if(l->GetY2() > yAxMax || l->GetY2() < yAxMin) return false;
if(y1 > yAxMax){
l->SetY1(std::min(yAxMax,y2 - slope*(x2 - l->GetX1())));
l->SetX1(std::max(l->GetX1(),x2 + fabs(y2 - l->GetY1())/slope));
} else if(y1 < yAxMin){
l->SetY1(std::max(yAxMin,y2 - slope*(x2 - l->GetX1())));
l->SetX1(std::max(l->GetX1(),x2 + fabs(y2 - l->GetY1())/slope));
} else {
l->SetY1(y1);
}
if(l->GetY1() > yAxMax || l->GetY1() < yAxMin) return false;
return true;
}
double TQHistogramUtils::clearBinsAboveX(TH1* hist, double xMax){
if(!hist) return 0;
int border = hist->GetXaxis()->FindBin(xMax);
double retval = 0;
for(size_t i=border; i<(size_t)hist->GetNbinsX()+1; i++){
retval += hist->GetBinContent(i);
hist->SetBinError(i,0);
hist->SetBinContent(i,0);
}
return retval;
}
double TQHistogramUtils::clearBinsBelowX(TH1* hist, double xMin){
if(!hist) return 0;
size_t border = hist->GetXaxis()->FindBin(xMin);
double retval = 0;
for(size_t i=0; i<border-1; i++){
retval += hist->GetBinContent(i);
hist->SetBinError(i,0);
hist->SetBinContent(i,0);
}
return retval;
}
double TQHistogramUtils::clearBinsAboveX(TH2* hist, double xMax){
if(!hist) return 0;
size_t border = hist->GetXaxis()->FindBin(xMax);
double retval = 0;
for(size_t i=border; i<(size_t)hist->GetNbinsX()+1; i++){
for(size_t j=0; j<(size_t)hist->GetNbinsY()+1; j++){
retval += hist->GetBinContent(i,j);
hist->SetBinError(i,j,0);
hist->SetBinContent(i,j,0);
}
}
return retval;
}
double TQHistogramUtils::clearBinsBelowX(TH2* hist, double xMin){
if(!hist) return 0;
size_t border = hist->GetXaxis()->FindBin(xMin);
double retval = 0;
for(size_t i=0; i<border; i++){
for(size_t j=0; j<(size_t)hist->GetNbinsY()+1; j++){
retval += hist->GetBinContent(i,j);
hist->SetBinError(i,j,0);
hist->SetBinContent(i,j,0);
}
}
return retval;
}
double TQHistogramUtils::clearBinsAboveY(TH2* hist, double yMax){
if(!hist) return 0;
int border = hist->GetYaxis()->FindBin(yMax);
double retval = 0;
for(size_t i=0; i<(size_t)hist->GetNbinsX()+1; i++){
for(size_t j=border; j<(size_t)hist->GetNbinsY()+1; j++){
retval += hist->GetBinContent(i,j);
hist->SetBinError(i,j,0);
hist->SetBinContent(i,j,0);
}
}
return retval;
}
double TQHistogramUtils::clearBinsBelowY(TH2* hist, double yMin){
if(!hist) return 0;
size_t border = hist->GetYaxis()->FindBin(yMin);
double retval = 0;
for(size_t i=0; i<(size_t)hist->GetNbinsX()+1; i++){
for(size_t j=0; j<border; j++){
retval += hist->GetBinContent(i,j);
hist->SetBinError(i,j,0);
hist->SetBinContent(i,j,0);
}
}
return retval;
}
void TQHistogramUtils::printHistogramASCII(TH1* hist, const TString& tags){
TQHistogramUtils::printHistogramASCII(std::cout, hist, tags);
}
void TQHistogramUtils::printHistogramASCII(TH1* hist, TQTaggable& tags){
TQHistogramUtils::printHistogramASCII(std::cout, hist, tags);
}
void TQHistogramUtils::printHistogramASCII(std::ostream& os, TH1* hist, const TString& tags){
TQTaggable taggable(tags);
TQHistogramUtils::printHistogramASCII(os, hist,taggable);
}
void TQHistogramUtils::printHistogramASCII(std::ostream& os, TH1* hist, TQTaggable& tags){
bool showTitle = tags.getTagBoolDefault("showTitle",true);
bool showMeanRMS = tags.getTagBoolDefault("showMeanRMS",showTitle);
bool showEntries = tags.getTagBoolDefault("showEntries",showTitle);
bool includeUnderflow = tags.getTagBoolDefault("includeUnderflow",false);
bool includeOverflow = tags.getTagBoolDefault("includeOverflow",false);
TString token = tags.getTagStringDefault("token","â–ˆ");
size_t yScale = tags.getTagIntegerDefault("yScale",10);
int rebin = tags.getTagIntegerDefault("rebin",1);
int nSigDigitsY = tags.getTagIntegerDefault("showDigitsY",2);
int nSigDigitsX = tags.getTagIntegerDefault("showDigitsX",2);
if(showTitle){
os << hist->ClassName() << " " << hist->GetName() << ": " << hist->GetTitle();
if(showMeanRMS){
os << " - " << "Mean = " << hist->GetMean() << ", RMS = " << hist->GetRMS();
}
if(showEntries){
os << " - " << hist->GetEntries() << " Entries";
}
os << std::endl;
}
double max = 0;
double val = 0;
int count = 0;
int lastbin = 0;
std::vector<double> nBlocks;
std::vector<double> binCenters;
if(includeUnderflow){
nBlocks.push_back(hist->GetBinContent(0));
binCenters.push_back(.5*(hist->GetBinLowEdge(0) + hist->GetBinLowEdge(1)));
}
for(int i=0; i<hist->GetNbinsX(); i++){
val += hist->GetBinContent(i);
count++;
if(count >= rebin){
binCenters.push_back(.5*(hist->GetBinLowEdge(lastbin) + hist->GetBinLowEdge(i+1)));
max = std::max(val,max);
nBlocks.push_back(val);
val = 0;
count = 0;
lastbin = i;
}
}
if(tags.getTagBoolDefault("vertical",false)){
bool showBinContents = tags.getTagBoolDefault("printBinContents",true);
bool showHlines = tags.getTagBoolDefault("printHorizontalLines",true);
int rightMargin = showBinContents ? std::max(10,nSigDigitsX+2) : 0;
int leftMargin = nSigDigitsY+2+std::max(ceil(log10(TQHistogramUtils::getAxisXmax(hist))),0.);
int histWidth = tags.getTagIntegerDefault("width",TQLibrary::getConsoleWidth() - rightMargin - 2 - leftMargin);
TString fmtx = TString::Format("%%.%df",nSigDigitsX);
TString fmty = TString::Format("%%.%df",nSigDigitsY);
double scale = ((double)(histWidth))/max;
if(showHlines) os << TQStringUtils::repeat(" ",leftMargin) << "+" << TQStringUtils::repeat("-",histWidth) << std::endl;
for(size_t i=0; i<nBlocks.size(); i++){
size_t n = scale*nBlocks[i];
os << TQStringUtils::fixedWidth(TString::Format(fmtx,binCenters[i]),leftMargin,"r");
os << "|";
os << TQStringUtils::repeat(token,n);
if(showBinContents){
os << " " << TString::Format(fmty,nBlocks[i]);
}
os << std::endl;
}
if(showHlines) os << TQStringUtils::repeat(" ",leftMargin) << "+" << TQStringUtils::repeat("-",histWidth) << std::endl;
} else {
int width = floor(log10(max));
if(includeOverflow) nBlocks.push_back(hist->GetBinContent(hist->GetNbinsX()));
double scale = ((double)yScale)/max;
for(size_t i=yScale; i<=yScale; i--) {
os << " |";
for(size_t j=0; j<nBlocks.size(); j++){
if(nBlocks[j]*scale > i){
os << token;
} else {
os << " ";
}
}
os << "| ";
if(i==0){
os << TQStringUtils::repeat(" ",width) << 0<< std::endl;
} else {
os << TQStringUtils::repeat(" ",width-floor(log10(i/scale))) << TQUtils::round(i/scale,nSigDigitsY) << std::endl;
}
}
os << " +" << TQStringUtils::repeat("-",nBlocks.size()) << "+" << std::endl;
TString fmt = TString::Format("%%.%df",nSigDigitsX);
os << " " << TQStringUtils::fixedWidth(TString::Format(fmt,TQHistogramUtils::getAxisXmin(hist)),ceil(0.5*nBlocks.size())+1,"l");
os << TQStringUtils::fixedWidth(TString::Format(fmt,TQHistogramUtils::getAxisXmax(hist)),ceil(0.5*nBlocks.size())+1,"r");
os << std::endl;
}
}
TStyle* TQHistogramUtils::ATLASstyle()
{
TStyle *atlasStyle = new TStyle("ATLAS","Atlas style");
Int_t icol=0;
atlasStyle->SetFrameBorderMode(icol);
atlasStyle->SetFrameFillColor(icol);
atlasStyle->SetCanvasBorderMode(icol);
atlasStyle->SetCanvasColor(icol);
atlasStyle->SetPadBorderMode(icol);
atlasStyle->SetPadColor(icol);
atlasStyle->SetStatColor(icol);
atlasStyle->SetPaperSize(20,26);
atlasStyle->SetPadTopMargin(0.05);
atlasStyle->SetPadRightMargin(0.05);
atlasStyle->SetPadBottomMargin(0.16);
atlasStyle->SetPadLeftMargin(0.16);
atlasStyle->SetTitleXOffset(1.4);
atlasStyle->SetTitleYOffset(1.4);
Int_t font=42;
Double_t tsize=0.05;
atlasStyle->SetTextFont(font);
atlasStyle->SetTextSize(tsize);
atlasStyle->SetLabelFont(font,"x");
atlasStyle->SetTitleFont(font,"x");
atlasStyle->SetLabelFont(font,"y");
atlasStyle->SetTitleFont(font,"y");
atlasStyle->SetLabelFont(font,"z");
atlasStyle->SetTitleFont(font,"z");
atlasStyle->SetLabelSize(tsize,"x");
atlasStyle->SetTitleSize(tsize,"x");
atlasStyle->SetLabelSize(tsize,"y");
atlasStyle->SetTitleSize(tsize,"y");
atlasStyle->SetLabelSize(tsize,"z");
atlasStyle->SetTitleSize(tsize,"z");
atlasStyle->SetMarkerStyle(20);
atlasStyle->SetMarkerSize(1.2);
atlasStyle->SetHistLineWidth(2.);
atlasStyle->SetLineStyleString(2,"[12 12]");
atlasStyle->SetEndErrorSize(0.);
atlasStyle->SetOptTitle(0);
atlasStyle->SetOptStat(0);
atlasStyle->SetOptFit(0);
atlasStyle->SetPadTickX(1);
atlasStyle->SetPadTickY(1);
return atlasStyle;
}
TCanvas* TQHistogramUtils::applyATLASstyle(TH1* histo, const TString& label, double x, double y, double yResize, const TString& xTitle, const TString& yTitle, bool square) {
if (!histo) return NULL;
TH1* h = static_cast<TH1*>( histo->Clone("hcopy") );
bool isTH2 = h->InheritsFrom(TH2::Class());
if (!gROOT->GetStyle("ATLAS")) {
TQHistogramUtils::ATLASstyle();
gROOT->SetStyle("ATLAS");
gROOT->ForceStyle();
}
if (isTH2) {
gStyle->SetPadRightMargin(0.15);
gStyle->SetPalette(55);
}
h->GetXaxis()->SetTitleSize(0.05);
h->GetYaxis()->SetTitleSize(0.05);
TCanvas* can = new TCanvas("can_" + TString(histo->GetName()), "can_"+ TString(histo->GetTitle()), square ? 600 : 800, 600);
if (xTitle != "none") h->GetXaxis()->SetTitle(xTitle);
if (yTitle != "none") h->GetYaxis()->SetTitle(yTitle);
if (yResize > 0) h->SetMaximum(histo->GetMaximum()/yResize);
h->Draw();
TLatex l;
l.SetNDC();
l.SetTextFont(72);
double delx = 0.115*696*gPad->GetWh()/(472*gPad->GetWw());
l.DrawLatex(x,y,"ATLAS");
if (label) {
TLatex p;
p.SetNDC();
p.SetTextFont(42);
p.DrawLatex(x+delx,y,label);
}
return can;
}
TH1* TQHistogramUtils::unrollHistogram(const TH2* input, bool firstX, bool includeUnderflowOverflow, bool addLabels){
const bool binlabels = TQHistogramUtils::hasBinLabels(input);
if(!includeUnderflowOverflow && binlabels){
return NULL;
}
const size_t nx = input->GetXaxis()->GetNbins()+2*includeUnderflowOverflow;
const size_t ny = input->GetYaxis()->GetNbins()+2*includeUnderflowOverflow;
const bool extra = includeUnderflowOverflow;
TH1* hist = new TH1F(input->GetName(),input->GetTitle(),nx*ny,0,1);
hist->SetDirectory(NULL);
for(size_t j=0; j<ny; ++j){
for(size_t i=0; i<nx; ++i){
size_t newidx;
if(firstX) newidx = 1 + j*nx + i;
else newidx = 1 + i*ny + j;
size_t bin = input->GetBin(i+!extra,j+!extra);
hist->SetBinContent(newidx,input->GetBinContent(bin));
if(addLabels){
TString labelX,labelY;
if(i==0 && extra){
labelX = TString::Format("%s<%g",input->GetXaxis()->GetTitle(),input->GetXaxis()->GetBinLowEdge(1));
} else if(i+1==nx && extra){
labelX = TString::Format("%s>%g",input->GetXaxis()->GetTitle(),input->GetXaxis()->GetBinLowEdge(nx));
} else if(binlabels){
labelX = input->GetXaxis()->GetBinLabel(i+!extra);
} else {
labelX = TString::Format("%s=%g",input->GetXaxis()->GetTitle(),input->GetXaxis()->GetBinCenter(i+!extra));
}
if(j==0 && extra){
labelY = TString::Format("%s<%g",input->GetYaxis()->GetTitle(),input->GetYaxis()->GetBinLowEdge(1));
} else if(j+1==ny && extra){
labelY = TString::Format("%s>%g",input->GetYaxis()->GetTitle(),input->GetYaxis()->GetBinLowEdge(ny));
} else if(binlabels){
labelY = input->GetYaxis()->GetBinLabel(j+!extra);
} else {
labelY = TString::Format("%s=%g",input->GetYaxis()->GetTitle(),input->GetYaxis()->GetBinCenter(j+!extra));
}
hist->GetXaxis()->SetBinLabel(newidx,labelX+", "+labelY);
}
}
}
return hist;
}
TObjArray* TQHistogramUtils::getSlices(const TH2* input, bool alongX){
TObjArray* list = new TObjArray();
auto* firstaxis = (alongX ? input->GetXaxis() : input->GetYaxis());
auto* secondaxis = (alongX ? input->GetYaxis() : input->GetXaxis());
for(Int_t i=1; i<=firstaxis->GetNbins(); ++i){
TString label = firstaxis->GetBinLabel(i);
if(label.IsNull()){
label = TString::Format("%s=%g",firstaxis->GetTitle(),firstaxis->GetBinCenter(i));
}
TH1F* hist = new TH1F(input->GetName(), label, secondaxis->GetNbins(), secondaxis->GetXmin(), secondaxis->GetXmax());
hist->GetXaxis()->SetTitle(secondaxis->GetTitle());
hist->GetYaxis()->SetTitle(input->GetTitle());
hist->SetDirectory(NULL);
for(Int_t j=1; j<=secondaxis->GetNbins(); ++j){
hist->SetBinContent(j, alongX ? input->GetBinContent(i,j) : input->GetBinContent(j,i));
}
list->Add(hist);
}
return list;
}
bool TQHistogramUtils::isUnderflowOverflowBin(TH1* hist, int bin){
return hist->IsBinUnderflow(bin) || hist->IsBinOverflow(bin);
}
bool TQHistogramUtils::isGreaterThan(TH1* hist1, TH1* hist2){
const size_t n = TQHistogramUtils::getNbinsGlobal(hist1);
for(size_t i=0; i<n; ++i){
if(TQHistogramUtils::isUnderflowOverflowBin(hist1,i)) continue;
if(hist1->GetBinContent(i) < hist2->GetBinContent(i)){
DEBUGfunc("bin %d: %g < %g",i,hist1->GetBinContent(i),hist2->GetBinContent(i));
return false;
}
}
return true;
}
bool TQHistogramUtils::hasGreaterMaximumThan(TH1* hist1, TH1* hist2) {
return hist1->GetMaximum() > hist2->GetMaximum();
}
TCanvas* TQHistogramUtils::applyATLASstyle(TGraph* histo, const TString& label, double x, double y, double yResize, const TString& xTitle, const TString& yTitle, bool square) {
if (!histo) return NULL;
TGraph* h = dynamic_cast<TGraph*>( histo->Clone("hcopy") );
if (!gROOT->GetStyle("ATLAS")) {
TQHistogramUtils::ATLASstyle();
gROOT->SetStyle("ATLAS");
gROOT->ForceStyle();
}
int nPoints = h->GetN();
double xMin,xMax,yMin,yMax;
h->GetPoint(0,xMin,yMin);
h->GetPoint(0,xMax,yMax);
double xi=0.;
double yi=0.;
for (int i=0; i<nPoints; i++)
{
h->GetPoint(i, xi, yi);
if (yMax<yi) yMax=yi;
if (yMin>yi) yMin=yi;
if (xMax<xi) xMax=xi;
if (xMin>xi) xMin=xi;
}
TCanvas* can = new TCanvas("can_" + TString(histo->GetName()), "can_"+ TString(histo->GetTitle()), square ? 600 : 800, 600);
if (xTitle != "none") h->GetXaxis()->SetTitle(xTitle);
if (yTitle != "none") h->GetYaxis()->SetTitle(yTitle);
yMin -= 0.05*(yMax-yMin);
if (yResize > 0) h->SetMaximum((yMax-yMin)/yResize+yMin);
if (yResize > 0) h->SetMinimum(yMin);
h->GetXaxis()->SetRangeUser(xMin-0.02*(xMax-xMin),xMax+0.02*(xMax-xMin));
h->SetMarkerSize(1);
h->SetMarkerStyle(20);
h->Draw("AP");
TLatex l;
l.SetNDC();
l.SetTextFont(72);
double delx = 0.115*696*gPad->GetWh()/(472*gPad->GetWw());
l.DrawLatex(x,y,"ATLAS");
if (label) {
TLatex p;
p.SetNDC();
p.SetTextFont(42);
p.DrawLatex(x+delx,y,label);
}
return can;
}
TCanvas* TQHistogramUtils::applyATLASstyle(TMultiGraph* histo, const TString& label, double x, double y, double yResize, const TString& xTitle, const TString& yTitle, bool square) {
if (!histo) {
WARN("Cannot create canvas, TMultiGraph is a null pointer");
return NULL;
}
TMultiGraph* h = dynamic_cast<TMultiGraph*>( histo->Clone("hcopy") );
if (!h) {
WARN("Failed to clone TMultiGraph");
return nullptr;
}
if (!gROOT->GetStyle("ATLAS")) {
TQHistogramUtils::ATLASstyle();
gROOT->SetStyle("ATLAS");
gROOT->ForceStyle();
}
double xMin,xMax,yMin,yMax;
bool first = true;
TQGraphIterator itr(h->GetListOfGraphs());
while(itr.hasNext()) {
TGraph* gr = itr.readNext();
if (!gr) continue;
gr->SetMarkerSize(1);
gr->SetMarkerStyle(20);
int nPoints = gr->GetN();
if (first) {
gr->GetPoint(0,xMin,yMin);
gr->GetPoint(0,xMax,yMax);
first = false;
}
double xi=0.;
double yi=0.;
for (int i=0; i<nPoints; i++)
{
gr->GetPoint(i, xi, yi);
if (yMax<yi) yMax=yi;
if (yMin>yi) yMin=yi;
if (xMax<xi) xMax=xi;
if (xMin>xi) xMin=xi;
}
}
TCanvas* can = new TCanvas("can_" + TString(histo->GetName()), "can_"+ TString(histo->GetTitle()), square ? 600 : 800, 600);
yMin -= 0.05*(yMax-yMin);
if (yResize > 0) h->SetMaximum((yMax-yMin)/yResize+yMin);
if (yResize > 0) h->SetMinimum(yMin);
h->Draw("AP");
if (h->GetXaxis()) {
if (xTitle != "none") h->GetXaxis()->SetTitle(xTitle);
if (yTitle != "none") h->GetYaxis()->SetTitle(yTitle);
h->GetXaxis()->SetRangeUser(xMin-0.02*(xMax-xMin),xMax+0.02*(xMax-xMin));
}
h->Draw("AP");
TLatex l;
l.SetNDC();
l.SetTextFont(72);
double delx = 0.115*696*gPad->GetWh()/(472*gPad->GetWw());
l.DrawLatex(x,y,"ATLAS");
if (label) {
TLatex p;
p.SetNDC();
p.SetTextFont(42);
p.DrawLatex(x+delx,y,label);
}
return can;
}
void TQHistogramUtils::rerollGauss(TH1* hist, double zvalue){
const size_t n = TQHistogramUtils::getNbinsGlobal(hist);
TRandom3 rand;
for(size_t i=0; i<n; ++i){
double newvalue = rand.Gaus(hist->GetBinContent(i),zvalue*hist->GetBinError(i));
hist->SetBinContent(i,newvalue);
}
}
void TQHistogramUtils::rerollPoisson(TH1* hist, int seed){
const size_t entries = hist->GetEntries();
const size_t n = TQHistogramUtils::getNbinsGlobal(hist);
TRandom3 rand(seed);
for(size_t i=0; i<n; ++i){
double newvalue = rand.Poisson(hist->GetBinContent(i));
hist->SetBinContent(i,newvalue);
hist->SetBinError(i,sqrt(newvalue));
}
hist->SetEntries(entries);
}
bool TQHistogramUtils::envelopeUpper(TH1* hist, TH1* otherhist){
const size_t n = TQHistogramUtils::getNbinsGlobal(hist);
const size_t entries = std::max(hist->GetEntries(),otherhist->GetEntries());
for(size_t i=0; i<n; ++i){
const double thisval = hist->GetBinContent(i);
const double otherval = otherhist->GetBinContent(i);
if(otherval > thisval){
hist->SetBinContent(i,otherval);
hist->SetBinError(i,otherhist->GetBinError(i));
}
}
hist->SetEntries(entries);
return true;
}
bool TQHistogramUtils::envelopeLower(TH1* hist, TH1* otherhist){
const size_t n = TQHistogramUtils::getNbinsGlobal(hist);
const size_t entries = std::min(hist->GetEntries(),otherhist->GetEntries());
for(size_t i=0; i<n; ++i){
const double thisval = hist->GetBinContent(i);
const double otherval = otherhist->GetBinContent(i);
if(otherval < thisval){
hist->SetBinContent(i,otherval);
hist->SetBinError(i,otherhist->GetBinError(i));
}
}
hist->SetEntries(entries);
return true;
}
template<class TMatrixTT>
TH2* TQHistogramUtils::convertMatrixToHistogram(const TMatrixTT* matrix, const TString& name){
if(!matrix) return NULL;
const size_t ncols = matrix->GetNcols();
const size_t nrows = matrix->GetNrows();
TH2* hist = new TH2D(name,name,ncols,0,ncols,nrows,0,nrows);
hist->SetDirectory(NULL);
for(size_t i=0; i<nrows; ++i){
for(size_t j=0; j<ncols; ++j){
size_t bin = hist->GetBin(i+1,j+1);
hist->SetBinContent(bin,(*matrix)(i,j));
hist->SetBinError(bin,0);
}
}
hist->SetEntries(ncols*nrows);
return hist;
}
namespace TQHistogramUtils {
template TH2* convertMatrixToHistogram<TMatrixT<float > >(const TMatrixT<float >* matrix, const TString& name);
template TH2* convertMatrixToHistogram<TMatrixT<double> >(const TMatrixT<double>* matrix, const TString& name);
template TH2* convertMatrixToHistogram<TMatrixTSym<float > >(const TMatrixTSym<float >* matrix, const TString& name);
template TH2* convertMatrixToHistogram<TMatrixTSym<double> >(const TMatrixTSym<double>* matrix, const TString& name);
}
TMatrixD* TQHistogramUtils::convertHistogramToMatrix(TH2* hist){
if(!hist) return NULL;
const size_t ncols = hist->GetNbinsX();
const size_t nrows = hist->GetNbinsY();
TMatrixD* matrix = new TMatrixD(nrows,ncols);
for(size_t i=0; i<nrows; ++i){
for(size_t j=0; j<ncols; ++j){
size_t bin = hist->GetBin(i+1,j+1);
(*matrix)(i,j) = hist->GetBinContent(bin);
}
}
return matrix;
}
TMatrixDSym* TQHistogramUtils::convertHistogramToSymMatrix(TH2* hist, double relThreshold, double absThreshold){
if(!hist) return NULL;
const size_t ncols = hist->GetNbinsX();
const size_t nrows = hist->GetNbinsY();
if(ncols != nrows) return NULL;
TMatrixDSym* matrix = new TMatrixDSym(nrows);
for(size_t i=0; i<nrows; ++i){
if(!TQStringUtils::equal(hist->GetYaxis()->GetBinLabel(i+1),hist->GetXaxis()->GetBinLabel(i+1))){
throw std::runtime_error(TString::Format("unable to convert asymmetric histogram '%s' to symmetric matrix, conflict for bin labels '%s' vs. '%s' at %lu!",hist->GetName(),hist->GetXaxis()->GetBinLabel(i+1),hist->GetYaxis()->GetBinLabel(i+1),i+1).Data());
}
for(size_t j=0; j<nrows; ++j){
const double valxy = hist->GetBinContent(i+1,j+1);
const double valyx = hist->GetBinContent(j+1,i+1);
if(!TQHistogramUtils::areEqualRel(valxy,valyx,relThreshold) && !(fabs(valxy+valyx)<absThreshold)){
throw std::runtime_error(TString::Format("unable to convert asymmetric histogram '%s' to symmetric matrix, conflict for '%s' vs. '%s' at %lu/%lu vs. %lu/%lu: %g vs. %g!",hist->GetName(),hist->GetXaxis()->GetBinLabel(i+1),hist->GetYaxis()->GetBinLabel(j+1),i+1, j+1, j+1, i+1, valxy,valyx).Data());
} else {
(*matrix)(i,j) = 0.5*(valxy+valyx);
}
}
}
return matrix;
}
TMatrixDSym* TQHistogramUtils::convertHistogramToSymMatrix(TH2* hist, const std::vector<TString>& ordering, double relThreshold, double absThreshold){
if(!hist) return NULL;
if(!TQHistogramUtils::isAlphanumeric(hist->GetXaxis())) return NULL;
if(!TQHistogramUtils::isAlphanumeric(hist->GetYaxis())) return NULL;
const size_t nrows = ordering.size();
TMatrixDSym* matrix = new TMatrixDSym(nrows);
for(size_t i=0; i<nrows; ++i){
const TString& pari(ordering[i]);
size_t binxi = hist->GetXaxis()->FindBin(pari);
size_t binyi = hist->GetYaxis()->FindBin(pari);
for(size_t j=0; j<nrows; ++j){
const TString& parj(ordering[j]);
size_t binxj = hist->GetXaxis()->FindBin(parj);
size_t binyj = hist->GetYaxis()->FindBin(parj);
const double valxy = hist->GetBinContent(binxi,binyj);
const double valyx = hist->GetBinContent(binxj,binyi);
if(!TQHistogramUtils::areEqualRel(valxy,valyx,relThreshold) && !(fabs(valxy+valyx)<absThreshold)){
throw std::runtime_error(TString::Format("unable to convert asymmetric histogram '%s' to symmetric matrix, conflict for '%s' vs. '%s' at %lu/%lu vs. %lu/%lu: %g vs. %g!",hist->GetName(),pari.Data(),parj.Data(),binxi, binyj, binxj, binyi, valxy,valyx).Data());
} else {
(*matrix)(i,j) = 0.5*(valxy+valyx);
}
}
}
return matrix;
}
int TQHistogramUtils::fixHoles1D(TH1* hist, double threshold) {
int nDim = TQHistogramUtils::getDimension(hist);
if(nDim != 1){
throw std::runtime_error("unable to patch shape systematics for multi-dimensional histograms, skipping!");
}
if(hist->GetNbinsX() < 3){
throw std::runtime_error("unable to patch shape systematics for histograms with less than 3 bins, skipping!");
}
int fixed = 0;
if(hist->GetBinContent(1) < threshold){
if((fabs(hist->GetBinContent(2)) < threshold) || (fabs(hist->GetBinContent(3)) < threshold)){
throw std::runtime_error("refusing to fix holes greater than single bins!");
}
hist->SetBinContent(1, 2* hist->GetBinContent(2) - hist->GetBinContent(3));
hist->SetBinError (1,sqrt(2*pow(hist->GetBinError (2),2) + pow(hist->GetBinError (3),2)));
fixed++;
}
int n = hist->GetNbinsX();
if(hist->GetBinContent(n) < threshold){
if((fabs(hist->GetBinContent(n-1)) < threshold) || (fabs(hist->GetBinContent(n-2)) < threshold)){
throw std::runtime_error("refusing to fix holes greater than single bins!");
}
hist->SetBinContent(n, 2* hist->GetBinContent(n-1) - hist->GetBinContent(n-2));
hist->SetBinError (n,sqrt(2*pow(hist->GetBinError (n-1),2) + pow(hist->GetBinError (n-2),2)));
fixed++;
}
for(int i=2; i<n; ++i){
if(hist->GetBinContent(i) < threshold){
if((fabs(hist->GetBinContent(i-1)) < threshold) || (fabs(hist->GetBinContent(i+1)) < threshold)){
throw std::runtime_error("refusing to fix holes greater than single bins!");
}
hist->SetBinContent(i,0.5 * ( hist->GetBinContent(i-1) + hist->GetBinContent(i+1)));
hist->SetBinError (i,0.5 * sqrt(pow(hist->GetBinError (i-1),2) + pow(hist->GetBinError (i+1),2)));
fixed++;
}
}
return fixed;
}
void TQHistogramUtils::scaleErrors(TH1* hist, double scale){
size_t nbins = TQHistogramUtils::getNbinsGlobal(hist);
for(size_t i=0; i<nbins; ++i){
hist->SetBinError(i,scale*hist->GetBinError(i));
}
}
bool TQHistogramUtils::transferRelativeErrors(TH1* sourceHist, TH1* targetHist) {
if (!sourceHist || !targetHist) return 0;
if (!checkConsistency(sourceHist, targetHist)) return 0;
int dim = getDimension(sourceHist);
int binmin = 0;
if(TQHistogramUtils::hasBinLabels(sourceHist)){
binmin = 1;
}
for(int i=binmin; i<=sourceHist->GetNbinsX()+1; ++i) {
if (dim == 1) {
double valSource = sourceHist->GetBinContent(i);
double errSource = sourceHist->GetBinError(i);
double valTarget = targetHist->GetBinContent(i);
if (valSource != 0) {
targetHist->SetBinError(i, errSource / valSource * valTarget);
}
} else {
for(int j=binmin; j<=sourceHist->GetNbinsY()+1; ++j){
if (dim == 2) {
double valSource = sourceHist->GetBinContent(i, j);
double errSource = sourceHist->GetBinError(i, j);
double valTarget = targetHist->GetBinContent(i, j);
if (valSource != 0) {targetHist->SetBinError(i, j, errSource / valSource * valTarget);}
} else {
for(int k=binmin; k<=sourceHist->GetNbinsZ()+1; ++k){
if (dim == 3) {
double valSource = sourceHist->GetBinContent(i, j, k);
double errSource = sourceHist->GetBinError(i, j, k);
double valTarget = targetHist->GetBinContent(i, j, k);
if (valSource != 0) {targetHist->SetBinError(i, j, k, errSource / valSource * valTarget);}
}
}
}
}
}
}
return 1;
}
bool TQHistogramUtils::transferRelativeErrors(TQCounter* source, TQCounter* target) {
if (!source || !target) return 0;
double valSource = source->getCounter();
double errSource = source->getError();
double valTarget = target->getCounter();
if (valSource != 0) {target->setError(errSource / valSource * valTarget);}
return 1;
}
TH1* TQHistogramUtils::sumHistograms(TCollection* histos) {
if (!histos) return nullptr;
TH1* sum = nullptr;
TQTH1Iterator itr(histos);
while (itr.hasNext()) {
TH1* nextHist = itr.readNext();
if (!sum) {
sum = static_cast<TH1*>(nextHist->Clone("sum"));
} else {
if (!TQHistogramUtils::checkConsistency(sum, nextHist, true)) {
delete sum;
return nullptr;
}
sum->Add(nextHist);
}
}
return sum;
}
TH1* TQHistogramUtils::sumHistograms(const std::vector<TH1*>& histos) {
TH1* sum = nullptr;
for (TH1* nextHist : histos) {
if (!nextHist) continue;
if (!sum) {
sum = static_cast<TH1*>(nextHist->Clone("sum"));
} else {
if (!TQHistogramUtils::checkConsistency(sum, nextHist, true)) {
delete sum;
return nullptr;
}
sum->Add(nextHist);
}
}
return sum;
}
TH1* TQHistogramUtils::createEnvelopingHistogram(TCollection* histos) {
DEBUG("in TQHistogramUtils::createEnvelopingHistogram: checking collection %p with %i entries", histos, histos->GetEntries());
if (!histos) return nullptr;
std::vector<TH1*> histograms;
TQTH1Iterator itr(histos);
while (itr.hasNext()) {
histograms.push_back(itr.readNext());
}
return createEnvelopingHistogram(histograms);
}
TH1* TQHistogramUtils::createEnvelopingHistogram(const std::vector<TH1*>& histos) {
DEBUG("in TQHistogramUtils::createEnvelopingHistogram: make envelope of %u histograms", histos.size());
if (histos.size() == 0) {
return nullptr;
}
TH1* envelope = nullptr;
std::map<size_t, double> bin_maxima;
std::map<size_t, double> bin_errors;
for (const TH1* h : histos) {
if (!envelope) envelope = static_cast<TH1*>(h->Clone());
for (int i=0; i<=h->GetNbinsX(); ++i) {
double bin_content = h->GetBinContent(i);
if (bin_maxima.find(i) == bin_maxima.end()) {
bin_maxima[i] = bin_content;
bin_errors[i] = h->GetBinError(i);
} else if (bin_maxima.at(i) < h->GetBinContent(i)) {
bin_maxima[i] = h->GetBinContent(i);
bin_errors[i] = h->GetBinError(i);
}
}
}
for (int i = 0; i<=envelope->GetNbinsX(); ++i) {
DEBUG("in TQHistogramUtils::createEnvelopingHistogram: set %i th bin to %f", i, bin_maxima.at(i));
envelope->SetBinContent(i, bin_maxima.at(i));
envelope->SetBinError(i, bin_errors.at(i));
}
return envelope;
}
TQHistogramUtils.cxx:1000 TQHistogramUtils.cxx:1001 TQHistogramUtils.cxx:1002 TQHistogramUtils.cxx:1003 TQHistogramUtils.cxx:1004 TQHistogramUtils.cxx:1005 TQHistogramUtils.cxx:1006 TQHistogramUtils.cxx:1007 TQHistogramUtils.cxx:1008 TQHistogramUtils.cxx:1009 TQHistogramUtils.cxx:1010 TQHistogramUtils.cxx:1011 TQHistogramUtils.cxx:1012 TQHistogramUtils.cxx:1013 TQHistogramUtils.cxx:1014 TQHistogramUtils.cxx:1015 TQHistogramUtils.cxx:1016 TQHistogramUtils.cxx:1017 TQHistogramUtils.cxx:1018 TQHistogramUtils.cxx:1019 TQHistogramUtils.cxx:1020 TQHistogramUtils.cxx:1021 TQHistogramUtils.cxx:1022 TQHistogramUtils.cxx:1023 TQHistogramUtils.cxx:1024 TQHistogramUtils.cxx:1025 TQHistogramUtils.cxx:1026 TQHistogramUtils.cxx:1027 TQHistogramUtils.cxx:1028 TQHistogramUtils.cxx:1029 TQHistogramUtils.cxx:1030 TQHistogramUtils.cxx:1031 TQHistogramUtils.cxx:1032 TQHistogramUtils.cxx:1033 TQHistogramUtils.cxx:1034 TQHistogramUtils.cxx:1035 TQHistogramUtils.cxx:1036 TQHistogramUtils.cxx:1037 TQHistogramUtils.cxx:1038 TQHistogramUtils.cxx:1039 TQHistogramUtils.cxx:1040 TQHistogramUtils.cxx:1041 TQHistogramUtils.cxx:1042 TQHistogramUtils.cxx:1043 TQHistogramUtils.cxx:1044 TQHistogramUtils.cxx:1045 TQHistogramUtils.cxx:1046 TQHistogramUtils.cxx:1047 TQHistogramUtils.cxx:1048 TQHistogramUtils.cxx:1049 TQHistogramUtils.cxx:1050 TQHistogramUtils.cxx:1051 TQHistogramUtils.cxx:1052 TQHistogramUtils.cxx:1053 TQHistogramUtils.cxx:1054 TQHistogramUtils.cxx:1055 TQHistogramUtils.cxx:1056 TQHistogramUtils.cxx:1057 TQHistogramUtils.cxx:1058 TQHistogramUtils.cxx:1059 TQHistogramUtils.cxx:1060 TQHistogramUtils.cxx:1061 TQHistogramUtils.cxx:1062 TQHistogramUtils.cxx:1063 TQHistogramUtils.cxx:1064 TQHistogramUtils.cxx:1065 TQHistogramUtils.cxx:1066 TQHistogramUtils.cxx:1067 TQHistogramUtils.cxx:1068 TQHistogramUtils.cxx:1069 TQHistogramUtils.cxx:1070 TQHistogramUtils.cxx:1071 TQHistogramUtils.cxx:1072 TQHistogramUtils.cxx:1073 TQHistogramUtils.cxx:1074 TQHistogramUtils.cxx:1075 TQHistogramUtils.cxx:1076 TQHistogramUtils.cxx:1077 TQHistogramUtils.cxx:1078 TQHistogramUtils.cxx:1079 TQHistogramUtils.cxx:1080 TQHistogramUtils.cxx:1081 TQHistogramUtils.cxx:1082 TQHistogramUtils.cxx:1083 TQHistogramUtils.cxx:1084 TQHistogramUtils.cxx:1085 TQHistogramUtils.cxx:1086 TQHistogramUtils.cxx:1087 TQHistogramUtils.cxx:1088 TQHistogramUtils.cxx:1089 TQHistogramUtils.cxx:1090 TQHistogramUtils.cxx:1091 TQHistogramUtils.cxx:1092 TQHistogramUtils.cxx:1093 TQHistogramUtils.cxx:1094 TQHistogramUtils.cxx:1095 TQHistogramUtils.cxx:1096 TQHistogramUtils.cxx:1097 TQHistogramUtils.cxx:1098 TQHistogramUtils.cxx:1099 TQHistogramUtils.cxx:1100 TQHistogramUtils.cxx:1101 TQHistogramUtils.cxx:1102 TQHistogramUtils.cxx:1103 TQHistogramUtils.cxx:1104 TQHistogramUtils.cxx:1105 TQHistogramUtils.cxx:1106 TQHistogramUtils.cxx:1107 TQHistogramUtils.cxx:1108 TQHistogramUtils.cxx:1109 TQHistogramUtils.cxx:1110 TQHistogramUtils.cxx:1111 TQHistogramUtils.cxx:1112 TQHistogramUtils.cxx:1113 TQHistogramUtils.cxx:1114 TQHistogramUtils.cxx:1115 TQHistogramUtils.cxx:1116 TQHistogramUtils.cxx:1117 TQHistogramUtils.cxx:1118 TQHistogramUtils.cxx:1119 TQHistogramUtils.cxx:1120 TQHistogramUtils.cxx:1121 TQHistogramUtils.cxx:1122 TQHistogramUtils.cxx:1123 TQHistogramUtils.cxx:1124 TQHistogramUtils.cxx:1125 TQHistogramUtils.cxx:1126 TQHistogramUtils.cxx:1127 TQHistogramUtils.cxx:1128 TQHistogramUtils.cxx:1129 TQHistogramUtils.cxx:1130 TQHistogramUtils.cxx:1131 TQHistogramUtils.cxx:1132 TQHistogramUtils.cxx:1133 TQHistogramUtils.cxx:1134 TQHistogramUtils.cxx:1135 TQHistogramUtils.cxx:1136 TQHistogramUtils.cxx:1137 TQHistogramUtils.cxx:1138 TQHistogramUtils.cxx:1139 TQHistogramUtils.cxx:1140 TQHistogramUtils.cxx:1141 TQHistogramUtils.cxx:1142 TQHistogramUtils.cxx:1143 TQHistogramUtils.cxx:1144 TQHistogramUtils.cxx:1145 TQHistogramUtils.cxx:1146 TQHistogramUtils.cxx:1147 TQHistogramUtils.cxx:1148 TQHistogramUtils.cxx:1149 TQHistogramUtils.cxx:1150 TQHistogramUtils.cxx:1151 TQHistogramUtils.cxx:1152 TQHistogramUtils.cxx:1153 TQHistogramUtils.cxx:1154 TQHistogramUtils.cxx:1155 TQHistogramUtils.cxx:1156 TQHistogramUtils.cxx:1157 TQHistogramUtils.cxx:1158 TQHistogramUtils.cxx:1159 TQHistogramUtils.cxx:1160 TQHistogramUtils.cxx:1161 TQHistogramUtils.cxx:1162 TQHistogramUtils.cxx:1163 TQHistogramUtils.cxx:1164 TQHistogramUtils.cxx:1165 TQHistogramUtils.cxx:1166 TQHistogramUtils.cxx:1167 TQHistogramUtils.cxx:1168 TQHistogramUtils.cxx:1169 TQHistogramUtils.cxx:1170 TQHistogramUtils.cxx:1171 TQHistogramUtils.cxx:1172 TQHistogramUtils.cxx:1173 TQHistogramUtils.cxx:1174 TQHistogramUtils.cxx:1175 TQHistogramUtils.cxx:1176 TQHistogramUtils.cxx:1177 TQHistogramUtils.cxx:1178 TQHistogramUtils.cxx:1179 TQHistogramUtils.cxx:1180 TQHistogramUtils.cxx:1181 TQHistogramUtils.cxx:1182 TQHistogramUtils.cxx:1183 TQHistogramUtils.cxx:1184 TQHistogramUtils.cxx:1185 TQHistogramUtils.cxx:1186 TQHistogramUtils.cxx:1187 TQHistogramUtils.cxx:1188 TQHistogramUtils.cxx:1189 TQHistogramUtils.cxx:1190 TQHistogramUtils.cxx:1191 TQHistogramUtils.cxx:1192 TQHistogramUtils.cxx:1193 TQHistogramUtils.cxx:1194 TQHistogramUtils.cxx:1195 TQHistogramUtils.cxx:1196 TQHistogramUtils.cxx:1197 TQHistogramUtils.cxx:1198 TQHistogramUtils.cxx:1199 TQHistogramUtils.cxx:1200 TQHistogramUtils.cxx:1201 TQHistogramUtils.cxx:1202 TQHistogramUtils.cxx:1203 TQHistogramUtils.cxx:1204 TQHistogramUtils.cxx:1205 TQHistogramUtils.cxx:1206 TQHistogramUtils.cxx:1207 TQHistogramUtils.cxx:1208 TQHistogramUtils.cxx:1209 TQHistogramUtils.cxx:1210 TQHistogramUtils.cxx:1211 TQHistogramUtils.cxx:1212 TQHistogramUtils.cxx:1213 TQHistogramUtils.cxx:1214 TQHistogramUtils.cxx:1215 TQHistogramUtils.cxx:1216 TQHistogramUtils.cxx:1217 TQHistogramUtils.cxx:1218 TQHistogramUtils.cxx:1219 TQHistogramUtils.cxx:1220 TQHistogramUtils.cxx:1221 TQHistogramUtils.cxx:1222 TQHistogramUtils.cxx:1223 TQHistogramUtils.cxx:1224 TQHistogramUtils.cxx:1225 TQHistogramUtils.cxx:1226 TQHistogramUtils.cxx:1227 TQHistogramUtils.cxx:1228 TQHistogramUtils.cxx:1229 TQHistogramUtils.cxx:1230 TQHistogramUtils.cxx:1231 TQHistogramUtils.cxx:1232 TQHistogramUtils.cxx:1233 TQHistogramUtils.cxx:1234 TQHistogramUtils.cxx:1235 TQHistogramUtils.cxx:1236 TQHistogramUtils.cxx:1237 TQHistogramUtils.cxx:1238 TQHistogramUtils.cxx:1239 TQHistogramUtils.cxx:1240 TQHistogramUtils.cxx:1241 TQHistogramUtils.cxx:1242 TQHistogramUtils.cxx:1243 TQHistogramUtils.cxx:1244 TQHistogramUtils.cxx:1245 TQHistogramUtils.cxx:1246 TQHistogramUtils.cxx:1247 TQHistogramUtils.cxx:1248 TQHistogramUtils.cxx:1249 TQHistogramUtils.cxx:1250 TQHistogramUtils.cxx:1251 TQHistogramUtils.cxx:1252 TQHistogramUtils.cxx:1253 TQHistogramUtils.cxx:1254 TQHistogramUtils.cxx:1255 TQHistogramUtils.cxx:1256 TQHistogramUtils.cxx:1257 TQHistogramUtils.cxx:1258 TQHistogramUtils.cxx:1259 TQHistogramUtils.cxx:1260 TQHistogramUtils.cxx:1261 TQHistogramUtils.cxx:1262 TQHistogramUtils.cxx:1263 TQHistogramUtils.cxx:1264 TQHistogramUtils.cxx:1265 TQHistogramUtils.cxx:1266 TQHistogramUtils.cxx:1267 TQHistogramUtils.cxx:1268 TQHistogramUtils.cxx:1269 TQHistogramUtils.cxx:1270 TQHistogramUtils.cxx:1271 TQHistogramUtils.cxx:1272 TQHistogramUtils.cxx:1273 TQHistogramUtils.cxx:1274 TQHistogramUtils.cxx:1275 TQHistogramUtils.cxx:1276 TQHistogramUtils.cxx:1277 TQHistogramUtils.cxx:1278 TQHistogramUtils.cxx:1279 TQHistogramUtils.cxx:1280 TQHistogramUtils.cxx:1281 TQHistogramUtils.cxx:1282 TQHistogramUtils.cxx:1283 TQHistogramUtils.cxx:1284 TQHistogramUtils.cxx:1285 TQHistogramUtils.cxx:1286 TQHistogramUtils.cxx:1287 TQHistogramUtils.cxx:1288 TQHistogramUtils.cxx:1289 TQHistogramUtils.cxx:1290 TQHistogramUtils.cxx:1291 TQHistogramUtils.cxx:1292 TQHistogramUtils.cxx:1293 TQHistogramUtils.cxx:1294 TQHistogramUtils.cxx:1295 TQHistogramUtils.cxx:1296 TQHistogramUtils.cxx:1297 TQHistogramUtils.cxx:1298 TQHistogramUtils.cxx:1299 TQHistogramUtils.cxx:1300 TQHistogramUtils.cxx:1301 TQHistogramUtils.cxx:1302 TQHistogramUtils.cxx:1303 TQHistogramUtils.cxx:1304 TQHistogramUtils.cxx:1305 TQHistogramUtils.cxx:1306 TQHistogramUtils.cxx:1307 TQHistogramUtils.cxx:1308 TQHistogramUtils.cxx:1309 TQHistogramUtils.cxx:1310 TQHistogramUtils.cxx:1311 TQHistogramUtils.cxx:1312 TQHistogramUtils.cxx:1313 TQHistogramUtils.cxx:1314 TQHistogramUtils.cxx:1315 TQHistogramUtils.cxx:1316 TQHistogramUtils.cxx:1317 TQHistogramUtils.cxx:1318 TQHistogramUtils.cxx:1319 TQHistogramUtils.cxx:1320 TQHistogramUtils.cxx:1321 TQHistogramUtils.cxx:1322 TQHistogramUtils.cxx:1323 TQHistogramUtils.cxx:1324 TQHistogramUtils.cxx:1325 TQHistogramUtils.cxx:1326 TQHistogramUtils.cxx:1327 TQHistogramUtils.cxx:1328 TQHistogramUtils.cxx:1329 TQHistogramUtils.cxx:1330 TQHistogramUtils.cxx:1331 TQHistogramUtils.cxx:1332 TQHistogramUtils.cxx:1333 TQHistogramUtils.cxx:1334 TQHistogramUtils.cxx:1335 TQHistogramUtils.cxx:1336 TQHistogramUtils.cxx:1337 TQHistogramUtils.cxx:1338 TQHistogramUtils.cxx:1339 TQHistogramUtils.cxx:1340 TQHistogramUtils.cxx:1341 TQHistogramUtils.cxx:1342 TQHistogramUtils.cxx:1343 TQHistogramUtils.cxx:1344 TQHistogramUtils.cxx:1345 TQHistogramUtils.cxx:1346 TQHistogramUtils.cxx:1347 TQHistogramUtils.cxx:1348 TQHistogramUtils.cxx:1349 TQHistogramUtils.cxx:1350 TQHistogramUtils.cxx:1351 TQHistogramUtils.cxx:1352 TQHistogramUtils.cxx:1353 TQHistogramUtils.cxx:1354 TQHistogramUtils.cxx:1355 TQHistogramUtils.cxx:1356 TQHistogramUtils.cxx:1357 TQHistogramUtils.cxx:1358 TQHistogramUtils.cxx:1359 TQHistogramUtils.cxx:1360 TQHistogramUtils.cxx:1361 TQHistogramUtils.cxx:1362 TQHistogramUtils.cxx:1363 TQHistogramUtils.cxx:1364 TQHistogramUtils.cxx:1365 TQHistogramUtils.cxx:1366 TQHistogramUtils.cxx:1367 TQHistogramUtils.cxx:1368 TQHistogramUtils.cxx:1369 TQHistogramUtils.cxx:1370 TQHistogramUtils.cxx:1371 TQHistogramUtils.cxx:1372 TQHistogramUtils.cxx:1373 TQHistogramUtils.cxx:1374 TQHistogramUtils.cxx:1375 TQHistogramUtils.cxx:1376 TQHistogramUtils.cxx:1377 TQHistogramUtils.cxx:1378 TQHistogramUtils.cxx:1379 TQHistogramUtils.cxx:1380 TQHistogramUtils.cxx:1381 TQHistogramUtils.cxx:1382 TQHistogramUtils.cxx:1383 TQHistogramUtils.cxx:1384 TQHistogramUtils.cxx:1385 TQHistogramUtils.cxx:1386 TQHistogramUtils.cxx:1387 TQHistogramUtils.cxx:1388 TQHistogramUtils.cxx:1389 TQHistogramUtils.cxx:1390 TQHistogramUtils.cxx:1391 TQHistogramUtils.cxx:1392 TQHistogramUtils.cxx:1393 TQHistogramUtils.cxx:1394 TQHistogramUtils.cxx:1395 TQHistogramUtils.cxx:1396 TQHistogramUtils.cxx:1397 TQHistogramUtils.cxx:1398 TQHistogramUtils.cxx:1399 TQHistogramUtils.cxx:1400 TQHistogramUtils.cxx:1401 TQHistogramUtils.cxx:1402 TQHistogramUtils.cxx:1403 TQHistogramUtils.cxx:1404 TQHistogramUtils.cxx:1405 TQHistogramUtils.cxx:1406 TQHistogramUtils.cxx:1407 TQHistogramUtils.cxx:1408 TQHistogramUtils.cxx:1409 TQHistogramUtils.cxx:1410 TQHistogramUtils.cxx:1411 TQHistogramUtils.cxx:1412 TQHistogramUtils.cxx:1413 TQHistogramUtils.cxx:1414 TQHistogramUtils.cxx:1415 TQHistogramUtils.cxx:1416 TQHistogramUtils.cxx:1417 TQHistogramUtils.cxx:1418 TQHistogramUtils.cxx:1419 TQHistogramUtils.cxx:1420 TQHistogramUtils.cxx:1421 TQHistogramUtils.cxx:1422 TQHistogramUtils.cxx:1423 TQHistogramUtils.cxx:1424 TQHistogramUtils.cxx:1425 TQHistogramUtils.cxx:1426 TQHistogramUtils.cxx:1427 TQHistogramUtils.cxx:1428 TQHistogramUtils.cxx:1429 TQHistogramUtils.cxx:1430 TQHistogramUtils.cxx:1431 TQHistogramUtils.cxx:1432 TQHistogramUtils.cxx:1433 TQHistogramUtils.cxx:1434 TQHistogramUtils.cxx:1435 TQHistogramUtils.cxx:1436 TQHistogramUtils.cxx:1437 TQHistogramUtils.cxx:1438 TQHistogramUtils.cxx:1439 TQHistogramUtils.cxx:1440 TQHistogramUtils.cxx:1441 TQHistogramUtils.cxx:1442 TQHistogramUtils.cxx:1443 TQHistogramUtils.cxx:1444 TQHistogramUtils.cxx:1445 TQHistogramUtils.cxx:1446 TQHistogramUtils.cxx:1447 TQHistogramUtils.cxx:1448 TQHistogramUtils.cxx:1449 TQHistogramUtils.cxx:1450 TQHistogramUtils.cxx:1451 TQHistogramUtils.cxx:1452 TQHistogramUtils.cxx:1453 TQHistogramUtils.cxx:1454 TQHistogramUtils.cxx:1455 TQHistogramUtils.cxx:1456 TQHistogramUtils.cxx:1457 TQHistogramUtils.cxx:1458 TQHistogramUtils.cxx:1459 TQHistogramUtils.cxx:1460 TQHistogramUtils.cxx:1461 TQHistogramUtils.cxx:1462 TQHistogramUtils.cxx:1463 TQHistogramUtils.cxx:1464 TQHistogramUtils.cxx:1465 TQHistogramUtils.cxx:1466 TQHistogramUtils.cxx:1467 TQHistogramUtils.cxx:1468 TQHistogramUtils.cxx:1469 TQHistogramUtils.cxx:1470 TQHistogramUtils.cxx:1471 TQHistogramUtils.cxx:1472 TQHistogramUtils.cxx:1473 TQHistogramUtils.cxx:1474 TQHistogramUtils.cxx:1475 TQHistogramUtils.cxx:1476 TQHistogramUtils.cxx:1477 TQHistogramUtils.cxx:1478 TQHistogramUtils.cxx:1479 TQHistogramUtils.cxx:1480 TQHistogramUtils.cxx:1481 TQHistogramUtils.cxx:1482 TQHistogramUtils.cxx:1483 TQHistogramUtils.cxx:1484 TQHistogramUtils.cxx:1485 TQHistogramUtils.cxx:1486 TQHistogramUtils.cxx:1487 TQHistogramUtils.cxx:1488 TQHistogramUtils.cxx:1489 TQHistogramUtils.cxx:1490 TQHistogramUtils.cxx:1491 TQHistogramUtils.cxx:1492 TQHistogramUtils.cxx:1493 TQHistogramUtils.cxx:1494 TQHistogramUtils.cxx:1495 TQHistogramUtils.cxx:1496 TQHistogramUtils.cxx:1497 TQHistogramUtils.cxx:1498 TQHistogramUtils.cxx:1499 TQHistogramUtils.cxx:1500 TQHistogramUtils.cxx:1501 TQHistogramUtils.cxx:1502 TQHistogramUtils.cxx:1503 TQHistogramUtils.cxx:1504 TQHistogramUtils.cxx:1505 TQHistogramUtils.cxx:1506 TQHistogramUtils.cxx:1507 TQHistogramUtils.cxx:1508 TQHistogramUtils.cxx:1509 TQHistogramUtils.cxx:1510 TQHistogramUtils.cxx:1511 TQHistogramUtils.cxx:1512 TQHistogramUtils.cxx:1513 TQHistogramUtils.cxx:1514 TQHistogramUtils.cxx:1515 TQHistogramUtils.cxx:1516 TQHistogramUtils.cxx:1517 TQHistogramUtils.cxx:1518 TQHistogramUtils.cxx:1519 TQHistogramUtils.cxx:1520 TQHistogramUtils.cxx:1521 TQHistogramUtils.cxx:1522 TQHistogramUtils.cxx:1523 TQHistogramUtils.cxx:1524 TQHistogramUtils.cxx:1525 TQHistogramUtils.cxx:1526 TQHistogramUtils.cxx:1527 TQHistogramUtils.cxx:1528 TQHistogramUtils.cxx:1529 TQHistogramUtils.cxx:1530 TQHistogramUtils.cxx:1531 TQHistogramUtils.cxx:1532 TQHistogramUtils.cxx:1533 TQHistogramUtils.cxx:1534 TQHistogramUtils.cxx:1535 TQHistogramUtils.cxx:1536 TQHistogramUtils.cxx:1537 TQHistogramUtils.cxx:1538 TQHistogramUtils.cxx:1539 TQHistogramUtils.cxx:1540 TQHistogramUtils.cxx:1541 TQHistogramUtils.cxx:1542 TQHistogramUtils.cxx:1543 TQHistogramUtils.cxx:1544 TQHistogramUtils.cxx:1545 TQHistogramUtils.cxx:1546 TQHistogramUtils.cxx:1547 TQHistogramUtils.cxx:1548 TQHistogramUtils.cxx:1549 TQHistogramUtils.cxx:1550 TQHistogramUtils.cxx:1551 TQHistogramUtils.cxx:1552 TQHistogramUtils.cxx:1553 TQHistogramUtils.cxx:1554 TQHistogramUtils.cxx:1555 TQHistogramUtils.cxx:1556 TQHistogramUtils.cxx:1557 TQHistogramUtils.cxx:1558 TQHistogramUtils.cxx:1559 TQHistogramUtils.cxx:1560 TQHistogramUtils.cxx:1561 TQHistogramUtils.cxx:1562 TQHistogramUtils.cxx:1563 TQHistogramUtils.cxx:1564 TQHistogramUtils.cxx:1565 TQHistogramUtils.cxx:1566 TQHistogramUtils.cxx:1567 TQHistogramUtils.cxx:1568 TQHistogramUtils.cxx:1569 TQHistogramUtils.cxx:1570 TQHistogramUtils.cxx:1571 TQHistogramUtils.cxx:1572 TQHistogramUtils.cxx:1573 TQHistogramUtils.cxx:1574 TQHistogramUtils.cxx:1575 TQHistogramUtils.cxx:1576 TQHistogramUtils.cxx:1577 TQHistogramUtils.cxx:1578 TQHistogramUtils.cxx:1579 TQHistogramUtils.cxx:1580 TQHistogramUtils.cxx:1581 TQHistogramUtils.cxx:1582 TQHistogramUtils.cxx:1583 TQHistogramUtils.cxx:1584 TQHistogramUtils.cxx:1585 TQHistogramUtils.cxx:1586 TQHistogramUtils.cxx:1587 TQHistogramUtils.cxx:1588 TQHistogramUtils.cxx:1589 TQHistogramUtils.cxx:1590 TQHistogramUtils.cxx:1591 TQHistogramUtils.cxx:1592 TQHistogramUtils.cxx:1593 TQHistogramUtils.cxx:1594 TQHistogramUtils.cxx:1595 TQHistogramUtils.cxx:1596 TQHistogramUtils.cxx:1597 TQHistogramUtils.cxx:1598 TQHistogramUtils.cxx:1599 TQHistogramUtils.cxx:1600 TQHistogramUtils.cxx:1601 TQHistogramUtils.cxx:1602 TQHistogramUtils.cxx:1603 TQHistogramUtils.cxx:1604 TQHistogramUtils.cxx:1605 TQHistogramUtils.cxx:1606 TQHistogramUtils.cxx:1607 TQHistogramUtils.cxx:1608 TQHistogramUtils.cxx:1609 TQHistogramUtils.cxx:1610 TQHistogramUtils.cxx:1611 TQHistogramUtils.cxx:1612 TQHistogramUtils.cxx:1613 TQHistogramUtils.cxx:1614 TQHistogramUtils.cxx:1615 TQHistogramUtils.cxx:1616 TQHistogramUtils.cxx:1617 TQHistogramUtils.cxx:1618 TQHistogramUtils.cxx:1619 TQHistogramUtils.cxx:1620 TQHistogramUtils.cxx:1621 TQHistogramUtils.cxx:1622 TQHistogramUtils.cxx:1623 TQHistogramUtils.cxx:1624 TQHistogramUtils.cxx:1625 TQHistogramUtils.cxx:1626 TQHistogramUtils.cxx:1627 TQHistogramUtils.cxx:1628 TQHistogramUtils.cxx:1629 TQHistogramUtils.cxx:1630 TQHistogramUtils.cxx:1631 TQHistogramUtils.cxx:1632 TQHistogramUtils.cxx:1633 TQHistogramUtils.cxx:1634 TQHistogramUtils.cxx:1635 TQHistogramUtils.cxx:1636 TQHistogramUtils.cxx:1637 TQHistogramUtils.cxx:1638 TQHistogramUtils.cxx:1639 TQHistogramUtils.cxx:1640 TQHistogramUtils.cxx:1641 TQHistogramUtils.cxx:1642 TQHistogramUtils.cxx:1643 TQHistogramUtils.cxx:1644 TQHistogramUtils.cxx:1645 TQHistogramUtils.cxx:1646 TQHistogramUtils.cxx:1647 TQHistogramUtils.cxx:1648 TQHistogramUtils.cxx:1649 TQHistogramUtils.cxx:1650 TQHistogramUtils.cxx:1651 TQHistogramUtils.cxx:1652 TQHistogramUtils.cxx:1653 TQHistogramUtils.cxx:1654 TQHistogramUtils.cxx:1655 TQHistogramUtils.cxx:1656 TQHistogramUtils.cxx:1657 TQHistogramUtils.cxx:1658 TQHistogramUtils.cxx:1659 TQHistogramUtils.cxx:1660 TQHistogramUtils.cxx:1661 TQHistogramUtils.cxx:1662 TQHistogramUtils.cxx:1663 TQHistogramUtils.cxx:1664 TQHistogramUtils.cxx:1665 TQHistogramUtils.cxx:1666 TQHistogramUtils.cxx:1667 TQHistogramUtils.cxx:1668 TQHistogramUtils.cxx:1669 TQHistogramUtils.cxx:1670 TQHistogramUtils.cxx:1671 TQHistogramUtils.cxx:1672 TQHistogramUtils.cxx:1673 TQHistogramUtils.cxx:1674 TQHistogramUtils.cxx:1675 TQHistogramUtils.cxx:1676 TQHistogramUtils.cxx:1677 TQHistogramUtils.cxx:1678 TQHistogramUtils.cxx:1679 TQHistogramUtils.cxx:1680 TQHistogramUtils.cxx:1681 TQHistogramUtils.cxx:1682 TQHistogramUtils.cxx:1683 TQHistogramUtils.cxx:1684 TQHistogramUtils.cxx:1685 TQHistogramUtils.cxx:1686 TQHistogramUtils.cxx:1687 TQHistogramUtils.cxx:1688 TQHistogramUtils.cxx:1689 TQHistogramUtils.cxx:1690 TQHistogramUtils.cxx:1691 TQHistogramUtils.cxx:1692 TQHistogramUtils.cxx:1693 TQHistogramUtils.cxx:1694 TQHistogramUtils.cxx:1695 TQHistogramUtils.cxx:1696 TQHistogramUtils.cxx:1697 TQHistogramUtils.cxx:1698 TQHistogramUtils.cxx:1699 TQHistogramUtils.cxx:1700 TQHistogramUtils.cxx:1701 TQHistogramUtils.cxx:1702 TQHistogramUtils.cxx:1703 TQHistogramUtils.cxx:1704 TQHistogramUtils.cxx:1705 TQHistogramUtils.cxx:1706 TQHistogramUtils.cxx:1707 TQHistogramUtils.cxx:1708 TQHistogramUtils.cxx:1709 TQHistogramUtils.cxx:1710 TQHistogramUtils.cxx:1711 TQHistogramUtils.cxx:1712 TQHistogramUtils.cxx:1713 TQHistogramUtils.cxx:1714 TQHistogramUtils.cxx:1715 TQHistogramUtils.cxx:1716 TQHistogramUtils.cxx:1717 TQHistogramUtils.cxx:1718 TQHistogramUtils.cxx:1719 TQHistogramUtils.cxx:1720 TQHistogramUtils.cxx:1721 TQHistogramUtils.cxx:1722 TQHistogramUtils.cxx:1723 TQHistogramUtils.cxx:1724 TQHistogramUtils.cxx:1725 TQHistogramUtils.cxx:1726 TQHistogramUtils.cxx:1727 TQHistogramUtils.cxx:1728 TQHistogramUtils.cxx:1729 TQHistogramUtils.cxx:1730 TQHistogramUtils.cxx:1731 TQHistogramUtils.cxx:1732 TQHistogramUtils.cxx:1733 TQHistogramUtils.cxx:1734 TQHistogramUtils.cxx:1735 TQHistogramUtils.cxx:1736 TQHistogramUtils.cxx:1737 TQHistogramUtils.cxx:1738 TQHistogramUtils.cxx:1739 TQHistogramUtils.cxx:1740 TQHistogramUtils.cxx:1741 TQHistogramUtils.cxx:1742 TQHistogramUtils.cxx:1743 TQHistogramUtils.cxx:1744 TQHistogramUtils.cxx:1745 TQHistogramUtils.cxx:1746 TQHistogramUtils.cxx:1747 TQHistogramUtils.cxx:1748 TQHistogramUtils.cxx:1749 TQHistogramUtils.cxx:1750 TQHistogramUtils.cxx:1751 TQHistogramUtils.cxx:1752 TQHistogramUtils.cxx:1753 TQHistogramUtils.cxx:1754 TQHistogramUtils.cxx:1755 TQHistogramUtils.cxx:1756 TQHistogramUtils.cxx:1757 TQHistogramUtils.cxx:1758 TQHistogramUtils.cxx:1759 TQHistogramUtils.cxx:1760 TQHistogramUtils.cxx:1761 TQHistogramUtils.cxx:1762 TQHistogramUtils.cxx:1763 TQHistogramUtils.cxx:1764 TQHistogramUtils.cxx:1765 TQHistogramUtils.cxx:1766 TQHistogramUtils.cxx:1767 TQHistogramUtils.cxx:1768 TQHistogramUtils.cxx:1769 TQHistogramUtils.cxx:1770 TQHistogramUtils.cxx:1771 TQHistogramUtils.cxx:1772 TQHistogramUtils.cxx:1773 TQHistogramUtils.cxx:1774 TQHistogramUtils.cxx:1775 TQHistogramUtils.cxx:1776 TQHistogramUtils.cxx:1777 TQHistogramUtils.cxx:1778 TQHistogramUtils.cxx:1779 TQHistogramUtils.cxx:1780 TQHistogramUtils.cxx:1781 TQHistogramUtils.cxx:1782 TQHistogramUtils.cxx:1783 TQHistogramUtils.cxx:1784 TQHistogramUtils.cxx:1785 TQHistogramUtils.cxx:1786 TQHistogramUtils.cxx:1787 TQHistogramUtils.cxx:1788 TQHistogramUtils.cxx:1789 TQHistogramUtils.cxx:1790 TQHistogramUtils.cxx:1791 TQHistogramUtils.cxx:1792 TQHistogramUtils.cxx:1793 TQHistogramUtils.cxx:1794 TQHistogramUtils.cxx:1795 TQHistogramUtils.cxx:1796 TQHistogramUtils.cxx:1797 TQHistogramUtils.cxx:1798 TQHistogramUtils.cxx:1799 TQHistogramUtils.cxx:1800 TQHistogramUtils.cxx:1801 TQHistogramUtils.cxx:1802 TQHistogramUtils.cxx:1803 TQHistogramUtils.cxx:1804 TQHistogramUtils.cxx:1805 TQHistogramUtils.cxx:1806 TQHistogramUtils.cxx:1807 TQHistogramUtils.cxx:1808 TQHistogramUtils.cxx:1809 TQHistogramUtils.cxx:1810 TQHistogramUtils.cxx:1811 TQHistogramUtils.cxx:1812 TQHistogramUtils.cxx:1813 TQHistogramUtils.cxx:1814 TQHistogramUtils.cxx:1815 TQHistogramUtils.cxx:1816 TQHistogramUtils.cxx:1817 TQHistogramUtils.cxx:1818 TQHistogramUtils.cxx:1819 TQHistogramUtils.cxx:1820 TQHistogramUtils.cxx:1821 TQHistogramUtils.cxx:1822 TQHistogramUtils.cxx:1823 TQHistogramUtils.cxx:1824 TQHistogramUtils.cxx:1825 TQHistogramUtils.cxx:1826 TQHistogramUtils.cxx:1827 TQHistogramUtils.cxx:1828 TQHistogramUtils.cxx:1829 TQHistogramUtils.cxx:1830 TQHistogramUtils.cxx:1831 TQHistogramUtils.cxx:1832 TQHistogramUtils.cxx:1833 TQHistogramUtils.cxx:1834 TQHistogramUtils.cxx:1835 TQHistogramUtils.cxx:1836 TQHistogramUtils.cxx:1837 TQHistogramUtils.cxx:1838 TQHistogramUtils.cxx:1839 TQHistogramUtils.cxx:1840 TQHistogramUtils.cxx:1841 TQHistogramUtils.cxx:1842 TQHistogramUtils.cxx:1843 TQHistogramUtils.cxx:1844 TQHistogramUtils.cxx:1845 TQHistogramUtils.cxx:1846 TQHistogramUtils.cxx:1847 TQHistogramUtils.cxx:1848 TQHistogramUtils.cxx:1849 TQHistogramUtils.cxx:1850 TQHistogramUtils.cxx:1851 TQHistogramUtils.cxx:1852 TQHistogramUtils.cxx:1853 TQHistogramUtils.cxx:1854 TQHistogramUtils.cxx:1855 TQHistogramUtils.cxx:1856 TQHistogramUtils.cxx:1857 TQHistogramUtils.cxx:1858 TQHistogramUtils.cxx:1859 TQHistogramUtils.cxx:1860 TQHistogramUtils.cxx:1861 TQHistogramUtils.cxx:1862 TQHistogramUtils.cxx:1863 TQHistogramUtils.cxx:1864 TQHistogramUtils.cxx:1865 TQHistogramUtils.cxx:1866 TQHistogramUtils.cxx:1867 TQHistogramUtils.cxx:1868 TQHistogramUtils.cxx:1869 TQHistogramUtils.cxx:1870 TQHistogramUtils.cxx:1871 TQHistogramUtils.cxx:1872 TQHistogramUtils.cxx:1873 TQHistogramUtils.cxx:1874 TQHistogramUtils.cxx:1875 TQHistogramUtils.cxx:1876 TQHistogramUtils.cxx:1877 TQHistogramUtils.cxx:1878 TQHistogramUtils.cxx:1879 TQHistogramUtils.cxx:1880 TQHistogramUtils.cxx:1881 TQHistogramUtils.cxx:1882 TQHistogramUtils.cxx:1883 TQHistogramUtils.cxx:1884 TQHistogramUtils.cxx:1885 TQHistogramUtils.cxx:1886 TQHistogramUtils.cxx:1887 TQHistogramUtils.cxx:1888 TQHistogramUtils.cxx:1889 TQHistogramUtils.cxx:1890 TQHistogramUtils.cxx:1891 TQHistogramUtils.cxx:1892 TQHistogramUtils.cxx:1893 TQHistogramUtils.cxx:1894 TQHistogramUtils.cxx:1895 TQHistogramUtils.cxx:1896 TQHistogramUtils.cxx:1897 TQHistogramUtils.cxx:1898 TQHistogramUtils.cxx:1899 TQHistogramUtils.cxx:1900 TQHistogramUtils.cxx:1901 TQHistogramUtils.cxx:1902 TQHistogramUtils.cxx:1903 TQHistogramUtils.cxx:1904 TQHistogramUtils.cxx:1905 TQHistogramUtils.cxx:1906 TQHistogramUtils.cxx:1907 TQHistogramUtils.cxx:1908 TQHistogramUtils.cxx:1909 TQHistogramUtils.cxx:1910 TQHistogramUtils.cxx:1911 TQHistogramUtils.cxx:1912 TQHistogramUtils.cxx:1913 TQHistogramUtils.cxx:1914 TQHistogramUtils.cxx:1915 TQHistogramUtils.cxx:1916 TQHistogramUtils.cxx:1917 TQHistogramUtils.cxx:1918 TQHistogramUtils.cxx:1919 TQHistogramUtils.cxx:1920 TQHistogramUtils.cxx:1921 TQHistogramUtils.cxx:1922 TQHistogramUtils.cxx:1923 TQHistogramUtils.cxx:1924 TQHistogramUtils.cxx:1925 TQHistogramUtils.cxx:1926 TQHistogramUtils.cxx:1927 TQHistogramUtils.cxx:1928 TQHistogramUtils.cxx:1929 TQHistogramUtils.cxx:1930 TQHistogramUtils.cxx:1931 TQHistogramUtils.cxx:1932 TQHistogramUtils.cxx:1933 TQHistogramUtils.cxx:1934 TQHistogramUtils.cxx:1935 TQHistogramUtils.cxx:1936 TQHistogramUtils.cxx:1937 TQHistogramUtils.cxx:1938 TQHistogramUtils.cxx:1939 TQHistogramUtils.cxx:1940 TQHistogramUtils.cxx:1941 TQHistogramUtils.cxx:1942 TQHistogramUtils.cxx:1943 TQHistogramUtils.cxx:1944 TQHistogramUtils.cxx:1945 TQHistogramUtils.cxx:1946 TQHistogramUtils.cxx:1947 TQHistogramUtils.cxx:1948 TQHistogramUtils.cxx:1949 TQHistogramUtils.cxx:1950 TQHistogramUtils.cxx:1951 TQHistogramUtils.cxx:1952 TQHistogramUtils.cxx:1953 TQHistogramUtils.cxx:1954 TQHistogramUtils.cxx:1955 TQHistogramUtils.cxx:1956 TQHistogramUtils.cxx:1957 TQHistogramUtils.cxx:1958 TQHistogramUtils.cxx:1959 TQHistogramUtils.cxx:1960 TQHistogramUtils.cxx:1961 TQHistogramUtils.cxx:1962 TQHistogramUtils.cxx:1963 TQHistogramUtils.cxx:1964 TQHistogramUtils.cxx:1965 TQHistogramUtils.cxx:1966 TQHistogramUtils.cxx:1967 TQHistogramUtils.cxx:1968 TQHistogramUtils.cxx:1969 TQHistogramUtils.cxx:1970 TQHistogramUtils.cxx:1971 TQHistogramUtils.cxx:1972 TQHistogramUtils.cxx:1973 TQHistogramUtils.cxx:1974 TQHistogramUtils.cxx:1975 TQHistogramUtils.cxx:1976 TQHistogramUtils.cxx:1977 TQHistogramUtils.cxx:1978 TQHistogramUtils.cxx:1979 TQHistogramUtils.cxx:1980 TQHistogramUtils.cxx:1981 TQHistogramUtils.cxx:1982 TQHistogramUtils.cxx:1983 TQHistogramUtils.cxx:1984 TQHistogramUtils.cxx:1985 TQHistogramUtils.cxx:1986 TQHistogramUtils.cxx:1987 TQHistogramUtils.cxx:1988 TQHistogramUtils.cxx:1989 TQHistogramUtils.cxx:1990 TQHistogramUtils.cxx:1991 TQHistogramUtils.cxx:1992 TQHistogramUtils.cxx:1993 TQHistogramUtils.cxx:1994 TQHistogramUtils.cxx:1995 TQHistogramUtils.cxx:1996 TQHistogramUtils.cxx:1997 TQHistogramUtils.cxx:1998 TQHistogramUtils.cxx:1999 TQHistogramUtils.cxx:2000 TQHistogramUtils.cxx:2001 TQHistogramUtils.cxx:2002 TQHistogramUtils.cxx:2003 TQHistogramUtils.cxx:2004 TQHistogramUtils.cxx:2005 TQHistogramUtils.cxx:2006 TQHistogramUtils.cxx:2007 TQHistogramUtils.cxx:2008 TQHistogramUtils.cxx:2009 TQHistogramUtils.cxx:2010 TQHistogramUtils.cxx:2011 TQHistogramUtils.cxx:2012 TQHistogramUtils.cxx:2013 TQHistogramUtils.cxx:2014 TQHistogramUtils.cxx:2015 TQHistogramUtils.cxx:2016 TQHistogramUtils.cxx:2017 TQHistogramUtils.cxx:2018 TQHistogramUtils.cxx:2019 TQHistogramUtils.cxx:2020 TQHistogramUtils.cxx:2021 TQHistogramUtils.cxx:2022 TQHistogramUtils.cxx:2023 TQHistogramUtils.cxx:2024 TQHistogramUtils.cxx:2025 TQHistogramUtils.cxx:2026 TQHistogramUtils.cxx:2027 TQHistogramUtils.cxx:2028 TQHistogramUtils.cxx:2029 TQHistogramUtils.cxx:2030 TQHistogramUtils.cxx:2031 TQHistogramUtils.cxx:2032 TQHistogramUtils.cxx:2033 TQHistogramUtils.cxx:2034 TQHistogramUtils.cxx:2035 TQHistogramUtils.cxx:2036 TQHistogramUtils.cxx:2037 TQHistogramUtils.cxx:2038 TQHistogramUtils.cxx:2039 TQHistogramUtils.cxx:2040 TQHistogramUtils.cxx:2041 TQHistogramUtils.cxx:2042 TQHistogramUtils.cxx:2043 TQHistogramUtils.cxx:2044 TQHistogramUtils.cxx:2045 TQHistogramUtils.cxx:2046 TQHistogramUtils.cxx:2047 TQHistogramUtils.cxx:2048 TQHistogramUtils.cxx:2049 TQHistogramUtils.cxx:2050 TQHistogramUtils.cxx:2051 TQHistogramUtils.cxx:2052 TQHistogramUtils.cxx:2053 TQHistogramUtils.cxx:2054 TQHistogramUtils.cxx:2055 TQHistogramUtils.cxx:2056 TQHistogramUtils.cxx:2057 TQHistogramUtils.cxx:2058 TQHistogramUtils.cxx:2059 TQHistogramUtils.cxx:2060 TQHistogramUtils.cxx:2061 TQHistogramUtils.cxx:2062 TQHistogramUtils.cxx:2063 TQHistogramUtils.cxx:2064 TQHistogramUtils.cxx:2065 TQHistogramUtils.cxx:2066 TQHistogramUtils.cxx:2067 TQHistogramUtils.cxx:2068 TQHistogramUtils.cxx:2069 TQHistogramUtils.cxx:2070 TQHistogramUtils.cxx:2071 TQHistogramUtils.cxx:2072 TQHistogramUtils.cxx:2073 TQHistogramUtils.cxx:2074 TQHistogramUtils.cxx:2075 TQHistogramUtils.cxx:2076 TQHistogramUtils.cxx:2077 TQHistogramUtils.cxx:2078 TQHistogramUtils.cxx:2079 TQHistogramUtils.cxx:2080 TQHistogramUtils.cxx:2081 TQHistogramUtils.cxx:2082 TQHistogramUtils.cxx:2083 TQHistogramUtils.cxx:2084 TQHistogramUtils.cxx:2085 TQHistogramUtils.cxx:2086 TQHistogramUtils.cxx:2087 TQHistogramUtils.cxx:2088 TQHistogramUtils.cxx:2089 TQHistogramUtils.cxx:2090 TQHistogramUtils.cxx:2091 TQHistogramUtils.cxx:2092 TQHistogramUtils.cxx:2093 TQHistogramUtils.cxx:2094 TQHistogramUtils.cxx:2095 TQHistogramUtils.cxx:2096 TQHistogramUtils.cxx:2097 TQHistogramUtils.cxx:2098 TQHistogramUtils.cxx:2099 TQHistogramUtils.cxx:2100 TQHistogramUtils.cxx:2101 TQHistogramUtils.cxx:2102 TQHistogramUtils.cxx:2103 TQHistogramUtils.cxx:2104 TQHistogramUtils.cxx:2105 TQHistogramUtils.cxx:2106 TQHistogramUtils.cxx:2107 TQHistogramUtils.cxx:2108 TQHistogramUtils.cxx:2109 TQHistogramUtils.cxx:2110 TQHistogramUtils.cxx:2111 TQHistogramUtils.cxx:2112 TQHistogramUtils.cxx:2113 TQHistogramUtils.cxx:2114 TQHistogramUtils.cxx:2115 TQHistogramUtils.cxx:2116 TQHistogramUtils.cxx:2117 TQHistogramUtils.cxx:2118 TQHistogramUtils.cxx:2119 TQHistogramUtils.cxx:2120 TQHistogramUtils.cxx:2121 TQHistogramUtils.cxx:2122 TQHistogramUtils.cxx:2123 TQHistogramUtils.cxx:2124 TQHistogramUtils.cxx:2125 TQHistogramUtils.cxx:2126 TQHistogramUtils.cxx:2127 TQHistogramUtils.cxx:2128 TQHistogramUtils.cxx:2129 TQHistogramUtils.cxx:2130 TQHistogramUtils.cxx:2131 TQHistogramUtils.cxx:2132 TQHistogramUtils.cxx:2133 TQHistogramUtils.cxx:2134 TQHistogramUtils.cxx:2135 TQHistogramUtils.cxx:2136 TQHistogramUtils.cxx:2137 TQHistogramUtils.cxx:2138 TQHistogramUtils.cxx:2139 TQHistogramUtils.cxx:2140 TQHistogramUtils.cxx:2141 TQHistogramUtils.cxx:2142 TQHistogramUtils.cxx:2143 TQHistogramUtils.cxx:2144 TQHistogramUtils.cxx:2145 TQHistogramUtils.cxx:2146 TQHistogramUtils.cxx:2147 TQHistogramUtils.cxx:2148 TQHistogramUtils.cxx:2149 TQHistogramUtils.cxx:2150 TQHistogramUtils.cxx:2151 TQHistogramUtils.cxx:2152 TQHistogramUtils.cxx:2153 TQHistogramUtils.cxx:2154 TQHistogramUtils.cxx:2155 TQHistogramUtils.cxx:2156 TQHistogramUtils.cxx:2157 TQHistogramUtils.cxx:2158 TQHistogramUtils.cxx:2159 TQHistogramUtils.cxx:2160 TQHistogramUtils.cxx:2161 TQHistogramUtils.cxx:2162 TQHistogramUtils.cxx:2163 TQHistogramUtils.cxx:2164 TQHistogramUtils.cxx:2165 TQHistogramUtils.cxx:2166 TQHistogramUtils.cxx:2167 TQHistogramUtils.cxx:2168 TQHistogramUtils.cxx:2169 TQHistogramUtils.cxx:2170 TQHistogramUtils.cxx:2171 TQHistogramUtils.cxx:2172 TQHistogramUtils.cxx:2173 TQHistogramUtils.cxx:2174 TQHistogramUtils.cxx:2175 TQHistogramUtils.cxx:2176 TQHistogramUtils.cxx:2177 TQHistogramUtils.cxx:2178 TQHistogramUtils.cxx:2179 TQHistogramUtils.cxx:2180 TQHistogramUtils.cxx:2181 TQHistogramUtils.cxx:2182 TQHistogramUtils.cxx:2183 TQHistogramUtils.cxx:2184 TQHistogramUtils.cxx:2185 TQHistogramUtils.cxx:2186 TQHistogramUtils.cxx:2187 TQHistogramUtils.cxx:2188 TQHistogramUtils.cxx:2189 TQHistogramUtils.cxx:2190 TQHistogramUtils.cxx:2191 TQHistogramUtils.cxx:2192 TQHistogramUtils.cxx:2193 TQHistogramUtils.cxx:2194 TQHistogramUtils.cxx:2195 TQHistogramUtils.cxx:2196 TQHistogramUtils.cxx:2197 TQHistogramUtils.cxx:2198 TQHistogramUtils.cxx:2199 TQHistogramUtils.cxx:2200 TQHistogramUtils.cxx:2201 TQHistogramUtils.cxx:2202 TQHistogramUtils.cxx:2203 TQHistogramUtils.cxx:2204 TQHistogramUtils.cxx:2205 TQHistogramUtils.cxx:2206 TQHistogramUtils.cxx:2207 TQHistogramUtils.cxx:2208 TQHistogramUtils.cxx:2209 TQHistogramUtils.cxx:2210 TQHistogramUtils.cxx:2211 TQHistogramUtils.cxx:2212 TQHistogramUtils.cxx:2213 TQHistogramUtils.cxx:2214 TQHistogramUtils.cxx:2215 TQHistogramUtils.cxx:2216 TQHistogramUtils.cxx:2217 TQHistogramUtils.cxx:2218 TQHistogramUtils.cxx:2219 TQHistogramUtils.cxx:2220 TQHistogramUtils.cxx:2221 TQHistogramUtils.cxx:2222 TQHistogramUtils.cxx:2223 TQHistogramUtils.cxx:2224 TQHistogramUtils.cxx:2225 TQHistogramUtils.cxx:2226 TQHistogramUtils.cxx:2227 TQHistogramUtils.cxx:2228 TQHistogramUtils.cxx:2229 TQHistogramUtils.cxx:2230 TQHistogramUtils.cxx:2231 TQHistogramUtils.cxx:2232 TQHistogramUtils.cxx:2233 TQHistogramUtils.cxx:2234 TQHistogramUtils.cxx:2235 TQHistogramUtils.cxx:2236 TQHistogramUtils.cxx:2237 TQHistogramUtils.cxx:2238 TQHistogramUtils.cxx:2239 TQHistogramUtils.cxx:2240 TQHistogramUtils.cxx:2241 TQHistogramUtils.cxx:2242 TQHistogramUtils.cxx:2243 TQHistogramUtils.cxx:2244 TQHistogramUtils.cxx:2245 TQHistogramUtils.cxx:2246 TQHistogramUtils.cxx:2247 TQHistogramUtils.cxx:2248 TQHistogramUtils.cxx:2249 TQHistogramUtils.cxx:2250 TQHistogramUtils.cxx:2251 TQHistogramUtils.cxx:2252 TQHistogramUtils.cxx:2253 TQHistogramUtils.cxx:2254 TQHistogramUtils.cxx:2255 TQHistogramUtils.cxx:2256 TQHistogramUtils.cxx:2257 TQHistogramUtils.cxx:2258 TQHistogramUtils.cxx:2259 TQHistogramUtils.cxx:2260 TQHistogramUtils.cxx:2261 TQHistogramUtils.cxx:2262 TQHistogramUtils.cxx:2263 TQHistogramUtils.cxx:2264 TQHistogramUtils.cxx:2265 TQHistogramUtils.cxx:2266 TQHistogramUtils.cxx:2267 TQHistogramUtils.cxx:2268 TQHistogramUtils.cxx:2269 TQHistogramUtils.cxx:2270 TQHistogramUtils.cxx:2271 TQHistogramUtils.cxx:2272 TQHistogramUtils.cxx:2273 TQHistogramUtils.cxx:2274 TQHistogramUtils.cxx:2275 TQHistogramUtils.cxx:2276 TQHistogramUtils.cxx:2277 TQHistogramUtils.cxx:2278 TQHistogramUtils.cxx:2279 TQHistogramUtils.cxx:2280 TQHistogramUtils.cxx:2281 TQHistogramUtils.cxx:2282 TQHistogramUtils.cxx:2283 TQHistogramUtils.cxx:2284 TQHistogramUtils.cxx:2285 TQHistogramUtils.cxx:2286 TQHistogramUtils.cxx:2287 TQHistogramUtils.cxx:2288 TQHistogramUtils.cxx:2289 TQHistogramUtils.cxx:2290 TQHistogramUtils.cxx:2291 TQHistogramUtils.cxx:2292 TQHistogramUtils.cxx:2293 TQHistogramUtils.cxx:2294 TQHistogramUtils.cxx:2295 TQHistogramUtils.cxx:2296 TQHistogramUtils.cxx:2297 TQHistogramUtils.cxx:2298 TQHistogramUtils.cxx:2299 TQHistogramUtils.cxx:2300 TQHistogramUtils.cxx:2301 TQHistogramUtils.cxx:2302 TQHistogramUtils.cxx:2303 TQHistogramUtils.cxx:2304 TQHistogramUtils.cxx:2305 TQHistogramUtils.cxx:2306 TQHistogramUtils.cxx:2307 TQHistogramUtils.cxx:2308 TQHistogramUtils.cxx:2309 TQHistogramUtils.cxx:2310 TQHistogramUtils.cxx:2311 TQHistogramUtils.cxx:2312 TQHistogramUtils.cxx:2313 TQHistogramUtils.cxx:2314 TQHistogramUtils.cxx:2315 TQHistogramUtils.cxx:2316 TQHistogramUtils.cxx:2317 TQHistogramUtils.cxx:2318 TQHistogramUtils.cxx:2319 TQHistogramUtils.cxx:2320 TQHistogramUtils.cxx:2321 TQHistogramUtils.cxx:2322 TQHistogramUtils.cxx:2323 TQHistogramUtils.cxx:2324 TQHistogramUtils.cxx:2325 TQHistogramUtils.cxx:2326 TQHistogramUtils.cxx:2327 TQHistogramUtils.cxx:2328 TQHistogramUtils.cxx:2329 TQHistogramUtils.cxx:2330 TQHistogramUtils.cxx:2331 TQHistogramUtils.cxx:2332 TQHistogramUtils.cxx:2333 TQHistogramUtils.cxx:2334 TQHistogramUtils.cxx:2335 TQHistogramUtils.cxx:2336 TQHistogramUtils.cxx:2337 TQHistogramUtils.cxx:2338 TQHistogramUtils.cxx:2339 TQHistogramUtils.cxx:2340 TQHistogramUtils.cxx:2341 TQHistogramUtils.cxx:2342 TQHistogramUtils.cxx:2343 TQHistogramUtils.cxx:2344 TQHistogramUtils.cxx:2345 TQHistogramUtils.cxx:2346 TQHistogramUtils.cxx:2347 TQHistogramUtils.cxx:2348 TQHistogramUtils.cxx:2349 TQHistogramUtils.cxx:2350 TQHistogramUtils.cxx:2351 TQHistogramUtils.cxx:2352 TQHistogramUtils.cxx:2353 TQHistogramUtils.cxx:2354 TQHistogramUtils.cxx:2355 TQHistogramUtils.cxx:2356 TQHistogramUtils.cxx:2357 TQHistogramUtils.cxx:2358 TQHistogramUtils.cxx:2359 TQHistogramUtils.cxx:2360 TQHistogramUtils.cxx:2361 TQHistogramUtils.cxx:2362 TQHistogramUtils.cxx:2363 TQHistogramUtils.cxx:2364 TQHistogramUtils.cxx:2365 TQHistogramUtils.cxx:2366 TQHistogramUtils.cxx:2367 TQHistogramUtils.cxx:2368 TQHistogramUtils.cxx:2369 TQHistogramUtils.cxx:2370 TQHistogramUtils.cxx:2371 TQHistogramUtils.cxx:2372 TQHistogramUtils.cxx:2373 TQHistogramUtils.cxx:2374 TQHistogramUtils.cxx:2375 TQHistogramUtils.cxx:2376 TQHistogramUtils.cxx:2377 TQHistogramUtils.cxx:2378 TQHistogramUtils.cxx:2379 TQHistogramUtils.cxx:2380 TQHistogramUtils.cxx:2381 TQHistogramUtils.cxx:2382 TQHistogramUtils.cxx:2383 TQHistogramUtils.cxx:2384 TQHistogramUtils.cxx:2385 TQHistogramUtils.cxx:2386 TQHistogramUtils.cxx:2387 TQHistogramUtils.cxx:2388 TQHistogramUtils.cxx:2389 TQHistogramUtils.cxx:2390 TQHistogramUtils.cxx:2391 TQHistogramUtils.cxx:2392 TQHistogramUtils.cxx:2393 TQHistogramUtils.cxx:2394 TQHistogramUtils.cxx:2395 TQHistogramUtils.cxx:2396 TQHistogramUtils.cxx:2397 TQHistogramUtils.cxx:2398 TQHistogramUtils.cxx:2399 TQHistogramUtils.cxx:2400 TQHistogramUtils.cxx:2401 TQHistogramUtils.cxx:2402 TQHistogramUtils.cxx:2403 TQHistogramUtils.cxx:2404 TQHistogramUtils.cxx:2405 TQHistogramUtils.cxx:2406 TQHistogramUtils.cxx:2407 TQHistogramUtils.cxx:2408 TQHistogramUtils.cxx:2409 TQHistogramUtils.cxx:2410 TQHistogramUtils.cxx:2411 TQHistogramUtils.cxx:2412 TQHistogramUtils.cxx:2413 TQHistogramUtils.cxx:2414 TQHistogramUtils.cxx:2415 TQHistogramUtils.cxx:2416 TQHistogramUtils.cxx:2417 TQHistogramUtils.cxx:2418 TQHistogramUtils.cxx:2419 TQHistogramUtils.cxx:2420 TQHistogramUtils.cxx:2421 TQHistogramUtils.cxx:2422 TQHistogramUtils.cxx:2423 TQHistogramUtils.cxx:2424 TQHistogramUtils.cxx:2425 TQHistogramUtils.cxx:2426 TQHistogramUtils.cxx:2427 TQHistogramUtils.cxx:2428 TQHistogramUtils.cxx:2429 TQHistogramUtils.cxx:2430 TQHistogramUtils.cxx:2431 TQHistogramUtils.cxx:2432 TQHistogramUtils.cxx:2433 TQHistogramUtils.cxx:2434 TQHistogramUtils.cxx:2435 TQHistogramUtils.cxx:2436 TQHistogramUtils.cxx:2437 TQHistogramUtils.cxx:2438 TQHistogramUtils.cxx:2439 TQHistogramUtils.cxx:2440 TQHistogramUtils.cxx:2441 TQHistogramUtils.cxx:2442 TQHistogramUtils.cxx:2443 TQHistogramUtils.cxx:2444 TQHistogramUtils.cxx:2445 TQHistogramUtils.cxx:2446 TQHistogramUtils.cxx:2447 TQHistogramUtils.cxx:2448 TQHistogramUtils.cxx:2449 TQHistogramUtils.cxx:2450 TQHistogramUtils.cxx:2451 TQHistogramUtils.cxx:2452 TQHistogramUtils.cxx:2453 TQHistogramUtils.cxx:2454 TQHistogramUtils.cxx:2455 TQHistogramUtils.cxx:2456 TQHistogramUtils.cxx:2457 TQHistogramUtils.cxx:2458 TQHistogramUtils.cxx:2459 TQHistogramUtils.cxx:2460 TQHistogramUtils.cxx:2461 TQHistogramUtils.cxx:2462 TQHistogramUtils.cxx:2463 TQHistogramUtils.cxx:2464 TQHistogramUtils.cxx:2465 TQHistogramUtils.cxx:2466 TQHistogramUtils.cxx:2467 TQHistogramUtils.cxx:2468 TQHistogramUtils.cxx:2469 TQHistogramUtils.cxx:2470 TQHistogramUtils.cxx:2471 TQHistogramUtils.cxx:2472 TQHistogramUtils.cxx:2473 TQHistogramUtils.cxx:2474 TQHistogramUtils.cxx:2475 TQHistogramUtils.cxx:2476 TQHistogramUtils.cxx:2477 TQHistogramUtils.cxx:2478 TQHistogramUtils.cxx:2479 TQHistogramUtils.cxx:2480 TQHistogramUtils.cxx:2481 TQHistogramUtils.cxx:2482 TQHistogramUtils.cxx:2483 TQHistogramUtils.cxx:2484 TQHistogramUtils.cxx:2485 TQHistogramUtils.cxx:2486 TQHistogramUtils.cxx:2487 TQHistogramUtils.cxx:2488 TQHistogramUtils.cxx:2489 TQHistogramUtils.cxx:2490 TQHistogramUtils.cxx:2491 TQHistogramUtils.cxx:2492 TQHistogramUtils.cxx:2493 TQHistogramUtils.cxx:2494 TQHistogramUtils.cxx:2495 TQHistogramUtils.cxx:2496 TQHistogramUtils.cxx:2497 TQHistogramUtils.cxx:2498 TQHistogramUtils.cxx:2499 TQHistogramUtils.cxx:2500 TQHistogramUtils.cxx:2501 TQHistogramUtils.cxx:2502 TQHistogramUtils.cxx:2503 TQHistogramUtils.cxx:2504 TQHistogramUtils.cxx:2505 TQHistogramUtils.cxx:2506 TQHistogramUtils.cxx:2507 TQHistogramUtils.cxx:2508 TQHistogramUtils.cxx:2509 TQHistogramUtils.cxx:2510 TQHistogramUtils.cxx:2511 TQHistogramUtils.cxx:2512 TQHistogramUtils.cxx:2513 TQHistogramUtils.cxx:2514 TQHistogramUtils.cxx:2515 TQHistogramUtils.cxx:2516 TQHistogramUtils.cxx:2517 TQHistogramUtils.cxx:2518 TQHistogramUtils.cxx:2519 TQHistogramUtils.cxx:2520 TQHistogramUtils.cxx:2521 TQHistogramUtils.cxx:2522 TQHistogramUtils.cxx:2523 TQHistogramUtils.cxx:2524 TQHistogramUtils.cxx:2525 TQHistogramUtils.cxx:2526 TQHistogramUtils.cxx:2527 TQHistogramUtils.cxx:2528 TQHistogramUtils.cxx:2529 TQHistogramUtils.cxx:2530 TQHistogramUtils.cxx:2531 TQHistogramUtils.cxx:2532 TQHistogramUtils.cxx:2533 TQHistogramUtils.cxx:2534 TQHistogramUtils.cxx:2535 TQHistogramUtils.cxx:2536 TQHistogramUtils.cxx:2537 TQHistogramUtils.cxx:2538 TQHistogramUtils.cxx:2539 TQHistogramUtils.cxx:2540 TQHistogramUtils.cxx:2541 TQHistogramUtils.cxx:2542 TQHistogramUtils.cxx:2543 TQHistogramUtils.cxx:2544 TQHistogramUtils.cxx:2545 TQHistogramUtils.cxx:2546 TQHistogramUtils.cxx:2547 TQHistogramUtils.cxx:2548 TQHistogramUtils.cxx:2549 TQHistogramUtils.cxx:2550 TQHistogramUtils.cxx:2551 TQHistogramUtils.cxx:2552 TQHistogramUtils.cxx:2553 TQHistogramUtils.cxx:2554 TQHistogramUtils.cxx:2555 TQHistogramUtils.cxx:2556 TQHistogramUtils.cxx:2557 TQHistogramUtils.cxx:2558 TQHistogramUtils.cxx:2559 TQHistogramUtils.cxx:2560 TQHistogramUtils.cxx:2561 TQHistogramUtils.cxx:2562 TQHistogramUtils.cxx:2563 TQHistogramUtils.cxx:2564 TQHistogramUtils.cxx:2565 TQHistogramUtils.cxx:2566 TQHistogramUtils.cxx:2567 TQHistogramUtils.cxx:2568 TQHistogramUtils.cxx:2569 TQHistogramUtils.cxx:2570 TQHistogramUtils.cxx:2571 TQHistogramUtils.cxx:2572 TQHistogramUtils.cxx:2573 TQHistogramUtils.cxx:2574 TQHistogramUtils.cxx:2575 TQHistogramUtils.cxx:2576 TQHistogramUtils.cxx:2577 TQHistogramUtils.cxx:2578 TQHistogramUtils.cxx:2579 TQHistogramUtils.cxx:2580 TQHistogramUtils.cxx:2581 TQHistogramUtils.cxx:2582 TQHistogramUtils.cxx:2583 TQHistogramUtils.cxx:2584 TQHistogramUtils.cxx:2585 TQHistogramUtils.cxx:2586 TQHistogramUtils.cxx:2587 TQHistogramUtils.cxx:2588 TQHistogramUtils.cxx:2589 TQHistogramUtils.cxx:2590 TQHistogramUtils.cxx:2591 TQHistogramUtils.cxx:2592 TQHistogramUtils.cxx:2593 TQHistogramUtils.cxx:2594 TQHistogramUtils.cxx:2595 TQHistogramUtils.cxx:2596 TQHistogramUtils.cxx:2597 TQHistogramUtils.cxx:2598 TQHistogramUtils.cxx:2599 TQHistogramUtils.cxx:2600 TQHistogramUtils.cxx:2601 TQHistogramUtils.cxx:2602 TQHistogramUtils.cxx:2603 TQHistogramUtils.cxx:2604 TQHistogramUtils.cxx:2605 TQHistogramUtils.cxx:2606 TQHistogramUtils.cxx:2607 TQHistogramUtils.cxx:2608 TQHistogramUtils.cxx:2609 TQHistogramUtils.cxx:2610 TQHistogramUtils.cxx:2611 TQHistogramUtils.cxx:2612 TQHistogramUtils.cxx:2613 TQHistogramUtils.cxx:2614 TQHistogramUtils.cxx:2615 TQHistogramUtils.cxx:2616 TQHistogramUtils.cxx:2617 TQHistogramUtils.cxx:2618 TQHistogramUtils.cxx:2619 TQHistogramUtils.cxx:2620 TQHistogramUtils.cxx:2621 TQHistogramUtils.cxx:2622 TQHistogramUtils.cxx:2623 TQHistogramUtils.cxx:2624 TQHistogramUtils.cxx:2625 TQHistogramUtils.cxx:2626 TQHistogramUtils.cxx:2627 TQHistogramUtils.cxx:2628 TQHistogramUtils.cxx:2629 TQHistogramUtils.cxx:2630 TQHistogramUtils.cxx:2631 TQHistogramUtils.cxx:2632 TQHistogramUtils.cxx:2633 TQHistogramUtils.cxx:2634 TQHistogramUtils.cxx:2635 TQHistogramUtils.cxx:2636 TQHistogramUtils.cxx:2637 TQHistogramUtils.cxx:2638 TQHistogramUtils.cxx:2639 TQHistogramUtils.cxx:2640 TQHistogramUtils.cxx:2641 TQHistogramUtils.cxx:2642 TQHistogramUtils.cxx:2643 TQHistogramUtils.cxx:2644 TQHistogramUtils.cxx:2645 TQHistogramUtils.cxx:2646 TQHistogramUtils.cxx:2647 TQHistogramUtils.cxx:2648 TQHistogramUtils.cxx:2649 TQHistogramUtils.cxx:2650 TQHistogramUtils.cxx:2651 TQHistogramUtils.cxx:2652 TQHistogramUtils.cxx:2653 TQHistogramUtils.cxx:2654 TQHistogramUtils.cxx:2655 TQHistogramUtils.cxx:2656 TQHistogramUtils.cxx:2657 TQHistogramUtils.cxx:2658 TQHistogramUtils.cxx:2659 TQHistogramUtils.cxx:2660 TQHistogramUtils.cxx:2661 TQHistogramUtils.cxx:2662 TQHistogramUtils.cxx:2663 TQHistogramUtils.cxx:2664 TQHistogramUtils.cxx:2665 TQHistogramUtils.cxx:2666 TQHistogramUtils.cxx:2667 TQHistogramUtils.cxx:2668 TQHistogramUtils.cxx:2669 TQHistogramUtils.cxx:2670 TQHistogramUtils.cxx:2671 TQHistogramUtils.cxx:2672 TQHistogramUtils.cxx:2673 TQHistogramUtils.cxx:2674 TQHistogramUtils.cxx:2675 TQHistogramUtils.cxx:2676 TQHistogramUtils.cxx:2677 TQHistogramUtils.cxx:2678 TQHistogramUtils.cxx:2679 TQHistogramUtils.cxx:2680 TQHistogramUtils.cxx:2681 TQHistogramUtils.cxx:2682 TQHistogramUtils.cxx:2683 TQHistogramUtils.cxx:2684 TQHistogramUtils.cxx:2685 TQHistogramUtils.cxx:2686 TQHistogramUtils.cxx:2687 TQHistogramUtils.cxx:2688 TQHistogramUtils.cxx:2689 TQHistogramUtils.cxx:2690 TQHistogramUtils.cxx:2691 TQHistogramUtils.cxx:2692 TQHistogramUtils.cxx:2693 TQHistogramUtils.cxx:2694 TQHistogramUtils.cxx:2695 TQHistogramUtils.cxx:2696 TQHistogramUtils.cxx:2697 TQHistogramUtils.cxx:2698 TQHistogramUtils.cxx:2699 TQHistogramUtils.cxx:2700 TQHistogramUtils.cxx:2701 TQHistogramUtils.cxx:2702 TQHistogramUtils.cxx:2703 TQHistogramUtils.cxx:2704 TQHistogramUtils.cxx:2705 TQHistogramUtils.cxx:2706 TQHistogramUtils.cxx:2707 TQHistogramUtils.cxx:2708 TQHistogramUtils.cxx:2709 TQHistogramUtils.cxx:2710 TQHistogramUtils.cxx:2711 TQHistogramUtils.cxx:2712 TQHistogramUtils.cxx:2713 TQHistogramUtils.cxx:2714 TQHistogramUtils.cxx:2715 TQHistogramUtils.cxx:2716 TQHistogramUtils.cxx:2717 TQHistogramUtils.cxx:2718 TQHistogramUtils.cxx:2719 TQHistogramUtils.cxx:2720 TQHistogramUtils.cxx:2721 TQHistogramUtils.cxx:2722 TQHistogramUtils.cxx:2723 TQHistogramUtils.cxx:2724 TQHistogramUtils.cxx:2725 TQHistogramUtils.cxx:2726 TQHistogramUtils.cxx:2727 TQHistogramUtils.cxx:2728 TQHistogramUtils.cxx:2729 TQHistogramUtils.cxx:2730 TQHistogramUtils.cxx:2731 TQHistogramUtils.cxx:2732 TQHistogramUtils.cxx:2733 TQHistogramUtils.cxx:2734 TQHistogramUtils.cxx:2735 TQHistogramUtils.cxx:2736 TQHistogramUtils.cxx:2737 TQHistogramUtils.cxx:2738 TQHistogramUtils.cxx:2739 TQHistogramUtils.cxx:2740 TQHistogramUtils.cxx:2741 TQHistogramUtils.cxx:2742 TQHistogramUtils.cxx:2743 TQHistogramUtils.cxx:2744 TQHistogramUtils.cxx:2745 TQHistogramUtils.cxx:2746 TQHistogramUtils.cxx:2747 TQHistogramUtils.cxx:2748 TQHistogramUtils.cxx:2749 TQHistogramUtils.cxx:2750 TQHistogramUtils.cxx:2751 TQHistogramUtils.cxx:2752 TQHistogramUtils.cxx:2753 TQHistogramUtils.cxx:2754 TQHistogramUtils.cxx:2755 TQHistogramUtils.cxx:2756 TQHistogramUtils.cxx:2757 TQHistogramUtils.cxx:2758 TQHistogramUtils.cxx:2759 TQHistogramUtils.cxx:2760 TQHistogramUtils.cxx:2761 TQHistogramUtils.cxx:2762 TQHistogramUtils.cxx:2763 TQHistogramUtils.cxx:2764 TQHistogramUtils.cxx:2765 TQHistogramUtils.cxx:2766 TQHistogramUtils.cxx:2767 TQHistogramUtils.cxx:2768 TQHistogramUtils.cxx:2769 TQHistogramUtils.cxx:2770 TQHistogramUtils.cxx:2771 TQHistogramUtils.cxx:2772 TQHistogramUtils.cxx:2773 TQHistogramUtils.cxx:2774 TQHistogramUtils.cxx:2775 TQHistogramUtils.cxx:2776 TQHistogramUtils.cxx:2777 TQHistogramUtils.cxx:2778 TQHistogramUtils.cxx:2779 TQHistogramUtils.cxx:2780 TQHistogramUtils.cxx:2781 TQHistogramUtils.cxx:2782 TQHistogramUtils.cxx:2783 TQHistogramUtils.cxx:2784 TQHistogramUtils.cxx:2785 TQHistogramUtils.cxx:2786 TQHistogramUtils.cxx:2787 TQHistogramUtils.cxx:2788 TQHistogramUtils.cxx:2789 TQHistogramUtils.cxx:2790 TQHistogramUtils.cxx:2791 TQHistogramUtils.cxx:2792 TQHistogramUtils.cxx:2793 TQHistogramUtils.cxx:2794 TQHistogramUtils.cxx:2795 TQHistogramUtils.cxx:2796 TQHistogramUtils.cxx:2797 TQHistogramUtils.cxx:2798 TQHistogramUtils.cxx:2799 TQHistogramUtils.cxx:2800 TQHistogramUtils.cxx:2801 TQHistogramUtils.cxx:2802 TQHistogramUtils.cxx:2803 TQHistogramUtils.cxx:2804 TQHistogramUtils.cxx:2805 TQHistogramUtils.cxx:2806 TQHistogramUtils.cxx:2807 TQHistogramUtils.cxx:2808 TQHistogramUtils.cxx:2809 TQHistogramUtils.cxx:2810 TQHistogramUtils.cxx:2811 TQHistogramUtils.cxx:2812 TQHistogramUtils.cxx:2813 TQHistogramUtils.cxx:2814 TQHistogramUtils.cxx:2815 TQHistogramUtils.cxx:2816 TQHistogramUtils.cxx:2817 TQHistogramUtils.cxx:2818 TQHistogramUtils.cxx:2819 TQHistogramUtils.cxx:2820 TQHistogramUtils.cxx:2821 TQHistogramUtils.cxx:2822 TQHistogramUtils.cxx:2823 TQHistogramUtils.cxx:2824 TQHistogramUtils.cxx:2825 TQHistogramUtils.cxx:2826 TQHistogramUtils.cxx:2827 TQHistogramUtils.cxx:2828 TQHistogramUtils.cxx:2829 TQHistogramUtils.cxx:2830 TQHistogramUtils.cxx:2831 TQHistogramUtils.cxx:2832 TQHistogramUtils.cxx:2833 TQHistogramUtils.cxx:2834 TQHistogramUtils.cxx:2835 TQHistogramUtils.cxx:2836 TQHistogramUtils.cxx:2837 TQHistogramUtils.cxx:2838 TQHistogramUtils.cxx:2839 TQHistogramUtils.cxx:2840 TQHistogramUtils.cxx:2841 TQHistogramUtils.cxx:2842 TQHistogramUtils.cxx:2843 TQHistogramUtils.cxx:2844 TQHistogramUtils.cxx:2845 TQHistogramUtils.cxx:2846 TQHistogramUtils.cxx:2847 TQHistogramUtils.cxx:2848 TQHistogramUtils.cxx:2849 TQHistogramUtils.cxx:2850 TQHistogramUtils.cxx:2851 TQHistogramUtils.cxx:2852 TQHistogramUtils.cxx:2853 TQHistogramUtils.cxx:2854 TQHistogramUtils.cxx:2855 TQHistogramUtils.cxx:2856 TQHistogramUtils.cxx:2857 TQHistogramUtils.cxx:2858 TQHistogramUtils.cxx:2859 TQHistogramUtils.cxx:2860 TQHistogramUtils.cxx:2861 TQHistogramUtils.cxx:2862 TQHistogramUtils.cxx:2863 TQHistogramUtils.cxx:2864 TQHistogramUtils.cxx:2865 TQHistogramUtils.cxx:2866 TQHistogramUtils.cxx:2867 TQHistogramUtils.cxx:2868 TQHistogramUtils.cxx:2869 TQHistogramUtils.cxx:2870 TQHistogramUtils.cxx:2871 TQHistogramUtils.cxx:2872 TQHistogramUtils.cxx:2873 TQHistogramUtils.cxx:2874 TQHistogramUtils.cxx:2875 TQHistogramUtils.cxx:2876 TQHistogramUtils.cxx:2877 TQHistogramUtils.cxx:2878 TQHistogramUtils.cxx:2879 TQHistogramUtils.cxx:2880 TQHistogramUtils.cxx:2881 TQHistogramUtils.cxx:2882 TQHistogramUtils.cxx:2883 TQHistogramUtils.cxx:2884 TQHistogramUtils.cxx:2885 TQHistogramUtils.cxx:2886 TQHistogramUtils.cxx:2887 TQHistogramUtils.cxx:2888 TQHistogramUtils.cxx:2889 TQHistogramUtils.cxx:2890 TQHistogramUtils.cxx:2891 TQHistogramUtils.cxx:2892 TQHistogramUtils.cxx:2893 TQHistogramUtils.cxx:2894 TQHistogramUtils.cxx:2895 TQHistogramUtils.cxx:2896 TQHistogramUtils.cxx:2897 TQHistogramUtils.cxx:2898 TQHistogramUtils.cxx:2899 TQHistogramUtils.cxx:2900 TQHistogramUtils.cxx:2901 TQHistogramUtils.cxx:2902 TQHistogramUtils.cxx:2903 TQHistogramUtils.cxx:2904 TQHistogramUtils.cxx:2905 TQHistogramUtils.cxx:2906 TQHistogramUtils.cxx:2907 TQHistogramUtils.cxx:2908 TQHistogramUtils.cxx:2909 TQHistogramUtils.cxx:2910 TQHistogramUtils.cxx:2911 TQHistogramUtils.cxx:2912 TQHistogramUtils.cxx:2913 TQHistogramUtils.cxx:2914 TQHistogramUtils.cxx:2915 TQHistogramUtils.cxx:2916 TQHistogramUtils.cxx:2917 TQHistogramUtils.cxx:2918 TQHistogramUtils.cxx:2919 TQHistogramUtils.cxx:2920 TQHistogramUtils.cxx:2921 TQHistogramUtils.cxx:2922 TQHistogramUtils.cxx:2923 TQHistogramUtils.cxx:2924 TQHistogramUtils.cxx:2925 TQHistogramUtils.cxx:2926 TQHistogramUtils.cxx:2927 TQHistogramUtils.cxx:2928 TQHistogramUtils.cxx:2929 TQHistogramUtils.cxx:2930 TQHistogramUtils.cxx:2931 TQHistogramUtils.cxx:2932 TQHistogramUtils.cxx:2933 TQHistogramUtils.cxx:2934 TQHistogramUtils.cxx:2935 TQHistogramUtils.cxx:2936 TQHistogramUtils.cxx:2937 TQHistogramUtils.cxx:2938 TQHistogramUtils.cxx:2939 TQHistogramUtils.cxx:2940 TQHistogramUtils.cxx:2941 TQHistogramUtils.cxx:2942 TQHistogramUtils.cxx:2943 TQHistogramUtils.cxx:2944 TQHistogramUtils.cxx:2945 TQHistogramUtils.cxx:2946 TQHistogramUtils.cxx:2947 TQHistogramUtils.cxx:2948 TQHistogramUtils.cxx:2949 TQHistogramUtils.cxx:2950 TQHistogramUtils.cxx:2951 TQHistogramUtils.cxx:2952 TQHistogramUtils.cxx:2953 TQHistogramUtils.cxx:2954 TQHistogramUtils.cxx:2955 TQHistogramUtils.cxx:2956 TQHistogramUtils.cxx:2957 TQHistogramUtils.cxx:2958 TQHistogramUtils.cxx:2959 TQHistogramUtils.cxx:2960 TQHistogramUtils.cxx:2961 TQHistogramUtils.cxx:2962 TQHistogramUtils.cxx:2963 TQHistogramUtils.cxx:2964 TQHistogramUtils.cxx:2965 TQHistogramUtils.cxx:2966 TQHistogramUtils.cxx:2967 TQHistogramUtils.cxx:2968 TQHistogramUtils.cxx:2969 TQHistogramUtils.cxx:2970 TQHistogramUtils.cxx:2971 TQHistogramUtils.cxx:2972 TQHistogramUtils.cxx:2973 TQHistogramUtils.cxx:2974 TQHistogramUtils.cxx:2975 TQHistogramUtils.cxx:2976 TQHistogramUtils.cxx:2977 TQHistogramUtils.cxx:2978 TQHistogramUtils.cxx:2979 TQHistogramUtils.cxx:2980 TQHistogramUtils.cxx:2981 TQHistogramUtils.cxx:2982 TQHistogramUtils.cxx:2983 TQHistogramUtils.cxx:2984 TQHistogramUtils.cxx:2985 TQHistogramUtils.cxx:2986 TQHistogramUtils.cxx:2987 TQHistogramUtils.cxx:2988 TQHistogramUtils.cxx:2989 TQHistogramUtils.cxx:2990 TQHistogramUtils.cxx:2991 TQHistogramUtils.cxx:2992 TQHistogramUtils.cxx:2993 TQHistogramUtils.cxx:2994 TQHistogramUtils.cxx:2995 TQHistogramUtils.cxx:2996 TQHistogramUtils.cxx:2997 TQHistogramUtils.cxx:2998 TQHistogramUtils.cxx:2999 TQHistogramUtils.cxx:3000 TQHistogramUtils.cxx:3001 TQHistogramUtils.cxx:3002 TQHistogramUtils.cxx:3003 TQHistogramUtils.cxx:3004 TQHistogramUtils.cxx:3005 TQHistogramUtils.cxx:3006 TQHistogramUtils.cxx:3007 TQHistogramUtils.cxx:3008 TQHistogramUtils.cxx:3009 TQHistogramUtils.cxx:3010 TQHistogramUtils.cxx:3011 TQHistogramUtils.cxx:3012 TQHistogramUtils.cxx:3013 TQHistogramUtils.cxx:3014 TQHistogramUtils.cxx:3015 TQHistogramUtils.cxx:3016 TQHistogramUtils.cxx:3017 TQHistogramUtils.cxx:3018 TQHistogramUtils.cxx:3019 TQHistogramUtils.cxx:3020 TQHistogramUtils.cxx:3021 TQHistogramUtils.cxx:3022 TQHistogramUtils.cxx:3023 TQHistogramUtils.cxx:3024 TQHistogramUtils.cxx:3025 TQHistogramUtils.cxx:3026 TQHistogramUtils.cxx:3027 TQHistogramUtils.cxx:3028 TQHistogramUtils.cxx:3029 TQHistogramUtils.cxx:3030 TQHistogramUtils.cxx:3031 TQHistogramUtils.cxx:3032 TQHistogramUtils.cxx:3033 TQHistogramUtils.cxx:3034 TQHistogramUtils.cxx:3035 TQHistogramUtils.cxx:3036 TQHistogramUtils.cxx:3037 TQHistogramUtils.cxx:3038 TQHistogramUtils.cxx:3039 TQHistogramUtils.cxx:3040 TQHistogramUtils.cxx:3041 TQHistogramUtils.cxx:3042 TQHistogramUtils.cxx:3043 TQHistogramUtils.cxx:3044 TQHistogramUtils.cxx:3045 TQHistogramUtils.cxx:3046 TQHistogramUtils.cxx:3047 TQHistogramUtils.cxx:3048 TQHistogramUtils.cxx:3049 TQHistogramUtils.cxx:3050 TQHistogramUtils.cxx:3051 TQHistogramUtils.cxx:3052 TQHistogramUtils.cxx:3053 TQHistogramUtils.cxx:3054 TQHistogramUtils.cxx:3055 TQHistogramUtils.cxx:3056 TQHistogramUtils.cxx:3057 TQHistogramUtils.cxx:3058 TQHistogramUtils.cxx:3059 TQHistogramUtils.cxx:3060 TQHistogramUtils.cxx:3061 TQHistogramUtils.cxx:3062 TQHistogramUtils.cxx:3063 TQHistogramUtils.cxx:3064 TQHistogramUtils.cxx:3065 TQHistogramUtils.cxx:3066 TQHistogramUtils.cxx:3067 TQHistogramUtils.cxx:3068 TQHistogramUtils.cxx:3069 TQHistogramUtils.cxx:3070 TQHistogramUtils.cxx:3071 TQHistogramUtils.cxx:3072 TQHistogramUtils.cxx:3073 TQHistogramUtils.cxx:3074 TQHistogramUtils.cxx:3075 TQHistogramUtils.cxx:3076 TQHistogramUtils.cxx:3077 TQHistogramUtils.cxx:3078 TQHistogramUtils.cxx:3079 TQHistogramUtils.cxx:3080 TQHistogramUtils.cxx:3081 TQHistogramUtils.cxx:3082 TQHistogramUtils.cxx:3083 TQHistogramUtils.cxx:3084 TQHistogramUtils.cxx:3085 TQHistogramUtils.cxx:3086 TQHistogramUtils.cxx:3087 TQHistogramUtils.cxx:3088 TQHistogramUtils.cxx:3089 TQHistogramUtils.cxx:3090 TQHistogramUtils.cxx:3091 TQHistogramUtils.cxx:3092 TQHistogramUtils.cxx:3093 TQHistogramUtils.cxx:3094 TQHistogramUtils.cxx:3095 TQHistogramUtils.cxx:3096 TQHistogramUtils.cxx:3097 TQHistogramUtils.cxx:3098 TQHistogramUtils.cxx:3099 TQHistogramUtils.cxx:3100 TQHistogramUtils.cxx:3101 TQHistogramUtils.cxx:3102 TQHistogramUtils.cxx:3103 TQHistogramUtils.cxx:3104 TQHistogramUtils.cxx:3105 TQHistogramUtils.cxx:3106 TQHistogramUtils.cxx:3107 TQHistogramUtils.cxx:3108 TQHistogramUtils.cxx:3109 TQHistogramUtils.cxx:3110 TQHistogramUtils.cxx:3111 TQHistogramUtils.cxx:3112 TQHistogramUtils.cxx:3113 TQHistogramUtils.cxx:3114 TQHistogramUtils.cxx:3115 TQHistogramUtils.cxx:3116 TQHistogramUtils.cxx:3117 TQHistogramUtils.cxx:3118 TQHistogramUtils.cxx:3119 TQHistogramUtils.cxx:3120 TQHistogramUtils.cxx:3121 TQHistogramUtils.cxx:3122 TQHistogramUtils.cxx:3123 TQHistogramUtils.cxx:3124 TQHistogramUtils.cxx:3125 TQHistogramUtils.cxx:3126 TQHistogramUtils.cxx:3127 TQHistogramUtils.cxx:3128 TQHistogramUtils.cxx:3129 TQHistogramUtils.cxx:3130 TQHistogramUtils.cxx:3131 TQHistogramUtils.cxx:3132 TQHistogramUtils.cxx:3133 TQHistogramUtils.cxx:3134 TQHistogramUtils.cxx:3135 TQHistogramUtils.cxx:3136 TQHistogramUtils.cxx:3137 TQHistogramUtils.cxx:3138 TQHistogramUtils.cxx:3139 TQHistogramUtils.cxx:3140 TQHistogramUtils.cxx:3141 TQHistogramUtils.cxx:3142 TQHistogramUtils.cxx:3143 TQHistogramUtils.cxx:3144 TQHistogramUtils.cxx:3145 TQHistogramUtils.cxx:3146 TQHistogramUtils.cxx:3147 TQHistogramUtils.cxx:3148 TQHistogramUtils.cxx:3149 TQHistogramUtils.cxx:3150 TQHistogramUtils.cxx:3151 TQHistogramUtils.cxx:3152 TQHistogramUtils.cxx:3153 TQHistogramUtils.cxx:3154 TQHistogramUtils.cxx:3155 TQHistogramUtils.cxx:3156 TQHistogramUtils.cxx:3157 TQHistogramUtils.cxx:3158 TQHistogramUtils.cxx:3159 TQHistogramUtils.cxx:3160 TQHistogramUtils.cxx:3161 TQHistogramUtils.cxx:3162 TQHistogramUtils.cxx:3163 TQHistogramUtils.cxx:3164 TQHistogramUtils.cxx:3165 TQHistogramUtils.cxx:3166 TQHistogramUtils.cxx:3167 TQHistogramUtils.cxx:3168 TQHistogramUtils.cxx:3169 TQHistogramUtils.cxx:3170 TQHistogramUtils.cxx:3171 TQHistogramUtils.cxx:3172 TQHistogramUtils.cxx:3173 TQHistogramUtils.cxx:3174 TQHistogramUtils.cxx:3175 TQHistogramUtils.cxx:3176 TQHistogramUtils.cxx:3177 TQHistogramUtils.cxx:3178 TQHistogramUtils.cxx:3179 TQHistogramUtils.cxx:3180 TQHistogramUtils.cxx:3181 TQHistogramUtils.cxx:3182 TQHistogramUtils.cxx:3183 TQHistogramUtils.cxx:3184 TQHistogramUtils.cxx:3185 TQHistogramUtils.cxx:3186 TQHistogramUtils.cxx:3187 TQHistogramUtils.cxx:3188 TQHistogramUtils.cxx:3189 TQHistogramUtils.cxx:3190 TQHistogramUtils.cxx:3191 TQHistogramUtils.cxx:3192 TQHistogramUtils.cxx:3193 TQHistogramUtils.cxx:3194 TQHistogramUtils.cxx:3195 TQHistogramUtils.cxx:3196 TQHistogramUtils.cxx:3197 TQHistogramUtils.cxx:3198 TQHistogramUtils.cxx:3199 TQHistogramUtils.cxx:3200 TQHistogramUtils.cxx:3201 TQHistogramUtils.cxx:3202 TQHistogramUtils.cxx:3203 TQHistogramUtils.cxx:3204 TQHistogramUtils.cxx:3205 TQHistogramUtils.cxx:3206 TQHistogramUtils.cxx:3207 TQHistogramUtils.cxx:3208 TQHistogramUtils.cxx:3209 TQHistogramUtils.cxx:3210 TQHistogramUtils.cxx:3211 TQHistogramUtils.cxx:3212 TQHistogramUtils.cxx:3213 TQHistogramUtils.cxx:3214 TQHistogramUtils.cxx:3215 TQHistogramUtils.cxx:3216 TQHistogramUtils.cxx:3217 TQHistogramUtils.cxx:3218 TQHistogramUtils.cxx:3219 TQHistogramUtils.cxx:3220 TQHistogramUtils.cxx:3221 TQHistogramUtils.cxx:3222 TQHistogramUtils.cxx:3223 TQHistogramUtils.cxx:3224 TQHistogramUtils.cxx:3225 TQHistogramUtils.cxx:3226 TQHistogramUtils.cxx:3227 TQHistogramUtils.cxx:3228 TQHistogramUtils.cxx:3229 TQHistogramUtils.cxx:3230 TQHistogramUtils.cxx:3231 TQHistogramUtils.cxx:3232 TQHistogramUtils.cxx:3233 TQHistogramUtils.cxx:3234 TQHistogramUtils.cxx:3235 TQHistogramUtils.cxx:3236 TQHistogramUtils.cxx:3237 TQHistogramUtils.cxx:3238 TQHistogramUtils.cxx:3239 TQHistogramUtils.cxx:3240 TQHistogramUtils.cxx:3241 TQHistogramUtils.cxx:3242 TQHistogramUtils.cxx:3243 TQHistogramUtils.cxx:3244 TQHistogramUtils.cxx:3245 TQHistogramUtils.cxx:3246 TQHistogramUtils.cxx:3247 TQHistogramUtils.cxx:3248 TQHistogramUtils.cxx:3249 TQHistogramUtils.cxx:3250 TQHistogramUtils.cxx:3251 TQHistogramUtils.cxx:3252 TQHistogramUtils.cxx:3253 TQHistogramUtils.cxx:3254 TQHistogramUtils.cxx:3255 TQHistogramUtils.cxx:3256 TQHistogramUtils.cxx:3257 TQHistogramUtils.cxx:3258 TQHistogramUtils.cxx:3259 TQHistogramUtils.cxx:3260 TQHistogramUtils.cxx:3261 TQHistogramUtils.cxx:3262 TQHistogramUtils.cxx:3263 TQHistogramUtils.cxx:3264 TQHistogramUtils.cxx:3265 TQHistogramUtils.cxx:3266 TQHistogramUtils.cxx:3267 TQHistogramUtils.cxx:3268 TQHistogramUtils.cxx:3269 TQHistogramUtils.cxx:3270 TQHistogramUtils.cxx:3271 TQHistogramUtils.cxx:3272 TQHistogramUtils.cxx:3273 TQHistogramUtils.cxx:3274 TQHistogramUtils.cxx:3275 TQHistogramUtils.cxx:3276 TQHistogramUtils.cxx:3277 TQHistogramUtils.cxx:3278 TQHistogramUtils.cxx:3279 TQHistogramUtils.cxx:3280 TQHistogramUtils.cxx:3281 TQHistogramUtils.cxx:3282 TQHistogramUtils.cxx:3283 TQHistogramUtils.cxx:3284 TQHistogramUtils.cxx:3285 TQHistogramUtils.cxx:3286 TQHistogramUtils.cxx:3287 TQHistogramUtils.cxx:3288 TQHistogramUtils.cxx:3289 TQHistogramUtils.cxx:3290 TQHistogramUtils.cxx:3291 TQHistogramUtils.cxx:3292 TQHistogramUtils.cxx:3293 TQHistogramUtils.cxx:3294 TQHistogramUtils.cxx:3295 TQHistogramUtils.cxx:3296 TQHistogramUtils.cxx:3297 TQHistogramUtils.cxx:3298 TQHistogramUtils.cxx:3299 TQHistogramUtils.cxx:3300 TQHistogramUtils.cxx:3301 TQHistogramUtils.cxx:3302 TQHistogramUtils.cxx:3303 TQHistogramUtils.cxx:3304 TQHistogramUtils.cxx:3305 TQHistogramUtils.cxx:3306 TQHistogramUtils.cxx:3307 TQHistogramUtils.cxx:3308 TQHistogramUtils.cxx:3309 TQHistogramUtils.cxx:3310 TQHistogramUtils.cxx:3311 TQHistogramUtils.cxx:3312 TQHistogramUtils.cxx:3313 TQHistogramUtils.cxx:3314 TQHistogramUtils.cxx:3315 TQHistogramUtils.cxx:3316 TQHistogramUtils.cxx:3317 TQHistogramUtils.cxx:3318 TQHistogramUtils.cxx:3319 TQHistogramUtils.cxx:3320 TQHistogramUtils.cxx:3321 TQHistogramUtils.cxx:3322 TQHistogramUtils.cxx:3323 TQHistogramUtils.cxx:3324 TQHistogramUtils.cxx:3325 TQHistogramUtils.cxx:3326 TQHistogramUtils.cxx:3327 TQHistogramUtils.cxx:3328 TQHistogramUtils.cxx:3329 TQHistogramUtils.cxx:3330 TQHistogramUtils.cxx:3331 TQHistogramUtils.cxx:3332 TQHistogramUtils.cxx:3333 TQHistogramUtils.cxx:3334 TQHistogramUtils.cxx:3335 TQHistogramUtils.cxx:3336 TQHistogramUtils.cxx:3337 TQHistogramUtils.cxx:3338 TQHistogramUtils.cxx:3339 TQHistogramUtils.cxx:3340 TQHistogramUtils.cxx:3341 TQHistogramUtils.cxx:3342 TQHistogramUtils.cxx:3343 TQHistogramUtils.cxx:3344 TQHistogramUtils.cxx:3345 TQHistogramUtils.cxx:3346 TQHistogramUtils.cxx:3347 TQHistogramUtils.cxx:3348 TQHistogramUtils.cxx:3349 TQHistogramUtils.cxx:3350 TQHistogramUtils.cxx:3351 TQHistogramUtils.cxx:3352 TQHistogramUtils.cxx:3353 TQHistogramUtils.cxx:3354 TQHistogramUtils.cxx:3355 TQHistogramUtils.cxx:3356 TQHistogramUtils.cxx:3357 TQHistogramUtils.cxx:3358 TQHistogramUtils.cxx:3359 TQHistogramUtils.cxx:3360 TQHistogramUtils.cxx:3361 TQHistogramUtils.cxx:3362 TQHistogramUtils.cxx:3363 TQHistogramUtils.cxx:3364 TQHistogramUtils.cxx:3365 TQHistogramUtils.cxx:3366 TQHistogramUtils.cxx:3367 TQHistogramUtils.cxx:3368 TQHistogramUtils.cxx:3369 TQHistogramUtils.cxx:3370 TQHistogramUtils.cxx:3371 TQHistogramUtils.cxx:3372 TQHistogramUtils.cxx:3373 TQHistogramUtils.cxx:3374 TQHistogramUtils.cxx:3375 TQHistogramUtils.cxx:3376 TQHistogramUtils.cxx:3377 TQHistogramUtils.cxx:3378 TQHistogramUtils.cxx:3379 TQHistogramUtils.cxx:3380 TQHistogramUtils.cxx:3381 TQHistogramUtils.cxx:3382 TQHistogramUtils.cxx:3383 TQHistogramUtils.cxx:3384 TQHistogramUtils.cxx:3385 TQHistogramUtils.cxx:3386 TQHistogramUtils.cxx:3387 TQHistogramUtils.cxx:3388 TQHistogramUtils.cxx:3389 TQHistogramUtils.cxx:3390 TQHistogramUtils.cxx:3391 TQHistogramUtils.cxx:3392 TQHistogramUtils.cxx:3393 TQHistogramUtils.cxx:3394 TQHistogramUtils.cxx:3395 TQHistogramUtils.cxx:3396 TQHistogramUtils.cxx:3397 TQHistogramUtils.cxx:3398 TQHistogramUtils.cxx:3399 TQHistogramUtils.cxx:3400 TQHistogramUtils.cxx:3401 TQHistogramUtils.cxx:3402 TQHistogramUtils.cxx:3403 TQHistogramUtils.cxx:3404 TQHistogramUtils.cxx:3405 TQHistogramUtils.cxx:3406 TQHistogramUtils.cxx:3407 TQHistogramUtils.cxx:3408 TQHistogramUtils.cxx:3409 TQHistogramUtils.cxx:3410 TQHistogramUtils.cxx:3411 TQHistogramUtils.cxx:3412 TQHistogramUtils.cxx:3413 TQHistogramUtils.cxx:3414 TQHistogramUtils.cxx:3415 TQHistogramUtils.cxx:3416 TQHistogramUtils.cxx:3417 TQHistogramUtils.cxx:3418 TQHistogramUtils.cxx:3419 TQHistogramUtils.cxx:3420 TQHistogramUtils.cxx:3421 TQHistogramUtils.cxx:3422 TQHistogramUtils.cxx:3423 TQHistogramUtils.cxx:3424 TQHistogramUtils.cxx:3425 TQHistogramUtils.cxx:3426 TQHistogramUtils.cxx:3427 TQHistogramUtils.cxx:3428 TQHistogramUtils.cxx:3429 TQHistogramUtils.cxx:3430 TQHistogramUtils.cxx:3431 TQHistogramUtils.cxx:3432 TQHistogramUtils.cxx:3433 TQHistogramUtils.cxx:3434 TQHistogramUtils.cxx:3435 TQHistogramUtils.cxx:3436 TQHistogramUtils.cxx:3437 TQHistogramUtils.cxx:3438 TQHistogramUtils.cxx:3439 TQHistogramUtils.cxx:3440 TQHistogramUtils.cxx:3441 TQHistogramUtils.cxx:3442 TQHistogramUtils.cxx:3443 TQHistogramUtils.cxx:3444 TQHistogramUtils.cxx:3445 TQHistogramUtils.cxx:3446 TQHistogramUtils.cxx:3447 TQHistogramUtils.cxx:3448 TQHistogramUtils.cxx:3449 TQHistogramUtils.cxx:3450 TQHistogramUtils.cxx:3451 TQHistogramUtils.cxx:3452 TQHistogramUtils.cxx:3453 TQHistogramUtils.cxx:3454 TQHistogramUtils.cxx:3455 TQHistogramUtils.cxx:3456 TQHistogramUtils.cxx:3457 TQHistogramUtils.cxx:3458 TQHistogramUtils.cxx:3459 TQHistogramUtils.cxx:3460 TQHistogramUtils.cxx:3461 TQHistogramUtils.cxx:3462 TQHistogramUtils.cxx:3463 TQHistogramUtils.cxx:3464 TQHistogramUtils.cxx:3465 TQHistogramUtils.cxx:3466 TQHistogramUtils.cxx:3467 TQHistogramUtils.cxx:3468 TQHistogramUtils.cxx:3469 TQHistogramUtils.cxx:3470 TQHistogramUtils.cxx:3471 TQHistogramUtils.cxx:3472 TQHistogramUtils.cxx:3473 TQHistogramUtils.cxx:3474 TQHistogramUtils.cxx:3475 TQHistogramUtils.cxx:3476 TQHistogramUtils.cxx:3477 TQHistogramUtils.cxx:3478 TQHistogramUtils.cxx:3479 TQHistogramUtils.cxx:3480 TQHistogramUtils.cxx:3481 TQHistogramUtils.cxx:3482 TQHistogramUtils.cxx:3483 TQHistogramUtils.cxx:3484 TQHistogramUtils.cxx:3485 TQHistogramUtils.cxx:3486 TQHistogramUtils.cxx:3487 TQHistogramUtils.cxx:3488 TQHistogramUtils.cxx:3489 TQHistogramUtils.cxx:3490 TQHistogramUtils.cxx:3491 TQHistogramUtils.cxx:3492 TQHistogramUtils.cxx:3493 TQHistogramUtils.cxx:3494 TQHistogramUtils.cxx:3495 TQHistogramUtils.cxx:3496 TQHistogramUtils.cxx:3497 TQHistogramUtils.cxx:3498 TQHistogramUtils.cxx:3499 TQHistogramUtils.cxx:3500 TQHistogramUtils.cxx:3501 TQHistogramUtils.cxx:3502 TQHistogramUtils.cxx:3503 TQHistogramUtils.cxx:3504 TQHistogramUtils.cxx:3505 TQHistogramUtils.cxx:3506 TQHistogramUtils.cxx:3507 TQHistogramUtils.cxx:3508 TQHistogramUtils.cxx:3509 TQHistogramUtils.cxx:3510 TQHistogramUtils.cxx:3511 TQHistogramUtils.cxx:3512 TQHistogramUtils.cxx:3513 TQHistogramUtils.cxx:3514 TQHistogramUtils.cxx:3515 TQHistogramUtils.cxx:3516 TQHistogramUtils.cxx:3517 TQHistogramUtils.cxx:3518 TQHistogramUtils.cxx:3519 TQHistogramUtils.cxx:3520 TQHistogramUtils.cxx:3521 TQHistogramUtils.cxx:3522 TQHistogramUtils.cxx:3523 TQHistogramUtils.cxx:3524 TQHistogramUtils.cxx:3525 TQHistogramUtils.cxx:3526 TQHistogramUtils.cxx:3527 TQHistogramUtils.cxx:3528 TQHistogramUtils.cxx:3529 TQHistogramUtils.cxx:3530 TQHistogramUtils.cxx:3531 TQHistogramUtils.cxx:3532 TQHistogramUtils.cxx:3533 TQHistogramUtils.cxx:3534 TQHistogramUtils.cxx:3535 TQHistogramUtils.cxx:3536 TQHistogramUtils.cxx:3537 TQHistogramUtils.cxx:3538 TQHistogramUtils.cxx:3539 TQHistogramUtils.cxx:3540 TQHistogramUtils.cxx:3541 TQHistogramUtils.cxx:3542 TQHistogramUtils.cxx:3543 TQHistogramUtils.cxx:3544 TQHistogramUtils.cxx:3545 TQHistogramUtils.cxx:3546 TQHistogramUtils.cxx:3547 TQHistogramUtils.cxx:3548 TQHistogramUtils.cxx:3549 TQHistogramUtils.cxx:3550 TQHistogramUtils.cxx:3551 TQHistogramUtils.cxx:3552 TQHistogramUtils.cxx:3553 TQHistogramUtils.cxx:3554 TQHistogramUtils.cxx:3555 TQHistogramUtils.cxx:3556 TQHistogramUtils.cxx:3557 TQHistogramUtils.cxx:3558 TQHistogramUtils.cxx:3559 TQHistogramUtils.cxx:3560 TQHistogramUtils.cxx:3561 TQHistogramUtils.cxx:3562 TQHistogramUtils.cxx:3563 TQHistogramUtils.cxx:3564 TQHistogramUtils.cxx:3565 TQHistogramUtils.cxx:3566 TQHistogramUtils.cxx:3567 TQHistogramUtils.cxx:3568 TQHistogramUtils.cxx:3569 TQHistogramUtils.cxx:3570 TQHistogramUtils.cxx:3571 TQHistogramUtils.cxx:3572 TQHistogramUtils.cxx:3573 TQHistogramUtils.cxx:3574 TQHistogramUtils.cxx:3575 TQHistogramUtils.cxx:3576 TQHistogramUtils.cxx:3577 TQHistogramUtils.cxx:3578 TQHistogramUtils.cxx:3579 TQHistogramUtils.cxx:3580 TQHistogramUtils.cxx:3581 TQHistogramUtils.cxx:3582 TQHistogramUtils.cxx:3583 TQHistogramUtils.cxx:3584 TQHistogramUtils.cxx:3585 TQHistogramUtils.cxx:3586 TQHistogramUtils.cxx:3587 TQHistogramUtils.cxx:3588 TQHistogramUtils.cxx:3589 TQHistogramUtils.cxx:3590 TQHistogramUtils.cxx:3591 TQHistogramUtils.cxx:3592 TQHistogramUtils.cxx:3593 TQHistogramUtils.cxx:3594 TQHistogramUtils.cxx:3595 TQHistogramUtils.cxx:3596 TQHistogramUtils.cxx:3597 TQHistogramUtils.cxx:3598 TQHistogramUtils.cxx:3599 TQHistogramUtils.cxx:3600 TQHistogramUtils.cxx:3601 TQHistogramUtils.cxx:3602 TQHistogramUtils.cxx:3603 TQHistogramUtils.cxx:3604 TQHistogramUtils.cxx:3605 TQHistogramUtils.cxx:3606 TQHistogramUtils.cxx:3607 TQHistogramUtils.cxx:3608 TQHistogramUtils.cxx:3609 TQHistogramUtils.cxx:3610 TQHistogramUtils.cxx:3611 TQHistogramUtils.cxx:3612 TQHistogramUtils.cxx:3613 TQHistogramUtils.cxx:3614 TQHistogramUtils.cxx:3615 TQHistogramUtils.cxx:3616 TQHistogramUtils.cxx:3617 TQHistogramUtils.cxx:3618 TQHistogramUtils.cxx:3619 TQHistogramUtils.cxx:3620 TQHistogramUtils.cxx:3621 TQHistogramUtils.cxx:3622 TQHistogramUtils.cxx:3623 TQHistogramUtils.cxx:3624 TQHistogramUtils.cxx:3625 TQHistogramUtils.cxx:3626 TQHistogramUtils.cxx:3627 TQHistogramUtils.cxx:3628 TQHistogramUtils.cxx:3629 TQHistogramUtils.cxx:3630 TQHistogramUtils.cxx:3631 TQHistogramUtils.cxx:3632 TQHistogramUtils.cxx:3633 TQHistogramUtils.cxx:3634 TQHistogramUtils.cxx:3635 TQHistogramUtils.cxx:3636 TQHistogramUtils.cxx:3637 TQHistogramUtils.cxx:3638 TQHistogramUtils.cxx:3639 TQHistogramUtils.cxx:3640 TQHistogramUtils.cxx:3641 TQHistogramUtils.cxx:3642 TQHistogramUtils.cxx:3643 TQHistogramUtils.cxx:3644 TQHistogramUtils.cxx:3645 TQHistogramUtils.cxx:3646 TQHistogramUtils.cxx:3647 TQHistogramUtils.cxx:3648 TQHistogramUtils.cxx:3649 TQHistogramUtils.cxx:3650 TQHistogramUtils.cxx:3651 TQHistogramUtils.cxx:3652 TQHistogramUtils.cxx:3653 TQHistogramUtils.cxx:3654 TQHistogramUtils.cxx:3655 TQHistogramUtils.cxx:3656 TQHistogramUtils.cxx:3657 TQHistogramUtils.cxx:3658 TQHistogramUtils.cxx:3659 TQHistogramUtils.cxx:3660 TQHistogramUtils.cxx:3661 TQHistogramUtils.cxx:3662 TQHistogramUtils.cxx:3663 TQHistogramUtils.cxx:3664 TQHistogramUtils.cxx:3665 TQHistogramUtils.cxx:3666 TQHistogramUtils.cxx:3667 TQHistogramUtils.cxx:3668 TQHistogramUtils.cxx:3669 TQHistogramUtils.cxx:3670 TQHistogramUtils.cxx:3671 TQHistogramUtils.cxx:3672 TQHistogramUtils.cxx:3673 TQHistogramUtils.cxx:3674 TQHistogramUtils.cxx:3675 TQHistogramUtils.cxx:3676 TQHistogramUtils.cxx:3677 TQHistogramUtils.cxx:3678 TQHistogramUtils.cxx:3679 TQHistogramUtils.cxx:3680 TQHistogramUtils.cxx:3681 TQHistogramUtils.cxx:3682 TQHistogramUtils.cxx:3683 TQHistogramUtils.cxx:3684 TQHistogramUtils.cxx:3685 TQHistogramUtils.cxx:3686 TQHistogramUtils.cxx:3687 TQHistogramUtils.cxx:3688 TQHistogramUtils.cxx:3689 TQHistogramUtils.cxx:3690 TQHistogramUtils.cxx:3691 TQHistogramUtils.cxx:3692 TQHistogramUtils.cxx:3693 TQHistogramUtils.cxx:3694 TQHistogramUtils.cxx:3695 TQHistogramUtils.cxx:3696 TQHistogramUtils.cxx:3697 TQHistogramUtils.cxx:3698 TQHistogramUtils.cxx:3699 TQHistogramUtils.cxx:3700 TQHistogramUtils.cxx:3701 TQHistogramUtils.cxx:3702 TQHistogramUtils.cxx:3703 TQHistogramUtils.cxx:3704 TQHistogramUtils.cxx:3705 TQHistogramUtils.cxx:3706 TQHistogramUtils.cxx:3707 TQHistogramUtils.cxx:3708 TQHistogramUtils.cxx:3709 TQHistogramUtils.cxx:3710 TQHistogramUtils.cxx:3711 TQHistogramUtils.cxx:3712 TQHistogramUtils.cxx:3713 TQHistogramUtils.cxx:3714 TQHistogramUtils.cxx:3715 TQHistogramUtils.cxx:3716 TQHistogramUtils.cxx:3717 TQHistogramUtils.cxx:3718 TQHistogramUtils.cxx:3719 TQHistogramUtils.cxx:3720 TQHistogramUtils.cxx:3721 TQHistogramUtils.cxx:3722 TQHistogramUtils.cxx:3723 TQHistogramUtils.cxx:3724 TQHistogramUtils.cxx:3725 TQHistogramUtils.cxx:3726 TQHistogramUtils.cxx:3727 TQHistogramUtils.cxx:3728 TQHistogramUtils.cxx:3729 TQHistogramUtils.cxx:3730 TQHistogramUtils.cxx:3731 TQHistogramUtils.cxx:3732 TQHistogramUtils.cxx:3733 TQHistogramUtils.cxx:3734 TQHistogramUtils.cxx:3735 TQHistogramUtils.cxx:3736 TQHistogramUtils.cxx:3737 TQHistogramUtils.cxx:3738 TQHistogramUtils.cxx:3739 TQHistogramUtils.cxx:3740 TQHistogramUtils.cxx:3741 TQHistogramUtils.cxx:3742 TQHistogramUtils.cxx:3743 TQHistogramUtils.cxx:3744 TQHistogramUtils.cxx:3745 TQHistogramUtils.cxx:3746 TQHistogramUtils.cxx:3747 TQHistogramUtils.cxx:3748 TQHistogramUtils.cxx:3749 TQHistogramUtils.cxx:3750 TQHistogramUtils.cxx:3751 TQHistogramUtils.cxx:3752 TQHistogramUtils.cxx:3753 TQHistogramUtils.cxx:3754 TQHistogramUtils.cxx:3755 TQHistogramUtils.cxx:3756 TQHistogramUtils.cxx:3757 TQHistogramUtils.cxx:3758 TQHistogramUtils.cxx:3759 TQHistogramUtils.cxx:3760 TQHistogramUtils.cxx:3761 TQHistogramUtils.cxx:3762 TQHistogramUtils.cxx:3763 TQHistogramUtils.cxx:3764 TQHistogramUtils.cxx:3765 TQHistogramUtils.cxx:3766 TQHistogramUtils.cxx:3767 TQHistogramUtils.cxx:3768 TQHistogramUtils.cxx:3769 TQHistogramUtils.cxx:3770 TQHistogramUtils.cxx:3771 TQHistogramUtils.cxx:3772 TQHistogramUtils.cxx:3773 TQHistogramUtils.cxx:3774 TQHistogramUtils.cxx:3775 TQHistogramUtils.cxx:3776 TQHistogramUtils.cxx:3777 TQHistogramUtils.cxx:3778 TQHistogramUtils.cxx:3779 TQHistogramUtils.cxx:3780 TQHistogramUtils.cxx:3781 TQHistogramUtils.cxx:3782 TQHistogramUtils.cxx:3783 TQHistogramUtils.cxx:3784 TQHistogramUtils.cxx:3785 TQHistogramUtils.cxx:3786 TQHistogramUtils.cxx:3787 TQHistogramUtils.cxx:3788 TQHistogramUtils.cxx:3789 TQHistogramUtils.cxx:3790 TQHistogramUtils.cxx:3791 TQHistogramUtils.cxx:3792 TQHistogramUtils.cxx:3793 TQHistogramUtils.cxx:3794 TQHistogramUtils.cxx:3795 TQHistogramUtils.cxx:3796 TQHistogramUtils.cxx:3797 TQHistogramUtils.cxx:3798 TQHistogramUtils.cxx:3799 TQHistogramUtils.cxx:3800 TQHistogramUtils.cxx:3801 TQHistogramUtils.cxx:3802 TQHistogramUtils.cxx:3803 TQHistogramUtils.cxx:3804 TQHistogramUtils.cxx:3805 TQHistogramUtils.cxx:3806 TQHistogramUtils.cxx:3807 TQHistogramUtils.cxx:3808 TQHistogramUtils.cxx:3809 TQHistogramUtils.cxx:3810 TQHistogramUtils.cxx:3811 TQHistogramUtils.cxx:3812 TQHistogramUtils.cxx:3813 TQHistogramUtils.cxx:3814 TQHistogramUtils.cxx:3815 TQHistogramUtils.cxx:3816 TQHistogramUtils.cxx:3817 TQHistogramUtils.cxx:3818 TQHistogramUtils.cxx:3819 TQHistogramUtils.cxx:3820 TQHistogramUtils.cxx:3821 TQHistogramUtils.cxx:3822 TQHistogramUtils.cxx:3823 TQHistogramUtils.cxx:3824 TQHistogramUtils.cxx:3825 TQHistogramUtils.cxx:3826 TQHistogramUtils.cxx:3827 TQHistogramUtils.cxx:3828 TQHistogramUtils.cxx:3829 TQHistogramUtils.cxx:3830 TQHistogramUtils.cxx:3831 TQHistogramUtils.cxx:3832 TQHistogramUtils.cxx:3833 TQHistogramUtils.cxx:3834 TQHistogramUtils.cxx:3835 TQHistogramUtils.cxx:3836 TQHistogramUtils.cxx:3837 TQHistogramUtils.cxx:3838 TQHistogramUtils.cxx:3839 TQHistogramUtils.cxx:3840 TQHistogramUtils.cxx:3841 TQHistogramUtils.cxx:3842 TQHistogramUtils.cxx:3843 TQHistogramUtils.cxx:3844 TQHistogramUtils.cxx:3845 TQHistogramUtils.cxx:3846 TQHistogramUtils.cxx:3847 TQHistogramUtils.cxx:3848 TQHistogramUtils.cxx:3849 TQHistogramUtils.cxx:3850 TQHistogramUtils.cxx:3851 TQHistogramUtils.cxx:3852 TQHistogramUtils.cxx:3853 TQHistogramUtils.cxx:3854 TQHistogramUtils.cxx:3855 TQHistogramUtils.cxx:3856 TQHistogramUtils.cxx:3857 TQHistogramUtils.cxx:3858 TQHistogramUtils.cxx:3859 TQHistogramUtils.cxx:3860 TQHistogramUtils.cxx:3861 TQHistogramUtils.cxx:3862 TQHistogramUtils.cxx:3863 TQHistogramUtils.cxx:3864 TQHistogramUtils.cxx:3865 TQHistogramUtils.cxx:3866 TQHistogramUtils.cxx:3867 TQHistogramUtils.cxx:3868 TQHistogramUtils.cxx:3869 TQHistogramUtils.cxx:3870 TQHistogramUtils.cxx:3871 TQHistogramUtils.cxx:3872 TQHistogramUtils.cxx:3873 TQHistogramUtils.cxx:3874 TQHistogramUtils.cxx:3875 TQHistogramUtils.cxx:3876 TQHistogramUtils.cxx:3877 TQHistogramUtils.cxx:3878 TQHistogramUtils.cxx:3879 TQHistogramUtils.cxx:3880 TQHistogramUtils.cxx:3881 TQHistogramUtils.cxx:3882 TQHistogramUtils.cxx:3883 TQHistogramUtils.cxx:3884 TQHistogramUtils.cxx:3885 TQHistogramUtils.cxx:3886 TQHistogramUtils.cxx:3887 TQHistogramUtils.cxx:3888 TQHistogramUtils.cxx:3889 TQHistogramUtils.cxx:3890 TQHistogramUtils.cxx:3891 TQHistogramUtils.cxx:3892 TQHistogramUtils.cxx:3893 TQHistogramUtils.cxx:3894 TQHistogramUtils.cxx:3895 TQHistogramUtils.cxx:3896 TQHistogramUtils.cxx:3897 TQHistogramUtils.cxx:3898 TQHistogramUtils.cxx:3899 TQHistogramUtils.cxx:3900 TQHistogramUtils.cxx:3901 TQHistogramUtils.cxx:3902 TQHistogramUtils.cxx:3903 TQHistogramUtils.cxx:3904 TQHistogramUtils.cxx:3905 TQHistogramUtils.cxx:3906 TQHistogramUtils.cxx:3907 TQHistogramUtils.cxx:3908 TQHistogramUtils.cxx:3909 TQHistogramUtils.cxx:3910 TQHistogramUtils.cxx:3911 TQHistogramUtils.cxx:3912 TQHistogramUtils.cxx:3913 TQHistogramUtils.cxx:3914 TQHistogramUtils.cxx:3915 TQHistogramUtils.cxx:3916 TQHistogramUtils.cxx:3917 TQHistogramUtils.cxx:3918 TQHistogramUtils.cxx:3919 TQHistogramUtils.cxx:3920 TQHistogramUtils.cxx:3921 TQHistogramUtils.cxx:3922 TQHistogramUtils.cxx:3923 TQHistogramUtils.cxx:3924 TQHistogramUtils.cxx:3925 TQHistogramUtils.cxx:3926 TQHistogramUtils.cxx:3927 TQHistogramUtils.cxx:3928 TQHistogramUtils.cxx:3929 TQHistogramUtils.cxx:3930 TQHistogramUtils.cxx:3931 TQHistogramUtils.cxx:3932 TQHistogramUtils.cxx:3933 TQHistogramUtils.cxx:3934 TQHistogramUtils.cxx:3935 TQHistogramUtils.cxx:3936 TQHistogramUtils.cxx:3937 TQHistogramUtils.cxx:3938 TQHistogramUtils.cxx:3939 TQHistogramUtils.cxx:3940 TQHistogramUtils.cxx:3941 TQHistogramUtils.cxx:3942 TQHistogramUtils.cxx:3943 TQHistogramUtils.cxx:3944 TQHistogramUtils.cxx:3945 TQHistogramUtils.cxx:3946 TQHistogramUtils.cxx:3947 TQHistogramUtils.cxx:3948 TQHistogramUtils.cxx:3949 TQHistogramUtils.cxx:3950 TQHistogramUtils.cxx:3951 TQHistogramUtils.cxx:3952 TQHistogramUtils.cxx:3953 TQHistogramUtils.cxx:3954 TQHistogramUtils.cxx:3955 TQHistogramUtils.cxx:3956 TQHistogramUtils.cxx:3957 TQHistogramUtils.cxx:3958 TQHistogramUtils.cxx:3959 TQHistogramUtils.cxx:3960 TQHistogramUtils.cxx:3961 TQHistogramUtils.cxx:3962 TQHistogramUtils.cxx:3963 TQHistogramUtils.cxx:3964 TQHistogramUtils.cxx:3965 TQHistogramUtils.cxx:3966 TQHistogramUtils.cxx:3967 TQHistogramUtils.cxx:3968 TQHistogramUtils.cxx:3969 TQHistogramUtils.cxx:3970 TQHistogramUtils.cxx:3971 TQHistogramUtils.cxx:3972 TQHistogramUtils.cxx:3973 TQHistogramUtils.cxx:3974 TQHistogramUtils.cxx:3975 TQHistogramUtils.cxx:3976 TQHistogramUtils.cxx:3977 TQHistogramUtils.cxx:3978 TQHistogramUtils.cxx:3979 TQHistogramUtils.cxx:3980 TQHistogramUtils.cxx:3981 TQHistogramUtils.cxx:3982 TQHistogramUtils.cxx:3983 TQHistogramUtils.cxx:3984 TQHistogramUtils.cxx:3985 TQHistogramUtils.cxx:3986 TQHistogramUtils.cxx:3987 TQHistogramUtils.cxx:3988 TQHistogramUtils.cxx:3989 TQHistogramUtils.cxx:3990 TQHistogramUtils.cxx:3991 TQHistogramUtils.cxx:3992 TQHistogramUtils.cxx:3993 TQHistogramUtils.cxx:3994 TQHistogramUtils.cxx:3995 TQHistogramUtils.cxx:3996 TQHistogramUtils.cxx:3997 TQHistogramUtils.cxx:3998 TQHistogramUtils.cxx:3999 TQHistogramUtils.cxx:4000 TQHistogramUtils.cxx:4001 TQHistogramUtils.cxx:4002 TQHistogramUtils.cxx:4003 TQHistogramUtils.cxx:4004 TQHistogramUtils.cxx:4005 TQHistogramUtils.cxx:4006 TQHistogramUtils.cxx:4007 TQHistogramUtils.cxx:4008 TQHistogramUtils.cxx:4009 TQHistogramUtils.cxx:4010 TQHistogramUtils.cxx:4011 TQHistogramUtils.cxx:4012 TQHistogramUtils.cxx:4013 TQHistogramUtils.cxx:4014 TQHistogramUtils.cxx:4015 TQHistogramUtils.cxx:4016 TQHistogramUtils.cxx:4017 TQHistogramUtils.cxx:4018 TQHistogramUtils.cxx:4019 TQHistogramUtils.cxx:4020 TQHistogramUtils.cxx:4021 TQHistogramUtils.cxx:4022 TQHistogramUtils.cxx:4023 TQHistogramUtils.cxx:4024 TQHistogramUtils.cxx:4025 TQHistogramUtils.cxx:4026 TQHistogramUtils.cxx:4027 TQHistogramUtils.cxx:4028 TQHistogramUtils.cxx:4029 TQHistogramUtils.cxx:4030 TQHistogramUtils.cxx:4031 TQHistogramUtils.cxx:4032 TQHistogramUtils.cxx:4033 TQHistogramUtils.cxx:4034 TQHistogramUtils.cxx:4035 TQHistogramUtils.cxx:4036 TQHistogramUtils.cxx:4037 TQHistogramUtils.cxx:4038 TQHistogramUtils.cxx:4039 TQHistogramUtils.cxx:4040 TQHistogramUtils.cxx:4041 TQHistogramUtils.cxx:4042 TQHistogramUtils.cxx:4043 TQHistogramUtils.cxx:4044 TQHistogramUtils.cxx:4045 TQHistogramUtils.cxx:4046 TQHistogramUtils.cxx:4047 TQHistogramUtils.cxx:4048 TQHistogramUtils.cxx:4049 TQHistogramUtils.cxx:4050 TQHistogramUtils.cxx:4051 TQHistogramUtils.cxx:4052 TQHistogramUtils.cxx:4053 TQHistogramUtils.cxx:4054 TQHistogramUtils.cxx:4055 TQHistogramUtils.cxx:4056 TQHistogramUtils.cxx:4057 TQHistogramUtils.cxx:4058 TQHistogramUtils.cxx:4059 TQHistogramUtils.cxx:4060 TQHistogramUtils.cxx:4061 TQHistogramUtils.cxx:4062 TQHistogramUtils.cxx:4063 TQHistogramUtils.cxx:4064 TQHistogramUtils.cxx:4065 TQHistogramUtils.cxx:4066 TQHistogramUtils.cxx:4067 TQHistogramUtils.cxx:4068 TQHistogramUtils.cxx:4069 TQHistogramUtils.cxx:4070 TQHistogramUtils.cxx:4071 TQHistogramUtils.cxx:4072 TQHistogramUtils.cxx:4073 TQHistogramUtils.cxx:4074 TQHistogramUtils.cxx:4075 TQHistogramUtils.cxx:4076 TQHistogramUtils.cxx:4077 TQHistogramUtils.cxx:4078 TQHistogramUtils.cxx:4079 TQHistogramUtils.cxx:4080 TQHistogramUtils.cxx:4081 TQHistogramUtils.cxx:4082 TQHistogramUtils.cxx:4083 TQHistogramUtils.cxx:4084 TQHistogramUtils.cxx:4085 TQHistogramUtils.cxx:4086 TQHistogramUtils.cxx:4087 TQHistogramUtils.cxx:4088 TQHistogramUtils.cxx:4089 TQHistogramUtils.cxx:4090 TQHistogramUtils.cxx:4091 TQHistogramUtils.cxx:4092 TQHistogramUtils.cxx:4093 TQHistogramUtils.cxx:4094 TQHistogramUtils.cxx:4095 TQHistogramUtils.cxx:4096 TQHistogramUtils.cxx:4097 TQHistogramUtils.cxx:4098 TQHistogramUtils.cxx:4099 TQHistogramUtils.cxx:4100 TQHistogramUtils.cxx:4101 TQHistogramUtils.cxx:4102 TQHistogramUtils.cxx:4103 TQHistogramUtils.cxx:4104 TQHistogramUtils.cxx:4105 TQHistogramUtils.cxx:4106 TQHistogramUtils.cxx:4107 TQHistogramUtils.cxx:4108 TQHistogramUtils.cxx:4109 TQHistogramUtils.cxx:4110 TQHistogramUtils.cxx:4111 TQHistogramUtils.cxx:4112 TQHistogramUtils.cxx:4113 TQHistogramUtils.cxx:4114 TQHistogramUtils.cxx:4115 TQHistogramUtils.cxx:4116 TQHistogramUtils.cxx:4117 TQHistogramUtils.cxx:4118 TQHistogramUtils.cxx:4119 TQHistogramUtils.cxx:4120 TQHistogramUtils.cxx:4121 TQHistogramUtils.cxx:4122 TQHistogramUtils.cxx:4123 TQHistogramUtils.cxx:4124 TQHistogramUtils.cxx:4125 TQHistogramUtils.cxx:4126 TQHistogramUtils.cxx:4127 TQHistogramUtils.cxx:4128 TQHistogramUtils.cxx:4129 TQHistogramUtils.cxx:4130 TQHistogramUtils.cxx:4131 TQHistogramUtils.cxx:4132 TQHistogramUtils.cxx:4133 TQHistogramUtils.cxx:4134 TQHistogramUtils.cxx:4135 TQHistogramUtils.cxx:4136 TQHistogramUtils.cxx:4137 TQHistogramUtils.cxx:4138 TQHistogramUtils.cxx:4139 TQHistogramUtils.cxx:4140 TQHistogramUtils.cxx:4141 TQHistogramUtils.cxx:4142 TQHistogramUtils.cxx:4143 TQHistogramUtils.cxx:4144 TQHistogramUtils.cxx:4145 TQHistogramUtils.cxx:4146 TQHistogramUtils.cxx:4147 TQHistogramUtils.cxx:4148 TQHistogramUtils.cxx:4149 TQHistogramUtils.cxx:4150 TQHistogramUtils.cxx:4151 TQHistogramUtils.cxx:4152 TQHistogramUtils.cxx:4153 TQHistogramUtils.cxx:4154 TQHistogramUtils.cxx:4155 TQHistogramUtils.cxx:4156 TQHistogramUtils.cxx:4157 TQHistogramUtils.cxx:4158 TQHistogramUtils.cxx:4159 TQHistogramUtils.cxx:4160 TQHistogramUtils.cxx:4161 TQHistogramUtils.cxx:4162 TQHistogramUtils.cxx:4163 TQHistogramUtils.cxx:4164 TQHistogramUtils.cxx:4165 TQHistogramUtils.cxx:4166 TQHistogramUtils.cxx:4167 TQHistogramUtils.cxx:4168 TQHistogramUtils.cxx:4169 TQHistogramUtils.cxx:4170 TQHistogramUtils.cxx:4171 TQHistogramUtils.cxx:4172 TQHistogramUtils.cxx:4173 TQHistogramUtils.cxx:4174 TQHistogramUtils.cxx:4175 TQHistogramUtils.cxx:4176 TQHistogramUtils.cxx:4177 TQHistogramUtils.cxx:4178 TQHistogramUtils.cxx:4179 TQHistogramUtils.cxx:4180 TQHistogramUtils.cxx:4181 TQHistogramUtils.cxx:4182 TQHistogramUtils.cxx:4183 TQHistogramUtils.cxx:4184 TQHistogramUtils.cxx:4185 TQHistogramUtils.cxx:4186 TQHistogramUtils.cxx:4187 TQHistogramUtils.cxx:4188 TQHistogramUtils.cxx:4189 TQHistogramUtils.cxx:4190 TQHistogramUtils.cxx:4191 TQHistogramUtils.cxx:4192 TQHistogramUtils.cxx:4193 TQHistogramUtils.cxx:4194 TQHistogramUtils.cxx:4195 TQHistogramUtils.cxx:4196 TQHistogramUtils.cxx:4197 TQHistogramUtils.cxx:4198 TQHistogramUtils.cxx:4199 TQHistogramUtils.cxx:4200 TQHistogramUtils.cxx:4201 TQHistogramUtils.cxx:4202 TQHistogramUtils.cxx:4203 TQHistogramUtils.cxx:4204 TQHistogramUtils.cxx:4205 TQHistogramUtils.cxx:4206 TQHistogramUtils.cxx:4207 TQHistogramUtils.cxx:4208 TQHistogramUtils.cxx:4209 TQHistogramUtils.cxx:4210 TQHistogramUtils.cxx:4211 TQHistogramUtils.cxx:4212 TQHistogramUtils.cxx:4213 TQHistogramUtils.cxx:4214 TQHistogramUtils.cxx:4215 TQHistogramUtils.cxx:4216 TQHistogramUtils.cxx:4217 TQHistogramUtils.cxx:4218 TQHistogramUtils.cxx:4219 TQHistogramUtils.cxx:4220 TQHistogramUtils.cxx:4221 TQHistogramUtils.cxx:4222 TQHistogramUtils.cxx:4223 TQHistogramUtils.cxx:4224 TQHistogramUtils.cxx:4225 TQHistogramUtils.cxx:4226 TQHistogramUtils.cxx:4227 TQHistogramUtils.cxx:4228 TQHistogramUtils.cxx:4229 TQHistogramUtils.cxx:4230 TQHistogramUtils.cxx:4231 TQHistogramUtils.cxx:4232 TQHistogramUtils.cxx:4233 TQHistogramUtils.cxx:4234 TQHistogramUtils.cxx:4235 TQHistogramUtils.cxx:4236 TQHistogramUtils.cxx:4237 TQHistogramUtils.cxx:4238 TQHistogramUtils.cxx:4239 TQHistogramUtils.cxx:4240 TQHistogramUtils.cxx:4241 TQHistogramUtils.cxx:4242 TQHistogramUtils.cxx:4243 TQHistogramUtils.cxx:4244 TQHistogramUtils.cxx:4245 TQHistogramUtils.cxx:4246 TQHistogramUtils.cxx:4247 TQHistogramUtils.cxx:4248 TQHistogramUtils.cxx:4249 TQHistogramUtils.cxx:4250 TQHistogramUtils.cxx:4251 TQHistogramUtils.cxx:4252 TQHistogramUtils.cxx:4253 TQHistogramUtils.cxx:4254 TQHistogramUtils.cxx:4255 TQHistogramUtils.cxx:4256 TQHistogramUtils.cxx:4257 TQHistogramUtils.cxx:4258 TQHistogramUtils.cxx:4259 TQHistogramUtils.cxx:4260 TQHistogramUtils.cxx:4261 TQHistogramUtils.cxx:4262 TQHistogramUtils.cxx:4263 TQHistogramUtils.cxx:4264 TQHistogramUtils.cxx:4265 TQHistogramUtils.cxx:4266 TQHistogramUtils.cxx:4267 TQHistogramUtils.cxx:4268 TQHistogramUtils.cxx:4269 TQHistogramUtils.cxx:4270 TQHistogramUtils.cxx:4271 TQHistogramUtils.cxx:4272 TQHistogramUtils.cxx:4273 TQHistogramUtils.cxx:4274 TQHistogramUtils.cxx:4275 TQHistogramUtils.cxx:4276 TQHistogramUtils.cxx:4277 TQHistogramUtils.cxx:4278 TQHistogramUtils.cxx:4279 TQHistogramUtils.cxx:4280 TQHistogramUtils.cxx:4281 TQHistogramUtils.cxx:4282 TQHistogramUtils.cxx:4283 TQHistogramUtils.cxx:4284 TQHistogramUtils.cxx:4285 TQHistogramUtils.cxx:4286 TQHistogramUtils.cxx:4287 TQHistogramUtils.cxx:4288 TQHistogramUtils.cxx:4289 TQHistogramUtils.cxx:4290 TQHistogramUtils.cxx:4291 TQHistogramUtils.cxx:4292 TQHistogramUtils.cxx:4293 TQHistogramUtils.cxx:4294 TQHistogramUtils.cxx:4295 TQHistogramUtils.cxx:4296 TQHistogramUtils.cxx:4297 TQHistogramUtils.cxx:4298 TQHistogramUtils.cxx:4299 TQHistogramUtils.cxx:4300 TQHistogramUtils.cxx:4301 TQHistogramUtils.cxx:4302 TQHistogramUtils.cxx:4303 TQHistogramUtils.cxx:4304 TQHistogramUtils.cxx:4305 TQHistogramUtils.cxx:4306 TQHistogramUtils.cxx:4307 TQHistogramUtils.cxx:4308 TQHistogramUtils.cxx:4309 TQHistogramUtils.cxx:4310 TQHistogramUtils.cxx:4311 TQHistogramUtils.cxx:4312 TQHistogramUtils.cxx:4313 TQHistogramUtils.cxx:4314 TQHistogramUtils.cxx:4315 TQHistogramUtils.cxx:4316 TQHistogramUtils.cxx:4317 TQHistogramUtils.cxx:4318 TQHistogramUtils.cxx:4319 TQHistogramUtils.cxx:4320 TQHistogramUtils.cxx:4321 TQHistogramUtils.cxx:4322 TQHistogramUtils.cxx:4323 TQHistogramUtils.cxx:4324 TQHistogramUtils.cxx:4325 TQHistogramUtils.cxx:4326 TQHistogramUtils.cxx:4327 TQHistogramUtils.cxx:4328 TQHistogramUtils.cxx:4329 TQHistogramUtils.cxx:4330 TQHistogramUtils.cxx:4331 TQHistogramUtils.cxx:4332 TQHistogramUtils.cxx:4333 TQHistogramUtils.cxx:4334 TQHistogramUtils.cxx:4335 TQHistogramUtils.cxx:4336 TQHistogramUtils.cxx:4337 TQHistogramUtils.cxx:4338 TQHistogramUtils.cxx:4339 TQHistogramUtils.cxx:4340 TQHistogramUtils.cxx:4341 TQHistogramUtils.cxx:4342 TQHistogramUtils.cxx:4343 TQHistogramUtils.cxx:4344 TQHistogramUtils.cxx:4345 TQHistogramUtils.cxx:4346 TQHistogramUtils.cxx:4347 TQHistogramUtils.cxx:4348 TQHistogramUtils.cxx:4349 TQHistogramUtils.cxx:4350 TQHistogramUtils.cxx:4351 TQHistogramUtils.cxx:4352 TQHistogramUtils.cxx:4353 TQHistogramUtils.cxx:4354 TQHistogramUtils.cxx:4355 TQHistogramUtils.cxx:4356 TQHistogramUtils.cxx:4357 TQHistogramUtils.cxx:4358 TQHistogramUtils.cxx:4359 TQHistogramUtils.cxx:4360 TQHistogramUtils.cxx:4361 TQHistogramUtils.cxx:4362 TQHistogramUtils.cxx:4363 TQHistogramUtils.cxx:4364 TQHistogramUtils.cxx:4365 TQHistogramUtils.cxx:4366 TQHistogramUtils.cxx:4367 TQHistogramUtils.cxx:4368 TQHistogramUtils.cxx:4369 TQHistogramUtils.cxx:4370 TQHistogramUtils.cxx:4371 TQHistogramUtils.cxx:4372 TQHistogramUtils.cxx:4373 TQHistogramUtils.cxx:4374 TQHistogramUtils.cxx:4375 TQHistogramUtils.cxx:4376 TQHistogramUtils.cxx:4377 TQHistogramUtils.cxx:4378 TQHistogramUtils.cxx:4379 TQHistogramUtils.cxx:4380 TQHistogramUtils.cxx:4381 TQHistogramUtils.cxx:4382 TQHistogramUtils.cxx:4383 TQHistogramUtils.cxx:4384 TQHistogramUtils.cxx:4385 TQHistogramUtils.cxx:4386 TQHistogramUtils.cxx:4387 TQHistogramUtils.cxx:4388 TQHistogramUtils.cxx:4389 TQHistogramUtils.cxx:4390 TQHistogramUtils.cxx:4391 TQHistogramUtils.cxx:4392 TQHistogramUtils.cxx:4393 TQHistogramUtils.cxx:4394 TQHistogramUtils.cxx:4395 TQHistogramUtils.cxx:4396 TQHistogramUtils.cxx:4397 TQHistogramUtils.cxx:4398 TQHistogramUtils.cxx:4399 TQHistogramUtils.cxx:4400 TQHistogramUtils.cxx:4401 TQHistogramUtils.cxx:4402 TQHistogramUtils.cxx:4403 TQHistogramUtils.cxx:4404 TQHistogramUtils.cxx:4405 TQHistogramUtils.cxx:4406 TQHistogramUtils.cxx:4407 TQHistogramUtils.cxx:4408 TQHistogramUtils.cxx:4409 TQHistogramUtils.cxx:4410 TQHistogramUtils.cxx:4411 TQHistogramUtils.cxx:4412 TQHistogramUtils.cxx:4413 TQHistogramUtils.cxx:4414 TQHistogramUtils.cxx:4415 TQHistogramUtils.cxx:4416 TQHistogramUtils.cxx:4417 TQHistogramUtils.cxx:4418 TQHistogramUtils.cxx:4419 TQHistogramUtils.cxx:4420 TQHistogramUtils.cxx:4421 TQHistogramUtils.cxx:4422 TQHistogramUtils.cxx:4423 TQHistogramUtils.cxx:4424 TQHistogramUtils.cxx:4425 TQHistogramUtils.cxx:4426 TQHistogramUtils.cxx:4427 TQHistogramUtils.cxx:4428 TQHistogramUtils.cxx:4429 TQHistogramUtils.cxx:4430 TQHistogramUtils.cxx:4431 TQHistogramUtils.cxx:4432 TQHistogramUtils.cxx:4433 TQHistogramUtils.cxx:4434 TQHistogramUtils.cxx:4435 TQHistogramUtils.cxx:4436 TQHistogramUtils.cxx:4437 TQHistogramUtils.cxx:4438 TQHistogramUtils.cxx:4439 TQHistogramUtils.cxx:4440 TQHistogramUtils.cxx:4441 TQHistogramUtils.cxx:4442 TQHistogramUtils.cxx:4443 TQHistogramUtils.cxx:4444 TQHistogramUtils.cxx:4445 TQHistogramUtils.cxx:4446 TQHistogramUtils.cxx:4447 TQHistogramUtils.cxx:4448 TQHistogramUtils.cxx:4449 TQHistogramUtils.cxx:4450 TQHistogramUtils.cxx:4451 TQHistogramUtils.cxx:4452 TQHistogramUtils.cxx:4453 TQHistogramUtils.cxx:4454 TQHistogramUtils.cxx:4455 TQHistogramUtils.cxx:4456 TQHistogramUtils.cxx:4457 TQHistogramUtils.cxx:4458 TQHistogramUtils.cxx:4459 TQHistogramUtils.cxx:4460 TQHistogramUtils.cxx:4461 TQHistogramUtils.cxx:4462 TQHistogramUtils.cxx:4463 TQHistogramUtils.cxx:4464 TQHistogramUtils.cxx:4465 TQHistogramUtils.cxx:4466 TQHistogramUtils.cxx:4467 TQHistogramUtils.cxx:4468 TQHistogramUtils.cxx:4469 TQHistogramUtils.cxx:4470 TQHistogramUtils.cxx:4471 TQHistogramUtils.cxx:4472 TQHistogramUtils.cxx:4473 TQHistogramUtils.cxx:4474 TQHistogramUtils.cxx:4475 TQHistogramUtils.cxx:4476 TQHistogramUtils.cxx:4477 TQHistogramUtils.cxx:4478 TQHistogramUtils.cxx:4479 TQHistogramUtils.cxx:4480 TQHistogramUtils.cxx:4481 TQHistogramUtils.cxx:4482 TQHistogramUtils.cxx:4483 TQHistogramUtils.cxx:4484 TQHistogramUtils.cxx:4485 TQHistogramUtils.cxx:4486 TQHistogramUtils.cxx:4487 TQHistogramUtils.cxx:4488 TQHistogramUtils.cxx:4489 TQHistogramUtils.cxx:4490 TQHistogramUtils.cxx:4491 TQHistogramUtils.cxx:4492 TQHistogramUtils.cxx:4493 TQHistogramUtils.cxx:4494 TQHistogramUtils.cxx:4495 TQHistogramUtils.cxx:4496 TQHistogramUtils.cxx:4497 TQHistogramUtils.cxx:4498 TQHistogramUtils.cxx:4499 TQHistogramUtils.cxx:4500 TQHistogramUtils.cxx:4501 TQHistogramUtils.cxx:4502 TQHistogramUtils.cxx:4503 TQHistogramUtils.cxx:4504 TQHistogramUtils.cxx:4505 TQHistogramUtils.cxx:4506 TQHistogramUtils.cxx:4507 TQHistogramUtils.cxx:4508 TQHistogramUtils.cxx:4509 TQHistogramUtils.cxx:4510 TQHistogramUtils.cxx:4511 TQHistogramUtils.cxx:4512 TQHistogramUtils.cxx:4513 TQHistogramUtils.cxx:4514 TQHistogramUtils.cxx:4515 TQHistogramUtils.cxx:4516 TQHistogramUtils.cxx:4517 TQHistogramUtils.cxx:4518 TQHistogramUtils.cxx:4519 TQHistogramUtils.cxx:4520 TQHistogramUtils.cxx:4521 TQHistogramUtils.cxx:4522 TQHistogramUtils.cxx:4523 TQHistogramUtils.cxx:4524 TQHistogramUtils.cxx:4525 TQHistogramUtils.cxx:4526 TQHistogramUtils.cxx:4527 TQHistogramUtils.cxx:4528 TQHistogramUtils.cxx:4529 TQHistogramUtils.cxx:4530 TQHistogramUtils.cxx:4531 TQHistogramUtils.cxx:4532 TQHistogramUtils.cxx:4533 TQHistogramUtils.cxx:4534 TQHistogramUtils.cxx:4535 TQHistogramUtils.cxx:4536 TQHistogramUtils.cxx:4537 TQHistogramUtils.cxx:4538 TQHistogramUtils.cxx:4539 TQHistogramUtils.cxx:4540 TQHistogramUtils.cxx:4541 TQHistogramUtils.cxx:4542 TQHistogramUtils.cxx:4543 TQHistogramUtils.cxx:4544 TQHistogramUtils.cxx:4545 TQHistogramUtils.cxx:4546 TQHistogramUtils.cxx:4547 TQHistogramUtils.cxx:4548 TQHistogramUtils.cxx:4549 TQHistogramUtils.cxx:4550 TQHistogramUtils.cxx:4551 TQHistogramUtils.cxx:4552 TQHistogramUtils.cxx:4553 TQHistogramUtils.cxx:4554 TQHistogramUtils.cxx:4555 TQHistogramUtils.cxx:4556 TQHistogramUtils.cxx:4557 TQHistogramUtils.cxx:4558 TQHistogramUtils.cxx:4559 TQHistogramUtils.cxx:4560 TQHistogramUtils.cxx:4561 TQHistogramUtils.cxx:4562 TQHistogramUtils.cxx:4563 TQHistogramUtils.cxx:4564 TQHistogramUtils.cxx:4565 TQHistogramUtils.cxx:4566 TQHistogramUtils.cxx:4567 TQHistogramUtils.cxx:4568 TQHistogramUtils.cxx:4569 TQHistogramUtils.cxx:4570 TQHistogramUtils.cxx:4571 TQHistogramUtils.cxx:4572 TQHistogramUtils.cxx:4573 TQHistogramUtils.cxx:4574 TQHistogramUtils.cxx:4575 TQHistogramUtils.cxx:4576 TQHistogramUtils.cxx:4577 TQHistogramUtils.cxx:4578 TQHistogramUtils.cxx:4579 TQHistogramUtils.cxx:4580 TQHistogramUtils.cxx:4581 TQHistogramUtils.cxx:4582 TQHistogramUtils.cxx:4583 TQHistogramUtils.cxx:4584 TQHistogramUtils.cxx:4585 TQHistogramUtils.cxx:4586 TQHistogramUtils.cxx:4587 TQHistogramUtils.cxx:4588 TQHistogramUtils.cxx:4589 TQHistogramUtils.cxx:4590 TQHistogramUtils.cxx:4591 TQHistogramUtils.cxx:4592 TQHistogramUtils.cxx:4593 TQHistogramUtils.cxx:4594 TQHistogramUtils.cxx:4595 TQHistogramUtils.cxx:4596 TQHistogramUtils.cxx:4597 TQHistogramUtils.cxx:4598 TQHistogramUtils.cxx:4599 TQHistogramUtils.cxx:4600 TQHistogramUtils.cxx:4601 TQHistogramUtils.cxx:4602 TQHistogramUtils.cxx:4603 TQHistogramUtils.cxx:4604 TQHistogramUtils.cxx:4605 TQHistogramUtils.cxx:4606 TQHistogramUtils.cxx:4607 TQHistogramUtils.cxx:4608 TQHistogramUtils.cxx:4609 TQHistogramUtils.cxx:4610 TQHistogramUtils.cxx:4611 TQHistogramUtils.cxx:4612 TQHistogramUtils.cxx:4613 TQHistogramUtils.cxx:4614 TQHistogramUtils.cxx:4615 TQHistogramUtils.cxx:4616 TQHistogramUtils.cxx:4617 TQHistogramUtils.cxx:4618 TQHistogramUtils.cxx:4619 TQHistogramUtils.cxx:4620 TQHistogramUtils.cxx:4621 TQHistogramUtils.cxx:4622 TQHistogramUtils.cxx:4623 TQHistogramUtils.cxx:4624 TQHistogramUtils.cxx:4625 TQHistogramUtils.cxx:4626 TQHistogramUtils.cxx:4627 TQHistogramUtils.cxx:4628 TQHistogramUtils.cxx:4629 TQHistogramUtils.cxx:4630 TQHistogramUtils.cxx:4631 TQHistogramUtils.cxx:4632 TQHistogramUtils.cxx:4633 TQHistogramUtils.cxx:4634 TQHistogramUtils.cxx:4635 TQHistogramUtils.cxx:4636 TQHistogramUtils.cxx:4637 TQHistogramUtils.cxx:4638 TQHistogramUtils.cxx:4639 TQHistogramUtils.cxx:4640 TQHistogramUtils.cxx:4641 TQHistogramUtils.cxx:4642 TQHistogramUtils.cxx:4643 TQHistogramUtils.cxx:4644 TQHistogramUtils.cxx:4645 TQHistogramUtils.cxx:4646 TQHistogramUtils.cxx:4647 TQHistogramUtils.cxx:4648 TQHistogramUtils.cxx:4649 TQHistogramUtils.cxx:4650 TQHistogramUtils.cxx:4651 TQHistogramUtils.cxx:4652 TQHistogramUtils.cxx:4653 TQHistogramUtils.cxx:4654 TQHistogramUtils.cxx:4655 TQHistogramUtils.cxx:4656 TQHistogramUtils.cxx:4657 TQHistogramUtils.cxx:4658 TQHistogramUtils.cxx:4659 TQHistogramUtils.cxx:4660 TQHistogramUtils.cxx:4661 TQHistogramUtils.cxx:4662 TQHistogramUtils.cxx:4663 TQHistogramUtils.cxx:4664 TQHistogramUtils.cxx:4665 TQHistogramUtils.cxx:4666 TQHistogramUtils.cxx:4667 TQHistogramUtils.cxx:4668 TQHistogramUtils.cxx:4669 TQHistogramUtils.cxx:4670 TQHistogramUtils.cxx:4671 TQHistogramUtils.cxx:4672 TQHistogramUtils.cxx:4673 TQHistogramUtils.cxx:4674 TQHistogramUtils.cxx:4675 TQHistogramUtils.cxx:4676 TQHistogramUtils.cxx:4677 TQHistogramUtils.cxx:4678 TQHistogramUtils.cxx:4679 TQHistogramUtils.cxx:4680 TQHistogramUtils.cxx:4681 TQHistogramUtils.cxx:4682 TQHistogramUtils.cxx:4683 TQHistogramUtils.cxx:4684 TQHistogramUtils.cxx:4685 TQHistogramUtils.cxx:4686 TQHistogramUtils.cxx:4687 TQHistogramUtils.cxx:4688 TQHistogramUtils.cxx:4689 TQHistogramUtils.cxx:4690 TQHistogramUtils.cxx:4691 TQHistogramUtils.cxx:4692 TQHistogramUtils.cxx:4693 TQHistogramUtils.cxx:4694 TQHistogramUtils.cxx:4695 TQHistogramUtils.cxx:4696 TQHistogramUtils.cxx:4697 TQHistogramUtils.cxx:4698 TQHistogramUtils.cxx:4699 TQHistogramUtils.cxx:4700 TQHistogramUtils.cxx:4701 TQHistogramUtils.cxx:4702 TQHistogramUtils.cxx:4703 TQHistogramUtils.cxx:4704 TQHistogramUtils.cxx:4705 TQHistogramUtils.cxx:4706 TQHistogramUtils.cxx:4707 TQHistogramUtils.cxx:4708 TQHistogramUtils.cxx:4709 TQHistogramUtils.cxx:4710 TQHistogramUtils.cxx:4711 TQHistogramUtils.cxx:4712 TQHistogramUtils.cxx:4713 TQHistogramUtils.cxx:4714 TQHistogramUtils.cxx:4715 TQHistogramUtils.cxx:4716 TQHistogramUtils.cxx:4717 TQHistogramUtils.cxx:4718 TQHistogramUtils.cxx:4719 TQHistogramUtils.cxx:4720 TQHistogramUtils.cxx:4721 TQHistogramUtils.cxx:4722 TQHistogramUtils.cxx:4723 TQHistogramUtils.cxx:4724 TQHistogramUtils.cxx:4725 TQHistogramUtils.cxx:4726 TQHistogramUtils.cxx:4727 TQHistogramUtils.cxx:4728 TQHistogramUtils.cxx:4729 TQHistogramUtils.cxx:4730 TQHistogramUtils.cxx:4731 TQHistogramUtils.cxx:4732 TQHistogramUtils.cxx:4733 TQHistogramUtils.cxx:4734 TQHistogramUtils.cxx:4735 TQHistogramUtils.cxx:4736 TQHistogramUtils.cxx:4737 TQHistogramUtils.cxx:4738 TQHistogramUtils.cxx:4739 TQHistogramUtils.cxx:4740 TQHistogramUtils.cxx:4741 TQHistogramUtils.cxx:4742 TQHistogramUtils.cxx:4743 TQHistogramUtils.cxx:4744 TQHistogramUtils.cxx:4745 TQHistogramUtils.cxx:4746 TQHistogramUtils.cxx:4747 TQHistogramUtils.cxx:4748 TQHistogramUtils.cxx:4749 TQHistogramUtils.cxx:4750 TQHistogramUtils.cxx:4751 TQHistogramUtils.cxx:4752 TQHistogramUtils.cxx:4753 TQHistogramUtils.cxx:4754 TQHistogramUtils.cxx:4755 TQHistogramUtils.cxx:4756 TQHistogramUtils.cxx:4757 TQHistogramUtils.cxx:4758 TQHistogramUtils.cxx:4759 TQHistogramUtils.cxx:4760 TQHistogramUtils.cxx:4761 TQHistogramUtils.cxx:4762 TQHistogramUtils.cxx:4763 TQHistogramUtils.cxx:4764 TQHistogramUtils.cxx:4765 TQHistogramUtils.cxx:4766 TQHistogramUtils.cxx:4767 TQHistogramUtils.cxx:4768 TQHistogramUtils.cxx:4769 TQHistogramUtils.cxx:4770 TQHistogramUtils.cxx:4771 TQHistogramUtils.cxx:4772 TQHistogramUtils.cxx:4773 TQHistogramUtils.cxx:4774 TQHistogramUtils.cxx:4775 TQHistogramUtils.cxx:4776 TQHistogramUtils.cxx:4777 TQHistogramUtils.cxx:4778 TQHistogramUtils.cxx:4779 TQHistogramUtils.cxx:4780 TQHistogramUtils.cxx:4781 TQHistogramUtils.cxx:4782 TQHistogramUtils.cxx:4783 TQHistogramUtils.cxx:4784 TQHistogramUtils.cxx:4785 TQHistogramUtils.cxx:4786 TQHistogramUtils.cxx:4787 TQHistogramUtils.cxx:4788 TQHistogramUtils.cxx:4789 TQHistogramUtils.cxx:4790 TQHistogramUtils.cxx:4791 TQHistogramUtils.cxx:4792 TQHistogramUtils.cxx:4793 TQHistogramUtils.cxx:4794 TQHistogramUtils.cxx:4795 TQHistogramUtils.cxx:4796 TQHistogramUtils.cxx:4797 TQHistogramUtils.cxx:4798 TQHistogramUtils.cxx:4799 TQHistogramUtils.cxx:4800 TQHistogramUtils.cxx:4801 TQHistogramUtils.cxx:4802 TQHistogramUtils.cxx:4803 TQHistogramUtils.cxx:4804 TQHistogramUtils.cxx:4805 TQHistogramUtils.cxx:4806 TQHistogramUtils.cxx:4807 TQHistogramUtils.cxx:4808 TQHistogramUtils.cxx:4809 TQHistogramUtils.cxx:4810 TQHistogramUtils.cxx:4811 TQHistogramUtils.cxx:4812 TQHistogramUtils.cxx:4813 TQHistogramUtils.cxx:4814 TQHistogramUtils.cxx:4815 TQHistogramUtils.cxx:4816 TQHistogramUtils.cxx:4817 TQHistogramUtils.cxx:4818 TQHistogramUtils.cxx:4819 TQHistogramUtils.cxx:4820 TQHistogramUtils.cxx:4821 TQHistogramUtils.cxx:4822 TQHistogramUtils.cxx:4823 TQHistogramUtils.cxx:4824 TQHistogramUtils.cxx:4825 TQHistogramUtils.cxx:4826 TQHistogramUtils.cxx:4827 TQHistogramUtils.cxx:4828 TQHistogramUtils.cxx:4829 TQHistogramUtils.cxx:4830 TQHistogramUtils.cxx:4831 TQHistogramUtils.cxx:4832 TQHistogramUtils.cxx:4833 TQHistogramUtils.cxx:4834 TQHistogramUtils.cxx:4835 TQHistogramUtils.cxx:4836 TQHistogramUtils.cxx:4837 TQHistogramUtils.cxx:4838 TQHistogramUtils.cxx:4839 TQHistogramUtils.cxx:4840 TQHistogramUtils.cxx:4841 TQHistogramUtils.cxx:4842 TQHistogramUtils.cxx:4843 TQHistogramUtils.cxx:4844 TQHistogramUtils.cxx:4845 TQHistogramUtils.cxx:4846 TQHistogramUtils.cxx:4847 TQHistogramUtils.cxx:4848 TQHistogramUtils.cxx:4849 TQHistogramUtils.cxx:4850 TQHistogramUtils.cxx:4851 TQHistogramUtils.cxx:4852 TQHistogramUtils.cxx:4853 TQHistogramUtils.cxx:4854 TQHistogramUtils.cxx:4855 TQHistogramUtils.cxx:4856 TQHistogramUtils.cxx:4857 TQHistogramUtils.cxx:4858 TQHistogramUtils.cxx:4859 TQHistogramUtils.cxx:4860 TQHistogramUtils.cxx:4861 TQHistogramUtils.cxx:4862 TQHistogramUtils.cxx:4863 TQHistogramUtils.cxx:4864 TQHistogramUtils.cxx:4865 TQHistogramUtils.cxx:4866 TQHistogramUtils.cxx:4867 TQHistogramUtils.cxx:4868 TQHistogramUtils.cxx:4869 TQHistogramUtils.cxx:4870 TQHistogramUtils.cxx:4871 TQHistogramUtils.cxx:4872 TQHistogramUtils.cxx:4873 TQHistogramUtils.cxx:4874 TQHistogramUtils.cxx:4875 TQHistogramUtils.cxx:4876 TQHistogramUtils.cxx:4877 TQHistogramUtils.cxx:4878 TQHistogramUtils.cxx:4879 TQHistogramUtils.cxx:4880 TQHistogramUtils.cxx:4881 TQHistogramUtils.cxx:4882 TQHistogramUtils.cxx:4883 TQHistogramUtils.cxx:4884 TQHistogramUtils.cxx:4885 TQHistogramUtils.cxx:4886 TQHistogramUtils.cxx:4887 TQHistogramUtils.cxx:4888 TQHistogramUtils.cxx:4889 TQHistogramUtils.cxx:4890 TQHistogramUtils.cxx:4891 TQHistogramUtils.cxx:4892 TQHistogramUtils.cxx:4893 TQHistogramUtils.cxx:4894 TQHistogramUtils.cxx:4895 TQHistogramUtils.cxx:4896 TQHistogramUtils.cxx:4897 TQHistogramUtils.cxx:4898 TQHistogramUtils.cxx:4899 TQHistogramUtils.cxx:4900 TQHistogramUtils.cxx:4901 TQHistogramUtils.cxx:4902 TQHistogramUtils.cxx:4903 TQHistogramUtils.cxx:4904 TQHistogramUtils.cxx:4905 TQHistogramUtils.cxx:4906 TQHistogramUtils.cxx:4907 TQHistogramUtils.cxx:4908 TQHistogramUtils.cxx:4909 TQHistogramUtils.cxx:4910 TQHistogramUtils.cxx:4911 TQHistogramUtils.cxx:4912 TQHistogramUtils.cxx:4913 TQHistogramUtils.cxx:4914 TQHistogramUtils.cxx:4915 TQHistogramUtils.cxx:4916 TQHistogramUtils.cxx:4917 TQHistogramUtils.cxx:4918 TQHistogramUtils.cxx:4919 TQHistogramUtils.cxx:4920 TQHistogramUtils.cxx:4921 TQHistogramUtils.cxx:4922 TQHistogramUtils.cxx:4923 TQHistogramUtils.cxx:4924 TQHistogramUtils.cxx:4925 TQHistogramUtils.cxx:4926 TQHistogramUtils.cxx:4927 TQHistogramUtils.cxx:4928 TQHistogramUtils.cxx:4929 TQHistogramUtils.cxx:4930 TQHistogramUtils.cxx:4931 TQHistogramUtils.cxx:4932 TQHistogramUtils.cxx:4933 TQHistogramUtils.cxx:4934 TQHistogramUtils.cxx:4935 TQHistogramUtils.cxx:4936 TQHistogramUtils.cxx:4937 TQHistogramUtils.cxx:4938 TQHistogramUtils.cxx:4939 TQHistogramUtils.cxx:4940 TQHistogramUtils.cxx:4941 TQHistogramUtils.cxx:4942 TQHistogramUtils.cxx:4943 TQHistogramUtils.cxx:4944 TQHistogramUtils.cxx:4945 TQHistogramUtils.cxx:4946 TQHistogramUtils.cxx:4947 TQHistogramUtils.cxx:4948 TQHistogramUtils.cxx:4949 TQHistogramUtils.cxx:4950 TQHistogramUtils.cxx:4951 TQHistogramUtils.cxx:4952 TQHistogramUtils.cxx:4953 TQHistogramUtils.cxx:4954 TQHistogramUtils.cxx:4955 TQHistogramUtils.cxx:4956 TQHistogramUtils.cxx:4957 TQHistogramUtils.cxx:4958 TQHistogramUtils.cxx:4959 TQHistogramUtils.cxx:4960 TQHistogramUtils.cxx:4961 TQHistogramUtils.cxx:4962 TQHistogramUtils.cxx:4963 TQHistogramUtils.cxx:4964 TQHistogramUtils.cxx:4965 TQHistogramUtils.cxx:4966 TQHistogramUtils.cxx:4967 TQHistogramUtils.cxx:4968 TQHistogramUtils.cxx:4969 TQHistogramUtils.cxx:4970 TQHistogramUtils.cxx:4971 TQHistogramUtils.cxx:4972 TQHistogramUtils.cxx:4973 TQHistogramUtils.cxx:4974 TQHistogramUtils.cxx:4975 TQHistogramUtils.cxx:4976 TQHistogramUtils.cxx:4977 TQHistogramUtils.cxx:4978 TQHistogramUtils.cxx:4979 TQHistogramUtils.cxx:4980 TQHistogramUtils.cxx:4981 TQHistogramUtils.cxx:4982 TQHistogramUtils.cxx:4983 TQHistogramUtils.cxx:4984 TQHistogramUtils.cxx:4985 TQHistogramUtils.cxx:4986 TQHistogramUtils.cxx:4987 TQHistogramUtils.cxx:4988 TQHistogramUtils.cxx:4989 TQHistogramUtils.cxx:4990 TQHistogramUtils.cxx:4991 TQHistogramUtils.cxx:4992 TQHistogramUtils.cxx:4993 TQHistogramUtils.cxx:4994 TQHistogramUtils.cxx:4995 TQHistogramUtils.cxx:4996 TQHistogramUtils.cxx:4997 TQHistogramUtils.cxx:4998 TQHistogramUtils.cxx:4999 TQHistogramUtils.cxx:5000 TQHistogramUtils.cxx:5001 TQHistogramUtils.cxx:5002 TQHistogramUtils.cxx:5003 TQHistogramUtils.cxx:5004 TQHistogramUtils.cxx:5005 TQHistogramUtils.cxx:5006 TQHistogramUtils.cxx:5007 TQHistogramUtils.cxx:5008 TQHistogramUtils.cxx:5009 TQHistogramUtils.cxx:5010 TQHistogramUtils.cxx:5011 TQHistogramUtils.cxx:5012 TQHistogramUtils.cxx:5013 TQHistogramUtils.cxx:5014 TQHistogramUtils.cxx:5015 TQHistogramUtils.cxx:5016 TQHistogramUtils.cxx:5017 TQHistogramUtils.cxx:5018 TQHistogramUtils.cxx:5019 TQHistogramUtils.cxx:5020 TQHistogramUtils.cxx:5021 TQHistogramUtils.cxx:5022 TQHistogramUtils.cxx:5023 TQHistogramUtils.cxx:5024 TQHistogramUtils.cxx:5025 TQHistogramUtils.cxx:5026 TQHistogramUtils.cxx:5027 TQHistogramUtils.cxx:5028 TQHistogramUtils.cxx:5029 TQHistogramUtils.cxx:5030 TQHistogramUtils.cxx:5031 TQHistogramUtils.cxx:5032 TQHistogramUtils.cxx:5033 TQHistogramUtils.cxx:5034 TQHistogramUtils.cxx:5035 TQHistogramUtils.cxx:5036 TQHistogramUtils.cxx:5037 TQHistogramUtils.cxx:5038 TQHistogramUtils.cxx:5039 TQHistogramUtils.cxx:5040 TQHistogramUtils.cxx:5041 TQHistogramUtils.cxx:5042 TQHistogramUtils.cxx:5043 TQHistogramUtils.cxx:5044 TQHistogramUtils.cxx:5045 TQHistogramUtils.cxx:5046 TQHistogramUtils.cxx:5047 TQHistogramUtils.cxx:5048 TQHistogramUtils.cxx:5049 TQHistogramUtils.cxx:5050 TQHistogramUtils.cxx:5051 TQHistogramUtils.cxx:5052 TQHistogramUtils.cxx:5053 TQHistogramUtils.cxx:5054 TQHistogramUtils.cxx:5055 TQHistogramUtils.cxx:5056 TQHistogramUtils.cxx:5057 TQHistogramUtils.cxx:5058 TQHistogramUtils.cxx:5059 TQHistogramUtils.cxx:5060 TQHistogramUtils.cxx:5061 TQHistogramUtils.cxx:5062 TQHistogramUtils.cxx:5063 TQHistogramUtils.cxx:5064 TQHistogramUtils.cxx:5065 TQHistogramUtils.cxx:5066 TQHistogramUtils.cxx:5067 TQHistogramUtils.cxx:5068 TQHistogramUtils.cxx:5069 TQHistogramUtils.cxx:5070 TQHistogramUtils.cxx:5071 TQHistogramUtils.cxx:5072 TQHistogramUtils.cxx:5073 TQHistogramUtils.cxx:5074 TQHistogramUtils.cxx:5075 TQHistogramUtils.cxx:5076 TQHistogramUtils.cxx:5077 TQHistogramUtils.cxx:5078 TQHistogramUtils.cxx:5079 TQHistogramUtils.cxx:5080 TQHistogramUtils.cxx:5081 TQHistogramUtils.cxx:5082 TQHistogramUtils.cxx:5083 TQHistogramUtils.cxx:5084 TQHistogramUtils.cxx:5085 TQHistogramUtils.cxx:5086 TQHistogramUtils.cxx:5087 TQHistogramUtils.cxx:5088 TQHistogramUtils.cxx:5089 TQHistogramUtils.cxx:5090 TQHistogramUtils.cxx:5091 TQHistogramUtils.cxx:5092 TQHistogramUtils.cxx:5093 TQHistogramUtils.cxx:5094 TQHistogramUtils.cxx:5095 TQHistogramUtils.cxx:5096 TQHistogramUtils.cxx:5097 TQHistogramUtils.cxx:5098 TQHistogramUtils.cxx:5099 TQHistogramUtils.cxx:5100 TQHistogramUtils.cxx:5101 TQHistogramUtils.cxx:5102 TQHistogramUtils.cxx:5103 TQHistogramUtils.cxx:5104 TQHistogramUtils.cxx:5105 TQHistogramUtils.cxx:5106 TQHistogramUtils.cxx:5107 TQHistogramUtils.cxx:5108 TQHistogramUtils.cxx:5109 TQHistogramUtils.cxx:5110 TQHistogramUtils.cxx:5111 TQHistogramUtils.cxx:5112 TQHistogramUtils.cxx:5113 TQHistogramUtils.cxx:5114 TQHistogramUtils.cxx:5115 TQHistogramUtils.cxx:5116 TQHistogramUtils.cxx:5117 TQHistogramUtils.cxx:5118 TQHistogramUtils.cxx:5119 TQHistogramUtils.cxx:5120 TQHistogramUtils.cxx:5121 TQHistogramUtils.cxx:5122 TQHistogramUtils.cxx:5123 TQHistogramUtils.cxx:5124 TQHistogramUtils.cxx:5125 TQHistogramUtils.cxx:5126 TQHistogramUtils.cxx:5127 TQHistogramUtils.cxx:5128 TQHistogramUtils.cxx:5129 TQHistogramUtils.cxx:5130 TQHistogramUtils.cxx:5131 TQHistogramUtils.cxx:5132 TQHistogramUtils.cxx:5133 TQHistogramUtils.cxx:5134 TQHistogramUtils.cxx:5135 TQHistogramUtils.cxx:5136 TQHistogramUtils.cxx:5137 TQHistogramUtils.cxx:5138 TQHistogramUtils.cxx:5139 TQHistogramUtils.cxx:5140 TQHistogramUtils.cxx:5141 TQHistogramUtils.cxx:5142 TQHistogramUtils.cxx:5143 TQHistogramUtils.cxx:5144 TQHistogramUtils.cxx:5145 TQHistogramUtils.cxx:5146 TQHistogramUtils.cxx:5147 TQHistogramUtils.cxx:5148 TQHistogramUtils.cxx:5149 TQHistogramUtils.cxx:5150 TQHistogramUtils.cxx:5151 TQHistogramUtils.cxx:5152 TQHistogramUtils.cxx:5153 TQHistogramUtils.cxx:5154 TQHistogramUtils.cxx:5155 TQHistogramUtils.cxx:5156 TQHistogramUtils.cxx:5157 TQHistogramUtils.cxx:5158 TQHistogramUtils.cxx:5159 TQHistogramUtils.cxx:5160 TQHistogramUtils.cxx:5161 TQHistogramUtils.cxx:5162 TQHistogramUtils.cxx:5163 TQHistogramUtils.cxx:5164 TQHistogramUtils.cxx:5165 TQHistogramUtils.cxx:5166 TQHistogramUtils.cxx:5167 TQHistogramUtils.cxx:5168 TQHistogramUtils.cxx:5169 TQHistogramUtils.cxx:5170 TQHistogramUtils.cxx:5171 TQHistogramUtils.cxx:5172 TQHistogramUtils.cxx:5173 TQHistogramUtils.cxx:5174 TQHistogramUtils.cxx:5175 TQHistogramUtils.cxx:5176 TQHistogramUtils.cxx:5177 TQHistogramUtils.cxx:5178 TQHistogramUtils.cxx:5179 TQHistogramUtils.cxx:5180 TQHistogramUtils.cxx:5181 TQHistogramUtils.cxx:5182 TQHistogramUtils.cxx:5183 TQHistogramUtils.cxx:5184 TQHistogramUtils.cxx:5185 TQHistogramUtils.cxx:5186 TQHistogramUtils.cxx:5187 TQHistogramUtils.cxx:5188 TQHistogramUtils.cxx:5189 TQHistogramUtils.cxx:5190 TQHistogramUtils.cxx:5191 TQHistogramUtils.cxx:5192 TQHistogramUtils.cxx:5193 TQHistogramUtils.cxx:5194 TQHistogramUtils.cxx:5195 TQHistogramUtils.cxx:5196 TQHistogramUtils.cxx:5197 TQHistogramUtils.cxx:5198 TQHistogramUtils.cxx:5199 TQHistogramUtils.cxx:5200 TQHistogramUtils.cxx:5201 TQHistogramUtils.cxx:5202 TQHistogramUtils.cxx:5203 TQHistogramUtils.cxx:5204 TQHistogramUtils.cxx:5205 TQHistogramUtils.cxx:5206 TQHistogramUtils.cxx:5207 TQHistogramUtils.cxx:5208 TQHistogramUtils.cxx:5209 TQHistogramUtils.cxx:5210 TQHistogramUtils.cxx:5211 TQHistogramUtils.cxx:5212 TQHistogramUtils.cxx:5213 TQHistogramUtils.cxx:5214 TQHistogramUtils.cxx:5215 TQHistogramUtils.cxx:5216 TQHistogramUtils.cxx:5217 TQHistogramUtils.cxx:5218 TQHistogramUtils.cxx:5219 TQHistogramUtils.cxx:5220 TQHistogramUtils.cxx:5221 TQHistogramUtils.cxx:5222 TQHistogramUtils.cxx:5223 TQHistogramUtils.cxx:5224 TQHistogramUtils.cxx:5225 TQHistogramUtils.cxx:5226 TQHistogramUtils.cxx:5227 TQHistogramUtils.cxx:5228 TQHistogramUtils.cxx:5229 TQHistogramUtils.cxx:5230 TQHistogramUtils.cxx:5231 TQHistogramUtils.cxx:5232 TQHistogramUtils.cxx:5233 TQHistogramUtils.cxx:5234 TQHistogramUtils.cxx:5235 TQHistogramUtils.cxx:5236 TQHistogramUtils.cxx:5237 TQHistogramUtils.cxx:5238 TQHistogramUtils.cxx:5239 TQHistogramUtils.cxx:5240 TQHistogramUtils.cxx:5241 TQHistogramUtils.cxx:5242 TQHistogramUtils.cxx:5243 TQHistogramUtils.cxx:5244 TQHistogramUtils.cxx:5245 TQHistogramUtils.cxx:5246 TQHistogramUtils.cxx:5247 TQHistogramUtils.cxx:5248 TQHistogramUtils.cxx:5249 TQHistogramUtils.cxx:5250 TQHistogramUtils.cxx:5251 TQHistogramUtils.cxx:5252 TQHistogramUtils.cxx:5253 TQHistogramUtils.cxx:5254 TQHistogramUtils.cxx:5255 TQHistogramUtils.cxx:5256 TQHistogramUtils.cxx:5257 TQHistogramUtils.cxx:5258 TQHistogramUtils.cxx:5259 TQHistogramUtils.cxx:5260 TQHistogramUtils.cxx:5261 TQHistogramUtils.cxx:5262 TQHistogramUtils.cxx:5263 TQHistogramUtils.cxx:5264 TQHistogramUtils.cxx:5265 TQHistogramUtils.cxx:5266 TQHistogramUtils.cxx:5267 TQHistogramUtils.cxx:5268 TQHistogramUtils.cxx:5269 TQHistogramUtils.cxx:5270 TQHistogramUtils.cxx:5271 TQHistogramUtils.cxx:5272 TQHistogramUtils.cxx:5273 TQHistogramUtils.cxx:5274 TQHistogramUtils.cxx:5275 TQHistogramUtils.cxx:5276 TQHistogramUtils.cxx:5277 TQHistogramUtils.cxx:5278 TQHistogramUtils.cxx:5279 TQHistogramUtils.cxx:5280 TQHistogramUtils.cxx:5281 TQHistogramUtils.cxx:5282 TQHistogramUtils.cxx:5283 TQHistogramUtils.cxx:5284 TQHistogramUtils.cxx:5285 TQHistogramUtils.cxx:5286 TQHistogramUtils.cxx:5287 TQHistogramUtils.cxx:5288 TQHistogramUtils.cxx:5289 TQHistogramUtils.cxx:5290 TQHistogramUtils.cxx:5291 TQHistogramUtils.cxx:5292 TQHistogramUtils.cxx:5293 TQHistogramUtils.cxx:5294 TQHistogramUtils.cxx:5295 TQHistogramUtils.cxx:5296 TQHistogramUtils.cxx:5297 TQHistogramUtils.cxx:5298 TQHistogramUtils.cxx:5299 TQHistogramUtils.cxx:5300 TQHistogramUtils.cxx:5301 TQHistogramUtils.cxx:5302 TQHistogramUtils.cxx:5303 TQHistogramUtils.cxx:5304 TQHistogramUtils.cxx:5305 TQHistogramUtils.cxx:5306 TQHistogramUtils.cxx:5307 TQHistogramUtils.cxx:5308 TQHistogramUtils.cxx:5309 TQHistogramUtils.cxx:5310 TQHistogramUtils.cxx:5311 TQHistogramUtils.cxx:5312 TQHistogramUtils.cxx:5313 TQHistogramUtils.cxx:5314 TQHistogramUtils.cxx:5315 TQHistogramUtils.cxx:5316 TQHistogramUtils.cxx:5317 TQHistogramUtils.cxx:5318 TQHistogramUtils.cxx:5319 TQHistogramUtils.cxx:5320 TQHistogramUtils.cxx:5321 TQHistogramUtils.cxx:5322 TQHistogramUtils.cxx:5323 TQHistogramUtils.cxx:5324 TQHistogramUtils.cxx:5325 TQHistogramUtils.cxx:5326 TQHistogramUtils.cxx:5327 TQHistogramUtils.cxx:5328 TQHistogramUtils.cxx:5329 TQHistogramUtils.cxx:5330 TQHistogramUtils.cxx:5331 TQHistogramUtils.cxx:5332 TQHistogramUtils.cxx:5333 TQHistogramUtils.cxx:5334 TQHistogramUtils.cxx:5335 TQHistogramUtils.cxx:5336 TQHistogramUtils.cxx:5337 TQHistogramUtils.cxx:5338 TQHistogramUtils.cxx:5339 TQHistogramUtils.cxx:5340 TQHistogramUtils.cxx:5341 TQHistogramUtils.cxx:5342 TQHistogramUtils.cxx:5343 TQHistogramUtils.cxx:5344 TQHistogramUtils.cxx:5345 TQHistogramUtils.cxx:5346 TQHistogramUtils.cxx:5347 TQHistogramUtils.cxx:5348 TQHistogramUtils.cxx:5349 TQHistogramUtils.cxx:5350 TQHistogramUtils.cxx:5351 TQHistogramUtils.cxx:5352 TQHistogramUtils.cxx:5353 TQHistogramUtils.cxx:5354 TQHistogramUtils.cxx:5355 TQHistogramUtils.cxx:5356 TQHistogramUtils.cxx:5357 TQHistogramUtils.cxx:5358 TQHistogramUtils.cxx:5359 TQHistogramUtils.cxx:5360 TQHistogramUtils.cxx:5361 TQHistogramUtils.cxx:5362 TQHistogramUtils.cxx:5363 TQHistogramUtils.cxx:5364 TQHistogramUtils.cxx:5365 TQHistogramUtils.cxx:5366 TQHistogramUtils.cxx:5367 TQHistogramUtils.cxx:5368 TQHistogramUtils.cxx:5369 TQHistogramUtils.cxx:5370 TQHistogramUtils.cxx:5371 TQHistogramUtils.cxx:5372 TQHistogramUtils.cxx:5373 TQHistogramUtils.cxx:5374 TQHistogramUtils.cxx:5375 TQHistogramUtils.cxx:5376 TQHistogramUtils.cxx:5377 TQHistogramUtils.cxx:5378 TQHistogramUtils.cxx:5379 TQHistogramUtils.cxx:5380 TQHistogramUtils.cxx:5381 TQHistogramUtils.cxx:5382 TQHistogramUtils.cxx:5383 TQHistogramUtils.cxx:5384 TQHistogramUtils.cxx:5385 TQHistogramUtils.cxx:5386 TQHistogramUtils.cxx:5387 TQHistogramUtils.cxx:5388 TQHistogramUtils.cxx:5389 TQHistogramUtils.cxx:5390 TQHistogramUtils.cxx:5391 TQHistogramUtils.cxx:5392 TQHistogramUtils.cxx:5393 TQHistogramUtils.cxx:5394 TQHistogramUtils.cxx:5395 TQHistogramUtils.cxx:5396 TQHistogramUtils.cxx:5397 TQHistogramUtils.cxx:5398 TQHistogramUtils.cxx:5399 TQHistogramUtils.cxx:5400 TQHistogramUtils.cxx:5401 TQHistogramUtils.cxx:5402 TQHistogramUtils.cxx:5403 TQHistogramUtils.cxx:5404 TQHistogramUtils.cxx:5405 TQHistogramUtils.cxx:5406 TQHistogramUtils.cxx:5407 TQHistogramUtils.cxx:5408 TQHistogramUtils.cxx:5409 TQHistogramUtils.cxx:5410 TQHistogramUtils.cxx:5411 TQHistogramUtils.cxx:5412 TQHistogramUtils.cxx:5413 TQHistogramUtils.cxx:5414 TQHistogramUtils.cxx:5415 TQHistogramUtils.cxx:5416 TQHistogramUtils.cxx:5417 TQHistogramUtils.cxx:5418 TQHistogramUtils.cxx:5419 TQHistogramUtils.cxx:5420 TQHistogramUtils.cxx:5421 TQHistogramUtils.cxx:5422 TQHistogramUtils.cxx:5423 TQHistogramUtils.cxx:5424 TQHistogramUtils.cxx:5425 TQHistogramUtils.cxx:5426 TQHistogramUtils.cxx:5427 TQHistogramUtils.cxx:5428 TQHistogramUtils.cxx:5429 TQHistogramUtils.cxx:5430 TQHistogramUtils.cxx:5431 TQHistogramUtils.cxx:5432 TQHistogramUtils.cxx:5433 TQHistogramUtils.cxx:5434 TQHistogramUtils.cxx:5435 TQHistogramUtils.cxx:5436 TQHistogramUtils.cxx:5437 TQHistogramUtils.cxx:5438 TQHistogramUtils.cxx:5439 TQHistogramUtils.cxx:5440 TQHistogramUtils.cxx:5441 TQHistogramUtils.cxx:5442 TQHistogramUtils.cxx:5443 TQHistogramUtils.cxx:5444 TQHistogramUtils.cxx:5445 TQHistogramUtils.cxx:5446 TQHistogramUtils.cxx:5447 TQHistogramUtils.cxx:5448 TQHistogramUtils.cxx:5449 TQHistogramUtils.cxx:5450 TQHistogramUtils.cxx:5451 TQHistogramUtils.cxx:5452 TQHistogramUtils.cxx:5453 TQHistogramUtils.cxx:5454 TQHistogramUtils.cxx:5455 TQHistogramUtils.cxx:5456 TQHistogramUtils.cxx:5457 TQHistogramUtils.cxx:5458 TQHistogramUtils.cxx:5459 TQHistogramUtils.cxx:5460 TQHistogramUtils.cxx:5461 TQHistogramUtils.cxx:5462 TQHistogramUtils.cxx:5463 TQHistogramUtils.cxx:5464 TQHistogramUtils.cxx:5465 TQHistogramUtils.cxx:5466 TQHistogramUtils.cxx:5467 TQHistogramUtils.cxx:5468 TQHistogramUtils.cxx:5469 TQHistogramUtils.cxx:5470 TQHistogramUtils.cxx:5471 TQHistogramUtils.cxx:5472 TQHistogramUtils.cxx:5473 TQHistogramUtils.cxx:5474 TQHistogramUtils.cxx:5475 TQHistogramUtils.cxx:5476 TQHistogramUtils.cxx:5477 TQHistogramUtils.cxx:5478 TQHistogramUtils.cxx:5479 TQHistogramUtils.cxx:5480 TQHistogramUtils.cxx:5481 TQHistogramUtils.cxx:5482 TQHistogramUtils.cxx:5483 TQHistogramUtils.cxx:5484 TQHistogramUtils.cxx:5485 TQHistogramUtils.cxx:5486 TQHistogramUtils.cxx:5487 TQHistogramUtils.cxx:5488 TQHistogramUtils.cxx:5489 TQHistogramUtils.cxx:5490 TQHistogramUtils.cxx:5491 TQHistogramUtils.cxx:5492 TQHistogramUtils.cxx:5493 TQHistogramUtils.cxx:5494 TQHistogramUtils.cxx:5495 TQHistogramUtils.cxx:5496 TQHistogramUtils.cxx:5497 TQHistogramUtils.cxx:5498 TQHistogramUtils.cxx:5499 TQHistogramUtils.cxx:5500 TQHistogramUtils.cxx:5501 TQHistogramUtils.cxx:5502 TQHistogramUtils.cxx:5503 TQHistogramUtils.cxx:5504 TQHistogramUtils.cxx:5505 TQHistogramUtils.cxx:5506 TQHistogramUtils.cxx:5507 TQHistogramUtils.cxx:5508 TQHistogramUtils.cxx:5509 TQHistogramUtils.cxx:5510 TQHistogramUtils.cxx:5511 TQHistogramUtils.cxx:5512 TQHistogramUtils.cxx:5513 TQHistogramUtils.cxx:5514 TQHistogramUtils.cxx:5515 TQHistogramUtils.cxx:5516 TQHistogramUtils.cxx:5517 TQHistogramUtils.cxx:5518 TQHistogramUtils.cxx:5519 TQHistogramUtils.cxx:5520 TQHistogramUtils.cxx:5521 TQHistogramUtils.cxx:5522 TQHistogramUtils.cxx:5523 TQHistogramUtils.cxx:5524 TQHistogramUtils.cxx:5525 TQHistogramUtils.cxx:5526 TQHistogramUtils.cxx:5527 TQHistogramUtils.cxx:5528 TQHistogramUtils.cxx:5529 TQHistogramUtils.cxx:5530 TQHistogramUtils.cxx:5531 TQHistogramUtils.cxx:5532 TQHistogramUtils.cxx:5533 TQHistogramUtils.cxx:5534 TQHistogramUtils.cxx:5535 TQHistogramUtils.cxx:5536 TQHistogramUtils.cxx:5537 TQHistogramUtils.cxx:5538 TQHistogramUtils.cxx:5539 TQHistogramUtils.cxx:5540 TQHistogramUtils.cxx:5541 TQHistogramUtils.cxx:5542 TQHistogramUtils.cxx:5543 TQHistogramUtils.cxx:5544 TQHistogramUtils.cxx:5545 TQHistogramUtils.cxx:5546 TQHistogramUtils.cxx:5547 TQHistogramUtils.cxx:5548 TQHistogramUtils.cxx:5549 TQHistogramUtils.cxx:5550 TQHistogramUtils.cxx:5551 TQHistogramUtils.cxx:5552 TQHistogramUtils.cxx:5553 TQHistogramUtils.cxx:5554 TQHistogramUtils.cxx:5555 TQHistogramUtils.cxx:5556 TQHistogramUtils.cxx:5557 TQHistogramUtils.cxx:5558 TQHistogramUtils.cxx:5559 TQHistogramUtils.cxx:5560 TQHistogramUtils.cxx:5561 TQHistogramUtils.cxx:5562 TQHistogramUtils.cxx:5563 TQHistogramUtils.cxx:5564 TQHistogramUtils.cxx:5565 TQHistogramUtils.cxx:5566 TQHistogramUtils.cxx:5567 TQHistogramUtils.cxx:5568 TQHistogramUtils.cxx:5569 TQHistogramUtils.cxx:5570 TQHistogramUtils.cxx:5571 TQHistogramUtils.cxx:5572 TQHistogramUtils.cxx:5573 TQHistogramUtils.cxx:5574 TQHistogramUtils.cxx:5575 TQHistogramUtils.cxx:5576 TQHistogramUtils.cxx:5577 TQHistogramUtils.cxx:5578 TQHistogramUtils.cxx:5579 TQHistogramUtils.cxx:5580 TQHistogramUtils.cxx:5581 TQHistogramUtils.cxx:5582 TQHistogramUtils.cxx:5583 TQHistogramUtils.cxx:5584 TQHistogramUtils.cxx:5585 TQHistogramUtils.cxx:5586 TQHistogramUtils.cxx:5587 TQHistogramUtils.cxx:5588 TQHistogramUtils.cxx:5589 TQHistogramUtils.cxx:5590 TQHistogramUtils.cxx:5591 TQHistogramUtils.cxx:5592 TQHistogramUtils.cxx:5593 TQHistogramUtils.cxx:5594 TQHistogramUtils.cxx:5595 TQHistogramUtils.cxx:5596 TQHistogramUtils.cxx:5597 TQHistogramUtils.cxx:5598 TQHistogramUtils.cxx:5599 TQHistogramUtils.cxx:5600 TQHistogramUtils.cxx:5601 TQHistogramUtils.cxx:5602 TQHistogramUtils.cxx:5603 TQHistogramUtils.cxx:5604 TQHistogramUtils.cxx:5605 TQHistogramUtils.cxx:5606 TQHistogramUtils.cxx:5607 TQHistogramUtils.cxx:5608 TQHistogramUtils.cxx:5609 TQHistogramUtils.cxx:5610 TQHistogramUtils.cxx:5611 TQHistogramUtils.cxx:5612 TQHistogramUtils.cxx:5613 TQHistogramUtils.cxx:5614 TQHistogramUtils.cxx:5615 TQHistogramUtils.cxx:5616 TQHistogramUtils.cxx:5617 TQHistogramUtils.cxx:5618 TQHistogramUtils.cxx:5619 TQHistogramUtils.cxx:5620 TQHistogramUtils.cxx:5621 TQHistogramUtils.cxx:5622 TQHistogramUtils.cxx:5623 TQHistogramUtils.cxx:5624 TQHistogramUtils.cxx:5625 TQHistogramUtils.cxx:5626 TQHistogramUtils.cxx:5627 TQHistogramUtils.cxx:5628 TQHistogramUtils.cxx:5629 TQHistogramUtils.cxx:5630 TQHistogramUtils.cxx:5631 TQHistogramUtils.cxx:5632 TQHistogramUtils.cxx:5633 TQHistogramUtils.cxx:5634 TQHistogramUtils.cxx:5635 TQHistogramUtils.cxx:5636 TQHistogramUtils.cxx:5637 TQHistogramUtils.cxx:5638 TQHistogramUtils.cxx:5639 TQHistogramUtils.cxx:5640 TQHistogramUtils.cxx:5641 TQHistogramUtils.cxx:5642 TQHistogramUtils.cxx:5643 TQHistogramUtils.cxx:5644 TQHistogramUtils.cxx:5645 TQHistogramUtils.cxx:5646 TQHistogramUtils.cxx:5647 TQHistogramUtils.cxx:5648 TQHistogramUtils.cxx:5649 TQHistogramUtils.cxx:5650 TQHistogramUtils.cxx:5651 TQHistogramUtils.cxx:5652 TQHistogramUtils.cxx:5653 TQHistogramUtils.cxx:5654 TQHistogramUtils.cxx:5655 TQHistogramUtils.cxx:5656 TQHistogramUtils.cxx:5657 TQHistogramUtils.cxx:5658 TQHistogramUtils.cxx:5659 TQHistogramUtils.cxx:5660 TQHistogramUtils.cxx:5661 TQHistogramUtils.cxx:5662 TQHistogramUtils.cxx:5663 TQHistogramUtils.cxx:5664 TQHistogramUtils.cxx:5665 TQHistogramUtils.cxx:5666 TQHistogramUtils.cxx:5667 TQHistogramUtils.cxx:5668 TQHistogramUtils.cxx:5669 TQHistogramUtils.cxx:5670 TQHistogramUtils.cxx:5671 TQHistogramUtils.cxx:5672 TQHistogramUtils.cxx:5673 TQHistogramUtils.cxx:5674 TQHistogramUtils.cxx:5675 TQHistogramUtils.cxx:5676 TQHistogramUtils.cxx:5677 TQHistogramUtils.cxx:5678 TQHistogramUtils.cxx:5679 TQHistogramUtils.cxx:5680 TQHistogramUtils.cxx:5681 TQHistogramUtils.cxx:5682 TQHistogramUtils.cxx:5683 TQHistogramUtils.cxx:5684 TQHistogramUtils.cxx:5685 TQHistogramUtils.cxx:5686 TQHistogramUtils.cxx:5687 TQHistogramUtils.cxx:5688 TQHistogramUtils.cxx:5689 TQHistogramUtils.cxx:5690 TQHistogramUtils.cxx:5691 TQHistogramUtils.cxx:5692 TQHistogramUtils.cxx:5693 TQHistogramUtils.cxx:5694 TQHistogramUtils.cxx:5695 TQHistogramUtils.cxx:5696 TQHistogramUtils.cxx:5697 TQHistogramUtils.cxx:5698 TQHistogramUtils.cxx:5699 TQHistogramUtils.cxx:5700 TQHistogramUtils.cxx:5701 TQHistogramUtils.cxx:5702 TQHistogramUtils.cxx:5703 TQHistogramUtils.cxx:5704 TQHistogramUtils.cxx:5705 TQHistogramUtils.cxx:5706 TQHistogramUtils.cxx:5707 TQHistogramUtils.cxx:5708 TQHistogramUtils.cxx:5709 TQHistogramUtils.cxx:5710 TQHistogramUtils.cxx:5711 TQHistogramUtils.cxx:5712 TQHistogramUtils.cxx:5713 TQHistogramUtils.cxx:5714 TQHistogramUtils.cxx:5715 TQHistogramUtils.cxx:5716 TQHistogramUtils.cxx:5717 TQHistogramUtils.cxx:5718 TQHistogramUtils.cxx:5719 TQHistogramUtils.cxx:5720 TQHistogramUtils.cxx:5721 TQHistogramUtils.cxx:5722 TQHistogramUtils.cxx:5723 TQHistogramUtils.cxx:5724 TQHistogramUtils.cxx:5725 TQHistogramUtils.cxx:5726 TQHistogramUtils.cxx:5727 TQHistogramUtils.cxx:5728 TQHistogramUtils.cxx:5729 TQHistogramUtils.cxx:5730 TQHistogramUtils.cxx:5731 TQHistogramUtils.cxx:5732 TQHistogramUtils.cxx:5733 TQHistogramUtils.cxx:5734 TQHistogramUtils.cxx:5735 TQHistogramUtils.cxx:5736 TQHistogramUtils.cxx:5737 TQHistogramUtils.cxx:5738 TQHistogramUtils.cxx:5739 TQHistogramUtils.cxx:5740 TQHistogramUtils.cxx:5741 TQHistogramUtils.cxx:5742 TQHistogramUtils.cxx:5743 TQHistogramUtils.cxx:5744 TQHistogramUtils.cxx:5745 TQHistogramUtils.cxx:5746 TQHistogramUtils.cxx:5747 TQHistogramUtils.cxx:5748 TQHistogramUtils.cxx:5749 TQHistogramUtils.cxx:5750 TQHistogramUtils.cxx:5751 TQHistogramUtils.cxx:5752 TQHistogramUtils.cxx:5753 TQHistogramUtils.cxx:5754 TQHistogramUtils.cxx:5755 TQHistogramUtils.cxx:5756 TQHistogramUtils.cxx:5757 TQHistogramUtils.cxx:5758 TQHistogramUtils.cxx:5759 TQHistogramUtils.cxx:5760 TQHistogramUtils.cxx:5761 TQHistogramUtils.cxx:5762 TQHistogramUtils.cxx:5763 TQHistogramUtils.cxx:5764 TQHistogramUtils.cxx:5765 TQHistogramUtils.cxx:5766 TQHistogramUtils.cxx:5767 TQHistogramUtils.cxx:5768 TQHistogramUtils.cxx:5769 TQHistogramUtils.cxx:5770 TQHistogramUtils.cxx:5771 TQHistogramUtils.cxx:5772 TQHistogramUtils.cxx:5773 TQHistogramUtils.cxx:5774 TQHistogramUtils.cxx:5775 TQHistogramUtils.cxx:5776 TQHistogramUtils.cxx:5777 TQHistogramUtils.cxx:5778 TQHistogramUtils.cxx:5779 TQHistogramUtils.cxx:5780 TQHistogramUtils.cxx:5781 TQHistogramUtils.cxx:5782 TQHistogramUtils.cxx:5783 TQHistogramUtils.cxx:5784 TQHistogramUtils.cxx:5785 TQHistogramUtils.cxx:5786 TQHistogramUtils.cxx:5787 TQHistogramUtils.cxx:5788 TQHistogramUtils.cxx:5789 TQHistogramUtils.cxx:5790 TQHistogramUtils.cxx:5791 TQHistogramUtils.cxx:5792 TQHistogramUtils.cxx:5793 TQHistogramUtils.cxx:5794 TQHistogramUtils.cxx:5795 TQHistogramUtils.cxx:5796 TQHistogramUtils.cxx:5797 TQHistogramUtils.cxx:5798 TQHistogramUtils.cxx:5799 TQHistogramUtils.cxx:5800 TQHistogramUtils.cxx:5801 TQHistogramUtils.cxx:5802 TQHistogramUtils.cxx:5803 TQHistogramUtils.cxx:5804 TQHistogramUtils.cxx:5805 TQHistogramUtils.cxx:5806 TQHistogramUtils.cxx:5807 TQHistogramUtils.cxx:5808 TQHistogramUtils.cxx:5809 TQHistogramUtils.cxx:5810 TQHistogramUtils.cxx:5811 TQHistogramUtils.cxx:5812 TQHistogramUtils.cxx:5813 TQHistogramUtils.cxx:5814 TQHistogramUtils.cxx:5815 TQHistogramUtils.cxx:5816 TQHistogramUtils.cxx:5817 TQHistogramUtils.cxx:5818 TQHistogramUtils.cxx:5819 TQHistogramUtils.cxx:5820 TQHistogramUtils.cxx:5821 TQHistogramUtils.cxx:5822 TQHistogramUtils.cxx:5823 TQHistogramUtils.cxx:5824 TQHistogramUtils.cxx:5825 TQHistogramUtils.cxx:5826 TQHistogramUtils.cxx:5827 TQHistogramUtils.cxx:5828 TQHistogramUtils.cxx:5829 TQHistogramUtils.cxx:5830 TQHistogramUtils.cxx:5831 TQHistogramUtils.cxx:5832 TQHistogramUtils.cxx:5833 TQHistogramUtils.cxx:5834 TQHistogramUtils.cxx:5835 TQHistogramUtils.cxx:5836 TQHistogramUtils.cxx:5837 TQHistogramUtils.cxx:5838 TQHistogramUtils.cxx:5839 TQHistogramUtils.cxx:5840 TQHistogramUtils.cxx:5841 TQHistogramUtils.cxx:5842 TQHistogramUtils.cxx:5843 TQHistogramUtils.cxx:5844 TQHistogramUtils.cxx:5845 TQHistogramUtils.cxx:5846 TQHistogramUtils.cxx:5847 TQHistogramUtils.cxx:5848 TQHistogramUtils.cxx:5849 TQHistogramUtils.cxx:5850 TQHistogramUtils.cxx:5851 TQHistogramUtils.cxx:5852 TQHistogramUtils.cxx:5853 TQHistogramUtils.cxx:5854 TQHistogramUtils.cxx:5855 TQHistogramUtils.cxx:5856 TQHistogramUtils.cxx:5857 TQHistogramUtils.cxx:5858 TQHistogramUtils.cxx:5859 TQHistogramUtils.cxx:5860 TQHistogramUtils.cxx:5861 TQHistogramUtils.cxx:5862 TQHistogramUtils.cxx:5863 TQHistogramUtils.cxx:5864 TQHistogramUtils.cxx:5865 TQHistogramUtils.cxx:5866 TQHistogramUtils.cxx:5867 TQHistogramUtils.cxx:5868 TQHistogramUtils.cxx:5869 TQHistogramUtils.cxx:5870 TQHistogramUtils.cxx:5871 TQHistogramUtils.cxx:5872 TQHistogramUtils.cxx:5873 TQHistogramUtils.cxx:5874 TQHistogramUtils.cxx:5875 TQHistogramUtils.cxx:5876 TQHistogramUtils.cxx:5877 TQHistogramUtils.cxx:5878 TQHistogramUtils.cxx:5879 TQHistogramUtils.cxx:5880 TQHistogramUtils.cxx:5881 TQHistogramUtils.cxx:5882 TQHistogramUtils.cxx:5883 TQHistogramUtils.cxx:5884 TQHistogramUtils.cxx:5885 TQHistogramUtils.cxx:5886 TQHistogramUtils.cxx:5887 TQHistogramUtils.cxx:5888 TQHistogramUtils.cxx:5889 TQHistogramUtils.cxx:5890 TQHistogramUtils.cxx:5891 TQHistogramUtils.cxx:5892 TQHistogramUtils.cxx:5893 TQHistogramUtils.cxx:5894 TQHistogramUtils.cxx:5895 TQHistogramUtils.cxx:5896 TQHistogramUtils.cxx:5897 TQHistogramUtils.cxx:5898 TQHistogramUtils.cxx:5899 TQHistogramUtils.cxx:5900 TQHistogramUtils.cxx:5901 TQHistogramUtils.cxx:5902 TQHistogramUtils.cxx:5903 TQHistogramUtils.cxx:5904 TQHistogramUtils.cxx:5905 TQHistogramUtils.cxx:5906 TQHistogramUtils.cxx:5907 TQHistogramUtils.cxx:5908 TQHistogramUtils.cxx:5909 TQHistogramUtils.cxx:5910 TQHistogramUtils.cxx:5911 TQHistogramUtils.cxx:5912 TQHistogramUtils.cxx:5913 TQHistogramUtils.cxx:5914 TQHistogramUtils.cxx:5915 TQHistogramUtils.cxx:5916 TQHistogramUtils.cxx:5917 TQHistogramUtils.cxx:5918 TQHistogramUtils.cxx:5919 TQHistogramUtils.cxx:5920 TQHistogramUtils.cxx:5921 TQHistogramUtils.cxx:5922 TQHistogramUtils.cxx:5923 TQHistogramUtils.cxx:5924 TQHistogramUtils.cxx:5925 TQHistogramUtils.cxx:5926 TQHistogramUtils.cxx:5927 TQHistogramUtils.cxx:5928 TQHistogramUtils.cxx:5929 TQHistogramUtils.cxx:5930 TQHistogramUtils.cxx:5931 TQHistogramUtils.cxx:5932 TQHistogramUtils.cxx:5933 TQHistogramUtils.cxx:5934 TQHistogramUtils.cxx:5935 TQHistogramUtils.cxx:5936 TQHistogramUtils.cxx:5937 TQHistogramUtils.cxx:5938 TQHistogramUtils.cxx:5939 TQHistogramUtils.cxx:5940 TQHistogramUtils.cxx:5941 TQHistogramUtils.cxx:5942 TQHistogramUtils.cxx:5943 TQHistogramUtils.cxx:5944 TQHistogramUtils.cxx:5945 TQHistogramUtils.cxx:5946 TQHistogramUtils.cxx:5947 TQHistogramUtils.cxx:5948 TQHistogramUtils.cxx:5949 TQHistogramUtils.cxx:5950 TQHistogramUtils.cxx:5951 TQHistogramUtils.cxx:5952 TQHistogramUtils.cxx:5953 TQHistogramUtils.cxx:5954 TQHistogramUtils.cxx:5955 TQHistogramUtils.cxx:5956 TQHistogramUtils.cxx:5957 TQHistogramUtils.cxx:5958 TQHistogramUtils.cxx:5959 TQHistogramUtils.cxx:5960 TQHistogramUtils.cxx:5961 TQHistogramUtils.cxx:5962 TQHistogramUtils.cxx:5963 TQHistogramUtils.cxx:5964 TQHistogramUtils.cxx:5965 TQHistogramUtils.cxx:5966 TQHistogramUtils.cxx:5967 TQHistogramUtils.cxx:5968 TQHistogramUtils.cxx:5969 TQHistogramUtils.cxx:5970 TQHistogramUtils.cxx:5971 TQHistogramUtils.cxx:5972 TQHistogramUtils.cxx:5973 TQHistogramUtils.cxx:5974 TQHistogramUtils.cxx:5975 TQHistogramUtils.cxx:5976 TQHistogramUtils.cxx:5977 TQHistogramUtils.cxx:5978 TQHistogramUtils.cxx:5979 TQHistogramUtils.cxx:5980 TQHistogramUtils.cxx:5981 TQHistogramUtils.cxx:5982 TQHistogramUtils.cxx:5983 TQHistogramUtils.cxx:5984 TQHistogramUtils.cxx:5985 TQHistogramUtils.cxx:5986 TQHistogramUtils.cxx:5987 TQHistogramUtils.cxx:5988 TQHistogramUtils.cxx:5989 TQHistogramUtils.cxx:5990 TQHistogramUtils.cxx:5991 TQHistogramUtils.cxx:5992 TQHistogramUtils.cxx:5993 TQHistogramUtils.cxx:5994 TQHistogramUtils.cxx:5995 TQHistogramUtils.cxx:5996 TQHistogramUtils.cxx:5997 TQHistogramUtils.cxx:5998 TQHistogramUtils.cxx:5999 TQHistogramUtils.cxx:6000 TQHistogramUtils.cxx:6001 TQHistogramUtils.cxx:6002 TQHistogramUtils.cxx:6003 TQHistogramUtils.cxx:6004 TQHistogramUtils.cxx:6005 TQHistogramUtils.cxx:6006 TQHistogramUtils.cxx:6007 TQHistogramUtils.cxx:6008 TQHistogramUtils.cxx:6009 TQHistogramUtils.cxx:6010 TQHistogramUtils.cxx:6011 TQHistogramUtils.cxx:6012 TQHistogramUtils.cxx:6013 TQHistogramUtils.cxx:6014 TQHistogramUtils.cxx:6015 TQHistogramUtils.cxx:6016 TQHistogramUtils.cxx:6017 TQHistogramUtils.cxx:6018 TQHistogramUtils.cxx:6019 TQHistogramUtils.cxx:6020 TQHistogramUtils.cxx:6021 TQHistogramUtils.cxx:6022 TQHistogramUtils.cxx:6023 TQHistogramUtils.cxx:6024 TQHistogramUtils.cxx:6025 TQHistogramUtils.cxx:6026 TQHistogramUtils.cxx:6027 TQHistogramUtils.cxx:6028 TQHistogramUtils.cxx:6029 TQHistogramUtils.cxx:6030 TQHistogramUtils.cxx:6031 TQHistogramUtils.cxx:6032 TQHistogramUtils.cxx:6033 TQHistogramUtils.cxx:6034 TQHistogramUtils.cxx:6035 TQHistogramUtils.cxx:6036 TQHistogramUtils.cxx:6037 TQHistogramUtils.cxx:6038 TQHistogramUtils.cxx:6039 TQHistogramUtils.cxx:6040 TQHistogramUtils.cxx:6041 TQHistogramUtils.cxx:6042 TQHistogramUtils.cxx:6043 TQHistogramUtils.cxx:6044 TQHistogramUtils.cxx:6045 TQHistogramUtils.cxx:6046 TQHistogramUtils.cxx:6047 TQHistogramUtils.cxx:6048 TQHistogramUtils.cxx:6049 TQHistogramUtils.cxx:6050 TQHistogramUtils.cxx:6051 TQHistogramUtils.cxx:6052 TQHistogramUtils.cxx:6053 TQHistogramUtils.cxx:6054 TQHistogramUtils.cxx:6055 TQHistogramUtils.cxx:6056 TQHistogramUtils.cxx:6057 TQHistogramUtils.cxx:6058 TQHistogramUtils.cxx:6059 TQHistogramUtils.cxx:6060 TQHistogramUtils.cxx:6061 TQHistogramUtils.cxx:6062 TQHistogramUtils.cxx:6063 TQHistogramUtils.cxx:6064 TQHistogramUtils.cxx:6065 TQHistogramUtils.cxx:6066 TQHistogramUtils.cxx:6067 TQHistogramUtils.cxx:6068 TQHistogramUtils.cxx:6069 TQHistogramUtils.cxx:6070 TQHistogramUtils.cxx:6071 TQHistogramUtils.cxx:6072 TQHistogramUtils.cxx:6073 TQHistogramUtils.cxx:6074 TQHistogramUtils.cxx:6075 TQHistogramUtils.cxx:6076 TQHistogramUtils.cxx:6077 TQHistogramUtils.cxx:6078 TQHistogramUtils.cxx:6079 TQHistogramUtils.cxx:6080 TQHistogramUtils.cxx:6081 TQHistogramUtils.cxx:6082 TQHistogramUtils.cxx:6083 TQHistogramUtils.cxx:6084 TQHistogramUtils.cxx:6085 TQHistogramUtils.cxx:6086 TQHistogramUtils.cxx:6087 TQHistogramUtils.cxx:6088 TQHistogramUtils.cxx:6089 TQHistogramUtils.cxx:6090 TQHistogramUtils.cxx:6091 TQHistogramUtils.cxx:6092 TQHistogramUtils.cxx:6093 TQHistogramUtils.cxx:6094 TQHistogramUtils.cxx:6095 TQHistogramUtils.cxx:6096 TQHistogramUtils.cxx:6097 TQHistogramUtils.cxx:6098 TQHistogramUtils.cxx:6099 TQHistogramUtils.cxx:6100 TQHistogramUtils.cxx:6101 TQHistogramUtils.cxx:6102 TQHistogramUtils.cxx:6103 TQHistogramUtils.cxx:6104 TQHistogramUtils.cxx:6105 TQHistogramUtils.cxx:6106 TQHistogramUtils.cxx:6107 TQHistogramUtils.cxx:6108 TQHistogramUtils.cxx:6109 TQHistogramUtils.cxx:6110 TQHistogramUtils.cxx:6111 TQHistogramUtils.cxx:6112 TQHistogramUtils.cxx:6113 TQHistogramUtils.cxx:6114 TQHistogramUtils.cxx:6115 TQHistogramUtils.cxx:6116 TQHistogramUtils.cxx:6117 TQHistogramUtils.cxx:6118 TQHistogramUtils.cxx:6119 TQHistogramUtils.cxx:6120 TQHistogramUtils.cxx:6121 TQHistogramUtils.cxx:6122 TQHistogramUtils.cxx:6123 TQHistogramUtils.cxx:6124 TQHistogramUtils.cxx:6125 TQHistogramUtils.cxx:6126 TQHistogramUtils.cxx:6127 TQHistogramUtils.cxx:6128 TQHistogramUtils.cxx:6129 TQHistogramUtils.cxx:6130 TQHistogramUtils.cxx:6131 TQHistogramUtils.cxx:6132 TQHistogramUtils.cxx:6133 TQHistogramUtils.cxx:6134 TQHistogramUtils.cxx:6135 TQHistogramUtils.cxx:6136 TQHistogramUtils.cxx:6137 TQHistogramUtils.cxx:6138 TQHistogramUtils.cxx:6139 TQHistogramUtils.cxx:6140 TQHistogramUtils.cxx:6141 TQHistogramUtils.cxx:6142 TQHistogramUtils.cxx:6143 TQHistogramUtils.cxx:6144 TQHistogramUtils.cxx:6145 TQHistogramUtils.cxx:6146 TQHistogramUtils.cxx:6147 TQHistogramUtils.cxx:6148 TQHistogramUtils.cxx:6149 TQHistogramUtils.cxx:6150 TQHistogramUtils.cxx:6151 TQHistogramUtils.cxx:6152 TQHistogramUtils.cxx:6153 TQHistogramUtils.cxx:6154 TQHistogramUtils.cxx:6155 TQHistogramUtils.cxx:6156 TQHistogramUtils.cxx:6157 TQHistogramUtils.cxx:6158 TQHistogramUtils.cxx:6159 TQHistogramUtils.cxx:6160 TQHistogramUtils.cxx:6161 TQHistogramUtils.cxx:6162 TQHistogramUtils.cxx:6163 TQHistogramUtils.cxx:6164 TQHistogramUtils.cxx:6165 TQHistogramUtils.cxx:6166 TQHistogramUtils.cxx:6167 TQHistogramUtils.cxx:6168 TQHistogramUtils.cxx:6169 TQHistogramUtils.cxx:6170 TQHistogramUtils.cxx:6171 TQHistogramUtils.cxx:6172 TQHistogramUtils.cxx:6173 TQHistogramUtils.cxx:6174 TQHistogramUtils.cxx:6175 TQHistogramUtils.cxx:6176 TQHistogramUtils.cxx:6177 TQHistogramUtils.cxx:6178 TQHistogramUtils.cxx:6179 TQHistogramUtils.cxx:6180 TQHistogramUtils.cxx:6181 TQHistogramUtils.cxx:6182 TQHistogramUtils.cxx:6183 TQHistogramUtils.cxx:6184 TQHistogramUtils.cxx:6185 TQHistogramUtils.cxx:6186 TQHistogramUtils.cxx:6187 TQHistogramUtils.cxx:6188 TQHistogramUtils.cxx:6189 TQHistogramUtils.cxx:6190 TQHistogramUtils.cxx:6191 TQHistogramUtils.cxx:6192 TQHistogramUtils.cxx:6193 TQHistogramUtils.cxx:6194 TQHistogramUtils.cxx:6195 TQHistogramUtils.cxx:6196 TQHistogramUtils.cxx:6197 TQHistogramUtils.cxx:6198 TQHistogramUtils.cxx:6199 TQHistogramUtils.cxx:6200 TQHistogramUtils.cxx:6201 TQHistogramUtils.cxx:6202 TQHistogramUtils.cxx:6203 TQHistogramUtils.cxx:6204 TQHistogramUtils.cxx:6205 TQHistogramUtils.cxx:6206 TQHistogramUtils.cxx:6207 TQHistogramUtils.cxx:6208 TQHistogramUtils.cxx:6209 TQHistogramUtils.cxx:6210 TQHistogramUtils.cxx:6211 TQHistogramUtils.cxx:6212 TQHistogramUtils.cxx:6213 TQHistogramUtils.cxx:6214 TQHistogramUtils.cxx:6215 TQHistogramUtils.cxx:6216 TQHistogramUtils.cxx:6217 TQHistogramUtils.cxx:6218 TQHistogramUtils.cxx:6219 TQHistogramUtils.cxx:6220 TQHistogramUtils.cxx:6221 TQHistogramUtils.cxx:6222 TQHistogramUtils.cxx:6223 TQHistogramUtils.cxx:6224 TQHistogramUtils.cxx:6225 TQHistogramUtils.cxx:6226 TQHistogramUtils.cxx:6227 TQHistogramUtils.cxx:6228 TQHistogramUtils.cxx:6229 TQHistogramUtils.cxx:6230 TQHistogramUtils.cxx:6231 TQHistogramUtils.cxx:6232 TQHistogramUtils.cxx:6233 TQHistogramUtils.cxx:6234 TQHistogramUtils.cxx:6235 TQHistogramUtils.cxx:6236 TQHistogramUtils.cxx:6237 TQHistogramUtils.cxx:6238 TQHistogramUtils.cxx:6239 TQHistogramUtils.cxx:6240 TQHistogramUtils.cxx:6241 TQHistogramUtils.cxx:6242 TQHistogramUtils.cxx:6243 TQHistogramUtils.cxx:6244 TQHistogramUtils.cxx:6245 TQHistogramUtils.cxx:6246 TQHistogramUtils.cxx:6247 TQHistogramUtils.cxx:6248 TQHistogramUtils.cxx:6249 TQHistogramUtils.cxx:6250 TQHistogramUtils.cxx:6251 TQHistogramUtils.cxx:6252 TQHistogramUtils.cxx:6253 TQHistogramUtils.cxx:6254 TQHistogramUtils.cxx:6255 TQHistogramUtils.cxx:6256 TQHistogramUtils.cxx:6257 TQHistogramUtils.cxx:6258 TQHistogramUtils.cxx:6259 TQHistogramUtils.cxx:6260 TQHistogramUtils.cxx:6261 TQHistogramUtils.cxx:6262 TQHistogramUtils.cxx:6263 TQHistogramUtils.cxx:6264 TQHistogramUtils.cxx:6265 TQHistogramUtils.cxx:6266 TQHistogramUtils.cxx:6267 TQHistogramUtils.cxx:6268 TQHistogramUtils.cxx:6269 TQHistogramUtils.cxx:6270 TQHistogramUtils.cxx:6271 TQHistogramUtils.cxx:6272 TQHistogramUtils.cxx:6273 TQHistogramUtils.cxx:6274 TQHistogramUtils.cxx:6275 TQHistogramUtils.cxx:6276 TQHistogramUtils.cxx:6277 TQHistogramUtils.cxx:6278 TQHistogramUtils.cxx:6279 TQHistogramUtils.cxx:6280 TQHistogramUtils.cxx:6281 TQHistogramUtils.cxx:6282 TQHistogramUtils.cxx:6283 TQHistogramUtils.cxx:6284 TQHistogramUtils.cxx:6285 TQHistogramUtils.cxx:6286 TQHistogramUtils.cxx:6287 TQHistogramUtils.cxx:6288 TQHistogramUtils.cxx:6289 TQHistogramUtils.cxx:6290 TQHistogramUtils.cxx:6291 TQHistogramUtils.cxx:6292 TQHistogramUtils.cxx:6293 TQHistogramUtils.cxx:6294 TQHistogramUtils.cxx:6295 TQHistogramUtils.cxx:6296 TQHistogramUtils.cxx:6297 TQHistogramUtils.cxx:6298 TQHistogramUtils.cxx:6299 TQHistogramUtils.cxx:6300 TQHistogramUtils.cxx:6301 TQHistogramUtils.cxx:6302 TQHistogramUtils.cxx:6303 TQHistogramUtils.cxx:6304 TQHistogramUtils.cxx:6305 TQHistogramUtils.cxx:6306 TQHistogramUtils.cxx:6307 TQHistogramUtils.cxx:6308 TQHistogramUtils.cxx:6309 TQHistogramUtils.cxx:6310 TQHistogramUtils.cxx:6311 TQHistogramUtils.cxx:6312 TQHistogramUtils.cxx:6313 TQHistogramUtils.cxx:6314 TQHistogramUtils.cxx:6315 TQHistogramUtils.cxx:6316 TQHistogramUtils.cxx:6317 TQHistogramUtils.cxx:6318 TQHistogramUtils.cxx:6319 TQHistogramUtils.cxx:6320 TQHistogramUtils.cxx:6321 TQHistogramUtils.cxx:6322 TQHistogramUtils.cxx:6323 TQHistogramUtils.cxx:6324 TQHistogramUtils.cxx:6325 TQHistogramUtils.cxx:6326 TQHistogramUtils.cxx:6327 TQHistogramUtils.cxx:6328 TQHistogramUtils.cxx:6329 TQHistogramUtils.cxx:6330 TQHistogramUtils.cxx:6331 TQHistogramUtils.cxx:6332 TQHistogramUtils.cxx:6333 TQHistogramUtils.cxx:6334 TQHistogramUtils.cxx:6335 TQHistogramUtils.cxx:6336 TQHistogramUtils.cxx:6337 TQHistogramUtils.cxx:6338 TQHistogramUtils.cxx:6339 TQHistogramUtils.cxx:6340 TQHistogramUtils.cxx:6341 TQHistogramUtils.cxx:6342 TQHistogramUtils.cxx:6343 TQHistogramUtils.cxx:6344 TQHistogramUtils.cxx:6345 TQHistogramUtils.cxx:6346 TQHistogramUtils.cxx:6347 TQHistogramUtils.cxx:6348 TQHistogramUtils.cxx:6349 TQHistogramUtils.cxx:6350 TQHistogramUtils.cxx:6351 TQHistogramUtils.cxx:6352 TQHistogramUtils.cxx:6353 TQHistogramUtils.cxx:6354 TQHistogramUtils.cxx:6355 TQHistogramUtils.cxx:6356 TQHistogramUtils.cxx:6357 TQHistogramUtils.cxx:6358 TQHistogramUtils.cxx:6359 TQHistogramUtils.cxx:6360 TQHistogramUtils.cxx:6361 TQHistogramUtils.cxx:6362 TQHistogramUtils.cxx:6363 TQHistogramUtils.cxx:6364 TQHistogramUtils.cxx:6365 TQHistogramUtils.cxx:6366 TQHistogramUtils.cxx:6367 TQHistogramUtils.cxx:6368 TQHistogramUtils.cxx:6369 TQHistogramUtils.cxx:6370 TQHistogramUtils.cxx:6371 TQHistogramUtils.cxx:6372 TQHistogramUtils.cxx:6373 TQHistogramUtils.cxx:6374 TQHistogramUtils.cxx:6375 TQHistogramUtils.cxx:6376 TQHistogramUtils.cxx:6377 TQHistogramUtils.cxx:6378 TQHistogramUtils.cxx:6379 TQHistogramUtils.cxx:6380 TQHistogramUtils.cxx:6381 TQHistogramUtils.cxx:6382 TQHistogramUtils.cxx:6383 TQHistogramUtils.cxx:6384 TQHistogramUtils.cxx:6385 TQHistogramUtils.cxx:6386 TQHistogramUtils.cxx:6387 TQHistogramUtils.cxx:6388 TQHistogramUtils.cxx:6389 TQHistogramUtils.cxx:6390 TQHistogramUtils.cxx:6391 TQHistogramUtils.cxx:6392 TQHistogramUtils.cxx:6393 TQHistogramUtils.cxx:6394 TQHistogramUtils.cxx:6395 TQHistogramUtils.cxx:6396 TQHistogramUtils.cxx:6397 TQHistogramUtils.cxx:6398 TQHistogramUtils.cxx:6399 TQHistogramUtils.cxx:6400 TQHistogramUtils.cxx:6401 TQHistogramUtils.cxx:6402 TQHistogramUtils.cxx:6403 TQHistogramUtils.cxx:6404 TQHistogramUtils.cxx:6405 TQHistogramUtils.cxx:6406 TQHistogramUtils.cxx:6407 TQHistogramUtils.cxx:6408 TQHistogramUtils.cxx:6409 TQHistogramUtils.cxx:6410 TQHistogramUtils.cxx:6411 TQHistogramUtils.cxx:6412 TQHistogramUtils.cxx:6413 TQHistogramUtils.cxx:6414 TQHistogramUtils.cxx:6415 TQHistogramUtils.cxx:6416 TQHistogramUtils.cxx:6417 TQHistogramUtils.cxx:6418 TQHistogramUtils.cxx:6419 TQHistogramUtils.cxx:6420 TQHistogramUtils.cxx:6421 TQHistogramUtils.cxx:6422 TQHistogramUtils.cxx:6423 TQHistogramUtils.cxx:6424 TQHistogramUtils.cxx:6425 TQHistogramUtils.cxx:6426 TQHistogramUtils.cxx:6427 TQHistogramUtils.cxx:6428 TQHistogramUtils.cxx:6429 TQHistogramUtils.cxx:6430 TQHistogramUtils.cxx:6431 TQHistogramUtils.cxx:6432 TQHistogramUtils.cxx:6433 TQHistogramUtils.cxx:6434 TQHistogramUtils.cxx:6435 TQHistogramUtils.cxx:6436 TQHistogramUtils.cxx:6437 TQHistogramUtils.cxx:6438 TQHistogramUtils.cxx:6439 TQHistogramUtils.cxx:6440 TQHistogramUtils.cxx:6441 TQHistogramUtils.cxx:6442 TQHistogramUtils.cxx:6443 TQHistogramUtils.cxx:6444 TQHistogramUtils.cxx:6445 TQHistogramUtils.cxx:6446 TQHistogramUtils.cxx:6447 TQHistogramUtils.cxx:6448 TQHistogramUtils.cxx:6449 TQHistogramUtils.cxx:6450 TQHistogramUtils.cxx:6451 TQHistogramUtils.cxx:6452 TQHistogramUtils.cxx:6453 TQHistogramUtils.cxx:6454 TQHistogramUtils.cxx:6455 TQHistogramUtils.cxx:6456 TQHistogramUtils.cxx:6457 TQHistogramUtils.cxx:6458 TQHistogramUtils.cxx:6459 TQHistogramUtils.cxx:6460 TQHistogramUtils.cxx:6461 TQHistogramUtils.cxx:6462 TQHistogramUtils.cxx:6463 TQHistogramUtils.cxx:6464 TQHistogramUtils.cxx:6465 TQHistogramUtils.cxx:6466 TQHistogramUtils.cxx:6467 TQHistogramUtils.cxx:6468 TQHistogramUtils.cxx:6469 TQHistogramUtils.cxx:6470 TQHistogramUtils.cxx:6471 TQHistogramUtils.cxx:6472 TQHistogramUtils.cxx:6473 TQHistogramUtils.cxx:6474 TQHistogramUtils.cxx:6475 TQHistogramUtils.cxx:6476 TQHistogramUtils.cxx:6477 TQHistogramUtils.cxx:6478 TQHistogramUtils.cxx:6479 TQHistogramUtils.cxx:6480 TQHistogramUtils.cxx:6481 TQHistogramUtils.cxx:6482 TQHistogramUtils.cxx:6483 TQHistogramUtils.cxx:6484 TQHistogramUtils.cxx:6485 TQHistogramUtils.cxx:6486 TQHistogramUtils.cxx:6487 TQHistogramUtils.cxx:6488 TQHistogramUtils.cxx:6489 TQHistogramUtils.cxx:6490 TQHistogramUtils.cxx:6491 TQHistogramUtils.cxx:6492 TQHistogramUtils.cxx:6493 TQHistogramUtils.cxx:6494 TQHistogramUtils.cxx:6495 TQHistogramUtils.cxx:6496 TQHistogramUtils.cxx:6497 TQHistogramUtils.cxx:6498 TQHistogramUtils.cxx:6499 TQHistogramUtils.cxx:6500 TQHistogramUtils.cxx:6501 TQHistogramUtils.cxx:6502 TQHistogramUtils.cxx:6503 TQHistogramUtils.cxx:6504 TQHistogramUtils.cxx:6505 TQHistogramUtils.cxx:6506 TQHistogramUtils.cxx:6507 TQHistogramUtils.cxx:6508 TQHistogramUtils.cxx:6509 TQHistogramUtils.cxx:6510 TQHistogramUtils.cxx:6511 TQHistogramUtils.cxx:6512 TQHistogramUtils.cxx:6513 TQHistogramUtils.cxx:6514 TQHistogramUtils.cxx:6515 TQHistogramUtils.cxx:6516 TQHistogramUtils.cxx:6517 TQHistogramUtils.cxx:6518 TQHistogramUtils.cxx:6519 TQHistogramUtils.cxx:6520 TQHistogramUtils.cxx:6521 TQHistogramUtils.cxx:6522 TQHistogramUtils.cxx:6523 TQHistogramUtils.cxx:6524 TQHistogramUtils.cxx:6525 TQHistogramUtils.cxx:6526 TQHistogramUtils.cxx:6527 TQHistogramUtils.cxx:6528 TQHistogramUtils.cxx:6529 TQHistogramUtils.cxx:6530 TQHistogramUtils.cxx:6531 TQHistogramUtils.cxx:6532 TQHistogramUtils.cxx:6533 TQHistogramUtils.cxx:6534 TQHistogramUtils.cxx:6535 TQHistogramUtils.cxx:6536 TQHistogramUtils.cxx:6537 TQHistogramUtils.cxx:6538 TQHistogramUtils.cxx:6539 TQHistogramUtils.cxx:6540 TQHistogramUtils.cxx:6541 TQHistogramUtils.cxx:6542 TQHistogramUtils.cxx:6543 TQHistogramUtils.cxx:6544 TQHistogramUtils.cxx:6545 TQHistogramUtils.cxx:6546 TQHistogramUtils.cxx:6547 TQHistogramUtils.cxx:6548 TQHistogramUtils.cxx:6549 TQHistogramUtils.cxx:6550 TQHistogramUtils.cxx:6551 TQHistogramUtils.cxx:6552 TQHistogramUtils.cxx:6553 TQHistogramUtils.cxx:6554 TQHistogramUtils.cxx:6555 TQHistogramUtils.cxx:6556 TQHistogramUtils.cxx:6557 TQHistogramUtils.cxx:6558 TQHistogramUtils.cxx:6559 TQHistogramUtils.cxx:6560 TQHistogramUtils.cxx:6561 TQHistogramUtils.cxx:6562 TQHistogramUtils.cxx:6563 TQHistogramUtils.cxx:6564 TQHistogramUtils.cxx:6565 TQHistogramUtils.cxx:6566 TQHistogramUtils.cxx:6567 TQHistogramUtils.cxx:6568 TQHistogramUtils.cxx:6569 TQHistogramUtils.cxx:6570 TQHistogramUtils.cxx:6571 TQHistogramUtils.cxx:6572 TQHistogramUtils.cxx:6573 TQHistogramUtils.cxx:6574 TQHistogramUtils.cxx:6575 TQHistogramUtils.cxx:6576 TQHistogramUtils.cxx:6577 TQHistogramUtils.cxx:6578 TQHistogramUtils.cxx:6579 TQHistogramUtils.cxx:6580 TQHistogramUtils.cxx:6581 TQHistogramUtils.cxx:6582 TQHistogramUtils.cxx:6583 TQHistogramUtils.cxx:6584 TQHistogramUtils.cxx:6585 TQHistogramUtils.cxx:6586 TQHistogramUtils.cxx:6587 TQHistogramUtils.cxx:6588 TQHistogramUtils.cxx:6589 TQHistogramUtils.cxx:6590 TQHistogramUtils.cxx:6591 TQHistogramUtils.cxx:6592 TQHistogramUtils.cxx:6593 TQHistogramUtils.cxx:6594 TQHistogramUtils.cxx:6595 TQHistogramUtils.cxx:6596 TQHistogramUtils.cxx:6597 TQHistogramUtils.cxx:6598 TQHistogramUtils.cxx:6599 TQHistogramUtils.cxx:6600 TQHistogramUtils.cxx:6601 TQHistogramUtils.cxx:6602 TQHistogramUtils.cxx:6603 TQHistogramUtils.cxx:6604 TQHistogramUtils.cxx:6605 TQHistogramUtils.cxx:6606 TQHistogramUtils.cxx:6607 TQHistogramUtils.cxx:6608 TQHistogramUtils.cxx:6609 TQHistogramUtils.cxx:6610 TQHistogramUtils.cxx:6611 TQHistogramUtils.cxx:6612 TQHistogramUtils.cxx:6613 TQHistogramUtils.cxx:6614 TQHistogramUtils.cxx:6615 TQHistogramUtils.cxx:6616 TQHistogramUtils.cxx:6617 TQHistogramUtils.cxx:6618 TQHistogramUtils.cxx:6619 TQHistogramUtils.cxx:6620 TQHistogramUtils.cxx:6621 TQHistogramUtils.cxx:6622 TQHistogramUtils.cxx:6623 TQHistogramUtils.cxx:6624 TQHistogramUtils.cxx:6625 TQHistogramUtils.cxx:6626 TQHistogramUtils.cxx:6627 TQHistogramUtils.cxx:6628 TQHistogramUtils.cxx:6629 TQHistogramUtils.cxx:6630 TQHistogramUtils.cxx:6631 TQHistogramUtils.cxx:6632 TQHistogramUtils.cxx:6633 TQHistogramUtils.cxx:6634 TQHistogramUtils.cxx:6635 TQHistogramUtils.cxx:6636 TQHistogramUtils.cxx:6637 TQHistogramUtils.cxx:6638 TQHistogramUtils.cxx:6639 TQHistogramUtils.cxx:6640 TQHistogramUtils.cxx:6641 TQHistogramUtils.cxx:6642 TQHistogramUtils.cxx:6643 TQHistogramUtils.cxx:6644 TQHistogramUtils.cxx:6645 TQHistogramUtils.cxx:6646 TQHistogramUtils.cxx:6647 TQHistogramUtils.cxx:6648 TQHistogramUtils.cxx:6649 TQHistogramUtils.cxx:6650 TQHistogramUtils.cxx:6651 TQHistogramUtils.cxx:6652 TQHistogramUtils.cxx:6653 TQHistogramUtils.cxx:6654 TQHistogramUtils.cxx:6655 TQHistogramUtils.cxx:6656 TQHistogramUtils.cxx:6657 TQHistogramUtils.cxx:6658 TQHistogramUtils.cxx:6659 TQHistogramUtils.cxx:6660 TQHistogramUtils.cxx:6661 TQHistogramUtils.cxx:6662 TQHistogramUtils.cxx:6663 TQHistogramUtils.cxx:6664 TQHistogramUtils.cxx:6665 TQHistogramUtils.cxx:6666 TQHistogramUtils.cxx:6667 TQHistogramUtils.cxx:6668 TQHistogramUtils.cxx:6669 TQHistogramUtils.cxx:6670 TQHistogramUtils.cxx:6671 TQHistogramUtils.cxx:6672 TQHistogramUtils.cxx:6673 TQHistogramUtils.cxx:6674 TQHistogramUtils.cxx:6675 TQHistogramUtils.cxx:6676 TQHistogramUtils.cxx:6677 TQHistogramUtils.cxx:6678 TQHistogramUtils.cxx:6679 TQHistogramUtils.cxx:6680 TQHistogramUtils.cxx:6681 TQHistogramUtils.cxx:6682 TQHistogramUtils.cxx:6683 TQHistogramUtils.cxx:6684 TQHistogramUtils.cxx:6685 TQHistogramUtils.cxx:6686 TQHistogramUtils.cxx:6687 TQHistogramUtils.cxx:6688 TQHistogramUtils.cxx:6689 TQHistogramUtils.cxx:6690 TQHistogramUtils.cxx:6691 TQHistogramUtils.cxx:6692 TQHistogramUtils.cxx:6693 TQHistogramUtils.cxx:6694 TQHistogramUtils.cxx:6695 TQHistogramUtils.cxx:6696 TQHistogramUtils.cxx:6697 TQHistogramUtils.cxx:6698 TQHistogramUtils.cxx:6699 TQHistogramUtils.cxx:6700 TQHistogramUtils.cxx:6701 TQHistogramUtils.cxx:6702 TQHistogramUtils.cxx:6703 TQHistogramUtils.cxx:6704 TQHistogramUtils.cxx:6705 TQHistogramUtils.cxx:6706 TQHistogramUtils.cxx:6707 TQHistogramUtils.cxx:6708 TQHistogramUtils.cxx:6709 TQHistogramUtils.cxx:6710 TQHistogramUtils.cxx:6711 TQHistogramUtils.cxx:6712 TQHistogramUtils.cxx:6713 TQHistogramUtils.cxx:6714 TQHistogramUtils.cxx:6715 TQHistogramUtils.cxx:6716 TQHistogramUtils.cxx:6717 TQHistogramUtils.cxx:6718 TQHistogramUtils.cxx:6719 TQHistogramUtils.cxx:6720 TQHistogramUtils.cxx:6721 TQHistogramUtils.cxx:6722 TQHistogramUtils.cxx:6723 TQHistogramUtils.cxx:6724 TQHistogramUtils.cxx:6725 TQHistogramUtils.cxx:6726 TQHistogramUtils.cxx:6727 TQHistogramUtils.cxx:6728 TQHistogramUtils.cxx:6729 TQHistogramUtils.cxx:6730 TQHistogramUtils.cxx:6731 TQHistogramUtils.cxx:6732 TQHistogramUtils.cxx:6733 TQHistogramUtils.cxx:6734 TQHistogramUtils.cxx:6735 TQHistogramUtils.cxx:6736 TQHistogramUtils.cxx:6737 TQHistogramUtils.cxx:6738 TQHistogramUtils.cxx:6739 TQHistogramUtils.cxx:6740 TQHistogramUtils.cxx:6741 TQHistogramUtils.cxx:6742 TQHistogramUtils.cxx:6743 TQHistogramUtils.cxx:6744 TQHistogramUtils.cxx:6745 TQHistogramUtils.cxx:6746 TQHistogramUtils.cxx:6747 TQHistogramUtils.cxx:6748 TQHistogramUtils.cxx:6749 TQHistogramUtils.cxx:6750 TQHistogramUtils.cxx:6751 TQHistogramUtils.cxx:6752 TQHistogramUtils.cxx:6753 TQHistogramUtils.cxx:6754 TQHistogramUtils.cxx:6755 TQHistogramUtils.cxx:6756 TQHistogramUtils.cxx:6757 TQHistogramUtils.cxx:6758 TQHistogramUtils.cxx:6759 TQHistogramUtils.cxx:6760 TQHistogramUtils.cxx:6761 TQHistogramUtils.cxx:6762 TQHistogramUtils.cxx:6763 TQHistogramUtils.cxx:6764 TQHistogramUtils.cxx:6765 TQHistogramUtils.cxx:6766 TQHistogramUtils.cxx:6767 TQHistogramUtils.cxx:6768 TQHistogramUtils.cxx:6769 TQHistogramUtils.cxx:6770 TQHistogramUtils.cxx:6771 TQHistogramUtils.cxx:6772 TQHistogramUtils.cxx:6773 TQHistogramUtils.cxx:6774 TQHistogramUtils.cxx:6775 TQHistogramUtils.cxx:6776 TQHistogramUtils.cxx:6777 TQHistogramUtils.cxx:6778 TQHistogramUtils.cxx:6779 TQHistogramUtils.cxx:6780 TQHistogramUtils.cxx:6781 TQHistogramUtils.cxx:6782 TQHistogramUtils.cxx:6783 TQHistogramUtils.cxx:6784 TQHistogramUtils.cxx:6785 TQHistogramUtils.cxx:6786 TQHistogramUtils.cxx:6787 TQHistogramUtils.cxx:6788 TQHistogramUtils.cxx:6789 TQHistogramUtils.cxx:6790 TQHistogramUtils.cxx:6791 TQHistogramUtils.cxx:6792 TQHistogramUtils.cxx:6793 TQHistogramUtils.cxx:6794 TQHistogramUtils.cxx:6795 TQHistogramUtils.cxx:6796 TQHistogramUtils.cxx:6797 TQHistogramUtils.cxx:6798 TQHistogramUtils.cxx:6799 TQHistogramUtils.cxx:6800 TQHistogramUtils.cxx:6801 TQHistogramUtils.cxx:6802 TQHistogramUtils.cxx:6803 TQHistogramUtils.cxx:6804 TQHistogramUtils.cxx:6805 TQHistogramUtils.cxx:6806 TQHistogramUtils.cxx:6807 TQHistogramUtils.cxx:6808 TQHistogramUtils.cxx:6809 TQHistogramUtils.cxx:6810 TQHistogramUtils.cxx:6811 TQHistogramUtils.cxx:6812 TQHistogramUtils.cxx:6813 TQHistogramUtils.cxx:6814 TQHistogramUtils.cxx:6815 TQHistogramUtils.cxx:6816 TQHistogramUtils.cxx:6817 TQHistogramUtils.cxx:6818 TQHistogramUtils.cxx:6819 TQHistogramUtils.cxx:6820 TQHistogramUtils.cxx:6821 TQHistogramUtils.cxx:6822 TQHistogramUtils.cxx:6823 TQHistogramUtils.cxx:6824 TQHistogramUtils.cxx:6825 TQHistogramUtils.cxx:6826 TQHistogramUtils.cxx:6827 TQHistogramUtils.cxx:6828 TQHistogramUtils.cxx:6829 TQHistogramUtils.cxx:6830 TQHistogramUtils.cxx:6831 TQHistogramUtils.cxx:6832 TQHistogramUtils.cxx:6833 TQHistogramUtils.cxx:6834 TQHistogramUtils.cxx:6835 TQHistogramUtils.cxx:6836 TQHistogramUtils.cxx:6837 TQHistogramUtils.cxx:6838 TQHistogramUtils.cxx:6839 TQHistogramUtils.cxx:6840 TQHistogramUtils.cxx:6841 TQHistogramUtils.cxx:6842 TQHistogramUtils.cxx:6843 TQHistogramUtils.cxx:6844 TQHistogramUtils.cxx:6845 TQHistogramUtils.cxx:6846 TQHistogramUtils.cxx:6847 TQHistogramUtils.cxx:6848 TQHistogramUtils.cxx:6849 TQHistogramUtils.cxx:6850 TQHistogramUtils.cxx:6851 TQHistogramUtils.cxx:6852 TQHistogramUtils.cxx:6853 TQHistogramUtils.cxx:6854 TQHistogramUtils.cxx:6855 TQHistogramUtils.cxx:6856 TQHistogramUtils.cxx:6857 TQHistogramUtils.cxx:6858 TQHistogramUtils.cxx:6859 TQHistogramUtils.cxx:6860 TQHistogramUtils.cxx:6861 TQHistogramUtils.cxx:6862 TQHistogramUtils.cxx:6863 TQHistogramUtils.cxx:6864 TQHistogramUtils.cxx:6865 TQHistogramUtils.cxx:6866 TQHistogramUtils.cxx:6867 TQHistogramUtils.cxx:6868 TQHistogramUtils.cxx:6869 TQHistogramUtils.cxx:6870 TQHistogramUtils.cxx:6871 TQHistogramUtils.cxx:6872 TQHistogramUtils.cxx:6873 TQHistogramUtils.cxx:6874 TQHistogramUtils.cxx:6875 TQHistogramUtils.cxx:6876 TQHistogramUtils.cxx:6877 TQHistogramUtils.cxx:6878 TQHistogramUtils.cxx:6879 TQHistogramUtils.cxx:6880 TQHistogramUtils.cxx:6881 TQHistogramUtils.cxx:6882 TQHistogramUtils.cxx:6883 TQHistogramUtils.cxx:6884 TQHistogramUtils.cxx:6885 TQHistogramUtils.cxx:6886 TQHistogramUtils.cxx:6887 TQHistogramUtils.cxx:6888 TQHistogramUtils.cxx:6889 TQHistogramUtils.cxx:6890 TQHistogramUtils.cxx:6891 TQHistogramUtils.cxx:6892 TQHistogramUtils.cxx:6893 TQHistogramUtils.cxx:6894 TQHistogramUtils.cxx:6895 TQHistogramUtils.cxx:6896 TQHistogramUtils.cxx:6897 TQHistogramUtils.cxx:6898 TQHistogramUtils.cxx:6899 TQHistogramUtils.cxx:6900 TQHistogramUtils.cxx:6901 TQHistogramUtils.cxx:6902 TQHistogramUtils.cxx:6903 TQHistogramUtils.cxx:6904 TQHistogramUtils.cxx:6905 TQHistogramUtils.cxx:6906 TQHistogramUtils.cxx:6907 TQHistogramUtils.cxx:6908 TQHistogramUtils.cxx:6909 TQHistogramUtils.cxx:6910 TQHistogramUtils.cxx:6911 TQHistogramUtils.cxx:6912 TQHistogramUtils.cxx:6913 TQHistogramUtils.cxx:6914 TQHistogramUtils.cxx:6915 TQHistogramUtils.cxx:6916 TQHistogramUtils.cxx:6917 TQHistogramUtils.cxx:6918 TQHistogramUtils.cxx:6919 TQHistogramUtils.cxx:6920 TQHistogramUtils.cxx:6921 TQHistogramUtils.cxx:6922 TQHistogramUtils.cxx:6923 TQHistogramUtils.cxx:6924 TQHistogramUtils.cxx:6925 TQHistogramUtils.cxx:6926 TQHistogramUtils.cxx:6927 TQHistogramUtils.cxx:6928 TQHistogramUtils.cxx:6929 TQHistogramUtils.cxx:6930 TQHistogramUtils.cxx:6931 TQHistogramUtils.cxx:6932 TQHistogramUtils.cxx:6933 TQHistogramUtils.cxx:6934 TQHistogramUtils.cxx:6935 TQHistogramUtils.cxx:6936 TQHistogramUtils.cxx:6937 TQHistogramUtils.cxx:6938 TQHistogramUtils.cxx:6939 TQHistogramUtils.cxx:6940 TQHistogramUtils.cxx:6941 TQHistogramUtils.cxx:6942 TQHistogramUtils.cxx:6943 TQHistogramUtils.cxx:6944 TQHistogramUtils.cxx:6945 TQHistogramUtils.cxx:6946 TQHistogramUtils.cxx:6947 TQHistogramUtils.cxx:6948 TQHistogramUtils.cxx:6949 TQHistogramUtils.cxx:6950 TQHistogramUtils.cxx:6951 TQHistogramUtils.cxx:6952 TQHistogramUtils.cxx:6953 TQHistogramUtils.cxx:6954 TQHistogramUtils.cxx:6955 TQHistogramUtils.cxx:6956 TQHistogramUtils.cxx:6957 TQHistogramUtils.cxx:6958 TQHistogramUtils.cxx:6959 TQHistogramUtils.cxx:6960 TQHistogramUtils.cxx:6961 TQHistogramUtils.cxx:6962 TQHistogramUtils.cxx:6963 TQHistogramUtils.cxx:6964 TQHistogramUtils.cxx:6965 TQHistogramUtils.cxx:6966 TQHistogramUtils.cxx:6967 TQHistogramUtils.cxx:6968 TQHistogramUtils.cxx:6969 TQHistogramUtils.cxx:6970 TQHistogramUtils.cxx:6971 TQHistogramUtils.cxx:6972 TQHistogramUtils.cxx:6973 TQHistogramUtils.cxx:6974 TQHistogramUtils.cxx:6975 TQHistogramUtils.cxx:6976 TQHistogramUtils.cxx:6977 TQHistogramUtils.cxx:6978 TQHistogramUtils.cxx:6979 TQHistogramUtils.cxx:6980 TQHistogramUtils.cxx:6981 TQHistogramUtils.cxx:6982 TQHistogramUtils.cxx:6983 TQHistogramUtils.cxx:6984 TQHistogramUtils.cxx:6985 TQHistogramUtils.cxx:6986 TQHistogramUtils.cxx:6987 TQHistogramUtils.cxx:6988 TQHistogramUtils.cxx:6989 TQHistogramUtils.cxx:6990 TQHistogramUtils.cxx:6991 TQHistogramUtils.cxx:6992 TQHistogramUtils.cxx:6993 TQHistogramUtils.cxx:6994 TQHistogramUtils.cxx:6995 TQHistogramUtils.cxx:6996 TQHistogramUtils.cxx:6997 TQHistogramUtils.cxx:6998 TQHistogramUtils.cxx:6999 TQHistogramUtils.cxx:7000 TQHistogramUtils.cxx:7001 TQHistogramUtils.cxx:7002 TQHistogramUtils.cxx:7003 TQHistogramUtils.cxx:7004 TQHistogramUtils.cxx:7005 TQHistogramUtils.cxx:7006 TQHistogramUtils.cxx:7007 TQHistogramUtils.cxx:7008 TQHistogramUtils.cxx:7009 TQHistogramUtils.cxx:7010 TQHistogramUtils.cxx:7011 TQHistogramUtils.cxx:7012 TQHistogramUtils.cxx:7013 TQHistogramUtils.cxx:7014 TQHistogramUtils.cxx:7015 TQHistogramUtils.cxx:7016 TQHistogramUtils.cxx:7017 TQHistogramUtils.cxx:7018 TQHistogramUtils.cxx:7019 TQHistogramUtils.cxx:7020 TQHistogramUtils.cxx:7021 TQHistogramUtils.cxx:7022 TQHistogramUtils.cxx:7023 TQHistogramUtils.cxx:7024 TQHistogramUtils.cxx:7025 TQHistogramUtils.cxx:7026 TQHistogramUtils.cxx:7027 TQHistogramUtils.cxx:7028 TQHistogramUtils.cxx:7029 TQHistogramUtils.cxx:7030 TQHistogramUtils.cxx:7031 TQHistogramUtils.cxx:7032 TQHistogramUtils.cxx:7033 TQHistogramUtils.cxx:7034 TQHistogramUtils.cxx:7035 TQHistogramUtils.cxx:7036 TQHistogramUtils.cxx:7037 TQHistogramUtils.cxx:7038 TQHistogramUtils.cxx:7039 TQHistogramUtils.cxx:7040 TQHistogramUtils.cxx:7041 TQHistogramUtils.cxx:7042 TQHistogramUtils.cxx:7043 TQHistogramUtils.cxx:7044 TQHistogramUtils.cxx:7045 TQHistogramUtils.cxx:7046 TQHistogramUtils.cxx:7047 TQHistogramUtils.cxx:7048 TQHistogramUtils.cxx:7049 TQHistogramUtils.cxx:7050 TQHistogramUtils.cxx:7051 TQHistogramUtils.cxx:7052 TQHistogramUtils.cxx:7053 TQHistogramUtils.cxx:7054 TQHistogramUtils.cxx:7055 TQHistogramUtils.cxx:7056 TQHistogramUtils.cxx:7057 TQHistogramUtils.cxx:7058 TQHistogramUtils.cxx:7059 TQHistogramUtils.cxx:7060 TQHistogramUtils.cxx:7061 TQHistogramUtils.cxx:7062 TQHistogramUtils.cxx:7063 TQHistogramUtils.cxx:7064 TQHistogramUtils.cxx:7065 TQHistogramUtils.cxx:7066 TQHistogramUtils.cxx:7067 TQHistogramUtils.cxx:7068 TQHistogramUtils.cxx:7069 TQHistogramUtils.cxx:7070 TQHistogramUtils.cxx:7071 TQHistogramUtils.cxx:7072 TQHistogramUtils.cxx:7073 TQHistogramUtils.cxx:7074 TQHistogramUtils.cxx:7075 TQHistogramUtils.cxx:7076 TQHistogramUtils.cxx:7077 TQHistogramUtils.cxx:7078 TQHistogramUtils.cxx:7079 TQHistogramUtils.cxx:7080 TQHistogramUtils.cxx:7081 TQHistogramUtils.cxx:7082 TQHistogramUtils.cxx:7083 TQHistogramUtils.cxx:7084 TQHistogramUtils.cxx:7085 TQHistogramUtils.cxx:7086 TQHistogramUtils.cxx:7087 TQHistogramUtils.cxx:7088 TQHistogramUtils.cxx:7089 TQHistogramUtils.cxx:7090 TQHistogramUtils.cxx:7091 TQHistogramUtils.cxx:7092 TQHistogramUtils.cxx:7093 TQHistogramUtils.cxx:7094 TQHistogramUtils.cxx:7095 TQHistogramUtils.cxx:7096 TQHistogramUtils.cxx:7097 TQHistogramUtils.cxx:7098 TQHistogramUtils.cxx:7099 TQHistogramUtils.cxx:7100 TQHistogramUtils.cxx:7101 TQHistogramUtils.cxx:7102 TQHistogramUtils.cxx:7103 TQHistogramUtils.cxx:7104 TQHistogramUtils.cxx:7105 TQHistogramUtils.cxx:7106 TQHistogramUtils.cxx:7107 TQHistogramUtils.cxx:7108 TQHistogramUtils.cxx:7109 TQHistogramUtils.cxx:7110 TQHistogramUtils.cxx:7111 TQHistogramUtils.cxx:7112 TQHistogramUtils.cxx:7113 TQHistogramUtils.cxx:7114 TQHistogramUtils.cxx:7115 TQHistogramUtils.cxx:7116 TQHistogramUtils.cxx:7117 TQHistogramUtils.cxx:7118 TQHistogramUtils.cxx:7119 TQHistogramUtils.cxx:7120 TQHistogramUtils.cxx:7121 TQHistogramUtils.cxx:7122 TQHistogramUtils.cxx:7123 TQHistogramUtils.cxx:7124 TQHistogramUtils.cxx:7125 TQHistogramUtils.cxx:7126 TQHistogramUtils.cxx:7127 TQHistogramUtils.cxx:7128 TQHistogramUtils.cxx:7129 TQHistogramUtils.cxx:7130 TQHistogramUtils.cxx:7131 TQHistogramUtils.cxx:7132 TQHistogramUtils.cxx:7133 TQHistogramUtils.cxx:7134 TQHistogramUtils.cxx:7135 TQHistogramUtils.cxx:7136 TQHistogramUtils.cxx:7137 TQHistogramUtils.cxx:7138 TQHistogramUtils.cxx:7139 TQHistogramUtils.cxx:7140 TQHistogramUtils.cxx:7141 TQHistogramUtils.cxx:7142 TQHistogramUtils.cxx:7143 TQHistogramUtils.cxx:7144 TQHistogramUtils.cxx:7145 TQHistogramUtils.cxx:7146 TQHistogramUtils.cxx:7147 TQHistogramUtils.cxx:7148 TQHistogramUtils.cxx:7149 TQHistogramUtils.cxx:7150 TQHistogramUtils.cxx:7151 TQHistogramUtils.cxx:7152 TQHistogramUtils.cxx:7153 TQHistogramUtils.cxx:7154 TQHistogramUtils.cxx:7155 TQHistogramUtils.cxx:7156 TQHistogramUtils.cxx:7157 TQHistogramUtils.cxx:7158 TQHistogramUtils.cxx:7159 TQHistogramUtils.cxx:7160 TQHistogramUtils.cxx:7161 TQHistogramUtils.cxx:7162 TQHistogramUtils.cxx:7163 TQHistogramUtils.cxx:7164 TQHistogramUtils.cxx:7165 TQHistogramUtils.cxx:7166 TQHistogramUtils.cxx:7167 TQHistogramUtils.cxx:7168 TQHistogramUtils.cxx:7169 TQHistogramUtils.cxx:7170 TQHistogramUtils.cxx:7171 TQHistogramUtils.cxx:7172 TQHistogramUtils.cxx:7173 TQHistogramUtils.cxx:7174 TQHistogramUtils.cxx:7175 TQHistogramUtils.cxx:7176 TQHistogramUtils.cxx:7177 TQHistogramUtils.cxx:7178 TQHistogramUtils.cxx:7179 TQHistogramUtils.cxx:7180 TQHistogramUtils.cxx:7181 TQHistogramUtils.cxx:7182 TQHistogramUtils.cxx:7183 TQHistogramUtils.cxx:7184 TQHistogramUtils.cxx:7185 TQHistogramUtils.cxx:7186 TQHistogramUtils.cxx:7187 TQHistogramUtils.cxx:7188 TQHistogramUtils.cxx:7189 TQHistogramUtils.cxx:7190 TQHistogramUtils.cxx:7191 TQHistogramUtils.cxx:7192 TQHistogramUtils.cxx:7193 TQHistogramUtils.cxx:7194 TQHistogramUtils.cxx:7195 TQHistogramUtils.cxx:7196 TQHistogramUtils.cxx:7197 TQHistogramUtils.cxx:7198 TQHistogramUtils.cxx:7199 TQHistogramUtils.cxx:7200 TQHistogramUtils.cxx:7201 TQHistogramUtils.cxx:7202 TQHistogramUtils.cxx:7203 TQHistogramUtils.cxx:7204 TQHistogramUtils.cxx:7205 TQHistogramUtils.cxx:7206 TQHistogramUtils.cxx:7207 TQHistogramUtils.cxx:7208 TQHistogramUtils.cxx:7209 TQHistogramUtils.cxx:7210 TQHistogramUtils.cxx:7211 TQHistogramUtils.cxx:7212 TQHistogramUtils.cxx:7213 TQHistogramUtils.cxx:7214 TQHistogramUtils.cxx:7215 TQHistogramUtils.cxx:7216 TQHistogramUtils.cxx:7217 TQHistogramUtils.cxx:7218 TQHistogramUtils.cxx:7219 TQHistogramUtils.cxx:7220 TQHistogramUtils.cxx:7221 TQHistogramUtils.cxx:7222 TQHistogramUtils.cxx:7223 TQHistogramUtils.cxx:7224 TQHistogramUtils.cxx:7225 TQHistogramUtils.cxx:7226 TQHistogramUtils.cxx:7227 TQHistogramUtils.cxx:7228 TQHistogramUtils.cxx:7229 TQHistogramUtils.cxx:7230 TQHistogramUtils.cxx:7231 TQHistogramUtils.cxx:7232 TQHistogramUtils.cxx:7233 TQHistogramUtils.cxx:7234 TQHistogramUtils.cxx:7235 TQHistogramUtils.cxx:7236 TQHistogramUtils.cxx:7237 TQHistogramUtils.cxx:7238 TQHistogramUtils.cxx:7239 TQHistogramUtils.cxx:7240 TQHistogramUtils.cxx:7241 TQHistogramUtils.cxx:7242 TQHistogramUtils.cxx:7243 TQHistogramUtils.cxx:7244 TQHistogramUtils.cxx:7245 TQHistogramUtils.cxx:7246 TQHistogramUtils.cxx:7247 TQHistogramUtils.cxx:7248 TQHistogramUtils.cxx:7249 TQHistogramUtils.cxx:7250 TQHistogramUtils.cxx:7251 TQHistogramUtils.cxx:7252 TQHistogramUtils.cxx:7253 TQHistogramUtils.cxx:7254 TQHistogramUtils.cxx:7255 TQHistogramUtils.cxx:7256 TQHistogramUtils.cxx:7257 TQHistogramUtils.cxx:7258 TQHistogramUtils.cxx:7259 TQHistogramUtils.cxx:7260 TQHistogramUtils.cxx:7261 TQHistogramUtils.cxx:7262 TQHistogramUtils.cxx:7263 TQHistogramUtils.cxx:7264 TQHistogramUtils.cxx:7265 TQHistogramUtils.cxx:7266 TQHistogramUtils.cxx:7267 TQHistogramUtils.cxx:7268 TQHistogramUtils.cxx:7269 TQHistogramUtils.cxx:7270 TQHistogramUtils.cxx:7271 TQHistogramUtils.cxx:7272 TQHistogramUtils.cxx:7273 TQHistogramUtils.cxx:7274 TQHistogramUtils.cxx:7275 TQHistogramUtils.cxx:7276 TQHistogramUtils.cxx:7277 TQHistogramUtils.cxx:7278 TQHistogramUtils.cxx:7279 TQHistogramUtils.cxx:7280 TQHistogramUtils.cxx:7281 TQHistogramUtils.cxx:7282 TQHistogramUtils.cxx:7283 TQHistogramUtils.cxx:7284 TQHistogramUtils.cxx:7285 TQHistogramUtils.cxx:7286 TQHistogramUtils.cxx:7287 TQHistogramUtils.cxx:7288 TQHistogramUtils.cxx:7289 TQHistogramUtils.cxx:7290 TQHistogramUtils.cxx:7291 TQHistogramUtils.cxx:7292 TQHistogramUtils.cxx:7293 TQHistogramUtils.cxx:7294 TQHistogramUtils.cxx:7295 TQHistogramUtils.cxx:7296 TQHistogramUtils.cxx:7297 TQHistogramUtils.cxx:7298 TQHistogramUtils.cxx:7299 TQHistogramUtils.cxx:7300 TQHistogramUtils.cxx:7301 TQHistogramUtils.cxx:7302 TQHistogramUtils.cxx:7303 TQHistogramUtils.cxx:7304 TQHistogramUtils.cxx:7305 TQHistogramUtils.cxx:7306 TQHistogramUtils.cxx:7307 TQHistogramUtils.cxx:7308 TQHistogramUtils.cxx:7309 TQHistogramUtils.cxx:7310 TQHistogramUtils.cxx:7311 TQHistogramUtils.cxx:7312 TQHistogramUtils.cxx:7313 TQHistogramUtils.cxx:7314 TQHistogramUtils.cxx:7315 TQHistogramUtils.cxx:7316 TQHistogramUtils.cxx:7317 TQHistogramUtils.cxx:7318 TQHistogramUtils.cxx:7319 TQHistogramUtils.cxx:7320 TQHistogramUtils.cxx:7321 TQHistogramUtils.cxx:7322 TQHistogramUtils.cxx:7323 TQHistogramUtils.cxx:7324 TQHistogramUtils.cxx:7325 TQHistogramUtils.cxx:7326 TQHistogramUtils.cxx:7327 TQHistogramUtils.cxx:7328 TQHistogramUtils.cxx:7329 TQHistogramUtils.cxx:7330 TQHistogramUtils.cxx:7331 TQHistogramUtils.cxx:7332 TQHistogramUtils.cxx:7333 TQHistogramUtils.cxx:7334 TQHistogramUtils.cxx:7335 TQHistogramUtils.cxx:7336 TQHistogramUtils.cxx:7337 TQHistogramUtils.cxx:7338 TQHistogramUtils.cxx:7339 TQHistogramUtils.cxx:7340 TQHistogramUtils.cxx:7341 TQHistogramUtils.cxx:7342 TQHistogramUtils.cxx:7343 TQHistogramUtils.cxx:7344 TQHistogramUtils.cxx:7345 TQHistogramUtils.cxx:7346 TQHistogramUtils.cxx:7347 TQHistogramUtils.cxx:7348 TQHistogramUtils.cxx:7349 TQHistogramUtils.cxx:7350 TQHistogramUtils.cxx:7351 TQHistogramUtils.cxx:7352 TQHistogramUtils.cxx:7353 TQHistogramUtils.cxx:7354 TQHistogramUtils.cxx:7355 TQHistogramUtils.cxx:7356 TQHistogramUtils.cxx:7357 TQHistogramUtils.cxx:7358 TQHistogramUtils.cxx:7359 TQHistogramUtils.cxx:7360 TQHistogramUtils.cxx:7361 TQHistogramUtils.cxx:7362 TQHistogramUtils.cxx:7363 TQHistogramUtils.cxx:7364 TQHistogramUtils.cxx:7365 TQHistogramUtils.cxx:7366 TQHistogramUtils.cxx:7367 TQHistogramUtils.cxx:7368 TQHistogramUtils.cxx:7369 TQHistogramUtils.cxx:7370 TQHistogramUtils.cxx:7371 TQHistogramUtils.cxx:7372 TQHistogramUtils.cxx:7373 TQHistogramUtils.cxx:7374 TQHistogramUtils.cxx:7375 TQHistogramUtils.cxx:7376 TQHistogramUtils.cxx:7377 TQHistogramUtils.cxx:7378 TQHistogramUtils.cxx:7379 TQHistogramUtils.cxx:7380 TQHistogramUtils.cxx:7381 TQHistogramUtils.cxx:7382 TQHistogramUtils.cxx:7383 TQHistogramUtils.cxx:7384 TQHistogramUtils.cxx:7385 TQHistogramUtils.cxx:7386 TQHistogramUtils.cxx:7387 TQHistogramUtils.cxx:7388 TQHistogramUtils.cxx:7389 TQHistogramUtils.cxx:7390 TQHistogramUtils.cxx:7391 TQHistogramUtils.cxx:7392 TQHistogramUtils.cxx:7393 TQHistogramUtils.cxx:7394 TQHistogramUtils.cxx:7395 TQHistogramUtils.cxx:7396 TQHistogramUtils.cxx:7397 TQHistogramUtils.cxx:7398 TQHistogramUtils.cxx:7399 TQHistogramUtils.cxx:7400 TQHistogramUtils.cxx:7401 TQHistogramUtils.cxx:7402 TQHistogramUtils.cxx:7403 TQHistogramUtils.cxx:7404 TQHistogramUtils.cxx:7405 TQHistogramUtils.cxx:7406 TQHistogramUtils.cxx:7407 TQHistogramUtils.cxx:7408 TQHistogramUtils.cxx:7409 TQHistogramUtils.cxx:7410 TQHistogramUtils.cxx:7411 TQHistogramUtils.cxx:7412 TQHistogramUtils.cxx:7413 TQHistogramUtils.cxx:7414 TQHistogramUtils.cxx:7415 TQHistogramUtils.cxx:7416 TQHistogramUtils.cxx:7417 TQHistogramUtils.cxx:7418 TQHistogramUtils.cxx:7419 TQHistogramUtils.cxx:7420 TQHistogramUtils.cxx:7421 TQHistogramUtils.cxx:7422 TQHistogramUtils.cxx:7423 TQHistogramUtils.cxx:7424 TQHistogramUtils.cxx:7425 TQHistogramUtils.cxx:7426 TQHistogramUtils.cxx:7427 TQHistogramUtils.cxx:7428 TQHistogramUtils.cxx:7429 TQHistogramUtils.cxx:7430 TQHistogramUtils.cxx:7431 TQHistogramUtils.cxx:7432 TQHistogramUtils.cxx:7433 TQHistogramUtils.cxx:7434 TQHistogramUtils.cxx:7435 TQHistogramUtils.cxx:7436 TQHistogramUtils.cxx:7437 TQHistogramUtils.cxx:7438 TQHistogramUtils.cxx:7439 TQHistogramUtils.cxx:7440 TQHistogramUtils.cxx:7441 TQHistogramUtils.cxx:7442 TQHistogramUtils.cxx:7443 TQHistogramUtils.cxx:7444 TQHistogramUtils.cxx:7445 TQHistogramUtils.cxx:7446 TQHistogramUtils.cxx:7447 TQHistogramUtils.cxx:7448 TQHistogramUtils.cxx:7449 TQHistogramUtils.cxx:7450 TQHistogramUtils.cxx:7451 TQHistogramUtils.cxx:7452 TQHistogramUtils.cxx:7453 TQHistogramUtils.cxx:7454 TQHistogramUtils.cxx:7455 TQHistogramUtils.cxx:7456 TQHistogramUtils.cxx:7457 TQHistogramUtils.cxx:7458 TQHistogramUtils.cxx:7459 TQHistogramUtils.cxx:7460 TQHistogramUtils.cxx:7461 TQHistogramUtils.cxx:7462 TQHistogramUtils.cxx:7463 TQHistogramUtils.cxx:7464 TQHistogramUtils.cxx:7465 TQHistogramUtils.cxx:7466 TQHistogramUtils.cxx:7467 TQHistogramUtils.cxx:7468 TQHistogramUtils.cxx:7469 TQHistogramUtils.cxx:7470 TQHistogramUtils.cxx:7471 TQHistogramUtils.cxx:7472 TQHistogramUtils.cxx:7473 TQHistogramUtils.cxx:7474 TQHistogramUtils.cxx:7475 TQHistogramUtils.cxx:7476 TQHistogramUtils.cxx:7477 TQHistogramUtils.cxx:7478 TQHistogramUtils.cxx:7479 TQHistogramUtils.cxx:7480 TQHistogramUtils.cxx:7481 TQHistogramUtils.cxx:7482 TQHistogramUtils.cxx:7483 TQHistogramUtils.cxx:7484 TQHistogramUtils.cxx:7485 TQHistogramUtils.cxx:7486 TQHistogramUtils.cxx:7487 TQHistogramUtils.cxx:7488 TQHistogramUtils.cxx:7489 TQHistogramUtils.cxx:7490 TQHistogramUtils.cxx:7491 TQHistogramUtils.cxx:7492 TQHistogramUtils.cxx:7493 TQHistogramUtils.cxx:7494 TQHistogramUtils.cxx:7495 TQHistogramUtils.cxx:7496 TQHistogramUtils.cxx:7497 TQHistogramUtils.cxx:7498 TQHistogramUtils.cxx:7499 TQHistogramUtils.cxx:7500 TQHistogramUtils.cxx:7501 TQHistogramUtils.cxx:7502 TQHistogramUtils.cxx:7503 TQHistogramUtils.cxx:7504 TQHistogramUtils.cxx:7505 TQHistogramUtils.cxx:7506 TQHistogramUtils.cxx:7507 TQHistogramUtils.cxx:7508 TQHistogramUtils.cxx:7509 TQHistogramUtils.cxx:7510 TQHistogramUtils.cxx:7511 TQHistogramUtils.cxx:7512 TQHistogramUtils.cxx:7513 TQHistogramUtils.cxx:7514 TQHistogramUtils.cxx:7515 TQHistogramUtils.cxx:7516 TQHistogramUtils.cxx:7517 TQHistogramUtils.cxx:7518 TQHistogramUtils.cxx:7519 TQHistogramUtils.cxx:7520 TQHistogramUtils.cxx:7521 TQHistogramUtils.cxx:7522 TQHistogramUtils.cxx:7523 TQHistogramUtils.cxx:7524 TQHistogramUtils.cxx:7525 TQHistogramUtils.cxx:7526 TQHistogramUtils.cxx:7527 TQHistogramUtils.cxx:7528 TQHistogramUtils.cxx:7529 TQHistogramUtils.cxx:7530 TQHistogramUtils.cxx:7531 TQHistogramUtils.cxx:7532 TQHistogramUtils.cxx:7533 TQHistogramUtils.cxx:7534 TQHistogramUtils.cxx:7535 TQHistogramUtils.cxx:7536 TQHistogramUtils.cxx:7537 TQHistogramUtils.cxx:7538 TQHistogramUtils.cxx:7539 TQHistogramUtils.cxx:7540 TQHistogramUtils.cxx:7541 TQHistogramUtils.cxx:7542 TQHistogramUtils.cxx:7543 TQHistogramUtils.cxx:7544 TQHistogramUtils.cxx:7545 TQHistogramUtils.cxx:7546 TQHistogramUtils.cxx:7547 TQHistogramUtils.cxx:7548 TQHistogramUtils.cxx:7549 TQHistogramUtils.cxx:7550 TQHistogramUtils.cxx:7551 TQHistogramUtils.cxx:7552 TQHistogramUtils.cxx:7553 TQHistogramUtils.cxx:7554 TQHistogramUtils.cxx:7555 TQHistogramUtils.cxx:7556 TQHistogramUtils.cxx:7557 TQHistogramUtils.cxx:7558 TQHistogramUtils.cxx:7559 TQHistogramUtils.cxx:7560 TQHistogramUtils.cxx:7561 TQHistogramUtils.cxx:7562 TQHistogramUtils.cxx:7563 TQHistogramUtils.cxx:7564 TQHistogramUtils.cxx:7565 TQHistogramUtils.cxx:7566 TQHistogramUtils.cxx:7567 TQHistogramUtils.cxx:7568 TQHistogramUtils.cxx:7569 TQHistogramUtils.cxx:7570 TQHistogramUtils.cxx:7571 TQHistogramUtils.cxx:7572 TQHistogramUtils.cxx:7573 TQHistogramUtils.cxx:7574 TQHistogramUtils.cxx:7575 TQHistogramUtils.cxx:7576 TQHistogramUtils.cxx:7577 TQHistogramUtils.cxx:7578 TQHistogramUtils.cxx:7579 TQHistogramUtils.cxx:7580 TQHistogramUtils.cxx:7581 TQHistogramUtils.cxx:7582 TQHistogramUtils.cxx:7583 TQHistogramUtils.cxx:7584 TQHistogramUtils.cxx:7585 TQHistogramUtils.cxx:7586 TQHistogramUtils.cxx:7587 TQHistogramUtils.cxx:7588 TQHistogramUtils.cxx:7589 TQHistogramUtils.cxx:7590 TQHistogramUtils.cxx:7591 TQHistogramUtils.cxx:7592 TQHistogramUtils.cxx:7593 TQHistogramUtils.cxx:7594 TQHistogramUtils.cxx:7595 TQHistogramUtils.cxx:7596 TQHistogramUtils.cxx:7597 TQHistogramUtils.cxx:7598 TQHistogramUtils.cxx:7599 TQHistogramUtils.cxx:7600 TQHistogramUtils.cxx:7601 TQHistogramUtils.cxx:7602 TQHistogramUtils.cxx:7603 TQHistogramUtils.cxx:7604 TQHistogramUtils.cxx:7605 TQHistogramUtils.cxx:7606 TQHistogramUtils.cxx:7607 TQHistogramUtils.cxx:7608 TQHistogramUtils.cxx:7609 TQHistogramUtils.cxx:7610 TQHistogramUtils.cxx:7611 TQHistogramUtils.cxx:7612 TQHistogramUtils.cxx:7613 TQHistogramUtils.cxx:7614 TQHistogramUtils.cxx:7615 TQHistogramUtils.cxx:7616 TQHistogramUtils.cxx:7617 TQHistogramUtils.cxx:7618 TQHistogramUtils.cxx:7619 TQHistogramUtils.cxx:7620 TQHistogramUtils.cxx:7621 TQHistogramUtils.cxx:7622 TQHistogramUtils.cxx:7623 TQHistogramUtils.cxx:7624 TQHistogramUtils.cxx:7625 TQHistogramUtils.cxx:7626 TQHistogramUtils.cxx:7627 TQHistogramUtils.cxx:7628 TQHistogramUtils.cxx:7629 TQHistogramUtils.cxx:7630 TQHistogramUtils.cxx:7631 TQHistogramUtils.cxx:7632 TQHistogramUtils.cxx:7633 TQHistogramUtils.cxx:7634 TQHistogramUtils.cxx:7635 TQHistogramUtils.cxx:7636 TQHistogramUtils.cxx:7637 TQHistogramUtils.cxx:7638 TQHistogramUtils.cxx:7639 TQHistogramUtils.cxx:7640 TQHistogramUtils.cxx:7641 TQHistogramUtils.cxx:7642 TQHistogramUtils.cxx:7643 TQHistogramUtils.cxx:7644 TQHistogramUtils.cxx:7645 TQHistogramUtils.cxx:7646 TQHistogramUtils.cxx:7647 TQHistogramUtils.cxx:7648 TQHistogramUtils.cxx:7649 TQHistogramUtils.cxx:7650 TQHistogramUtils.cxx:7651 TQHistogramUtils.cxx:7652 TQHistogramUtils.cxx:7653 TQHistogramUtils.cxx:7654 TQHistogramUtils.cxx:7655 TQHistogramUtils.cxx:7656 TQHistogramUtils.cxx:7657 TQHistogramUtils.cxx:7658 TQHistogramUtils.cxx:7659 TQHistogramUtils.cxx:7660 TQHistogramUtils.cxx:7661 TQHistogramUtils.cxx:7662 TQHistogramUtils.cxx:7663 TQHistogramUtils.cxx:7664 TQHistogramUtils.cxx:7665 TQHistogramUtils.cxx:7666 TQHistogramUtils.cxx:7667 TQHistogramUtils.cxx:7668 TQHistogramUtils.cxx:7669 TQHistogramUtils.cxx:7670 TQHistogramUtils.cxx:7671 TQHistogramUtils.cxx:7672 TQHistogramUtils.cxx:7673 TQHistogramUtils.cxx:7674 TQHistogramUtils.cxx:7675 TQHistogramUtils.cxx:7676 TQHistogramUtils.cxx:7677 TQHistogramUtils.cxx:7678 TQHistogramUtils.cxx:7679 TQHistogramUtils.cxx:7680 TQHistogramUtils.cxx:7681 TQHistogramUtils.cxx:7682 TQHistogramUtils.cxx:7683 TQHistogramUtils.cxx:7684 TQHistogramUtils.cxx:7685 TQHistogramUtils.cxx:7686 TQHistogramUtils.cxx:7687 TQHistogramUtils.cxx:7688 TQHistogramUtils.cxx:7689 TQHistogramUtils.cxx:7690 TQHistogramUtils.cxx:7691 TQHistogramUtils.cxx:7692 TQHistogramUtils.cxx:7693 TQHistogramUtils.cxx:7694 TQHistogramUtils.cxx:7695 TQHistogramUtils.cxx:7696 TQHistogramUtils.cxx:7697 TQHistogramUtils.cxx:7698 TQHistogramUtils.cxx:7699 TQHistogramUtils.cxx:7700 TQHistogramUtils.cxx:7701 TQHistogramUtils.cxx:7702 TQHistogramUtils.cxx:7703 TQHistogramUtils.cxx:7704 TQHistogramUtils.cxx:7705 TQHistogramUtils.cxx:7706 TQHistogramUtils.cxx:7707 TQHistogramUtils.cxx:7708 TQHistogramUtils.cxx:7709 TQHistogramUtils.cxx:7710 TQHistogramUtils.cxx:7711 TQHistogramUtils.cxx:7712 TQHistogramUtils.cxx:7713 TQHistogramUtils.cxx:7714 TQHistogramUtils.cxx:7715 TQHistogramUtils.cxx:7716 TQHistogramUtils.cxx:7717 TQHistogramUtils.cxx:7718 TQHistogramUtils.cxx:7719 TQHistogramUtils.cxx:7720 TQHistogramUtils.cxx:7721 TQHistogramUtils.cxx:7722 TQHistogramUtils.cxx:7723 TQHistogramUtils.cxx:7724 TQHistogramUtils.cxx:7725 TQHistogramUtils.cxx:7726 TQHistogramUtils.cxx:7727 TQHistogramUtils.cxx:7728 TQHistogramUtils.cxx:7729 TQHistogramUtils.cxx:7730 TQHistogramUtils.cxx:7731 TQHistogramUtils.cxx:7732 TQHistogramUtils.cxx:7733 TQHistogramUtils.cxx:7734 TQHistogramUtils.cxx:7735 TQHistogramUtils.cxx:7736 TQHistogramUtils.cxx:7737 TQHistogramUtils.cxx:7738 TQHistogramUtils.cxx:7739 TQHistogramUtils.cxx:7740 TQHistogramUtils.cxx:7741 TQHistogramUtils.cxx:7742 TQHistogramUtils.cxx:7743 TQHistogramUtils.cxx:7744 TQHistogramUtils.cxx:7745 TQHistogramUtils.cxx:7746 TQHistogramUtils.cxx:7747 TQHistogramUtils.cxx:7748 TQHistogramUtils.cxx:7749 TQHistogramUtils.cxx:7750 TQHistogramUtils.cxx:7751 TQHistogramUtils.cxx:7752 TQHistogramUtils.cxx:7753 TQHistogramUtils.cxx:7754 TQHistogramUtils.cxx:7755 TQHistogramUtils.cxx:7756 TQHistogramUtils.cxx:7757 TQHistogramUtils.cxx:7758 TQHistogramUtils.cxx:7759 TQHistogramUtils.cxx:7760 TQHistogramUtils.cxx:7761 TQHistogramUtils.cxx:7762 TQHistogramUtils.cxx:7763 TQHistogramUtils.cxx:7764 TQHistogramUtils.cxx:7765 TQHistogramUtils.cxx:7766 TQHistogramUtils.cxx:7767 TQHistogramUtils.cxx:7768 TQHistogramUtils.cxx:7769 TQHistogramUtils.cxx:7770 TQHistogramUtils.cxx:7771 TQHistogramUtils.cxx:7772 TQHistogramUtils.cxx:7773 TQHistogramUtils.cxx:7774 TQHistogramUtils.cxx:7775 TQHistogramUtils.cxx:7776 TQHistogramUtils.cxx:7777 TQHistogramUtils.cxx:7778 TQHistogramUtils.cxx:7779 TQHistogramUtils.cxx:7780 TQHistogramUtils.cxx:7781 TQHistogramUtils.cxx:7782 TQHistogramUtils.cxx:7783 TQHistogramUtils.cxx:7784 TQHistogramUtils.cxx:7785 TQHistogramUtils.cxx:7786 TQHistogramUtils.cxx:7787 TQHistogramUtils.cxx:7788 TQHistogramUtils.cxx:7789 TQHistogramUtils.cxx:7790 TQHistogramUtils.cxx:7791 TQHistogramUtils.cxx:7792 TQHistogramUtils.cxx:7793 TQHistogramUtils.cxx:7794 TQHistogramUtils.cxx:7795 TQHistogramUtils.cxx:7796 TQHistogramUtils.cxx:7797 TQHistogramUtils.cxx:7798 TQHistogramUtils.cxx:7799 TQHistogramUtils.cxx:7800 TQHistogramUtils.cxx:7801 TQHistogramUtils.cxx:7802 TQHistogramUtils.cxx:7803 TQHistogramUtils.cxx:7804 TQHistogramUtils.cxx:7805 TQHistogramUtils.cxx:7806 TQHistogramUtils.cxx:7807 TQHistogramUtils.cxx:7808 TQHistogramUtils.cxx:7809 TQHistogramUtils.cxx:7810 TQHistogramUtils.cxx:7811 TQHistogramUtils.cxx:7812 TQHistogramUtils.cxx:7813 TQHistogramUtils.cxx:7814 TQHistogramUtils.cxx:7815 TQHistogramUtils.cxx:7816 TQHistogramUtils.cxx:7817 TQHistogramUtils.cxx:7818 TQHistogramUtils.cxx:7819 TQHistogramUtils.cxx:7820 TQHistogramUtils.cxx:7821 TQHistogramUtils.cxx:7822 TQHistogramUtils.cxx:7823 TQHistogramUtils.cxx:7824 TQHistogramUtils.cxx:7825 TQHistogramUtils.cxx:7826 TQHistogramUtils.cxx:7827 TQHistogramUtils.cxx:7828 TQHistogramUtils.cxx:7829 TQHistogramUtils.cxx:7830 TQHistogramUtils.cxx:7831 TQHistogramUtils.cxx:7832 TQHistogramUtils.cxx:7833 TQHistogramUtils.cxx:7834 TQHistogramUtils.cxx:7835 TQHistogramUtils.cxx:7836 TQHistogramUtils.cxx:7837 TQHistogramUtils.cxx:7838 TQHistogramUtils.cxx:7839 TQHistogramUtils.cxx:7840 TQHistogramUtils.cxx:7841 TQHistogramUtils.cxx:7842 TQHistogramUtils.cxx:7843 TQHistogramUtils.cxx:7844 TQHistogramUtils.cxx:7845 TQHistogramUtils.cxx:7846 TQHistogramUtils.cxx:7847 TQHistogramUtils.cxx:7848 TQHistogramUtils.cxx:7849 TQHistogramUtils.cxx:7850 TQHistogramUtils.cxx:7851 TQHistogramUtils.cxx:7852 TQHistogramUtils.cxx:7853 TQHistogramUtils.cxx:7854 TQHistogramUtils.cxx:7855 TQHistogramUtils.cxx:7856 TQHistogramUtils.cxx:7857 TQHistogramUtils.cxx:7858 TQHistogramUtils.cxx:7859 TQHistogramUtils.cxx:7860 TQHistogramUtils.cxx:7861 TQHistogramUtils.cxx:7862 TQHistogramUtils.cxx:7863 TQHistogramUtils.cxx:7864 TQHistogramUtils.cxx:7865 TQHistogramUtils.cxx:7866 TQHistogramUtils.cxx:7867 TQHistogramUtils.cxx:7868 TQHistogramUtils.cxx:7869 TQHistogramUtils.cxx:7870 TQHistogramUtils.cxx:7871 TQHistogramUtils.cxx:7872 TQHistogramUtils.cxx:7873 TQHistogramUtils.cxx:7874 TQHistogramUtils.cxx:7875 TQHistogramUtils.cxx:7876 TQHistogramUtils.cxx:7877 TQHistogramUtils.cxx:7878 TQHistogramUtils.cxx:7879 TQHistogramUtils.cxx:7880 TQHistogramUtils.cxx:7881 TQHistogramUtils.cxx:7882 TQHistogramUtils.cxx:7883 TQHistogramUtils.cxx:7884 TQHistogramUtils.cxx:7885 TQHistogramUtils.cxx:7886 TQHistogramUtils.cxx:7887 TQHistogramUtils.cxx:7888 TQHistogramUtils.cxx:7889 TQHistogramUtils.cxx:7890 TQHistogramUtils.cxx:7891 TQHistogramUtils.cxx:7892 TQHistogramUtils.cxx:7893 TQHistogramUtils.cxx:7894 TQHistogramUtils.cxx:7895 TQHistogramUtils.cxx:7896 TQHistogramUtils.cxx:7897 TQHistogramUtils.cxx:7898 TQHistogramUtils.cxx:7899 TQHistogramUtils.cxx:7900 TQHistogramUtils.cxx:7901 TQHistogramUtils.cxx:7902 TQHistogramUtils.cxx:7903 TQHistogramUtils.cxx:7904 TQHistogramUtils.cxx:7905 TQHistogramUtils.cxx:7906 TQHistogramUtils.cxx:7907 TQHistogramUtils.cxx:7908 TQHistogramUtils.cxx:7909 TQHistogramUtils.cxx:7910 TQHistogramUtils.cxx:7911 TQHistogramUtils.cxx:7912 TQHistogramUtils.cxx:7913 TQHistogramUtils.cxx:7914 TQHistogramUtils.cxx:7915 TQHistogramUtils.cxx:7916 TQHistogramUtils.cxx:7917 TQHistogramUtils.cxx:7918 TQHistogramUtils.cxx:7919 TQHistogramUtils.cxx:7920 TQHistogramUtils.cxx:7921 TQHistogramUtils.cxx:7922 TQHistogramUtils.cxx:7923 TQHistogramUtils.cxx:7924 TQHistogramUtils.cxx:7925 TQHistogramUtils.cxx:7926 TQHistogramUtils.cxx:7927 TQHistogramUtils.cxx:7928 TQHistogramUtils.cxx:7929 TQHistogramUtils.cxx:7930 TQHistogramUtils.cxx:7931 TQHistogramUtils.cxx:7932 TQHistogramUtils.cxx:7933 TQHistogramUtils.cxx:7934 TQHistogramUtils.cxx:7935 TQHistogramUtils.cxx:7936 TQHistogramUtils.cxx:7937 TQHistogramUtils.cxx:7938 TQHistogramUtils.cxx:7939 TQHistogramUtils.cxx:7940 TQHistogramUtils.cxx:7941 TQHistogramUtils.cxx:7942 TQHistogramUtils.cxx:7943 TQHistogramUtils.cxx:7944 TQHistogramUtils.cxx:7945 TQHistogramUtils.cxx:7946 TQHistogramUtils.cxx:7947 TQHistogramUtils.cxx:7948 TQHistogramUtils.cxx:7949 TQHistogramUtils.cxx:7950 TQHistogramUtils.cxx:7951 TQHistogramUtils.cxx:7952 TQHistogramUtils.cxx:7953 TQHistogramUtils.cxx:7954 TQHistogramUtils.cxx:7955 TQHistogramUtils.cxx:7956 TQHistogramUtils.cxx:7957 TQHistogramUtils.cxx:7958 TQHistogramUtils.cxx:7959 TQHistogramUtils.cxx:7960 TQHistogramUtils.cxx:7961 TQHistogramUtils.cxx:7962 TQHistogramUtils.cxx:7963 TQHistogramUtils.cxx:7964 TQHistogramUtils.cxx:7965 TQHistogramUtils.cxx:7966 TQHistogramUtils.cxx:7967 TQHistogramUtils.cxx:7968 TQHistogramUtils.cxx:7969 TQHistogramUtils.cxx:7970 TQHistogramUtils.cxx:7971 TQHistogramUtils.cxx:7972 TQHistogramUtils.cxx:7973 TQHistogramUtils.cxx:7974 TQHistogramUtils.cxx:7975 TQHistogramUtils.cxx:7976 TQHistogramUtils.cxx:7977 TQHistogramUtils.cxx:7978 TQHistogramUtils.cxx:7979 TQHistogramUtils.cxx:7980 TQHistogramUtils.cxx:7981 TQHistogramUtils.cxx:7982 TQHistogramUtils.cxx:7983 TQHistogramUtils.cxx:7984 TQHistogramUtils.cxx:7985 TQHistogramUtils.cxx:7986 TQHistogramUtils.cxx:7987 TQHistogramUtils.cxx:7988 TQHistogramUtils.cxx:7989 TQHistogramUtils.cxx:7990 TQHistogramUtils.cxx:7991 TQHistogramUtils.cxx:7992 TQHistogramUtils.cxx:7993 TQHistogramUtils.cxx:7994 TQHistogramUtils.cxx:7995 TQHistogramUtils.cxx:7996 TQHistogramUtils.cxx:7997 TQHistogramUtils.cxx:7998 TQHistogramUtils.cxx:7999 TQHistogramUtils.cxx:8000 TQHistogramUtils.cxx:8001 TQHistogramUtils.cxx:8002 TQHistogramUtils.cxx:8003 TQHistogramUtils.cxx:8004 TQHistogramUtils.cxx:8005 TQHistogramUtils.cxx:8006 TQHistogramUtils.cxx:8007 TQHistogramUtils.cxx:8008 TQHistogramUtils.cxx:8009 TQHistogramUtils.cxx:8010 TQHistogramUtils.cxx:8011 TQHistogramUtils.cxx:8012 TQHistogramUtils.cxx:8013 TQHistogramUtils.cxx:8014 TQHistogramUtils.cxx:8015 TQHistogramUtils.cxx:8016 TQHistogramUtils.cxx:8017 TQHistogramUtils.cxx:8018 TQHistogramUtils.cxx:8019 TQHistogramUtils.cxx:8020 TQHistogramUtils.cxx:8021 TQHistogramUtils.cxx:8022 TQHistogramUtils.cxx:8023 TQHistogramUtils.cxx:8024 TQHistogramUtils.cxx:8025 TQHistogramUtils.cxx:8026 TQHistogramUtils.cxx:8027 TQHistogramUtils.cxx:8028 TQHistogramUtils.cxx:8029 TQHistogramUtils.cxx:8030 TQHistogramUtils.cxx:8031 TQHistogramUtils.cxx:8032 TQHistogramUtils.cxx:8033 TQHistogramUtils.cxx:8034 TQHistogramUtils.cxx:8035 TQHistogramUtils.cxx:8036 TQHistogramUtils.cxx:8037 TQHistogramUtils.cxx:8038 TQHistogramUtils.cxx:8039 TQHistogramUtils.cxx:8040 TQHistogramUtils.cxx:8041 TQHistogramUtils.cxx:8042 TQHistogramUtils.cxx:8043 TQHistogramUtils.cxx:8044 TQHistogramUtils.cxx:8045 TQHistogramUtils.cxx:8046 TQHistogramUtils.cxx:8047 TQHistogramUtils.cxx:8048 TQHistogramUtils.cxx:8049 TQHistogramUtils.cxx:8050 TQHistogramUtils.cxx:8051 TQHistogramUtils.cxx:8052 TQHistogramUtils.cxx:8053 TQHistogramUtils.cxx:8054 TQHistogramUtils.cxx:8055 TQHistogramUtils.cxx:8056 TQHistogramUtils.cxx:8057 TQHistogramUtils.cxx:8058 TQHistogramUtils.cxx:8059 TQHistogramUtils.cxx:8060 TQHistogramUtils.cxx:8061 TQHistogramUtils.cxx:8062 TQHistogramUtils.cxx:8063 TQHistogramUtils.cxx:8064 TQHistogramUtils.cxx:8065 TQHistogramUtils.cxx:8066 TQHistogramUtils.cxx:8067 TQHistogramUtils.cxx:8068 TQHistogramUtils.cxx:8069 TQHistogramUtils.cxx:8070 TQHistogramUtils.cxx:8071 TQHistogramUtils.cxx:8072 TQHistogramUtils.cxx:8073 TQHistogramUtils.cxx:8074 TQHistogramUtils.cxx:8075 TQHistogramUtils.cxx:8076 TQHistogramUtils.cxx:8077 TQHistogramUtils.cxx:8078 TQHistogramUtils.cxx:8079 TQHistogramUtils.cxx:8080 TQHistogramUtils.cxx:8081 TQHistogramUtils.cxx:8082 TQHistogramUtils.cxx:8083 TQHistogramUtils.cxx:8084 TQHistogramUtils.cxx:8085 TQHistogramUtils.cxx:8086 TQHistogramUtils.cxx:8087 TQHistogramUtils.cxx:8088 TQHistogramUtils.cxx:8089 TQHistogramUtils.cxx:8090 TQHistogramUtils.cxx:8091 TQHistogramUtils.cxx:8092 TQHistogramUtils.cxx:8093 TQHistogramUtils.cxx:8094 TQHistogramUtils.cxx:8095 TQHistogramUtils.cxx:8096 TQHistogramUtils.cxx:8097 TQHistogramUtils.cxx:8098 TQHistogramUtils.cxx:8099 TQHistogramUtils.cxx:8100 TQHistogramUtils.cxx:8101 TQHistogramUtils.cxx:8102 TQHistogramUtils.cxx:8103 TQHistogramUtils.cxx:8104 TQHistogramUtils.cxx:8105 TQHistogramUtils.cxx:8106 TQHistogramUtils.cxx:8107 TQHistogramUtils.cxx:8108 TQHistogramUtils.cxx:8109 TQHistogramUtils.cxx:8110 TQHistogramUtils.cxx:8111 TQHistogramUtils.cxx:8112 TQHistogramUtils.cxx:8113 TQHistogramUtils.cxx:8114 TQHistogramUtils.cxx:8115 TQHistogramUtils.cxx:8116 TQHistogramUtils.cxx:8117 TQHistogramUtils.cxx:8118 TQHistogramUtils.cxx:8119 TQHistogramUtils.cxx:8120 TQHistogramUtils.cxx:8121 TQHistogramUtils.cxx:8122 TQHistogramUtils.cxx:8123 TQHistogramUtils.cxx:8124 TQHistogramUtils.cxx:8125 TQHistogramUtils.cxx:8126 TQHistogramUtils.cxx:8127 TQHistogramUtils.cxx:8128 TQHistogramUtils.cxx:8129 TQHistogramUtils.cxx:8130 TQHistogramUtils.cxx:8131 TQHistogramUtils.cxx:8132 TQHistogramUtils.cxx:8133 TQHistogramUtils.cxx:8134 TQHistogramUtils.cxx:8135 TQHistogramUtils.cxx:8136 TQHistogramUtils.cxx:8137 TQHistogramUtils.cxx:8138 TQHistogramUtils.cxx:8139 TQHistogramUtils.cxx:8140 TQHistogramUtils.cxx:8141 TQHistogramUtils.cxx:8142 TQHistogramUtils.cxx:8143 TQHistogramUtils.cxx:8144 TQHistogramUtils.cxx:8145 TQHistogramUtils.cxx:8146 TQHistogramUtils.cxx:8147 TQHistogramUtils.cxx:8148 TQHistogramUtils.cxx:8149 TQHistogramUtils.cxx:8150 TQHistogramUtils.cxx:8151 TQHistogramUtils.cxx:8152 TQHistogramUtils.cxx:8153 TQHistogramUtils.cxx:8154 TQHistogramUtils.cxx:8155 TQHistogramUtils.cxx:8156 TQHistogramUtils.cxx:8157 TQHistogramUtils.cxx:8158 TQHistogramUtils.cxx:8159 TQHistogramUtils.cxx:8160 TQHistogramUtils.cxx:8161 TQHistogramUtils.cxx:8162 TQHistogramUtils.cxx:8163 TQHistogramUtils.cxx:8164 TQHistogramUtils.cxx:8165 TQHistogramUtils.cxx:8166 TQHistogramUtils.cxx:8167 TQHistogramUtils.cxx:8168 TQHistogramUtils.cxx:8169 TQHistogramUtils.cxx:8170 TQHistogramUtils.cxx:8171 TQHistogramUtils.cxx:8172 TQHistogramUtils.cxx:8173 TQHistogramUtils.cxx:8174 TQHistogramUtils.cxx:8175 TQHistogramUtils.cxx:8176 TQHistogramUtils.cxx:8177 TQHistogramUtils.cxx:8178 TQHistogramUtils.cxx:8179 TQHistogramUtils.cxx:8180 TQHistogramUtils.cxx:8181 TQHistogramUtils.cxx:8182 TQHistogramUtils.cxx:8183 TQHistogramUtils.cxx:8184 TQHistogramUtils.cxx:8185 TQHistogramUtils.cxx:8186 TQHistogramUtils.cxx:8187 TQHistogramUtils.cxx:8188 TQHistogramUtils.cxx:8189 TQHistogramUtils.cxx:8190 TQHistogramUtils.cxx:8191 TQHistogramUtils.cxx:8192 TQHistogramUtils.cxx:8193 TQHistogramUtils.cxx:8194 TQHistogramUtils.cxx:8195 TQHistogramUtils.cxx:8196 TQHistogramUtils.cxx:8197 TQHistogramUtils.cxx:8198 TQHistogramUtils.cxx:8199 TQHistogramUtils.cxx:8200 TQHistogramUtils.cxx:8201 TQHistogramUtils.cxx:8202 TQHistogramUtils.cxx:8203 TQHistogramUtils.cxx:8204 TQHistogramUtils.cxx:8205 TQHistogramUtils.cxx:8206 TQHistogramUtils.cxx:8207 TQHistogramUtils.cxx:8208 TQHistogramUtils.cxx:8209 TQHistogramUtils.cxx:8210 TQHistogramUtils.cxx:8211 TQHistogramUtils.cxx:8212 TQHistogramUtils.cxx:8213 TQHistogramUtils.cxx:8214 TQHistogramUtils.cxx:8215 TQHistogramUtils.cxx:8216 TQHistogramUtils.cxx:8217 TQHistogramUtils.cxx:8218 TQHistogramUtils.cxx:8219 TQHistogramUtils.cxx:8220 TQHistogramUtils.cxx:8221 TQHistogramUtils.cxx:8222 TQHistogramUtils.cxx:8223 TQHistogramUtils.cxx:8224 TQHistogramUtils.cxx:8225 TQHistogramUtils.cxx:8226 TQHistogramUtils.cxx:8227 TQHistogramUtils.cxx:8228 TQHistogramUtils.cxx:8229 TQHistogramUtils.cxx:8230 TQHistogramUtils.cxx:8231 TQHistogramUtils.cxx:8232 TQHistogramUtils.cxx:8233 TQHistogramUtils.cxx:8234 TQHistogramUtils.cxx:8235 TQHistogramUtils.cxx:8236 TQHistogramUtils.cxx:8237 TQHistogramUtils.cxx:8238 TQHistogramUtils.cxx:8239 TQHistogramUtils.cxx:8240 TQHistogramUtils.cxx:8241 TQHistogramUtils.cxx:8242 TQHistogramUtils.cxx:8243 TQHistogramUtils.cxx:8244 TQHistogramUtils.cxx:8245 TQHistogramUtils.cxx:8246 TQHistogramUtils.cxx:8247 TQHistogramUtils.cxx:8248 TQHistogramUtils.cxx:8249 TQHistogramUtils.cxx:8250 TQHistogramUtils.cxx:8251 TQHistogramUtils.cxx:8252 TQHistogramUtils.cxx:8253 TQHistogramUtils.cxx:8254 TQHistogramUtils.cxx:8255 TQHistogramUtils.cxx:8256 TQHistogramUtils.cxx:8257 TQHistogramUtils.cxx:8258 TQHistogramUtils.cxx:8259 TQHistogramUtils.cxx:8260 TQHistogramUtils.cxx:8261 TQHistogramUtils.cxx:8262 TQHistogramUtils.cxx:8263 TQHistogramUtils.cxx:8264 TQHistogramUtils.cxx:8265 TQHistogramUtils.cxx:8266 TQHistogramUtils.cxx:8267 TQHistogramUtils.cxx:8268 TQHistogramUtils.cxx:8269 TQHistogramUtils.cxx:8270 TQHistogramUtils.cxx:8271 TQHistogramUtils.cxx:8272 TQHistogramUtils.cxx:8273 TQHistogramUtils.cxx:8274 TQHistogramUtils.cxx:8275 TQHistogramUtils.cxx:8276 TQHistogramUtils.cxx:8277 TQHistogramUtils.cxx:8278 TQHistogramUtils.cxx:8279 TQHistogramUtils.cxx:8280 TQHistogramUtils.cxx:8281 TQHistogramUtils.cxx:8282 TQHistogramUtils.cxx:8283 TQHistogramUtils.cxx:8284 TQHistogramUtils.cxx:8285 TQHistogramUtils.cxx:8286 TQHistogramUtils.cxx:8287 TQHistogramUtils.cxx:8288 TQHistogramUtils.cxx:8289 TQHistogramUtils.cxx:8290 TQHistogramUtils.cxx:8291 TQHistogramUtils.cxx:8292 TQHistogramUtils.cxx:8293 TQHistogramUtils.cxx:8294 TQHistogramUtils.cxx:8295 TQHistogramUtils.cxx:8296 TQHistogramUtils.cxx:8297 TQHistogramUtils.cxx:8298 TQHistogramUtils.cxx:8299 TQHistogramUtils.cxx:8300 TQHistogramUtils.cxx:8301 TQHistogramUtils.cxx:8302 TQHistogramUtils.cxx:8303 TQHistogramUtils.cxx:8304 TQHistogramUtils.cxx:8305 TQHistogramUtils.cxx:8306 TQHistogramUtils.cxx:8307 TQHistogramUtils.cxx:8308 TQHistogramUtils.cxx:8309 TQHistogramUtils.cxx:8310 TQHistogramUtils.cxx:8311 TQHistogramUtils.cxx:8312 TQHistogramUtils.cxx:8313 TQHistogramUtils.cxx:8314 TQHistogramUtils.cxx:8315 TQHistogramUtils.cxx:8316 TQHistogramUtils.cxx:8317 TQHistogramUtils.cxx:8318 TQHistogramUtils.cxx:8319 TQHistogramUtils.cxx:8320 TQHistogramUtils.cxx:8321 TQHistogramUtils.cxx:8322 TQHistogramUtils.cxx:8323 TQHistogramUtils.cxx:8324 TQHistogramUtils.cxx:8325 TQHistogramUtils.cxx:8326 TQHistogramUtils.cxx:8327 TQHistogramUtils.cxx:8328 TQHistogramUtils.cxx:8329 TQHistogramUtils.cxx:8330 TQHistogramUtils.cxx:8331 TQHistogramUtils.cxx:8332 TQHistogramUtils.cxx:8333 TQHistogramUtils.cxx:8334 TQHistogramUtils.cxx:8335 TQHistogramUtils.cxx:8336 TQHistogramUtils.cxx:8337 TQHistogramUtils.cxx:8338 TQHistogramUtils.cxx:8339 TQHistogramUtils.cxx:8340 TQHistogramUtils.cxx:8341 TQHistogramUtils.cxx:8342 TQHistogramUtils.cxx:8343 TQHistogramUtils.cxx:8344 TQHistogramUtils.cxx:8345 TQHistogramUtils.cxx:8346 TQHistogramUtils.cxx:8347 TQHistogramUtils.cxx:8348 TQHistogramUtils.cxx:8349 TQHistogramUtils.cxx:8350 TQHistogramUtils.cxx:8351 TQHistogramUtils.cxx:8352 TQHistogramUtils.cxx:8353 TQHistogramUtils.cxx:8354 TQHistogramUtils.cxx:8355 TQHistogramUtils.cxx:8356 TQHistogramUtils.cxx:8357 TQHistogramUtils.cxx:8358 TQHistogramUtils.cxx:8359 TQHistogramUtils.cxx:8360 TQHistogramUtils.cxx:8361 TQHistogramUtils.cxx:8362 TQHistogramUtils.cxx:8363 TQHistogramUtils.cxx:8364 TQHistogramUtils.cxx:8365 TQHistogramUtils.cxx:8366 TQHistogramUtils.cxx:8367 TQHistogramUtils.cxx:8368 TQHistogramUtils.cxx:8369 TQHistogramUtils.cxx:8370 TQHistogramUtils.cxx:8371 TQHistogramUtils.cxx:8372 TQHistogramUtils.cxx:8373 TQHistogramUtils.cxx:8374 TQHistogramUtils.cxx:8375 TQHistogramUtils.cxx:8376 TQHistogramUtils.cxx:8377 TQHistogramUtils.cxx:8378 TQHistogramUtils.cxx:8379 TQHistogramUtils.cxx:8380 TQHistogramUtils.cxx:8381 TQHistogramUtils.cxx:8382 TQHistogramUtils.cxx:8383 TQHistogramUtils.cxx:8384 TQHistogramUtils.cxx:8385 TQHistogramUtils.cxx:8386 TQHistogramUtils.cxx:8387 TQHistogramUtils.cxx:8388 TQHistogramUtils.cxx:8389 TQHistogramUtils.cxx:8390 TQHistogramUtils.cxx:8391 TQHistogramUtils.cxx:8392 TQHistogramUtils.cxx:8393 TQHistogramUtils.cxx:8394 TQHistogramUtils.cxx:8395 TQHistogramUtils.cxx:8396 TQHistogramUtils.cxx:8397 TQHistogramUtils.cxx:8398 TQHistogramUtils.cxx:8399 TQHistogramUtils.cxx:8400 TQHistogramUtils.cxx:8401 TQHistogramUtils.cxx:8402 TQHistogramUtils.cxx:8403 TQHistogramUtils.cxx:8404 TQHistogramUtils.cxx:8405 TQHistogramUtils.cxx:8406 TQHistogramUtils.cxx:8407 TQHistogramUtils.cxx:8408 TQHistogramUtils.cxx:8409 TQHistogramUtils.cxx:8410 TQHistogramUtils.cxx:8411 TQHistogramUtils.cxx:8412 TQHistogramUtils.cxx:8413 TQHistogramUtils.cxx:8414 TQHistogramUtils.cxx:8415 TQHistogramUtils.cxx:8416 TQHistogramUtils.cxx:8417 TQHistogramUtils.cxx:8418 TQHistogramUtils.cxx:8419 TQHistogramUtils.cxx:8420 TQHistogramUtils.cxx:8421 TQHistogramUtils.cxx:8422 TQHistogramUtils.cxx:8423 TQHistogramUtils.cxx:8424 TQHistogramUtils.cxx:8425 TQHistogramUtils.cxx:8426 TQHistogramUtils.cxx:8427 TQHistogramUtils.cxx:8428 TQHistogramUtils.cxx:8429 TQHistogramUtils.cxx:8430 TQHistogramUtils.cxx:8431 TQHistogramUtils.cxx:8432 TQHistogramUtils.cxx:8433 TQHistogramUtils.cxx:8434 TQHistogramUtils.cxx:8435 TQHistogramUtils.cxx:8436 TQHistogramUtils.cxx:8437 TQHistogramUtils.cxx:8438 TQHistogramUtils.cxx:8439 TQHistogramUtils.cxx:8440 TQHistogramUtils.cxx:8441 TQHistogramUtils.cxx:8442 TQHistogramUtils.cxx:8443 TQHistogramUtils.cxx:8444 TQHistogramUtils.cxx:8445 TQHistogramUtils.cxx:8446 TQHistogramUtils.cxx:8447 TQHistogramUtils.cxx:8448 TQHistogramUtils.cxx:8449 TQHistogramUtils.cxx:8450 TQHistogramUtils.cxx:8451 TQHistogramUtils.cxx:8452 TQHistogramUtils.cxx:8453 TQHistogramUtils.cxx:8454 TQHistogramUtils.cxx:8455 TQHistogramUtils.cxx:8456 TQHistogramUtils.cxx:8457 TQHistogramUtils.cxx:8458 TQHistogramUtils.cxx:8459 TQHistogramUtils.cxx:8460 TQHistogramUtils.cxx:8461 TQHistogramUtils.cxx:8462 TQHistogramUtils.cxx:8463 TQHistogramUtils.cxx:8464 TQHistogramUtils.cxx:8465 TQHistogramUtils.cxx:8466 TQHistogramUtils.cxx:8467 TQHistogramUtils.cxx:8468 TQHistogramUtils.cxx:8469 TQHistogramUtils.cxx:8470 TQHistogramUtils.cxx:8471 TQHistogramUtils.cxx:8472 TQHistogramUtils.cxx:8473 TQHistogramUtils.cxx:8474 TQHistogramUtils.cxx:8475 TQHistogramUtils.cxx:8476 TQHistogramUtils.cxx:8477 TQHistogramUtils.cxx:8478 TQHistogramUtils.cxx:8479 TQHistogramUtils.cxx:8480 TQHistogramUtils.cxx:8481 TQHistogramUtils.cxx:8482 TQHistogramUtils.cxx:8483 TQHistogramUtils.cxx:8484 TQHistogramUtils.cxx:8485 TQHistogramUtils.cxx:8486 TQHistogramUtils.cxx:8487 TQHistogramUtils.cxx:8488 TQHistogramUtils.cxx:8489 TQHistogramUtils.cxx:8490 TQHistogramUtils.cxx:8491 TQHistogramUtils.cxx:8492 TQHistogramUtils.cxx:8493 TQHistogramUtils.cxx:8494 TQHistogramUtils.cxx:8495 TQHistogramUtils.cxx:8496 TQHistogramUtils.cxx:8497 TQHistogramUtils.cxx:8498 TQHistogramUtils.cxx:8499 TQHistogramUtils.cxx:8500 TQHistogramUtils.cxx:8501 TQHistogramUtils.cxx:8502 TQHistogramUtils.cxx:8503 TQHistogramUtils.cxx:8504 TQHistogramUtils.cxx:8505 TQHistogramUtils.cxx:8506 TQHistogramUtils.cxx:8507 TQHistogramUtils.cxx:8508 TQHistogramUtils.cxx:8509 TQHistogramUtils.cxx:8510 TQHistogramUtils.cxx:8511 TQHistogramUtils.cxx:8512 TQHistogramUtils.cxx:8513 TQHistogramUtils.cxx:8514 TQHistogramUtils.cxx:8515 TQHistogramUtils.cxx:8516 TQHistogramUtils.cxx:8517 TQHistogramUtils.cxx:8518 TQHistogramUtils.cxx:8519 TQHistogramUtils.cxx:8520 TQHistogramUtils.cxx:8521 TQHistogramUtils.cxx:8522 TQHistogramUtils.cxx:8523 TQHistogramUtils.cxx:8524 TQHistogramUtils.cxx:8525 TQHistogramUtils.cxx:8526 TQHistogramUtils.cxx:8527 TQHistogramUtils.cxx:8528 TQHistogramUtils.cxx:8529 TQHistogramUtils.cxx:8530 TQHistogramUtils.cxx:8531 TQHistogramUtils.cxx:8532 TQHistogramUtils.cxx:8533 TQHistogramUtils.cxx:8534 TQHistogramUtils.cxx:8535 TQHistogramUtils.cxx:8536 TQHistogramUtils.cxx:8537 TQHistogramUtils.cxx:8538 TQHistogramUtils.cxx:8539 TQHistogramUtils.cxx:8540 TQHistogramUtils.cxx:8541 TQHistogramUtils.cxx:8542 TQHistogramUtils.cxx:8543 TQHistogramUtils.cxx:8544 TQHistogramUtils.cxx:8545 TQHistogramUtils.cxx:8546 TQHistogramUtils.cxx:8547 TQHistogramUtils.cxx:8548 TQHistogramUtils.cxx:8549 TQHistogramUtils.cxx:8550 TQHistogramUtils.cxx:8551 TQHistogramUtils.cxx:8552 TQHistogramUtils.cxx:8553 TQHistogramUtils.cxx:8554 TQHistogramUtils.cxx:8555 TQHistogramUtils.cxx:8556 TQHistogramUtils.cxx:8557 TQHistogramUtils.cxx:8558 TQHistogramUtils.cxx:8559 TQHistogramUtils.cxx:8560 TQHistogramUtils.cxx:8561 TQHistogramUtils.cxx:8562 TQHistogramUtils.cxx:8563 TQHistogramUtils.cxx:8564 TQHistogramUtils.cxx:8565 TQHistogramUtils.cxx:8566 TQHistogramUtils.cxx:8567 TQHistogramUtils.cxx:8568 TQHistogramUtils.cxx:8569 TQHistogramUtils.cxx:8570 TQHistogramUtils.cxx:8571 TQHistogramUtils.cxx:8572 TQHistogramUtils.cxx:8573 TQHistogramUtils.cxx:8574 TQHistogramUtils.cxx:8575 TQHistogramUtils.cxx:8576 TQHistogramUtils.cxx:8577 TQHistogramUtils.cxx:8578 TQHistogramUtils.cxx:8579 TQHistogramUtils.cxx:8580 TQHistogramUtils.cxx:8581 TQHistogramUtils.cxx:8582 TQHistogramUtils.cxx:8583 TQHistogramUtils.cxx:8584 TQHistogramUtils.cxx:8585 TQHistogramUtils.cxx:8586 TQHistogramUtils.cxx:8587 TQHistogramUtils.cxx:8588 TQHistogramUtils.cxx:8589 TQHistogramUtils.cxx:8590 TQHistogramUtils.cxx:8591 TQHistogramUtils.cxx:8592 TQHistogramUtils.cxx:8593 TQHistogramUtils.cxx:8594 TQHistogramUtils.cxx:8595 TQHistogramUtils.cxx:8596 TQHistogramUtils.cxx:8597 TQHistogramUtils.cxx:8598 TQHistogramUtils.cxx:8599 TQHistogramUtils.cxx:8600 TQHistogramUtils.cxx:8601 TQHistogramUtils.cxx:8602 TQHistogramUtils.cxx:8603 TQHistogramUtils.cxx:8604 TQHistogramUtils.cxx:8605 TQHistogramUtils.cxx:8606 TQHistogramUtils.cxx:8607 TQHistogramUtils.cxx:8608 TQHistogramUtils.cxx:8609 TQHistogramUtils.cxx:8610 TQHistogramUtils.cxx:8611 TQHistogramUtils.cxx:8612 TQHistogramUtils.cxx:8613 TQHistogramUtils.cxx:8614 TQHistogramUtils.cxx:8615 TQHistogramUtils.cxx:8616 TQHistogramUtils.cxx:8617 TQHistogramUtils.cxx:8618 TQHistogramUtils.cxx:8619 TQHistogramUtils.cxx:8620 TQHistogramUtils.cxx:8621 TQHistogramUtils.cxx:8622 TQHistogramUtils.cxx:8623 TQHistogramUtils.cxx:8624 TQHistogramUtils.cxx:8625 TQHistogramUtils.cxx:8626 TQHistogramUtils.cxx:8627 TQHistogramUtils.cxx:8628 TQHistogramUtils.cxx:8629 TQHistogramUtils.cxx:8630 TQHistogramUtils.cxx:8631 TQHistogramUtils.cxx:8632 TQHistogramUtils.cxx:8633 TQHistogramUtils.cxx:8634 TQHistogramUtils.cxx:8635 TQHistogramUtils.cxx:8636 TQHistogramUtils.cxx:8637 TQHistogramUtils.cxx:8638 TQHistogramUtils.cxx:8639 TQHistogramUtils.cxx:8640 TQHistogramUtils.cxx:8641 TQHistogramUtils.cxx:8642 TQHistogramUtils.cxx:8643 TQHistogramUtils.cxx:8644 TQHistogramUtils.cxx:8645 TQHistogramUtils.cxx:8646 TQHistogramUtils.cxx:8647 TQHistogramUtils.cxx:8648 TQHistogramUtils.cxx:8649 TQHistogramUtils.cxx:8650 TQHistogramUtils.cxx:8651 TQHistogramUtils.cxx:8652 TQHistogramUtils.cxx:8653 TQHistogramUtils.cxx:8654 TQHistogramUtils.cxx:8655 TQHistogramUtils.cxx:8656 TQHistogramUtils.cxx:8657 TQHistogramUtils.cxx:8658 TQHistogramUtils.cxx:8659 TQHistogramUtils.cxx:8660 TQHistogramUtils.cxx:8661 TQHistogramUtils.cxx:8662 TQHistogramUtils.cxx:8663 TQHistogramUtils.cxx:8664 TQHistogramUtils.cxx:8665 TQHistogramUtils.cxx:8666 TQHistogramUtils.cxx:8667 TQHistogramUtils.cxx:8668 TQHistogramUtils.cxx:8669 TQHistogramUtils.cxx:8670 TQHistogramUtils.cxx:8671 TQHistogramUtils.cxx:8672 TQHistogramUtils.cxx:8673 TQHistogramUtils.cxx:8674 TQHistogramUtils.cxx:8675 TQHistogramUtils.cxx:8676 TQHistogramUtils.cxx:8677 TQHistogramUtils.cxx:8678 TQHistogramUtils.cxx:8679 TQHistogramUtils.cxx:8680 TQHistogramUtils.cxx:8681 TQHistogramUtils.cxx:8682 TQHistogramUtils.cxx:8683 TQHistogramUtils.cxx:8684 TQHistogramUtils.cxx:8685 TQHistogramUtils.cxx:8686 TQHistogramUtils.cxx:8687 TQHistogramUtils.cxx:8688 TQHistogramUtils.cxx:8689 TQHistogramUtils.cxx:8690 TQHistogramUtils.cxx:8691 TQHistogramUtils.cxx:8692 TQHistogramUtils.cxx:8693 TQHistogramUtils.cxx:8694 TQHistogramUtils.cxx:8695 TQHistogramUtils.cxx:8696 TQHistogramUtils.cxx:8697 TQHistogramUtils.cxx:8698 TQHistogramUtils.cxx:8699 TQHistogramUtils.cxx:8700 TQHistogramUtils.cxx:8701 TQHistogramUtils.cxx:8702 TQHistogramUtils.cxx:8703 TQHistogramUtils.cxx:8704 TQHistogramUtils.cxx:8705 TQHistogramUtils.cxx:8706 TQHistogramUtils.cxx:8707 TQHistogramUtils.cxx:8708 TQHistogramUtils.cxx:8709 TQHistogramUtils.cxx:8710 TQHistogramUtils.cxx:8711 TQHistogramUtils.cxx:8712 TQHistogramUtils.cxx:8713 TQHistogramUtils.cxx:8714 TQHistogramUtils.cxx:8715 TQHistogramUtils.cxx:8716 TQHistogramUtils.cxx:8717 TQHistogramUtils.cxx:8718 TQHistogramUtils.cxx:8719 TQHistogramUtils.cxx:8720 TQHistogramUtils.cxx:8721 TQHistogramUtils.cxx:8722 TQHistogramUtils.cxx:8723 TQHistogramUtils.cxx:8724 TQHistogramUtils.cxx:8725 TQHistogramUtils.cxx:8726 TQHistogramUtils.cxx:8727 TQHistogramUtils.cxx:8728 TQHistogramUtils.cxx:8729 TQHistogramUtils.cxx:8730 TQHistogramUtils.cxx:8731 TQHistogramUtils.cxx:8732 TQHistogramUtils.cxx:8733 TQHistogramUtils.cxx:8734 TQHistogramUtils.cxx:8735 TQHistogramUtils.cxx:8736 TQHistogramUtils.cxx:8737 TQHistogramUtils.cxx:8738 TQHistogramUtils.cxx:8739 TQHistogramUtils.cxx:8740 TQHistogramUtils.cxx:8741 TQHistogramUtils.cxx:8742 TQHistogramUtils.cxx:8743 TQHistogramUtils.cxx:8744 TQHistogramUtils.cxx:8745 TQHistogramUtils.cxx:8746 TQHistogramUtils.cxx:8747 TQHistogramUtils.cxx:8748 TQHistogramUtils.cxx:8749 TQHistogramUtils.cxx:8750 TQHistogramUtils.cxx:8751 TQHistogramUtils.cxx:8752 TQHistogramUtils.cxx:8753 TQHistogramUtils.cxx:8754 TQHistogramUtils.cxx:8755 TQHistogramUtils.cxx:8756 TQHistogramUtils.cxx:8757 TQHistogramUtils.cxx:8758 TQHistogramUtils.cxx:8759 TQHistogramUtils.cxx:8760 TQHistogramUtils.cxx:8761 TQHistogramUtils.cxx:8762 TQHistogramUtils.cxx:8763 TQHistogramUtils.cxx:8764 TQHistogramUtils.cxx:8765 TQHistogramUtils.cxx:8766 TQHistogramUtils.cxx:8767 TQHistogramUtils.cxx:8768 TQHistogramUtils.cxx:8769 TQHistogramUtils.cxx:8770 TQHistogramUtils.cxx:8771 TQHistogramUtils.cxx:8772 TQHistogramUtils.cxx:8773 TQHistogramUtils.cxx:8774 TQHistogramUtils.cxx:8775 TQHistogramUtils.cxx:8776 TQHistogramUtils.cxx:8777 TQHistogramUtils.cxx:8778 TQHistogramUtils.cxx:8779 TQHistogramUtils.cxx:8780 TQHistogramUtils.cxx:8781 TQHistogramUtils.cxx:8782 TQHistogramUtils.cxx:8783 TQHistogramUtils.cxx:8784 TQHistogramUtils.cxx:8785 TQHistogramUtils.cxx:8786 TQHistogramUtils.cxx:8787 TQHistogramUtils.cxx:8788 TQHistogramUtils.cxx:8789 TQHistogramUtils.cxx:8790 TQHistogramUtils.cxx:8791 TQHistogramUtils.cxx:8792 TQHistogramUtils.cxx:8793 TQHistogramUtils.cxx:8794 TQHistogramUtils.cxx:8795 TQHistogramUtils.cxx:8796 TQHistogramUtils.cxx:8797 TQHistogramUtils.cxx:8798 TQHistogramUtils.cxx:8799 TQHistogramUtils.cxx:8800 TQHistogramUtils.cxx:8801 TQHistogramUtils.cxx:8802 TQHistogramUtils.cxx:8803 TQHistogramUtils.cxx:8804 TQHistogramUtils.cxx:8805 TQHistogramUtils.cxx:8806 TQHistogramUtils.cxx:8807 TQHistogramUtils.cxx:8808 TQHistogramUtils.cxx:8809 TQHistogramUtils.cxx:8810 TQHistogramUtils.cxx:8811 TQHistogramUtils.cxx:8812 TQHistogramUtils.cxx:8813 TQHistogramUtils.cxx:8814 TQHistogramUtils.cxx:8815 TQHistogramUtils.cxx:8816 TQHistogramUtils.cxx:8817 TQHistogramUtils.cxx:8818 TQHistogramUtils.cxx:8819 TQHistogramUtils.cxx:8820 TQHistogramUtils.cxx:8821 TQHistogramUtils.cxx:8822 TQHistogramUtils.cxx:8823 TQHistogramUtils.cxx:8824 TQHistogramUtils.cxx:8825 TQHistogramUtils.cxx:8826 TQHistogramUtils.cxx:8827 TQHistogramUtils.cxx:8828 TQHistogramUtils.cxx:8829 TQHistogramUtils.cxx:8830 TQHistogramUtils.cxx:8831 TQHistogramUtils.cxx:8832 TQHistogramUtils.cxx:8833 TQHistogramUtils.cxx:8834 TQHistogramUtils.cxx:8835 TQHistogramUtils.cxx:8836 TQHistogramUtils.cxx:8837 TQHistogramUtils.cxx:8838 TQHistogramUtils.cxx:8839 TQHistogramUtils.cxx:8840 TQHistogramUtils.cxx:8841 TQHistogramUtils.cxx:8842 TQHistogramUtils.cxx:8843 TQHistogramUtils.cxx:8844 TQHistogramUtils.cxx:8845 TQHistogramUtils.cxx:8846 TQHistogramUtils.cxx:8847 TQHistogramUtils.cxx:8848 TQHistogramUtils.cxx:8849 TQHistogramUtils.cxx:8850 TQHistogramUtils.cxx:8851 TQHistogramUtils.cxx:8852 TQHistogramUtils.cxx:8853 TQHistogramUtils.cxx:8854 TQHistogramUtils.cxx:8855 TQHistogramUtils.cxx:8856 TQHistogramUtils.cxx:8857 TQHistogramUtils.cxx:8858 TQHistogramUtils.cxx:8859 TQHistogramUtils.cxx:8860 TQHistogramUtils.cxx:8861 TQHistogramUtils.cxx:8862 TQHistogramUtils.cxx:8863 TQHistogramUtils.cxx:8864 TQHistogramUtils.cxx:8865 TQHistogramUtils.cxx:8866 TQHistogramUtils.cxx:8867 TQHistogramUtils.cxx:8868 TQHistogramUtils.cxx:8869 TQHistogramUtils.cxx:8870 TQHistogramUtils.cxx:8871 TQHistogramUtils.cxx:8872 TQHistogramUtils.cxx:8873 TQHistogramUtils.cxx:8874 TQHistogramUtils.cxx:8875 TQHistogramUtils.cxx:8876 TQHistogramUtils.cxx:8877 TQHistogramUtils.cxx:8878 TQHistogramUtils.cxx:8879 TQHistogramUtils.cxx:8880 TQHistogramUtils.cxx:8881 TQHistogramUtils.cxx:8882 TQHistogramUtils.cxx:8883 TQHistogramUtils.cxx:8884 TQHistogramUtils.cxx:8885 TQHistogramUtils.cxx:8886 TQHistogramUtils.cxx:8887 TQHistogramUtils.cxx:8888 TQHistogramUtils.cxx:8889 TQHistogramUtils.cxx:8890 TQHistogramUtils.cxx:8891 TQHistogramUtils.cxx:8892 TQHistogramUtils.cxx:8893 TQHistogramUtils.cxx:8894 TQHistogramUtils.cxx:8895 TQHistogramUtils.cxx:8896 TQHistogramUtils.cxx:8897 TQHistogramUtils.cxx:8898 TQHistogramUtils.cxx:8899 TQHistogramUtils.cxx:8900 TQHistogramUtils.cxx:8901 TQHistogramUtils.cxx:8902 TQHistogramUtils.cxx:8903 TQHistogramUtils.cxx:8904 TQHistogramUtils.cxx:8905 TQHistogramUtils.cxx:8906 TQHistogramUtils.cxx:8907 TQHistogramUtils.cxx:8908 TQHistogramUtils.cxx:8909 TQHistogramUtils.cxx:8910 TQHistogramUtils.cxx:8911 TQHistogramUtils.cxx:8912 TQHistogramUtils.cxx:8913 TQHistogramUtils.cxx:8914 TQHistogramUtils.cxx:8915 TQHistogramUtils.cxx:8916 TQHistogramUtils.cxx:8917 TQHistogramUtils.cxx:8918 TQHistogramUtils.cxx:8919 TQHistogramUtils.cxx:8920 TQHistogramUtils.cxx:8921 TQHistogramUtils.cxx:8922 TQHistogramUtils.cxx:8923 TQHistogramUtils.cxx:8924 TQHistogramUtils.cxx:8925 TQHistogramUtils.cxx:8926 TQHistogramUtils.cxx:8927 TQHistogramUtils.cxx:8928 TQHistogramUtils.cxx:8929 TQHistogramUtils.cxx:8930 TQHistogramUtils.cxx:8931 TQHistogramUtils.cxx:8932 TQHistogramUtils.cxx:8933 TQHistogramUtils.cxx:8934 TQHistogramUtils.cxx:8935 TQHistogramUtils.cxx:8936 TQHistogramUtils.cxx:8937 TQHistogramUtils.cxx:8938 TQHistogramUtils.cxx:8939 TQHistogramUtils.cxx:8940 TQHistogramUtils.cxx:8941 TQHistogramUtils.cxx:8942 TQHistogramUtils.cxx:8943 TQHistogramUtils.cxx:8944 TQHistogramUtils.cxx:8945 TQHistogramUtils.cxx:8946 TQHistogramUtils.cxx:8947 TQHistogramUtils.cxx:8948 TQHistogramUtils.cxx:8949 TQHistogramUtils.cxx:8950 TQHistogramUtils.cxx:8951 TQHistogramUtils.cxx:8952 TQHistogramUtils.cxx:8953 TQHistogramUtils.cxx:8954 TQHistogramUtils.cxx:8955 TQHistogramUtils.cxx:8956 TQHistogramUtils.cxx:8957 TQHistogramUtils.cxx:8958 TQHistogramUtils.cxx:8959 TQHistogramUtils.cxx:8960 TQHistogramUtils.cxx:8961 TQHistogramUtils.cxx:8962 TQHistogramUtils.cxx:8963 TQHistogramUtils.cxx:8964 TQHistogramUtils.cxx:8965 TQHistogramUtils.cxx:8966 TQHistogramUtils.cxx:8967 TQHistogramUtils.cxx:8968 TQHistogramUtils.cxx:8969 TQHistogramUtils.cxx:8970 TQHistogramUtils.cxx:8971 TQHistogramUtils.cxx:8972 TQHistogramUtils.cxx:8973 TQHistogramUtils.cxx:8974 TQHistogramUtils.cxx:8975 TQHistogramUtils.cxx:8976 TQHistogramUtils.cxx:8977 TQHistogramUtils.cxx:8978 TQHistogramUtils.cxx:8979 TQHistogramUtils.cxx:8980 TQHistogramUtils.cxx:8981 TQHistogramUtils.cxx:8982 TQHistogramUtils.cxx:8983 TQHistogramUtils.cxx:8984 TQHistogramUtils.cxx:8985 TQHistogramUtils.cxx:8986 TQHistogramUtils.cxx:8987 TQHistogramUtils.cxx:8988 TQHistogramUtils.cxx:8989 TQHistogramUtils.cxx:8990 TQHistogramUtils.cxx:8991 TQHistogramUtils.cxx:8992 TQHistogramUtils.cxx:8993 TQHistogramUtils.cxx:8994 TQHistogramUtils.cxx:8995 TQHistogramUtils.cxx:8996 TQHistogramUtils.cxx:8997 TQHistogramUtils.cxx:8998 TQHistogramUtils.cxx:8999 TQHistogramUtils.cxx:9000 TQHistogramUtils.cxx:9001 TQHistogramUtils.cxx:9002 TQHistogramUtils.cxx:9003 TQHistogramUtils.cxx:9004 TQHistogramUtils.cxx:9005 TQHistogramUtils.cxx:9006 TQHistogramUtils.cxx:9007 TQHistogramUtils.cxx:9008 TQHistogramUtils.cxx:9009 TQHistogramUtils.cxx:9010 TQHistogramUtils.cxx:9011 TQHistogramUtils.cxx:9012 TQHistogramUtils.cxx:9013 TQHistogramUtils.cxx:9014 TQHistogramUtils.cxx:9015 TQHistogramUtils.cxx:9016 TQHistogramUtils.cxx:9017 TQHistogramUtils.cxx:9018 TQHistogramUtils.cxx:9019 TQHistogramUtils.cxx:9020 TQHistogramUtils.cxx:9021 TQHistogramUtils.cxx:9022 TQHistogramUtils.cxx:9023 TQHistogramUtils.cxx:9024 TQHistogramUtils.cxx:9025 TQHistogramUtils.cxx:9026 TQHistogramUtils.cxx:9027 TQHistogramUtils.cxx:9028 TQHistogramUtils.cxx:9029 TQHistogramUtils.cxx:9030 TQHistogramUtils.cxx:9031 TQHistogramUtils.cxx:9032 TQHistogramUtils.cxx:9033 TQHistogramUtils.cxx:9034 TQHistogramUtils.cxx:9035 TQHistogramUtils.cxx:9036 TQHistogramUtils.cxx:9037 TQHistogramUtils.cxx:9038 TQHistogramUtils.cxx:9039 TQHistogramUtils.cxx:9040 TQHistogramUtils.cxx:9041 TQHistogramUtils.cxx:9042 TQHistogramUtils.cxx:9043 TQHistogramUtils.cxx:9044 TQHistogramUtils.cxx:9045 TQHistogramUtils.cxx:9046 TQHistogramUtils.cxx:9047 TQHistogramUtils.cxx:9048 TQHistogramUtils.cxx:9049 TQHistogramUtils.cxx:9050 TQHistogramUtils.cxx:9051 TQHistogramUtils.cxx:9052 TQHistogramUtils.cxx:9053 TQHistogramUtils.cxx:9054 TQHistogramUtils.cxx:9055 TQHistogramUtils.cxx:9056 TQHistogramUtils.cxx:9057 TQHistogramUtils.cxx:9058 TQHistogramUtils.cxx:9059 TQHistogramUtils.cxx:9060 TQHistogramUtils.cxx:9061 TQHistogramUtils.cxx:9062 TQHistogramUtils.cxx:9063 TQHistogramUtils.cxx:9064 TQHistogramUtils.cxx:9065 TQHistogramUtils.cxx:9066 TQHistogramUtils.cxx:9067 TQHistogramUtils.cxx:9068 TQHistogramUtils.cxx:9069 TQHistogramUtils.cxx:9070 TQHistogramUtils.cxx:9071 TQHistogramUtils.cxx:9072 TQHistogramUtils.cxx:9073 TQHistogramUtils.cxx:9074 TQHistogramUtils.cxx:9075 TQHistogramUtils.cxx:9076 TQHistogramUtils.cxx:9077 TQHistogramUtils.cxx:9078 TQHistogramUtils.cxx:9079 TQHistogramUtils.cxx:9080 TQHistogramUtils.cxx:9081 TQHistogramUtils.cxx:9082 TQHistogramUtils.cxx:9083 TQHistogramUtils.cxx:9084 TQHistogramUtils.cxx:9085 TQHistogramUtils.cxx:9086 TQHistogramUtils.cxx:9087 TQHistogramUtils.cxx:9088 TQHistogramUtils.cxx:9089 TQHistogramUtils.cxx:9090 TQHistogramUtils.cxx:9091 TQHistogramUtils.cxx:9092 TQHistogramUtils.cxx:9093 TQHistogramUtils.cxx:9094 TQHistogramUtils.cxx:9095 TQHistogramUtils.cxx:9096 TQHistogramUtils.cxx:9097 TQHistogramUtils.cxx:9098 TQHistogramUtils.cxx:9099 TQHistogramUtils.cxx:9100 TQHistogramUtils.cxx:9101 TQHistogramUtils.cxx:9102 TQHistogramUtils.cxx:9103 TQHistogramUtils.cxx:9104 TQHistogramUtils.cxx:9105 TQHistogramUtils.cxx:9106 TQHistogramUtils.cxx:9107 TQHistogramUtils.cxx:9108 TQHistogramUtils.cxx:9109 TQHistogramUtils.cxx:9110 TQHistogramUtils.cxx:9111 TQHistogramUtils.cxx:9112 TQHistogramUtils.cxx:9113 TQHistogramUtils.cxx:9114 TQHistogramUtils.cxx:9115 TQHistogramUtils.cxx:9116 TQHistogramUtils.cxx:9117 TQHistogramUtils.cxx:9118 TQHistogramUtils.cxx:9119 TQHistogramUtils.cxx:9120 TQHistogramUtils.cxx:9121 TQHistogramUtils.cxx:9122 TQHistogramUtils.cxx:9123 TQHistogramUtils.cxx:9124 TQHistogramUtils.cxx:9125 TQHistogramUtils.cxx:9126 TQHistogramUtils.cxx:9127 TQHistogramUtils.cxx:9128 TQHistogramUtils.cxx:9129 TQHistogramUtils.cxx:9130 TQHistogramUtils.cxx:9131 TQHistogramUtils.cxx:9132 TQHistogramUtils.cxx:9133 TQHistogramUtils.cxx:9134 TQHistogramUtils.cxx:9135 TQHistogramUtils.cxx:9136 TQHistogramUtils.cxx:9137 TQHistogramUtils.cxx:9138 TQHistogramUtils.cxx:9139 TQHistogramUtils.cxx:9140 TQHistogramUtils.cxx:9141 TQHistogramUtils.cxx:9142 TQHistogramUtils.cxx:9143 TQHistogramUtils.cxx:9144 TQHistogramUtils.cxx:9145 TQHistogramUtils.cxx:9146 TQHistogramUtils.cxx:9147 TQHistogramUtils.cxx:9148 TQHistogramUtils.cxx:9149 TQHistogramUtils.cxx:9150 TQHistogramUtils.cxx:9151 TQHistogramUtils.cxx:9152 TQHistogramUtils.cxx:9153 TQHistogramUtils.cxx:9154 TQHistogramUtils.cxx:9155 TQHistogramUtils.cxx:9156 TQHistogramUtils.cxx:9157 TQHistogramUtils.cxx:9158 TQHistogramUtils.cxx:9159 TQHistogramUtils.cxx:9160 TQHistogramUtils.cxx:9161 TQHistogramUtils.cxx:9162 TQHistogramUtils.cxx:9163 TQHistogramUtils.cxx:9164 TQHistogramUtils.cxx:9165 TQHistogramUtils.cxx:9166 TQHistogramUtils.cxx:9167 TQHistogramUtils.cxx:9168 TQHistogramUtils.cxx:9169 TQHistogramUtils.cxx:9170 TQHistogramUtils.cxx:9171 TQHistogramUtils.cxx:9172 TQHistogramUtils.cxx:9173 TQHistogramUtils.cxx:9174 TQHistogramUtils.cxx:9175 TQHistogramUtils.cxx:9176