//____________________________________________________________________
//
// Wrapper for Soeren's Pdf reweighting class
// needed for the evaluation of Pdf systematics
// 
// Simply create the tool in your task (see AtlAppAnalysisTask) or
// your analysis selector (AtlSelector). Choose the systematics mode
// (up/down/nominal) by setting the public data member fSystMode (eg
// by using AtlAppAnalysisTask::SetToolVariable()).
//
// Next add the histograms of the observable you want to reweight by
// using AddObservable(). Here you have to give the full path name to
// of each histogram inside the output file. Note that currently
// 1-dim. and 2-dim. histograms are supported. Hint: in case of event
// counting use a single-bin histogram. AddObservable() can be called
// anytime before the event loop, for instance in BookHistograms().
//

//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: AtlPdfReweightingTool.cxx,v 1.9 2015/05/18 12:11:54 stamm Exp $
// Copyright: 2012 (C) Oliver Maria Kind
//
#ifndef ATLAS_AtlPdfReweightingTool
#include <AtlPdfReweightingTool.h>
#endif
#include <AtlSelector.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TObjString.h>
#include <TFile.h>
#include <TSystem.h>
#include <TROOT.h>
#include <iostream>

using namespace std;

#ifndef __CINT__
ClassImp(AtlPdfReweightingTool);
#endif

//____________________________________________________________________

AtlPdfReweightingTool::AtlPdfReweightingTool(const char* name,
					     const char* title) :
    AtlAnalysisTool(name, title) {
    //
    // Default constructor
    //
    fPdfReweightingTool = 0;
    fProcessMode = kPostAnalysis;
    fSystMode = kNominal;
    fFirstEvent = kTRUE;
    fPdfReweightingTool = 0;
    fListObsNames    = new TList;
    fListObsHistsOrig = new TList;
    fListObsHistsTmp = new TList;
    fDSID = 0;
}

//____________________________________________________________________

AtlPdfReweightingTool::~AtlPdfReweightingTool() {
    //
    // Default destrcuctor
    //
    if ( fPdfReweightingTool != 0 )  delete fPdfReweightingTool;
    fListObsNames->Delete(); delete fListObsNames;
    delete fListObsHistsOrig;
    fListObsHistsTmp->Delete(); delete fListObsHistsTmp;
}

//____________________________________________________________________

void AtlPdfReweightingTool::BookHistograms() {
    //
    // Book observables
    //
}

//____________________________________________________________________

Bool_t AtlPdfReweightingTool::AnalyzeEvent() {
    //
    // Compute Pdf weights
    //

    // In the nominal case do nothing
    if ( fSystMode == kNominal ) return kTRUE;

    // First event ?
    // Add observables to Pdf tool
    if ( fFirstEvent ) {
	fFirstEvent = kFALSE;
	FirstEvent();
    }
    
    // Compute Pdf weights
    fPdfReweightingTool->ComputePdfWeights(fEvent->GetEventHeader()->Get_mcevt_pdf_x1(),
					   fEvent->GetEventHeader()->Get_mcevt_pdf_x2(),
					   fEvent->GetEventHeader()->Get_mcevt_pdf_scale(),
					   fEvent->GetEventHeader()->Get_mcevt_pdf_id1(),
					   fEvent->GetEventHeader()->Get_mcevt_pdf_id2(),
					   fEvent->GetEventHeader()->Get_mcevt_pdf1(),
					   fEvent->GetEventHeader()->Get_mcevt_pdf2());

    // Fill observables
    FillObservables();
    return kTRUE;
}

//____________________________________________________________________

void AtlPdfReweightingTool::Print() const {
    //
    // Prints chosen parameter settings for the tool to
    // standard output
    //
    cout << endl
         << "========================================================" << endl
         << "  Pdf Reweighting Tool                      " << endl
         << "========================================================" << endl
         << "  Systematics mode :  ";
        switch ( fSystMode ) {
	    case kUp:
		cout << "Up" << endl;
		break;
	    case kDown:
		cout << "Down" << endl;
		break;
	    case kNominal:
		cout << "Nominal (=do nothing)" << endl;
	}
	cout << "--------------------------------------------------------" << endl;
	cout << "  List of observables:" << endl;
	TIter next_obs(fListObsNames);
	TObjString *objstr = 0;
	while ( (objstr = (TObjString*)next_obs()) )
	    cout << "     " << objstr->GetString().Data() << endl;
	cout << "--------------------------------------------------------" << endl;
	fPdfReweightingTool->Print("PDFinfo");
	cout << "========================================================" << endl
	     << endl;
}

