//____________________________________________________________________
//
// BEGIN_HTML
// <h2>Histogram tool</h2>
// <p>
// The tool allows to book and fill many histograms inside an analysis
// in a transparent and efficient way.
// </p>
// <p>
// For each tool a folder with the name of the tool is created inside
// the output file of the analysis job. The histograms can also be
// managed in subfolders simply by prepending the path in the
// hisotgram name (see the example below). The subfolders are created
// automatically if they do not exist.
// </p>
// <p>
// <h3>Example:</h3>
// MyAnalysis.h:
// <pre>
// private:
//   AtlHistogramTool *fHistograms1;   // List 1
//   AtlHistogramTool *fHistograms2;   // List 2
//   ...
// </pre>
// MyAnalysis::BookHistograms():
// <pre>
//
// // Pre-tagged histograms
// fHistograms1 = new AtlHistogramTool("PreTag",
//                                     "Pre-tagged histograms");
// AddTool(fHistograms1)
//
// // Leading lepton Pt
// fHistograms1->Add("leptons/h_lep1_Pt", "Leading Lepton Pt", 40, 0., 200.,
//                   "Leading lepton p_{T} [GeV]", "Events");
//
// // Leading lepton eta
// fHistograms1->Add("leptons/h_lep1_Eta", "Leading Lepton Eta",
//                   50, -2.5, 2.5, "Leading lepton #eta", "Events");
//
// // Leading electron Pt
// fHistograms1->Add("leptons/el/h_el1_Pt", "Leading Electron Pt", 40, 0., 200.,
//                   "Leading electron p_{T} [GeV]", "Events");
// ...
//
// // b-tagged histograms
// fHistograms2 = new AtlHistogramTool("bTag",
//                                     "b-tagged histograms");
// AddTool(fHistograms2)
//
// // Leading jet Pt
// fHistograms2->Add("jets/h_jet1_Pt", "Leading Jet Pt",
//                   40, 0., 200., "Leading jet p_{T} [GeV]", "Events");
//    
// // Leading jet eta
// fHistograms2->Add("jets/h_jet1_Eta", "Leading Jet Eta",
//                   100, -5., 5., "Leading jet #eta", "Events");
// ...
// </pre>
// 
// MyAnalysis::ProcessCut():
// <pre>
// fHistograms1->Fill("leptons/h_lep1_Pt",  lep1->Pt(), w1);
// fHistograms1->Fill("leptons/h_lep1_Eta", lep1->Eta(), w1);
// fHistograms1->Fill("leptons/el/h_el1_Pt",  el1->Pt(), w1);
// ...
// // Perform b-tagging
// ...
// fHistograms1->Fill("jets/h_jet1_Pt",  jet1->Pt(), w2);
// fHistograms1->Fill("jets/h_jet1_Eta", jet1->Eta(), w2);
// ...
// </pre>
//
// END_HTML
//  
//  
// Author: Oliver Maria Kind <mailto: kind@physik.hu-berlin.de>
// Update: $Id: AtlHistogramTool.cxx,v 1.5 2017/01/22 12:16:58 kind Exp $
// Copyright: 2015 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlHistogramTool
#include <AtlHistogramTool.h>
#endif
#include <AtlSelector.h>
#include <TFile.h>
#include <iostream>

using namespace std;

#ifndef __CINT__
ClassImp(AtlHistogramTool);
#endif

//____________________________________________________________________

AtlHistogramTool::AtlHistogramTool(const char* name, const char* title) :
    AtlAnalysisTool(name, title) {
    //
    // Default constructor
    //
    fProcessMode = kIndividual;
    fParentDir = 0;
    fHistograms = new THashList();
}

//____________________________________________________________________

AtlHistogramTool::~AtlHistogramTool() {
    //
    // Default destructor
    //
    fHistograms->Delete();
    delete fHistograms;
}

//____________________________________________________________________