//____________________________________________________________________

void AtlPdfReweightingTool::SetBranchStatus() {
    //
    // Enable on needed branches
    //
    fTree->SetBranchStatus("fEventHeader*", kTRUE);
}

//____________________________________________________________________

void AtlPdfReweightingTool::Init() {
    //
    // Init Pdf tool
    //
    Info("Init", "Start LHAPDF interface ...");
    fPdfReweightingTool = PdfReweightingTool::Instance();
}

//____________________________________________________________________

void AtlPdfReweightingTool::AddObservable(const char* HistName) {
    //
    // Add observable to reweight.
    //
    // The given histogram is the histogram inside the user analysis
    // used to histogram the observable in question. The full path
    // name of the histogram inside the output file is needed here.
    //
    // In case of event counting use a single-bin histogram.
    //
    fListObsNames->Add(new TObjString(HistName));
}

//____________________________________________________________________

void AtlPdfReweightingTool::FillObservables() {
    //
    // Fill observables
    //
    TDirectory *savdir = gDirectory;
    gROOT->cd();
    
    // Loop over all observables
    TH1F *h_tmp = 0;
    TH1F *h_orig = 0;
    TIter next_orig(fListObsHistsOrig);
    while ( (h_orig = (TH1F*)next_orig()) ) {
	TString hname(h_orig->GetName());
	hname.Append("_apptmp");
	    
	// Check each bin for differences against reference (original histogram)
	// Differences mean that a bin in the original histogram was filled
	switch ( h_orig->GetDimension() ) {
	    case 1:
		// 1-dim.  case
		h_tmp = (TH1F*)fListObsHistsTmp->FindObject(hname.Data());
		for ( Int_t i = 0; i <= h_orig->GetNbinsX()+1; i++ ) {
		    if ( h_tmp->GetBinContent(i) != h_orig->GetBinContent(i) ) {
			h_tmp->SetBinContent(i, h_orig->GetBinContent(i));
			h_tmp->SetBinError(i, h_orig->GetBinError(i));
			fPdfReweightingTool->FillObservable(h_tmp , h_tmp->GetBinCenter(i),
							    fEvent->GetTagEvtWeight());
			break;
		    }
		}
		break;
	    case 2:
		// 2-dim. case
		for ( Int_t j = 0; j <= ((TH2F*)h_orig)->GetNbinsY()+1; j++ ) {
		    h_tmp = (TH1F*)fListObsHistsTmp
			   ->FindObject(Form("%s_ybin%-d", hname.Data(), j));
		    for ( Int_t i = 0; i <= h_orig->GetNbinsX()+1; i++ ) {
			if ( h_tmp->GetBinContent(i) != h_orig->GetBinContent(i, j) ) {
			    h_tmp->SetBinContent(i, h_orig->GetBinContent(i, j));
			    h_tmp->SetBinError(i, h_orig->GetBinError(i, j));
			    fPdfReweightingTool->FillObservable(h_tmp , h_tmp->GetBinCenter(i),
								fEvent->GetTagEvtWeight());
			break;
			}
		    }
		}
		break;
	}
    }
    savdir->cd();
}

//____________________________________________________________________