TH1D* AtlHistogramTool::Add(const char* hname, const char* title,
			    Int_t nbinsx, Double_t xlow, Double_t xup,
			    const char* xtitle, const char* ytitle) {
    //
    // Add TH1D histogram
    //
    // The histogram name can contain a path of subdirectories. These
    // directories are created automatically if they do not exist. All
    // path names are relative to the parent folder of the tool.
    //
    
    // Store current dirctory
    TDirectory *savdir = gDirectory;

    // Top-level folder exists ?
    if ( fParentDir == 0 ) {
	// Go to output file folder and create parent folder
	fParent->GetOutputFile()->cd();
	fParentDir = gDirectory->mkdir(GetName(), GetTitle());
    }
    fParentDir->cd();

    // Check if the histogram belongs to a subfolder
    // and create folder if necessary 
    TString dirname = gSystem->DirName(hname);
    if ( dirname != "." ) {
	MkDirWithParents(dirname.Data());
    }

    // Check if a histogram with the same name already exists in the
    // current folder
    const char* bname = gSystem->BaseName(hname); 
    if ( gDirectory->FindObject(bname) != 0 ) {
	Error("Add", "Histogram with given name \"%s\" exists already in the current folder. Please use a different name. Abort!", bname);
	gSystem->Abort(1);
    }
    
    // Create and add histogram
    TH1D *h = new TH1D(bname, title, nbinsx, xlow, xup);
    h->SetXTitle(xtitle);
    h->SetYTitle(ytitle);
    fHistograms->Add(new AtlHistObject(hname, title, h));

    // Restore pwd
    savdir->cd();

    return h;
}

//____________________________________________________________________

TH2D* AtlHistogramTool::Add(const char* hname, const char* title,
			    Int_t nbinsx, Double_t xlow, Double_t xup,
			    Int_t nbinsy, Double_t ylow, Double_t yup,
			    const char* xtitle, const char* ytitle,
			    const char* ztitle) {
    //
    // Add TH2D histogram
    //
    // The histogram name can contain a path of subdirectories. These
    // directories are created automatically if they do not exist. All
    // path names are relative to the parent folder of the tool.
    //
    
    // Store current dirctory
    TDirectory *savdir = gDirectory;

    // Top-level folder exists ?
    if ( fParentDir == 0 ) {
	// Go to output file folder and create parent folder
	fParent->GetOutputFile()->cd();
	fParentDir = gDirectory->mkdir(GetName(), GetTitle());
    }
    fParentDir->cd();

    // Check if the histogram belongs to a subfolder
    // and create folder if necessary 
    TString dirname = gSystem->DirName(hname);
    if ( dirname != "." ) {
	MkDirWithParents(dirname.Data());
    }

    // Check if a histogram with the same name already exists in the
    // current folder
    const char* bname = gSystem->BaseName(hname); 
    if ( gDirectory->FindObject(bname) != 0 ) {
	Error("Add", "Histogram with given name \"%s\" exists already in the current folder. Please use a different name. Abort!", bname);
	gSystem->Abort(1);
    }
    
    // Create and add histogram
    TH2D *h = new TH2D(bname, title, nbinsx, xlow, xup, nbinsy, ylow, yup);
    h->SetXTitle(xtitle);
    h->SetYTitle(ytitle);
    h->SetZTitle(ztitle);
    fHistograms->Add(new AtlHistObject(hname, title, h));

    // Restore pwd
    savdir->cd();

    return h;
}

//____________________________________________________________________

TH2D* AtlHistogramTool::Add(const char* hname, const char* title,
			    Int_t nbinsx, Double_t xlow, Double_t xup,
			    Int_t nbinsy, const Double_t *ybins,
			    const char* xtitle, const char* ytitle,
			    const char* ztitle) {
    //
    // Add TH2D histogram
    //
    // The histogram name can contain a path of subdirectories. These
    // directories are created automatically if they do not exist. All
    // path names are relative to the parent folder of the tool.
    //
    
    // Store current dirctory
    TDirectory *savdir = gDirectory;

    // Top-level folder exists ?
    if ( fParentDir == 0 ) {
	// Go to output file folder and create parent folder
	fParent->GetOutputFile()->cd();
	fParentDir = gDirectory->mkdir(GetName(), GetTitle());
    }
    fParentDir->cd();

    // Check if the histogram belongs to a subfolder
    // and create folder if necessary 
    TString dirname = gSystem->DirName(hname);
    if ( dirname != "." ) {
	MkDirWithParents(dirname.Data());
    }

    // Check if a histogram with the same name already exists in the
    // current folder
    const char* bname = gSystem->BaseName(hname); 
    if ( gDirectory->FindObject(bname) != 0 ) {
	Error("Add", "Histogram with given name \"%s\" exists already in the current folder. Please use a different name. Abort!", bname);
	gSystem->Abort(1);
    }
    
    // Create and add histogram
    TH2D *h = new TH2D(bname, title, nbinsx, xlow, xup, nbinsy, ybins);
    h->SetXTitle(xtitle);
    h->SetYTitle(ytitle);
    h->SetZTitle(ztitle);
    fHistograms->Add(new AtlHistObject(hname, title, h));

    // Restore pwd
    savdir->cd();

    return h;
}

//____________________________________________________________________

void AtlHistogramTool::Fill(const char* name, Double_t x, Double_t w) {
    //
    // Fill given histogram with value x and weight w
    //
    // The histogram name needs to contain the full path of the
    // histogram as given when booking the histogram using the Add()
    // member function.
    //
    AtlHistObject *h_obj = (AtlHistObject*)fHistograms->FindObject(name);
    if ( h_obj == 0 ) {
	Error("Fill",
	      "Histogram \"%s\" not found. Check histogram name! Abort.",
	      name);
	gSystem->Abort(1);
    }
    TH1D *h = (TH1D*)h_obj->GetHistogram();
    h->Fill(x, w);
}

//____________________________________________________________________

void AtlHistogramTool::Fill(const char* name, Double_t x, Double_t y,
			    Double_t w) {
    //
    // Fill given histogram with values x,y and weight w
    //
    // The histogram name needs to contain the full path of the
    // histogram as given when booking the histogram using the Add()
    // member function.
    //
    AtlHistObject *h_obj = (AtlHistObject*)fHistograms->FindObject(name);
    if ( h_obj == 0 ) {
	Error("Fill",
	      "Histogram \"%s\" not found. Check histogram name! Abort.",
	      name);
	gSystem->Abort(1);
    }
    TH2D *h = (TH2D*)h_obj->GetHistogram();
    h->Fill(x, y, w);
}

//____________________________________________________________________

TDirectory* AtlHistogramTool::MkDirWithParents(const char* dir) {
    //
    // Create the given directoy and all of its parents if necessary
    // in the top-level directory
    //
    TString fulldir(dir);
    TObjArray *subdirs = fulldir.Tokenize("/");
    fParentDir->cd();
    TIter next_dir(subdirs);
    TObjString *subdir = 0;
    while ( (subdir = (TObjString*)next_dir()) ) {
        if ( gDirectory->FindObject(subdir->GetString().Data()) == 0 ) {
            gDirectory->mkdir(subdir->GetString().Data());
	    if ( gDebug > 0 ) {
		Info("MkDirWithParents", "Create folder %s/",
		     subdir->GetString().Data());
	    }
        }
        gDirectory->cd(subdir->GetString().Data());
    }

    //Clear objects
    delete subdirs;
    delete subdir;

    return gDirectory;
}

//____________________________________________________________________