void AtlPdfReweightingTool::Terminate() {
    //
    // Terminate routine called by AtlSelector::SlaveTerminate().
    //
    // Here, the final Pdf uncertainty is determined. The original
    // histograms for each given observable are replaced with the
    // respected up/down variations.
    //
    Info("Terminate", "Terminate Pdf reweighting ...");
    if ( fSystMode == kNominal ) return;
    TDirectory *savdir = gDirectory;
    gROOT->cd();
    
    // Get varied histograms and replace the original ones
    TH1F *h_orig = 0;
    TH1F *h_tmp = 0;
    TH1F *h_syst = 0;
    TIter next_orig(fListObsHistsOrig);
    while ( (h_orig = (TH1F*)next_orig()) ) {
	if ( fSystMode == kUp ) {
	    Info("Terminate", "Replace histogram \"%s\" by Pdf systematic upward variation.",
		 h_orig->GetName());
	} else if ( fSystMode == kDown ) {
	    Info("Terminate", "Replace histogram \"%s\" by Pdf systematic downward variation.",
		 h_orig->GetName());
	}

	Int_t ny = ( h_orig->GetDimension() == 1 ) ? 0 : h_orig->GetNbinsY()+1;
	for ( Int_t j = 0; j <= ny; j++ ) {
	    TString hname(h_orig->GetName());
	    hname.Append("_apptmp");

	    if ( h_orig->GetDimension() == 2 ) hname.Append(Form("_ybin%-d", j));
	    h_tmp = (TH1F*)fListObsHistsTmp->FindObject(hname.Data());
	    
	    if ( fSystMode == kUp ) {
		h_syst = fPdfReweightingTool->PdfUncertainty(h_tmp, PdfSet::kUp);
	    } else if ( fSystMode == kDown ) {
		h_syst = fPdfReweightingTool->PdfUncertainty(h_tmp, PdfSet::kDown);
	    }
	    for ( Int_t i = 0; i <= h_orig->GetNbinsX()+1; i++ ) {
		if ( h_orig->GetDimension() == 1 ) {
		    h_orig->SetBinContent(i, h_syst->GetBinContent(i));
		    h_orig->SetBinError(i, h_syst->GetBinError(i));
		} else {
		    ((TH2F*)h_orig)->SetBinContent(i, j, h_syst->GetBinContent(i));
		    ((TH2F*)h_orig)->SetBinError(i, j, h_syst->GetBinError(i));
		}
	    }
	}
    }

    // Clean-up
    delete fPdfReweightingTool;
    fPdfReweightingTool = 0;
    savdir->cd();
}

//____________________________________________________________________

void AtlPdfReweightingTool::FirstEvent() {
    //
    // Initialize normalization scale factors and
    // add observables to the Pdf tool
    //

    if ( fDSID != 0 ) {
	fPdfReweightingTool->SetApplyNormfactor(kTRUE);
	fPdfReweightingTool->GetNormfactor(fDSID);
    }

    
    // Loop over all given observable names
    // and add histograms to temporary list
    cout << endl;
    Info("FirstEvent", "Adding observables to Pdf tool ...");
    TFile *f_out = fParent->GetOutputFile();
    TH1F *h_orig = 0;
    TObjString *objstr = 0;
    TIter next_obs(fListObsNames);
    while ( (objstr = (TObjString*)next_obs()) ) {
	h_orig = (TH1F*)f_out->Get(objstr->GetString().Data());
	if ( h_orig == 0 ) {
	    Error("FirstEvent", "Cannot find histogram \"%s\". Please check given histogram name. Abort !",
		  objstr->GetString().Data());
	}
	
	// Check dimension
	if ( h_orig->GetDimension() > 2 ) {
	    Error("FirstEvent", "Histogram \"%s\" has more than 2 dimensions. Currently only 1-dim. and 2-dim. histograms are supported. Abort !", h_orig->GetName());
	    gSystem->Abort(1);
	}

	// Handle 1d/2d case
	TDirectory *savdir = gDirectory;
	gROOT->cd();
	switch ( h_orig->GetDimension() ) {
	    case 1:
		AddObs1D(h_orig); break;
	    case 2:
		AddObs2D((TH2F*)h_orig); break;
	}
	savdir->cd();
	Info("FirstEvent", "Added observable \"%s\" for Pdf reweighting.",
	     h_orig->GetName());
    }
}

//____________________________________________________________________

void AtlPdfReweightingTool::AddObs1D(TH1F *h_orig) {
    //
    // Add 1-dim. histogram to the list of observables of the Pdf tool
    //
    fListObsHistsOrig->Add(h_orig);
    TH1F *h_tmp = (TH1F*)h_orig->Clone(Form("%s_apptmp", h_orig->GetName()));
    h_tmp->Reset();
    fListObsHistsTmp->Add(h_tmp);
    fPdfReweightingTool->AddObservable(h_tmp);
} 

//____________________________________________________________________

void AtlPdfReweightingTool::AddObs2D(TH2F *h_orig) {
    //
    // Add 2-dim. histogram to the list of observables of the Pdf tool
    //
    // Internally the 2-dim. histogram is splitted into 1-dim.
    // histograms for each bin along the y-axis.
    //
    fListObsHistsOrig->Add(h_orig);
    TH1F *h_proj = 0;
    for ( Int_t i = 0; i <= h_orig->GetNbinsY()+1; i++ ) {
	h_proj = (TH1F*)h_orig->ProjectionX(Form("%s_apptmp_ybin%-d",
						 h_orig->GetName(), i), i, i);
	h_proj->Reset();
	fListObsHistsTmp->Add(h_proj);
	fPdfReweightingTool->AddObservable(h_proj);
    }
}

//____________________________________________________________________

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