void AtlHistogramTool::Print() const {
    //
    // Print tool configuration
    //
    Info("Print", "Registered analysis tool \"%s\" of type AtlHistogramTool with the following configuration:",
	 GetName());
    cout << endl;
    fParentDir->ls();
    cout << endl;
}

  
     
 AtlHistogramTool.cxx:1
 AtlHistogramTool.cxx:2
 AtlHistogramTool.cxx:3
 AtlHistogramTool.cxx:4
 AtlHistogramTool.cxx:5
 AtlHistogramTool.cxx:6
 AtlHistogramTool.cxx:7
 AtlHistogramTool.cxx:8
 AtlHistogramTool.cxx:9
 AtlHistogramTool.cxx:10
 AtlHistogramTool.cxx:11
 AtlHistogramTool.cxx:12
 AtlHistogramTool.cxx:13
 AtlHistogramTool.cxx:14
 AtlHistogramTool.cxx:15
 AtlHistogramTool.cxx:16
 AtlHistogramTool.cxx:17
 AtlHistogramTool.cxx:18
 AtlHistogramTool.cxx:19
 AtlHistogramTool.cxx:20
 AtlHistogramTool.cxx:21
 AtlHistogramTool.cxx:22
 AtlHistogramTool.cxx:23
 AtlHistogramTool.cxx:24
 AtlHistogramTool.cxx:25
 AtlHistogramTool.cxx:26
 AtlHistogramTool.cxx:27
 AtlHistogramTool.cxx:28
 AtlHistogramTool.cxx:29
 AtlHistogramTool.cxx:30
 AtlHistogramTool.cxx:31
 AtlHistogramTool.cxx:32
 AtlHistogramTool.cxx:33
 AtlHistogramTool.cxx:34
 AtlHistogramTool.cxx:35
 AtlHistogramTool.cxx:36
 AtlHistogramTool.cxx:37
 AtlHistogramTool.cxx:38
 AtlHistogramTool.cxx:39
 AtlHistogramTool.cxx:40
 AtlHistogramTool.cxx:41
 AtlHistogramTool.cxx:42
 AtlHistogramTool.cxx:43
 AtlHistogramTool.cxx:44
 AtlHistogramTool.cxx:45
 AtlHistogramTool.cxx:46
 AtlHistogramTool.cxx:47
 AtlHistogramTool.cxx:48
 AtlHistogramTool.cxx:49
 AtlHistogramTool.cxx:50
 AtlHistogramTool.cxx:51
 AtlHistogramTool.cxx:52
 AtlHistogramTool.cxx:53
 AtlHistogramTool.cxx:54
 AtlHistogramTool.cxx:55
 AtlHistogramTool.cxx:56
 AtlHistogramTool.cxx:57
 AtlHistogramTool.cxx:58
 AtlHistogramTool.cxx:59
 AtlHistogramTool.cxx:60
 AtlHistogramTool.cxx:61
 AtlHistogramTool.cxx:62
 AtlHistogramTool.cxx:63
 AtlHistogramTool.cxx:64
 AtlHistogramTool.cxx:65
 AtlHistogramTool.cxx:66
 AtlHistogramTool.cxx:67
 AtlHistogramTool.cxx:68
 AtlHistogramTool.cxx:69
 AtlHistogramTool.cxx:70
 AtlHistogramTool.cxx:71
 AtlHistogramTool.cxx:72
 AtlHistogramTool.cxx:73
 AtlHistogramTool.cxx:74
 AtlHistogramTool.cxx:75
 AtlHistogramTool.cxx:76
 AtlHistogramTool.cxx:77
 AtlHistogramTool.cxx:78
 AtlHistogramTool.cxx:79
 AtlHistogramTool.cxx:80
 AtlHistogramTool.cxx:81
 AtlHistogramTool.cxx:82
 AtlHistogramTool.cxx:83
 AtlHistogramTool.cxx:84
 AtlHistogramTool.cxx:85
 AtlHistogramTool.cxx:86
 AtlHistogramTool.cxx:87
 AtlHistogramTool.cxx:88
 AtlHistogramTool.cxx:89
 AtlHistogramTool.cxx:90
 AtlHistogramTool.cxx:91
 AtlHistogramTool.cxx:92
 AtlHistogramTool.cxx:93
 AtlHistogramTool.cxx:94
 AtlHistogramTool.cxx:95
 AtlHistogramTool.cxx:96
 AtlHistogramTool.cxx:97
 AtlHistogramTool.cxx:98
 AtlHistogramTool.cxx:99
 AtlHistogramTool.cxx:100
 AtlHistogramTool.cxx:101
 AtlHistogramTool.cxx:102
 AtlHistogramTool.cxx:103
 AtlHistogramTool.cxx:104
 AtlHistogramTool.cxx:105
 AtlHistogramTool.cxx:106
 AtlHistogramTool.cxx:107
 AtlHistogramTool.cxx:108
 AtlHistogramTool.cxx:109
 AtlHistogramTool.cxx:110
 AtlHistogramTool.cxx:111
 AtlHistogramTool.cxx:112
 AtlHistogramTool.cxx:113
 AtlHistogramTool.cxx:114
 AtlHistogramTool.cxx:115
 AtlHistogramTool.cxx:116
 AtlHistogramTool.cxx:117
 AtlHistogramTool.cxx:118
 AtlHistogramTool.cxx:119
 AtlHistogramTool.cxx:120
 AtlHistogramTool.cxx:121
 AtlHistogramTool.cxx:122
 AtlHistogramTool.cxx:123
 AtlHistogramTool.cxx:124
 AtlHistogramTool.cxx:125
 AtlHistogramTool.cxx:126
 AtlHistogramTool.cxx:127
 AtlHistogramTool.cxx:128
 AtlHistogramTool.cxx:129
 AtlHistogramTool.cxx:130
 AtlHistogramTool.cxx:131
 AtlHistogramTool.cxx:132
 AtlHistogramTool.cxx:133
 AtlHistogramTool.cxx:134
 AtlHistogramTool.cxx:135
 AtlHistogramTool.cxx:136
 AtlHistogramTool.cxx:137
 AtlHistogramTool.cxx:138
 AtlHistogramTool.cxx:139
 AtlHistogramTool.cxx:140
 AtlHistogramTool.cxx:141
 AtlHistogramTool.cxx:142
 AtlHistogramTool.cxx:143
 AtlHistogramTool.cxx:144
 AtlHistogramTool.cxx:145
 AtlHistogramTool.cxx:146
 AtlHistogramTool.cxx:147
 AtlHistogramTool.cxx:148
 AtlHistogramTool.cxx:149
 AtlHistogramTool.cxx:150
 AtlHistogramTool.cxx:151
 AtlHistogramTool.cxx:152
 AtlHistogramTool.cxx:153
 AtlHistogramTool.cxx:154
 AtlHistogramTool.cxx:155
 AtlHistogramTool.cxx:156
 AtlHistogramTool.cxx:157
 AtlHistogramTool.cxx:158
 AtlHistogramTool.cxx:159
 AtlHistogramTool.cxx:160
 AtlHistogramTool.cxx:161
 AtlHistogramTool.cxx:162
 AtlHistogramTool.cxx:163
 AtlHistogramTool.cxx:164
 AtlHistogramTool.cxx:165
 AtlHistogramTool.cxx:166
 AtlHistogramTool.cxx:167
 AtlHistogramTool.cxx:168
 AtlHistogramTool.cxx:169
 AtlHistogramTool.cxx:170
 AtlHistogramTool.cxx:171
 AtlHistogramTool.cxx:172
 AtlHistogramTool.cxx:173
 AtlHistogramTool.cxx:174
 AtlHistogramTool.cxx:175
 AtlHistogramTool.cxx:176
 AtlHistogramTool.cxx:177
 AtlHistogramTool.cxx:178
 AtlHistogramTool.cxx:179
 AtlHistogramTool.cxx:180
 AtlHistogramTool.cxx:181
 AtlHistogramTool.cxx:182
 AtlHistogramTool.cxx:183
 AtlHistogramTool.cxx:184
 AtlHistogramTool.cxx:185
 AtlHistogramTool.cxx:186
 AtlHistogramTool.cxx:187
 AtlHistogramTool.cxx:188
 AtlHistogramTool.cxx:189
 AtlHistogramTool.cxx:190
 AtlHistogramTool.cxx:191
 AtlHistogramTool.cxx:192
 AtlHistogramTool.cxx:193
 AtlHistogramTool.cxx:194
 AtlHistogramTool.cxx:195
 AtlHistogramTool.cxx:196
 AtlHistogramTool.cxx:197
 AtlHistogramTool.cxx:198
 AtlHistogramTool.cxx:199
 AtlHistogramTool.cxx:200
 AtlHistogramTool.cxx:201
 AtlHistogramTool.cxx:202
 AtlHistogramTool.cxx:203
 AtlHistogramTool.cxx:204
 AtlHistogramTool.cxx:205
 AtlHistogramTool.cxx:206
 AtlHistogramTool.cxx:207
 AtlHistogramTool.cxx:208
 AtlHistogramTool.cxx:209
 AtlHistogramTool.cxx:210
 AtlHistogramTool.cxx:211
 AtlHistogramTool.cxx:212
 AtlHistogramTool.cxx:213
 AtlHistogramTool.cxx:214
 AtlHistogramTool.cxx:215
 AtlHistogramTool.cxx:216
 AtlHistogramTool.cxx:217
 AtlHistogramTool.cxx:218
 AtlHistogramTool.cxx:219
 AtlHistogramTool.cxx:220
 AtlHistogramTool.cxx:221
 AtlHistogramTool.cxx:222
 AtlHistogramTool.cxx:223
 AtlHistogramTool.cxx:224
 AtlHistogramTool.cxx:225
 AtlHistogramTool.cxx:226
 AtlHistogramTool.cxx:227
 AtlHistogramTool.cxx:228
 AtlHistogramTool.cxx:229
 AtlHistogramTool.cxx:230
 AtlHistogramTool.cxx:231
 AtlHistogramTool.cxx:232
 AtlHistogramTool.cxx:233
 AtlHistogramTool.cxx:234
 AtlHistogramTool.cxx:235
 AtlHistogramTool.cxx:236
 AtlHistogramTool.cxx:237
 AtlHistogramTool.cxx:238
 AtlHistogramTool.cxx:239
 AtlHistogramTool.cxx:240
 AtlHistogramTool.cxx:241
 AtlHistogramTool.cxx:242
 AtlHistogramTool.cxx:243
 AtlHistogramTool.cxx:244
 AtlHistogramTool.cxx:245
 AtlHistogramTool.cxx:246
 AtlHistogramTool.cxx:247
 AtlHistogramTool.cxx:248
 AtlHistogramTool.cxx:249
 AtlHistogramTool.cxx:250
 AtlHistogramTool.cxx:251
 AtlHistogramTool.cxx:252
 AtlHistogramTool.cxx:253
 AtlHistogramTool.cxx:254
 AtlHistogramTool.cxx:255
 AtlHistogramTool.cxx:256
 AtlHistogramTool.cxx:257
 AtlHistogramTool.cxx:258
 AtlHistogramTool.cxx:259
 AtlHistogramTool.cxx:260
 AtlHistogramTool.cxx:261
 AtlHistogramTool.cxx:262
 AtlHistogramTool.cxx:263
 AtlHistogramTool.cxx:264
 AtlHistogramTool.cxx:265
 AtlHistogramTool.cxx:266
 AtlHistogramTool.cxx:267
 AtlHistogramTool.cxx:268
 AtlHistogramTool.cxx:269
 AtlHistogramTool.cxx:270
 AtlHistogramTool.cxx:271
 AtlHistogramTool.cxx:272
 AtlHistogramTool.cxx:273
 AtlHistogramTool.cxx:274
 AtlHistogramTool.cxx:275
 AtlHistogramTool.cxx:276
 AtlHistogramTool.cxx:277
 AtlHistogramTool.cxx:278
 AtlHistogramTool.cxx:279
 AtlHistogramTool.cxx:280
 AtlHistogramTool.cxx:281
 AtlHistogramTool.cxx:282
 AtlHistogramTool.cxx:283
 AtlHistogramTool.cxx:284
 AtlHistogramTool.cxx:285
 AtlHistogramTool.cxx:286
 AtlHistogramTool.cxx:287
 AtlHistogramTool.cxx:288
 AtlHistogramTool.cxx:289
 AtlHistogramTool.cxx:290
 AtlHistogramTool.cxx:291
 AtlHistogramTool.cxx:292
 AtlHistogramTool.cxx:293
 AtlHistogramTool.cxx:294
 AtlHistogramTool.cxx:295
 AtlHistogramTool.cxx:296
 AtlHistogramTool.cxx:297
 AtlHistogramTool.cxx:298
 AtlHistogramTool.cxx:299
 AtlHistogramTool.cxx:300
 AtlHistogramTool.cxx:301
 AtlHistogramTool.cxx:302
 AtlHistogramTool.cxx:303
 AtlHistogramTool.cxx:304
 AtlHistogramTool.cxx:305
 AtlHistogramTool.cxx:306
 AtlHistogramTool.cxx:307
 AtlHistogramTool.cxx:308
 AtlHistogramTool.cxx:309
 AtlHistogramTool.cxx:310
 AtlHistogramTool.cxx:311
 AtlHistogramTool.cxx:312
 AtlHistogramTool.cxx:313
 AtlHistogramTool.cxx:314
 AtlHistogramTool.cxx:315
 AtlHistogramTool.cxx:316
 AtlHistogramTool.cxx:317
 AtlHistogramTool.cxx:318
 AtlHistogramTool.cxx:319
 AtlHistogramTool.cxx:320
 AtlHistogramTool.cxx:321
 AtlHistogramTool.cxx:322
 AtlHistogramTool.cxx:323
 AtlHistogramTool.cxx:324
 AtlHistogramTool.cxx:325
 AtlHistogramTool.cxx:326
 AtlHistogramTool.cxx:327
 AtlHistogramTool.cxx:328
 AtlHistogramTool.cxx:329
 AtlHistogramTool.cxx:330
 AtlHistogramTool.cxx:331
 AtlHistogramTool.cxx:332
 AtlHistogramTool.cxx:333
 AtlHistogramTool.cxx:334
 AtlHistogramTool.cxx:335
 AtlHistogramTool.cxx:336
 AtlHistogramTool.cxx:337
 AtlHistogramTool.cxx:338
 AtlHistogramTool.cxx:339
 AtlHistogramTool.cxx:340
 AtlHistogramTool.cxx:341
 AtlHistogramTool.cxx:342
 AtlHistogramTool.cxx:343
 AtlHistogramTool.cxx:344
 AtlHistogramTool.cxx:345
 AtlHistogramTool.cxx:346
 AtlHistogramTool.cxx:347
 AtlHistogramTool.cxx:348
 AtlHistogramTool.cxx:349
 AtlHistogramTool.cxx:350
 AtlHistogramTool.cxx:351
 AtlHistogramTool.cxx:352
 AtlHistogramTool.cxx:353
 AtlHistogramTool.cxx:354
 AtlHistogramTool.cxx:355
 AtlHistogramTool.cxx:356
 AtlHistogramTool.cxx:357
 AtlHistogramTool.cxx:358
 AtlHistogramTool.cxx:359
 AtlHistogramTool.cxx:360
 AtlHistogramTool.cxx:361
 AtlHistogramTool.cxx:362