//____________________________________________________________________
//
// DOCUMENT ME
// 
//  
// Author: Soeren Stamm <mailto: stamm@physik.hu-berlin.de>
// Update: $Id: AtlHistFactoryPlotterTask.cxx,v 1.5 2017/06/28 15:27:22 kaphle Exp $
// Copyright: 2015 (C) Soeren Stamm
//
#ifndef ATLAS_AtlHistFactoryPlotterTask
#include <AtlHistFactoryPlotterTask.h>
#endif
#include <AtlHistFactoryMeasurement.h>
#include <AtlHistFactoryChannel.h>
#include <AtlHistFactorySample.h>
#include <RooAbsData.h>
#include <RooCategory.h>
#include <RooCatType.h>
#include <RooConstVar.h>
#include <RooCurve.h>
#include <RooFitResult.h>
#include <RooHist.h>
#include <RooPlot.h>
#include <RooProduct.h>
#include <RooAbsRealLValue.h>
#include <RooRealSumPdf.h>
#include <RooRealVar.h>
#include <RooSimultaneous.h>
#include <RooWorkspace.h>
#include <TCanvas.h>
#include <TF1.h>
#include <TGaxis.h>
#include <TGraphAsymmErrors.h>
#include <TH1.h>
#include <TLatex.h>
#include <TLine.h>
#include <TLegend.h>
#include <TLegendEntry.h>
#include <TMath.h>
#include <TPad.h>
#include <TROOT.h>
#include <TSystem.h>

using namespace std;
using namespace RooStats;
using namespace HistFactory;
using namespace RooFit;

#ifndef __CINT__
ClassImp(AtlHistFactoryPlotterTask);
#endif

//____________________________________________________________________

AtlHistFactoryPlotterTask::AtlHistFactoryPlotterTask(const char* name,
						     const char* title) :
    AtlHistFactoryTask(name, title) {
    //
    // Default constructor
    //

    SetInteractiveJob(kTRUE); // these tasks are always interactive
    fRatioHeight = 0.4;

    // ToDo: Configurable positions, etc.
    // values taken from HepDataMCPlot
    //
    fCMSEnergyLabel = new TLatex(0.2, 0.77, "#sqrt{s} = 8 TeV");
    fCMSEnergyLabel->SetNDC();

    fLumiLabel = new TLatex(0.2, 0.85, "#int Ldt = 20.3 fb^{-1}");
    fLumiLabel->SetNDC();

    fRemoveDataErrorX = kTRUE;
}

//____________________________________________________________________

AtlHistFactoryPlotterTask::~AtlHistFactoryPlotterTask() {
    //
    // Default destructor
    //
}

//____________________________________________________________________

void AtlHistFactoryPlotterTask::Initialize() {
    //
    // Default destructor
    //
    
    AtlHistFactoryTask::Initialize();
    
    // get combined model
    TString *filename = fMeasurement->GetModelFileName();
    
    fModelFile = new TFile(filename->Data());
    if ( fModelFile == 0 ) {
	Info("Initialize",
	     "No model file with name '%s' found. Set Task inactive.",
	     filename->Data());
	Info("Initialize",
	     "Create a model first, then recreate this task.");
	SetActive(kFALSE);
    } else {
	Info("Initialize",
	     "Found model input file '%s.",
	     filename->Data());
    }

    delete filename;
}

//____________________________________________________________________

void AtlHistFactoryPlotterTask::ExecInteractiveJob(Option_t* option) {
    //
    // Exec interactive job
    //

    // Convert option string
    TString opt = option;
    opt.ToLower();
    
    CreatePlot();
}

//____________________________________________________________________
void AtlHistFactoryPlotterTask::CreatePlot() {
    //
    // Create Plot
    //

    // Turn off all info messages
    RooMsgService::instance().setGlobalKillBelow(RooFit::WARNING);
    
    // Get workspace, model and data
    RooWorkspace  *w = (RooWorkspace*) fModelFile->Get("combined");
    ModelConfig   *m = (ModelConfig*) w->obj("ModelConfig");
    RooAbsData *data = w->data(fMeasurement->GetUseAsimovData() ? "asimovData" : "obsData");

    // Get the combined pdf of all channels
    RooAbsPdf *pdf = m->GetPdf(); 
    RooSimultaneous *simpdf = (RooSimultaneous*) m->GetPdf(); 

    RooFitResult *fitResult = simpdf->fitTo(*data,
					    RooFit::SumW2Error(kFALSE),
					    RooFit::Offset(true),
					    RooFit::Extended(true), // overall number of events is fit parameter
					    RooFit::Save(true));    // a non-zero fit result pointer is returned
    
    fitResult->Print();

    /*
    // TFile *f = new TFile("/rdsk/dats2/atlas/stamm/HistFactory/postfitplots/WCR_mtw_nosysts/fit/obsData_fitresult.root");
    // RooFitResult *fitResult_mtw = (RooFitResult*) f->Get("fitresult_simPdf_obsData");
    RooFitResult *fitResult_mtw = 0;
    
    // exchange parameter values like this?
    RooArgSet *nuis = (RooArgSet*)m->GetNuisanceParameters();
    TIterator *next_nuis = nuis->createIterator();
    RooRealVar* parmodel = 0;

    while ((parmodel = (RooRealVar*)next_nuis->Next())) {
	if ( fitResult_mtw == 0 ) break;
	break;

	// original fit
	RooRealVar* parfit = (RooRealVar*) fitResult->floatParsFinal().find(parmodel->GetName());

	TString name = parmodel->GetName();
	if ( name.Contains("gamma_stat") ) {
	    // reset gamma stat parameters since no information from fit is available
	    // if we copy values from the mtw fit to a different distribution

	    Double_t err = GetGammaUncertainty(name.Data(), w);
	    Double_t fit_val   = 1.;
	    Double_t fit_err   = err;

	    cout << Form("%s: %3.3f +- %3.3f",
	    		 name.Data(),
	    		 fit_val,
	    		 fit_err) << endl;

	    parmodel->setVal(fit_val); // reset
	    parmodel->setError(fit_err); // reset

	} else {
	    RooRealVar* parfit_mtw =  (RooRealVar*) fitResult_mtw->floatParsFinal().find(parmodel->GetName());
	    
	    // Set model parameters
	    // cout << name.Data() << endl;
	    parmodel->setVal(parfit_mtw->getVal());
	    parmodel->setError(parfit_mtw->getError());
	    
	    // manipulate fit result
	    parfit->setVal(parfit_mtw->getVal());
	    parfit->setError(parfit_mtw->getError());

	}
    }
    */
    // Get the list of channels
    RooCategory* channels = (RooCategory*) (&simpdf->indexCat());

    // Loop over all channels
    TIterator* iter = channels->typeIterator();
    RooCatType* chan;

    TString *plot_dir = GetDirectoryName("plot");
    TFile *fout = new TFile(Form("%s/Postfit_plots.root", plot_dir->Data()), "RECREATE");

    // TCanvas needed for legend
    TCanvas *c = new TCanvas;
    
    while((chan = (RooCatType*) iter->Next())) {

	// Pdf for this channel
	RooAbsPdf* chan_pdf = (RooAbsPdf*) simpdf->getPdf(chan->GetName());
	
	// Need to reduce the data for each channel
	RooAbsData* chan_data = (RooAbsData*) data->reduce(Form("%s==%s::%s",
								channels->GetName(),
								channels->GetName(),
								chan->GetName()));
	
	// Observable for this channel
	RooArgSet *chan_obs_set = chan_pdf->getObservables(*m->GetObservables());
	RooRealVar *chan_obs    = (RooRealVar*)chan_obs_set->first();
	
	// Get 'RooRealSumPdf' for this channel
	// - this is unfortunatly hardcoded
	// - assume that this is valid for all HistFactory models...
	// - this has to be changed to ..._model_newSimPdf (if lognormals are used)
	RooRealSumPdf *chan_sumpdf = (RooRealSumPdf*) chan_pdf->getComponents()->find(Form("%s_model",
											   chan->GetName()));
	
	// Plot individual samples:
	// ------------------------
	// The 'RooRealSumPdf' has a list of coef. and pdfs for each sample
	// The sum of Sum [coef * pdf] is the channel pdf
	// The combination of [coef_i * pdf_i] is the pdf for sample i
	//
	RooArgList sample_func = chan_sumpdf->funcList();
	RooArgList sample_coef = chan_sumpdf->coefList();
	
	// Loop over all samples
	TIterator *s_iter = sample_func.createIterator(kIterBackward);
	RooProduct *sample = 0;

	// Create sum pdf used for stack plot
	RooArgList stack_f;
	RooArgList stack_c;
	
	// List of RooRealSumPdfs
	TList *stack = new TList;
	TList *single_samples = new TList;

	Int_t i = 0;
	while ((sample = (RooProduct*) s_iter->Next())) {

	    // Add each sample to the stack
	    // - the pdf that needs to be added is the sum
	    //   of all sample pdfs in this loop
	    // - the last pdf is equal to the sum of all pdfs
	    stack_f.add(*sample);
	    stack_c.add(*sample_coef.at(sample_func.index(sample->GetName())));

	    RooArgList sample_f;
	    RooArgList sample_c;
	    
	    sample_f.add(*sample);
	    sample_c.add(*sample_coef.at(sample_func.index(sample->GetName())));

	    RooRealSumPdf *stack_sum = new RooRealSumPdf(Form("sumpdf_%d", i),
							 Form("sumpdf_%d", i),
							 stack_f, stack_c);
	    RooRealSumPdf *single_sample = new RooRealSumPdf(Form("single_sample_pdf_%d", i),
							     Form("single_sample_pdf_%d", i),
							     sample_f, sample_c);
	    i++; // just a number for naming each sumpdf differently
	    
	    stack->Add(stack_sum);
	    single_samples->Add(single_sample);
	}
	
	// Create stack plot
	// -----------------
	RooPlot *plot = chan_obs->frame();
	plot->SetNameTitle(Form("Postfit_stack_%s", chan->GetName()),
			   Form("Postfit_stack_%s", chan->GetName()));
	
	// Draw now all RooRealSumPdfs in reverse order with the correct normalization
	TIter next_sample(stack, kIterBackward);
	RooRealSumPdf *stack_sample = 0;

	// Syncronize loop with channel / sample in fMeasurement
	AtlHistFactoryChannel *atl_chan =
	    (AtlHistFactoryChannel*) fMeasurement->GetListOfChannels()->At(chan->getVal());
	// we need to forward iterate through this one, since the pdf with
	// most entries will be drawn first
	TIter next_atlsample(atl_chan->GetListOfSamples());
	AtlHistFactorySample *atl_sample = 0;

	// Create Legend
	TLegend *legend = new TLegend(0.59, 0.5, 0.90, 0.86);
	legend->SetName(Form("Legend_%s", chan->GetName()));
	legend->SetFillColor(0);
	legend->SetFillStyle(0);
	legend->SetBorderSize(0);

	// add data
	TLegendEntry *entry = legend->AddEntry("",
					       fMeasurement->GetUseAsimovData() ? "Asimov Data" : "Data",
					       "p");
	entry->SetMarkerColor(kBlack);
	entry->SetMarkerStyle(20);

	while ( (stack_sample = (RooRealSumPdf*) next_sample()) ) {
	    // Syncronize loops
	    atl_sample = (AtlHistFactorySample*) next_atlsample();
	    if ( atl_sample == 0) {
		Error("CreatePlot", "Loops out of sync. Check your configuration, workspace, etc. Abort!");
		gSystem->Abort();
	    }
	    
	    // Normalization of this pdf
	    Double_t sample_evts = ((RooAbsReal*) stack_sample->createIntegral(RooArgSet(*chan_obs)))->getVal();
	    
	    stack_sample->plotOn(plot,
	     			 Normalization(sample_evts,RooAbsReal::NumEvent),
				 LineColor(atl_sample->GetLineColor()),
				 LineStyle(atl_sample->GetLineStyle()),
				 FillColor(atl_sample->GetFillColor()),
				 FillStyle(atl_sample->GetFillStyle()),
				 DrawOption("F"));
	    // Add corresponding legend entry
	    TString title = atl_sample->GetTitle();
	    title.ReplaceAll("Norm. ","");
	    entry = legend->AddEntry(stack_sample,
				     title.Data(),
				     "f");
	    entry->SetFillStyle(atl_sample->GetFillStyle());
	    entry->SetFillColor(atl_sample->GetFillColor());
	}
	
	// Sum of all model pdfs
	// Draw the channel pdf, this should be identical to the last pdf line drawn
	chan_pdf->plotOn(plot, Normalization(1., RooAbsReal::RelativeExpected),
	 		 FillColor(kYellow), LineColor(kBlack),
			 // LineStyle(kDashed));
			 Invisible());

	// Get the last pdf added to the plot (i.e. sum of all pdfs)
	RooCurve *TopMC = plot->getCurve();

	
	// error band
	chan_pdf->plotOn(plot,
			 Normalization(1., RooAbsReal::RelativeExpected),
			 FillColor(14),
			 FillStyle(3254),
			 VisualizeError(*fitResult, *m->GetNuisanceParameters()));
	RooCurve *c_errorband = plot->getCurve();

	/*
	// error band from mtw fit
	// Copy list of parameters and remove gamma_stat parameters
	RooArgSet *set = (RooArgSet*) (m->GetNuisanceParameters())->Clone("newset");
	TIterator *next_nuis = set->createIterator();
	RooRealVar *par = 0;
	while ((par = (RooRealVar*)next_nuis->Next())) {
	    TString name = par->GetName();
	    if ( name.Contains("gamma_stat") )
		set->remove(*par,false,true);
	}
	chan_pdf->plotOn(plot,
			 Normalization(1., RooAbsReal::RelativeExpected),
			 FillColor(6),
			 FillStyle(3001),
			 VisualizeError(*fitResult_mtw, *set));
	RooCurve *c_errorband_syst = plot->getCurve();
	*/
	
	entry = legend->AddEntry("", "Fit uncertainty", "f");
	entry->SetFillStyle(3254);
	entry->SetLineColor(14);
	entry->SetFillColor(14);

	// Add legend
	plot->addObject(legend);

	// data
	chan_data->plotOn(plot,
			  RooFit::DataError(RooAbsData::Poisson),
			  MarkerColor(kBlack));

	// Remove data points' x-error
	RooHist *h_data = plot->getHist();
	Int_t np      = h_data->GetN();
	Double_t *exl = h_data->GetEXlow();
	Double_t *exh = h_data->GetEXhigh();
	
	// Loop over all 'np' points p of RooHist
	// (n.b. histos start at p+1)
	for ( Int_t p = 0; p < np; p++ ) {
	    if ( fRemoveDataErrorX ) {
		exl[p] = 0.;
		exh[p] = 0.;
	    }
	}

	// Do the usual axis label stuff etc.
	//
	// Get the nominal histogram of the first process in each channel
	atl_sample = (AtlHistFactorySample *) atl_chan->GetListOfSamples()->At(0);
	const char *hist_name = atl_sample->GetName();
	TH1 *h = (TH1*) fModelFile->Get(Form("%s_hists/%s/%s_nominal",
					     chan->GetName(),
					     hist_name, hist_name));
	plot->GetXaxis()->ImportAttributes(h->GetXaxis());
	plot->GetYaxis()->ImportAttributes(h->GetYaxis());
	plot->SetNdivisions(505,"Y");

	// Add ATLAS, Lumi, sqrt(s)
	plot->addObject(GetAtlasLabel(0.56, 0.88, "Internal"));
	plot->addObject(fCMSEnergyLabel->Clone(Form("cms_%s", chan->GetName())));
	plot->addObject(fLumiLabel->Clone(Form("lumi_%s", chan->GetName())));

	plot->Draw();

	// Create ratio plot
	// -----------------
	// (Data/MC - 1)
	//
	// Data points : Data/MC - 1
	RooHist *h_datamc = (RooHist*) h_data->Clone(Form("ratio_datamc_%s", chan->GetName()));

	TH1F *h_mc = (TH1F*) chan_pdf->createHistogram(Form("mc_stack_%s", chan->GetName()),
						       *((RooAbsRealLValue*) chan_obs),
						       IntrinsicBinning());
	// Normalize with stack
	stack_sample = (RooRealSumPdf*) stack->Last();
	Double_t Nevts_mcstack = ((RooAbsReal*) stack_sample->createIntegral(RooArgSet(*chan_obs)))->getVal();
	h_mc->Scale(Nevts_mcstack/h_mc->Integral());

	// Divide Points by MC expectation
	// Scale error from data accordingly

	Double_t *y = h_datamc->GetY();
	exl = h_datamc->GetEXlow();
	exh = h_datamc->GetEXhigh();
	Double_t *eyl = h_datamc->GetEYlow();
	Double_t *eyh = h_datamc->GetEYhigh();
	
	for ( Int_t p = 0; p < np; p++ ) {
	    y[p] = y[p]/h_mc->GetBinContent(p+1) - 1;
	    eyl[p] = eyl[p]/h_mc->GetBinContent(p+1);
	    eyh[p] = eyh[p]/h_mc->GetBinContent(p+1);
	    if ( fRemoveDataErrorX ) {
		exl[p] = 0.;
		exh[p] = 0.;
	    }
	}

	// Uncertainty band for MC
	RooCurve *c_mcerror = (RooCurve*) c_errorband->Clone(Form("mc_error_%s", chan->GetName()));
	//xxx RooCurve *c_mcerror_syst = (RooCurve*) c_errorband_syst->Clone(Form("mc_error_syst_%s", chan->GetName()));
	// The uncertainty band consists of a set of 2N points, where N is the number of points
	// of the nominal RooCurve (TopMC)
	// The first N points are used for the upper errors (+1 sigma) and the other points are used
	// for the lower errors (-1 sigma) but in reverse order w.r.t. the +1 sigma points.
	Int_t j = 0;
	for ( Int_t i = 0; i < c_mcerror->GetN(); i++ ) {

	    if ( i < TopMC->GetN() )
		j = i;
	    else
		j = 2*TopMC->GetN() - i - 1;
	    
	    // Shift all points by central value (MC' - MC)
	    // Convert to relative error: divide by central value (MC' - MC)/MC
	    Double_t *mcy = TopMC->GetY();     // MC central value
	    Double_t *ery = c_mcerror->GetY(); // upper or lower error
	    //xxx Double_t *ery_s = c_mcerror_syst->GetY(); // upper or lower error
	    if ( mcy[j] != 0 ) {
		ery[i] = (ery[i] - mcy[j])/mcy[j];
		//xxx ery_s[i] = (ery_s[i] - mcy[j])/mcy[j];
	    }
	}
	c_mcerror->SetFillColor(14);
	c_mcerror->SetFillStyle(3254);
	c_mcerror->SetMarkerSize(0);

	//xxx c_mcerror_syst->SetFillColor(6);
	//xxx c_mcerror_syst->SetFillStyle(3001);
	//xxx c_mcerror_syst->SetMarkerSize(0);
	
	RooPlot *ratio = chan_obs->frame();
	ratio->SetNameTitle(Form("Ratio_Postfit_%s", chan->GetName()),
			    Form("Ratio_Postfit_%s", chan->GetName()));
	
	ratio->addObject(c_mcerror,"F");
	//xxx ratio->addObject(c_mcerror_syst,"F");
	ratio->addObject(h_datamc, "PE");

	ratio->GetXaxis()->ImportAttributes(h->GetXaxis());
	ratio->GetYaxis()->ImportAttributes(h->GetYaxis());
	ratio->GetYaxis()->SetTitle("Data/SM - 1");
	ratio->SetNdivisions(505,"Y");

	ratio->Draw();

	
	//
	// Signal pdf and (data - background pdf)
	// --------------------------------------

	RooPlot *plot2 = chan_obs->frame();
	plot2->SetNameTitle(Form("SigMinusBkg_%s", chan->GetName()),
			    Form("SigMinusBkg_%s", chan->GetName()));

	// Histogram for signal pdf
	// ------------------------
	RooRealSumPdf *single_smpl = (RooRealSumPdf*) single_samples->Last();
	TH1 *h_sig = single_smpl->createHistogram("Signal_pdf",
						  *((RooAbsRealLValue*) chan_obs),
						  IntrinsicBinning());
	Double_t Nevts_sig = ((RooAbsReal*) single_smpl->createIntegral(RooArgSet(*chan_obs)))->getVal();
	h_sig->Scale(Nevts_sig/h_sig->Integral());

	// the last in single samples is the first in atl_samples
	atl_sample = (AtlHistFactorySample *) atl_chan->GetListOfSamples()->At(0);

	// Draw signal pdf + a black line a contour
	single_smpl->plotOn(plot2,
			    Normalization(Nevts_sig,RooAbsReal::NumEvent),
			    FillColor(atl_sample->GetFillColor()),
			    FillStyle(atl_sample->GetFillStyle()),
			    DrawOption("F"));
	RooCurve *sig_pdf = plot2->getCurve();
	single_smpl->plotOn(plot2,
			    Normalization(Nevts_sig,RooAbsReal::NumEvent),
			    LineColor(kBlack),
			    LineWidth(1),
			    DrawOption("L"));
	// Draw uncertainty band for signal pdf
	// single_smpl->plotOn(plot2,
	// 		    Normalization(Nevts_sig,RooAbsReal::NumEvent),
	// 		    FillColor(14),
	// 		    FillStyle(3254),
	// 		    VisualizeError(*fitResult, *m->GetNuisanceParameters()));

	// Histogram for background pdf
	// ----------------------------
	stack_sample = (RooRealSumPdf*) stack->At(stack->GetEntries()-2);
	TH1 *h_bkg = stack_sample->createHistogram("Background_pdf",
						   *((RooAbsRealLValue*) chan_obs),
						   IntrinsicBinning());
	Double_t Nevts_mc = ((RooAbsReal*) stack_sample->createIntegral(RooArgSet(*chan_obs)))->getVal();
	h_bkg->Scale(Nevts_mc/h_bkg->Integral());

	// Draw bkg pdf and uncertainty band, but set option to invisible for bkg pdf
	stack_sample->plotOn(plot2,
			     Normalization(Nevts_mc, RooAbsReal::NumEvent),
			     Invisible());
	RooCurve *bkg_pdf = plot2->getCurve();

	stack_sample->plotOn(plot2,
			     Normalization(Nevts_mc, RooAbsReal::NumEvent),
			     FillColor(14),
			     FillStyle(3254),
			     VisualizeError(*fitResult, *m->GetNuisanceParameters()));
	RooCurve *bkg_err = plot2->getCurve();

	// Data
	RooHist *h_datamc2 = (RooHist*) h_data->Clone(Form("DataMinusBkg_%s", chan->GetName()));
	Double_t *x = h_datamc2->GetX();
	y = h_datamc2->GetY();
	exl = h_datamc2->GetEXlow();
	exh = h_datamc2->GetEXhigh();
	eyl = h_datamc2->GetEYlow();
	eyh = h_datamc2->GetEYhigh();

	// Loop with two tasks:
	// a) Shift data points by bkg exp.
	// b) Draw uncertainty band with abs. uncertainty for bkg pdf
	//    (i.e. shift uncertainty band to signal pdf values)
	//
	j = 0;
	for ( Int_t i = 0; i < bkg_err->GetN(); i++ ) {

	    if ( i < bkg_pdf->GetN() )
		j = i;
	    else
		j = 2*bkg_pdf->GetN() - i - 1;

	    // Shift all points by central value (MC_bkg' - MC_bkg) + MC_sig
	    Double_t *bkgx = bkg_pdf->GetX(); // Bkg pdf central value
	    Double_t *bkgy = bkg_pdf->GetY(); // Bkg pdf central value
	    Double_t *sigy = sig_pdf->GetY(); // Sig pdf central value
	    Double_t *ery  = bkg_err->GetY(); // upper or lower error
	    if ( bkgy[j] != 0 ) {
		ery[i] = (ery[i] - bkgy[j] + sigy[j]);
		// ery[i] = (ery[i] - bkgy[j]);
	    }
	    
	    // Set Central Values of RooCurve to signal pdf
	    for ( Int_t p = 0; p < np; p++ ) {
		if ( fRemoveDataErrorX ) {
		    exl[p] = 0.;
		    exh[p] = 0.;
		}
		
		if ( i < bkg_pdf->GetN() && // +1 sigma
		     bkgx[i] < x[p] && x[p] < bkgx[i+1] )
		    y[p] = y[p] - bkgy[i];
	    }
	}

	// Create a new graph, otherwise y-range is set to original
	// data values and modification is difficult
	TGraphAsymmErrors *g = new TGraphAsymmErrors(np, x, y,
						     exl, exh, eyl, eyh);
	// add data - bkg to plot
	plot2->addObject(g, "P");

	// Setup lables, axis, etc.
	plot2->GetXaxis()->ImportAttributes(h->GetXaxis());
	plot2->GetYaxis()->ImportAttributes(h->GetYaxis());
	plot2->SetNdivisions(505, "Y");

	// Add ATLAS, Lumi, sqrt(s)
	plot2->addObject(GetAtlasLabel(0.20, 0.87, "Internal"));

	TLatex *CMSLabel = (TLatex*) fCMSEnergyLabel->Clone(Form("cms2_%s", chan->GetName()));
	CMSLabel->SetX(0.67);
	CMSLabel->SetY(0.74);
	TLatex *LumiLabel  = (TLatex*) fLumiLabel->Clone(Form("lumi2_%s", chan->GetName()));
	LumiLabel->SetX(0.67);
	LumiLabel->SetY(0.84);
	plot2->addObject(CMSLabel);
	plot2->addObject(LumiLabel);
	
	// Add Legend
	TLegend *legend2 = new TLegend(0.2, 0.60, 0.50, 0.85);
	legend2->SetName(Form("Legend_%s", chan->GetName()));
	legend2->SetFillColor(0);
	legend2->SetFillStyle(0);
	legend2->SetBorderSize(0);

	entry = legend2->AddEntry("",
				  fMeasurement->GetUseAsimovData() ? "Asimov Data - background" : "Data - background",
				  "p");
	entry->SetMarkerColor(kBlack);
	entry->SetMarkerStyle(20);

	// Signal pdf legend entry
	entry = legend2->AddEntry("", atl_sample->GetTitle(), "f");
	entry->SetFillColor(atl_sample->GetFillColor());
	entry->SetFillStyle(atl_sample->GetFillStyle());

	// Fit uncertainty band
	entry = legend2->AddEntry("", "Fit uncertainty", "f");
	entry->SetFillStyle(3254);
	entry->SetLineColor(14);
	entry->SetFillColor(14);

	plot2->addObject(legend2);

	plot2->Draw();

	
	// Save all plots to file
	plot->Write();
	ratio->Write();
	plot2->Write();
    }

    c->Close();
    fout->Close();
}


//____________________________________________________________________

TLatex* AtlHistFactoryPlotterTask::GetAtlasLabel(Double_t x, Double_t y,
						 const char* text) {
    //
    // Get TLatex object with ATLAS + label
    //

    TString label = "ATLAS";
    if ( text )
	label.Append(Form(" #font[42]{%s}", text));
    
    TLatex *l = new TLatex(x, y, label.Data());
    l->SetNDC();
    l->SetTextFont(72);
    l->SetTextColor(kBlack);

    return l;
}

//____________________________________________________________________

Double_t AtlHistFactoryPlotterTask::GetGammaUncertainty(const char* name,
							RooWorkspace *wSpace) {
    //
    // Get the uncertainty associated to this parameter
    //

    // Assuming gamma has a gaussian constraint
    
    // That's a nasty way of getting the sigma parameter
    // of the gamma parameters, is there any other way?
    
    TString pdfname = name;
    pdfname.Append("_constraint");
    RooAbsPdf *pdf = wSpace->pdf(pdfname.Data());
    
    TString sigma_name = name;
    sigma_name.Append("_sigma");
    RooConstVar *sigma = (RooConstVar*) pdf->findServer(sigma_name.Data());
    if ( sigma == 0 ) {
	Error("GetGammaUncertainty",
	      "Could not find parameter %s. Abort.",
	      name);
	gSystem->Abort();
    }
    
    return sigma->getVal();
}
 AtlHistFactoryPlotterTask.cxx:1
 AtlHistFactoryPlotterTask.cxx:2
 AtlHistFactoryPlotterTask.cxx:3
 AtlHistFactoryPlotterTask.cxx:4
 AtlHistFactoryPlotterTask.cxx:5
 AtlHistFactoryPlotterTask.cxx:6
 AtlHistFactoryPlotterTask.cxx:7
 AtlHistFactoryPlotterTask.cxx:8
 AtlHistFactoryPlotterTask.cxx:9
 AtlHistFactoryPlotterTask.cxx:10
 AtlHistFactoryPlotterTask.cxx:11
 AtlHistFactoryPlotterTask.cxx:12
 AtlHistFactoryPlotterTask.cxx:13
 AtlHistFactoryPlotterTask.cxx:14
 AtlHistFactoryPlotterTask.cxx:15
 AtlHistFactoryPlotterTask.cxx:16
 AtlHistFactoryPlotterTask.cxx:17
 AtlHistFactoryPlotterTask.cxx:18
 AtlHistFactoryPlotterTask.cxx:19
 AtlHistFactoryPlotterTask.cxx:20
 AtlHistFactoryPlotterTask.cxx:21
 AtlHistFactoryPlotterTask.cxx:22
 AtlHistFactoryPlotterTask.cxx:23
 AtlHistFactoryPlotterTask.cxx:24
 AtlHistFactoryPlotterTask.cxx:25
 AtlHistFactoryPlotterTask.cxx:26
 AtlHistFactoryPlotterTask.cxx:27
 AtlHistFactoryPlotterTask.cxx:28
 AtlHistFactoryPlotterTask.cxx:29
 AtlHistFactoryPlotterTask.cxx:30
 AtlHistFactoryPlotterTask.cxx:31
 AtlHistFactoryPlotterTask.cxx:32
 AtlHistFactoryPlotterTask.cxx:33
 AtlHistFactoryPlotterTask.cxx:34
 AtlHistFactoryPlotterTask.cxx:35
 AtlHistFactoryPlotterTask.cxx:36
 AtlHistFactoryPlotterTask.cxx:37
 AtlHistFactoryPlotterTask.cxx:38
 AtlHistFactoryPlotterTask.cxx:39
 AtlHistFactoryPlotterTask.cxx:40
 AtlHistFactoryPlotterTask.cxx:41
 AtlHistFactoryPlotterTask.cxx:42
 AtlHistFactoryPlotterTask.cxx:43
 AtlHistFactoryPlotterTask.cxx:44
 AtlHistFactoryPlotterTask.cxx:45
 AtlHistFactoryPlotterTask.cxx:46
 AtlHistFactoryPlotterTask.cxx:47
 AtlHistFactoryPlotterTask.cxx:48
 AtlHistFactoryPlotterTask.cxx:49
 AtlHistFactoryPlotterTask.cxx:50
 AtlHistFactoryPlotterTask.cxx:51
 AtlHistFactoryPlotterTask.cxx:52
 AtlHistFactoryPlotterTask.cxx:53
 AtlHistFactoryPlotterTask.cxx:54
 AtlHistFactoryPlotterTask.cxx:55
 AtlHistFactoryPlotterTask.cxx:56
 AtlHistFactoryPlotterTask.cxx:57
 AtlHistFactoryPlotterTask.cxx:58
 AtlHistFactoryPlotterTask.cxx:59
 AtlHistFactoryPlotterTask.cxx:60
 AtlHistFactoryPlotterTask.cxx:61
 AtlHistFactoryPlotterTask.cxx:62
 AtlHistFactoryPlotterTask.cxx:63
 AtlHistFactoryPlotterTask.cxx:64
 AtlHistFactoryPlotterTask.cxx:65
 AtlHistFactoryPlotterTask.cxx:66
 AtlHistFactoryPlotterTask.cxx:67
 AtlHistFactoryPlotterTask.cxx:68
 AtlHistFactoryPlotterTask.cxx:69
 AtlHistFactoryPlotterTask.cxx:70
 AtlHistFactoryPlotterTask.cxx:71
 AtlHistFactoryPlotterTask.cxx:72
 AtlHistFactoryPlotterTask.cxx:73
 AtlHistFactoryPlotterTask.cxx:74
 AtlHistFactoryPlotterTask.cxx:75
 AtlHistFactoryPlotterTask.cxx:76
 AtlHistFactoryPlotterTask.cxx:77
 AtlHistFactoryPlotterTask.cxx:78
 AtlHistFactoryPlotterTask.cxx:79
 AtlHistFactoryPlotterTask.cxx:80
 AtlHistFactoryPlotterTask.cxx:81
 AtlHistFactoryPlotterTask.cxx:82
 AtlHistFactoryPlotterTask.cxx:83
 AtlHistFactoryPlotterTask.cxx:84
 AtlHistFactoryPlotterTask.cxx:85
 AtlHistFactoryPlotterTask.cxx:86
 AtlHistFactoryPlotterTask.cxx:87
 AtlHistFactoryPlotterTask.cxx:88
 AtlHistFactoryPlotterTask.cxx:89
 AtlHistFactoryPlotterTask.cxx:90
 AtlHistFactoryPlotterTask.cxx:91
 AtlHistFactoryPlotterTask.cxx:92
 AtlHistFactoryPlotterTask.cxx:93
 AtlHistFactoryPlotterTask.cxx:94
 AtlHistFactoryPlotterTask.cxx:95
 AtlHistFactoryPlotterTask.cxx:96
 AtlHistFactoryPlotterTask.cxx:97
 AtlHistFactoryPlotterTask.cxx:98
 AtlHistFactoryPlotterTask.cxx:99
 AtlHistFactoryPlotterTask.cxx:100
 AtlHistFactoryPlotterTask.cxx:101
 AtlHistFactoryPlotterTask.cxx:102
 AtlHistFactoryPlotterTask.cxx:103
 AtlHistFactoryPlotterTask.cxx:104
 AtlHistFactoryPlotterTask.cxx:105
 AtlHistFactoryPlotterTask.cxx:106
 AtlHistFactoryPlotterTask.cxx:107
 AtlHistFactoryPlotterTask.cxx:108
 AtlHistFactoryPlotterTask.cxx:109
 AtlHistFactoryPlotterTask.cxx:110
 AtlHistFactoryPlotterTask.cxx:111
 AtlHistFactoryPlotterTask.cxx:112
 AtlHistFactoryPlotterTask.cxx:113
 AtlHistFactoryPlotterTask.cxx:114
 AtlHistFactoryPlotterTask.cxx:115
 AtlHistFactoryPlotterTask.cxx:116
 AtlHistFactoryPlotterTask.cxx:117
 AtlHistFactoryPlotterTask.cxx:118
 AtlHistFactoryPlotterTask.cxx:119
 AtlHistFactoryPlotterTask.cxx:120
 AtlHistFactoryPlotterTask.cxx:121
 AtlHistFactoryPlotterTask.cxx:122
 AtlHistFactoryPlotterTask.cxx:123
 AtlHistFactoryPlotterTask.cxx:124
 AtlHistFactoryPlotterTask.cxx:125
 AtlHistFactoryPlotterTask.cxx:126
 AtlHistFactoryPlotterTask.cxx:127
 AtlHistFactoryPlotterTask.cxx:128
 AtlHistFactoryPlotterTask.cxx:129
 AtlHistFactoryPlotterTask.cxx:130
 AtlHistFactoryPlotterTask.cxx:131
 AtlHistFactoryPlotterTask.cxx:132
 AtlHistFactoryPlotterTask.cxx:133
 AtlHistFactoryPlotterTask.cxx:134
 AtlHistFactoryPlotterTask.cxx:135
 AtlHistFactoryPlotterTask.cxx:136
 AtlHistFactoryPlotterTask.cxx:137
 AtlHistFactoryPlotterTask.cxx:138
 AtlHistFactoryPlotterTask.cxx:139
 AtlHistFactoryPlotterTask.cxx:140
 AtlHistFactoryPlotterTask.cxx:141
 AtlHistFactoryPlotterTask.cxx:142
 AtlHistFactoryPlotterTask.cxx:143
 AtlHistFactoryPlotterTask.cxx:144
 AtlHistFactoryPlotterTask.cxx:145
 AtlHistFactoryPlotterTask.cxx:146
 AtlHistFactoryPlotterTask.cxx:147
 AtlHistFactoryPlotterTask.cxx:148
 AtlHistFactoryPlotterTask.cxx:149
 AtlHistFactoryPlotterTask.cxx:150
 AtlHistFactoryPlotterTask.cxx:151
 AtlHistFactoryPlotterTask.cxx:152
 AtlHistFactoryPlotterTask.cxx:153
 AtlHistFactoryPlotterTask.cxx:154
 AtlHistFactoryPlotterTask.cxx:155
 AtlHistFactoryPlotterTask.cxx:156
 AtlHistFactoryPlotterTask.cxx:157
 AtlHistFactoryPlotterTask.cxx:158
 AtlHistFactoryPlotterTask.cxx:159
 AtlHistFactoryPlotterTask.cxx:160
 AtlHistFactoryPlotterTask.cxx:161
 AtlHistFactoryPlotterTask.cxx:162
 AtlHistFactoryPlotterTask.cxx:163
 AtlHistFactoryPlotterTask.cxx:164
 AtlHistFactoryPlotterTask.cxx:165
 AtlHistFactoryPlotterTask.cxx:166
 AtlHistFactoryPlotterTask.cxx:167
 AtlHistFactoryPlotterTask.cxx:168
 AtlHistFactoryPlotterTask.cxx:169
 AtlHistFactoryPlotterTask.cxx:170
 AtlHistFactoryPlotterTask.cxx:171
 AtlHistFactoryPlotterTask.cxx:172
 AtlHistFactoryPlotterTask.cxx:173
 AtlHistFactoryPlotterTask.cxx:174
 AtlHistFactoryPlotterTask.cxx:175
 AtlHistFactoryPlotterTask.cxx:176
 AtlHistFactoryPlotterTask.cxx:177
 AtlHistFactoryPlotterTask.cxx:178
 AtlHistFactoryPlotterTask.cxx:179
 AtlHistFactoryPlotterTask.cxx:180
 AtlHistFactoryPlotterTask.cxx:181
 AtlHistFactoryPlotterTask.cxx:182
 AtlHistFactoryPlotterTask.cxx:183
 AtlHistFactoryPlotterTask.cxx:184
 AtlHistFactoryPlotterTask.cxx:185
 AtlHistFactoryPlotterTask.cxx:186
 AtlHistFactoryPlotterTask.cxx:187
 AtlHistFactoryPlotterTask.cxx:188
 AtlHistFactoryPlotterTask.cxx:189
 AtlHistFactoryPlotterTask.cxx:190
 AtlHistFactoryPlotterTask.cxx:191
 AtlHistFactoryPlotterTask.cxx:192
 AtlHistFactoryPlotterTask.cxx:193
 AtlHistFactoryPlotterTask.cxx:194
 AtlHistFactoryPlotterTask.cxx:195
 AtlHistFactoryPlotterTask.cxx:196
 AtlHistFactoryPlotterTask.cxx:197
 AtlHistFactoryPlotterTask.cxx:198
 AtlHistFactoryPlotterTask.cxx:199
 AtlHistFactoryPlotterTask.cxx:200
 AtlHistFactoryPlotterTask.cxx:201
 AtlHistFactoryPlotterTask.cxx:202
 AtlHistFactoryPlotterTask.cxx:203
 AtlHistFactoryPlotterTask.cxx:204
 AtlHistFactoryPlotterTask.cxx:205
 AtlHistFactoryPlotterTask.cxx:206
 AtlHistFactoryPlotterTask.cxx:207
 AtlHistFactoryPlotterTask.cxx:208
 AtlHistFactoryPlotterTask.cxx:209
 AtlHistFactoryPlotterTask.cxx:210
 AtlHistFactoryPlotterTask.cxx:211
 AtlHistFactoryPlotterTask.cxx:212
 AtlHistFactoryPlotterTask.cxx:213
 AtlHistFactoryPlotterTask.cxx:214
 AtlHistFactoryPlotterTask.cxx:215
 AtlHistFactoryPlotterTask.cxx:216
 AtlHistFactoryPlotterTask.cxx:217
 AtlHistFactoryPlotterTask.cxx:218
 AtlHistFactoryPlotterTask.cxx:219
 AtlHistFactoryPlotterTask.cxx:220
 AtlHistFactoryPlotterTask.cxx:221
 AtlHistFactoryPlotterTask.cxx:222
 AtlHistFactoryPlotterTask.cxx:223
 AtlHistFactoryPlotterTask.cxx:224
 AtlHistFactoryPlotterTask.cxx:225
 AtlHistFactoryPlotterTask.cxx:226
 AtlHistFactoryPlotterTask.cxx:227
 AtlHistFactoryPlotterTask.cxx:228
 AtlHistFactoryPlotterTask.cxx:229
 AtlHistFactoryPlotterTask.cxx:230
 AtlHistFactoryPlotterTask.cxx:231
 AtlHistFactoryPlotterTask.cxx:232
 AtlHistFactoryPlotterTask.cxx:233
 AtlHistFactoryPlotterTask.cxx:234
 AtlHistFactoryPlotterTask.cxx:235
 AtlHistFactoryPlotterTask.cxx:236
 AtlHistFactoryPlotterTask.cxx:237
 AtlHistFactoryPlotterTask.cxx:238
 AtlHistFactoryPlotterTask.cxx:239
 AtlHistFactoryPlotterTask.cxx:240
 AtlHistFactoryPlotterTask.cxx:241
 AtlHistFactoryPlotterTask.cxx:242
 AtlHistFactoryPlotterTask.cxx:243
 AtlHistFactoryPlotterTask.cxx:244
 AtlHistFactoryPlotterTask.cxx:245
 AtlHistFactoryPlotterTask.cxx:246
 AtlHistFactoryPlotterTask.cxx:247
 AtlHistFactoryPlotterTask.cxx:248
 AtlHistFactoryPlotterTask.cxx:249
 AtlHistFactoryPlotterTask.cxx:250
 AtlHistFactoryPlotterTask.cxx:251
 AtlHistFactoryPlotterTask.cxx:252
 AtlHistFactoryPlotterTask.cxx:253
 AtlHistFactoryPlotterTask.cxx:254
 AtlHistFactoryPlotterTask.cxx:255
 AtlHistFactoryPlotterTask.cxx:256
 AtlHistFactoryPlotterTask.cxx:257
 AtlHistFactoryPlotterTask.cxx:258
 AtlHistFactoryPlotterTask.cxx:259
 AtlHistFactoryPlotterTask.cxx:260
 AtlHistFactoryPlotterTask.cxx:261
 AtlHistFactoryPlotterTask.cxx:262
 AtlHistFactoryPlotterTask.cxx:263
 AtlHistFactoryPlotterTask.cxx:264
 AtlHistFactoryPlotterTask.cxx:265
 AtlHistFactoryPlotterTask.cxx:266
 AtlHistFactoryPlotterTask.cxx:267
 AtlHistFactoryPlotterTask.cxx:268
 AtlHistFactoryPlotterTask.cxx:269
 AtlHistFactoryPlotterTask.cxx:270
 AtlHistFactoryPlotterTask.cxx:271
 AtlHistFactoryPlotterTask.cxx:272
 AtlHistFactoryPlotterTask.cxx:273
 AtlHistFactoryPlotterTask.cxx:274
 AtlHistFactoryPlotterTask.cxx:275
 AtlHistFactoryPlotterTask.cxx:276
 AtlHistFactoryPlotterTask.cxx:277
 AtlHistFactoryPlotterTask.cxx:278
 AtlHistFactoryPlotterTask.cxx:279
 AtlHistFactoryPlotterTask.cxx:280
 AtlHistFactoryPlotterTask.cxx:281
 AtlHistFactoryPlotterTask.cxx:282
 AtlHistFactoryPlotterTask.cxx:283
 AtlHistFactoryPlotterTask.cxx:284
 AtlHistFactoryPlotterTask.cxx:285
 AtlHistFactoryPlotterTask.cxx:286
 AtlHistFactoryPlotterTask.cxx:287
 AtlHistFactoryPlotterTask.cxx:288
 AtlHistFactoryPlotterTask.cxx:289
 AtlHistFactoryPlotterTask.cxx:290
 AtlHistFactoryPlotterTask.cxx:291
 AtlHistFactoryPlotterTask.cxx:292
 AtlHistFactoryPlotterTask.cxx:293
 AtlHistFactoryPlotterTask.cxx:294
 AtlHistFactoryPlotterTask.cxx:295
 AtlHistFactoryPlotterTask.cxx:296
 AtlHistFactoryPlotterTask.cxx:297
 AtlHistFactoryPlotterTask.cxx:298
 AtlHistFactoryPlotterTask.cxx:299
 AtlHistFactoryPlotterTask.cxx:300
 AtlHistFactoryPlotterTask.cxx:301
 AtlHistFactoryPlotterTask.cxx:302
 AtlHistFactoryPlotterTask.cxx:303
 AtlHistFactoryPlotterTask.cxx:304
 AtlHistFactoryPlotterTask.cxx:305
 AtlHistFactoryPlotterTask.cxx:306
 AtlHistFactoryPlotterTask.cxx:307
 AtlHistFactoryPlotterTask.cxx:308
 AtlHistFactoryPlotterTask.cxx:309
 AtlHistFactoryPlotterTask.cxx:310
 AtlHistFactoryPlotterTask.cxx:311
 AtlHistFactoryPlotterTask.cxx:312
 AtlHistFactoryPlotterTask.cxx:313
 AtlHistFactoryPlotterTask.cxx:314
 AtlHistFactoryPlotterTask.cxx:315
 AtlHistFactoryPlotterTask.cxx:316
 AtlHistFactoryPlotterTask.cxx:317
 AtlHistFactoryPlotterTask.cxx:318
 AtlHistFactoryPlotterTask.cxx:319
 AtlHistFactoryPlotterTask.cxx:320
 AtlHistFactoryPlotterTask.cxx:321
 AtlHistFactoryPlotterTask.cxx:322
 AtlHistFactoryPlotterTask.cxx:323
 AtlHistFactoryPlotterTask.cxx:324
 AtlHistFactoryPlotterTask.cxx:325
 AtlHistFactoryPlotterTask.cxx:326
 AtlHistFactoryPlotterTask.cxx:327
 AtlHistFactoryPlotterTask.cxx:328
 AtlHistFactoryPlotterTask.cxx:329
 AtlHistFactoryPlotterTask.cxx:330
 AtlHistFactoryPlotterTask.cxx:331
 AtlHistFactoryPlotterTask.cxx:332
 AtlHistFactoryPlotterTask.cxx:333
 AtlHistFactoryPlotterTask.cxx:334
 AtlHistFactoryPlotterTask.cxx:335
 AtlHistFactoryPlotterTask.cxx:336
 AtlHistFactoryPlotterTask.cxx:337
 AtlHistFactoryPlotterTask.cxx:338
 AtlHistFactoryPlotterTask.cxx:339
 AtlHistFactoryPlotterTask.cxx:340
 AtlHistFactoryPlotterTask.cxx:341
 AtlHistFactoryPlotterTask.cxx:342
 AtlHistFactoryPlotterTask.cxx:343
 AtlHistFactoryPlotterTask.cxx:344
 AtlHistFactoryPlotterTask.cxx:345
 AtlHistFactoryPlotterTask.cxx:346
 AtlHistFactoryPlotterTask.cxx:347
 AtlHistFactoryPlotterTask.cxx:348
 AtlHistFactoryPlotterTask.cxx:349
 AtlHistFactoryPlotterTask.cxx:350
 AtlHistFactoryPlotterTask.cxx:351
 AtlHistFactoryPlotterTask.cxx:352
 AtlHistFactoryPlotterTask.cxx:353
 AtlHistFactoryPlotterTask.cxx:354
 AtlHistFactoryPlotterTask.cxx:355
 AtlHistFactoryPlotterTask.cxx:356
 AtlHistFactoryPlotterTask.cxx:357
 AtlHistFactoryPlotterTask.cxx:358
 AtlHistFactoryPlotterTask.cxx:359
 AtlHistFactoryPlotterTask.cxx:360
 AtlHistFactoryPlotterTask.cxx:361
 AtlHistFactoryPlotterTask.cxx:362
 AtlHistFactoryPlotterTask.cxx:363
 AtlHistFactoryPlotterTask.cxx:364
 AtlHistFactoryPlotterTask.cxx:365
 AtlHistFactoryPlotterTask.cxx:366
 AtlHistFactoryPlotterTask.cxx:367
 AtlHistFactoryPlotterTask.cxx:368
 AtlHistFactoryPlotterTask.cxx:369
 AtlHistFactoryPlotterTask.cxx:370
 AtlHistFactoryPlotterTask.cxx:371
 AtlHistFactoryPlotterTask.cxx:372
 AtlHistFactoryPlotterTask.cxx:373
 AtlHistFactoryPlotterTask.cxx:374
 AtlHistFactoryPlotterTask.cxx:375
 AtlHistFactoryPlotterTask.cxx:376
 AtlHistFactoryPlotterTask.cxx:377
 AtlHistFactoryPlotterTask.cxx:378
 AtlHistFactoryPlotterTask.cxx:379
 AtlHistFactoryPlotterTask.cxx:380
 AtlHistFactoryPlotterTask.cxx:381
 AtlHistFactoryPlotterTask.cxx:382
 AtlHistFactoryPlotterTask.cxx:383
 AtlHistFactoryPlotterTask.cxx:384
 AtlHistFactoryPlotterTask.cxx:385
 AtlHistFactoryPlotterTask.cxx:386
 AtlHistFactoryPlotterTask.cxx:387
 AtlHistFactoryPlotterTask.cxx:388
 AtlHistFactoryPlotterTask.cxx:389
 AtlHistFactoryPlotterTask.cxx:390
 AtlHistFactoryPlotterTask.cxx:391
 AtlHistFactoryPlotterTask.cxx:392
 AtlHistFactoryPlotterTask.cxx:393
 AtlHistFactoryPlotterTask.cxx:394
 AtlHistFactoryPlotterTask.cxx:395
 AtlHistFactoryPlotterTask.cxx:396
 AtlHistFactoryPlotterTask.cxx:397
 AtlHistFactoryPlotterTask.cxx:398
 AtlHistFactoryPlotterTask.cxx:399
 AtlHistFactoryPlotterTask.cxx:400
 AtlHistFactoryPlotterTask.cxx:401
 AtlHistFactoryPlotterTask.cxx:402
 AtlHistFactoryPlotterTask.cxx:403
 AtlHistFactoryPlotterTask.cxx:404
 AtlHistFactoryPlotterTask.cxx:405
 AtlHistFactoryPlotterTask.cxx:406
 AtlHistFactoryPlotterTask.cxx:407
 AtlHistFactoryPlotterTask.cxx:408
 AtlHistFactoryPlotterTask.cxx:409
 AtlHistFactoryPlotterTask.cxx:410
 AtlHistFactoryPlotterTask.cxx:411
 AtlHistFactoryPlotterTask.cxx:412
 AtlHistFactoryPlotterTask.cxx:413
 AtlHistFactoryPlotterTask.cxx:414
 AtlHistFactoryPlotterTask.cxx:415
 AtlHistFactoryPlotterTask.cxx:416
 AtlHistFactoryPlotterTask.cxx:417
 AtlHistFactoryPlotterTask.cxx:418
 AtlHistFactoryPlotterTask.cxx:419
 AtlHistFactoryPlotterTask.cxx:420
 AtlHistFactoryPlotterTask.cxx:421
 AtlHistFactoryPlotterTask.cxx:422
 AtlHistFactoryPlotterTask.cxx:423
 AtlHistFactoryPlotterTask.cxx:424
 AtlHistFactoryPlotterTask.cxx:425
 AtlHistFactoryPlotterTask.cxx:426
 AtlHistFactoryPlotterTask.cxx:427
 AtlHistFactoryPlotterTask.cxx:428
 AtlHistFactoryPlotterTask.cxx:429
 AtlHistFactoryPlotterTask.cxx:430
 AtlHistFactoryPlotterTask.cxx:431
 AtlHistFactoryPlotterTask.cxx:432
 AtlHistFactoryPlotterTask.cxx:433
 AtlHistFactoryPlotterTask.cxx:434
 AtlHistFactoryPlotterTask.cxx:435
 AtlHistFactoryPlotterTask.cxx:436
 AtlHistFactoryPlotterTask.cxx:437
 AtlHistFactoryPlotterTask.cxx:438
 AtlHistFactoryPlotterTask.cxx:439
 AtlHistFactoryPlotterTask.cxx:440
 AtlHistFactoryPlotterTask.cxx:441
 AtlHistFactoryPlotterTask.cxx:442
 AtlHistFactoryPlotterTask.cxx:443
 AtlHistFactoryPlotterTask.cxx:444
 AtlHistFactoryPlotterTask.cxx:445
 AtlHistFactoryPlotterTask.cxx:446
 AtlHistFactoryPlotterTask.cxx:447
 AtlHistFactoryPlotterTask.cxx:448
 AtlHistFactoryPlotterTask.cxx:449
 AtlHistFactoryPlotterTask.cxx:450
 AtlHistFactoryPlotterTask.cxx:451
 AtlHistFactoryPlotterTask.cxx:452
 AtlHistFactoryPlotterTask.cxx:453
 AtlHistFactoryPlotterTask.cxx:454
 AtlHistFactoryPlotterTask.cxx:455
 AtlHistFactoryPlotterTask.cxx:456
 AtlHistFactoryPlotterTask.cxx:457
 AtlHistFactoryPlotterTask.cxx:458
 AtlHistFactoryPlotterTask.cxx:459
 AtlHistFactoryPlotterTask.cxx:460
 AtlHistFactoryPlotterTask.cxx:461
 AtlHistFactoryPlotterTask.cxx:462
 AtlHistFactoryPlotterTask.cxx:463
 AtlHistFactoryPlotterTask.cxx:464
 AtlHistFactoryPlotterTask.cxx:465
 AtlHistFactoryPlotterTask.cxx:466
 AtlHistFactoryPlotterTask.cxx:467
 AtlHistFactoryPlotterTask.cxx:468
 AtlHistFactoryPlotterTask.cxx:469
 AtlHistFactoryPlotterTask.cxx:470
 AtlHistFactoryPlotterTask.cxx:471
 AtlHistFactoryPlotterTask.cxx:472
 AtlHistFactoryPlotterTask.cxx:473
 AtlHistFactoryPlotterTask.cxx:474
 AtlHistFactoryPlotterTask.cxx:475
 AtlHistFactoryPlotterTask.cxx:476
 AtlHistFactoryPlotterTask.cxx:477
 AtlHistFactoryPlotterTask.cxx:478
 AtlHistFactoryPlotterTask.cxx:479
 AtlHistFactoryPlotterTask.cxx:480
 AtlHistFactoryPlotterTask.cxx:481
 AtlHistFactoryPlotterTask.cxx:482
 AtlHistFactoryPlotterTask.cxx:483
 AtlHistFactoryPlotterTask.cxx:484
 AtlHistFactoryPlotterTask.cxx:485
 AtlHistFactoryPlotterTask.cxx:486
 AtlHistFactoryPlotterTask.cxx:487
 AtlHistFactoryPlotterTask.cxx:488
 AtlHistFactoryPlotterTask.cxx:489
 AtlHistFactoryPlotterTask.cxx:490
 AtlHistFactoryPlotterTask.cxx:491
 AtlHistFactoryPlotterTask.cxx:492
 AtlHistFactoryPlotterTask.cxx:493
 AtlHistFactoryPlotterTask.cxx:494
 AtlHistFactoryPlotterTask.cxx:495
 AtlHistFactoryPlotterTask.cxx:496
 AtlHistFactoryPlotterTask.cxx:497
 AtlHistFactoryPlotterTask.cxx:498
 AtlHistFactoryPlotterTask.cxx:499
 AtlHistFactoryPlotterTask.cxx:500
 AtlHistFactoryPlotterTask.cxx:501
 AtlHistFactoryPlotterTask.cxx:502
 AtlHistFactoryPlotterTask.cxx:503
 AtlHistFactoryPlotterTask.cxx:504
 AtlHistFactoryPlotterTask.cxx:505
 AtlHistFactoryPlotterTask.cxx:506
 AtlHistFactoryPlotterTask.cxx:507
 AtlHistFactoryPlotterTask.cxx:508
 AtlHistFactoryPlotterTask.cxx:509
 AtlHistFactoryPlotterTask.cxx:510
 AtlHistFactoryPlotterTask.cxx:511
 AtlHistFactoryPlotterTask.cxx:512
 AtlHistFactoryPlotterTask.cxx:513
 AtlHistFactoryPlotterTask.cxx:514
 AtlHistFactoryPlotterTask.cxx:515
 AtlHistFactoryPlotterTask.cxx:516
 AtlHistFactoryPlotterTask.cxx:517
 AtlHistFactoryPlotterTask.cxx:518
 AtlHistFactoryPlotterTask.cxx:519
 AtlHistFactoryPlotterTask.cxx:520
 AtlHistFactoryPlotterTask.cxx:521
 AtlHistFactoryPlotterTask.cxx:522
 AtlHistFactoryPlotterTask.cxx:523
 AtlHistFactoryPlotterTask.cxx:524
 AtlHistFactoryPlotterTask.cxx:525
 AtlHistFactoryPlotterTask.cxx:526
 AtlHistFactoryPlotterTask.cxx:527
 AtlHistFactoryPlotterTask.cxx:528
 AtlHistFactoryPlotterTask.cxx:529
 AtlHistFactoryPlotterTask.cxx:530
 AtlHistFactoryPlotterTask.cxx:531
 AtlHistFactoryPlotterTask.cxx:532
 AtlHistFactoryPlotterTask.cxx:533
 AtlHistFactoryPlotterTask.cxx:534
 AtlHistFactoryPlotterTask.cxx:535
 AtlHistFactoryPlotterTask.cxx:536
 AtlHistFactoryPlotterTask.cxx:537
 AtlHistFactoryPlotterTask.cxx:538
 AtlHistFactoryPlotterTask.cxx:539
 AtlHistFactoryPlotterTask.cxx:540
 AtlHistFactoryPlotterTask.cxx:541
 AtlHistFactoryPlotterTask.cxx:542
 AtlHistFactoryPlotterTask.cxx:543
 AtlHistFactoryPlotterTask.cxx:544
 AtlHistFactoryPlotterTask.cxx:545
 AtlHistFactoryPlotterTask.cxx:546
 AtlHistFactoryPlotterTask.cxx:547
 AtlHistFactoryPlotterTask.cxx:548
 AtlHistFactoryPlotterTask.cxx:549
 AtlHistFactoryPlotterTask.cxx:550
 AtlHistFactoryPlotterTask.cxx:551
 AtlHistFactoryPlotterTask.cxx:552
 AtlHistFactoryPlotterTask.cxx:553
 AtlHistFactoryPlotterTask.cxx:554
 AtlHistFactoryPlotterTask.cxx:555
 AtlHistFactoryPlotterTask.cxx:556
 AtlHistFactoryPlotterTask.cxx:557
 AtlHistFactoryPlotterTask.cxx:558
 AtlHistFactoryPlotterTask.cxx:559
 AtlHistFactoryPlotterTask.cxx:560
 AtlHistFactoryPlotterTask.cxx:561
 AtlHistFactoryPlotterTask.cxx:562
 AtlHistFactoryPlotterTask.cxx:563
 AtlHistFactoryPlotterTask.cxx:564
 AtlHistFactoryPlotterTask.cxx:565
 AtlHistFactoryPlotterTask.cxx:566
 AtlHistFactoryPlotterTask.cxx:567
 AtlHistFactoryPlotterTask.cxx:568
 AtlHistFactoryPlotterTask.cxx:569
 AtlHistFactoryPlotterTask.cxx:570
 AtlHistFactoryPlotterTask.cxx:571
 AtlHistFactoryPlotterTask.cxx:572
 AtlHistFactoryPlotterTask.cxx:573
 AtlHistFactoryPlotterTask.cxx:574
 AtlHistFactoryPlotterTask.cxx:575
 AtlHistFactoryPlotterTask.cxx:576
 AtlHistFactoryPlotterTask.cxx:577
 AtlHistFactoryPlotterTask.cxx:578
 AtlHistFactoryPlotterTask.cxx:579
 AtlHistFactoryPlotterTask.cxx:580
 AtlHistFactoryPlotterTask.cxx:581
 AtlHistFactoryPlotterTask.cxx:582
 AtlHistFactoryPlotterTask.cxx:583
 AtlHistFactoryPlotterTask.cxx:584
 AtlHistFactoryPlotterTask.cxx:585
 AtlHistFactoryPlotterTask.cxx:586
 AtlHistFactoryPlotterTask.cxx:587
 AtlHistFactoryPlotterTask.cxx:588
 AtlHistFactoryPlotterTask.cxx:589
 AtlHistFactoryPlotterTask.cxx:590
 AtlHistFactoryPlotterTask.cxx:591
 AtlHistFactoryPlotterTask.cxx:592
 AtlHistFactoryPlotterTask.cxx:593
 AtlHistFactoryPlotterTask.cxx:594
 AtlHistFactoryPlotterTask.cxx:595
 AtlHistFactoryPlotterTask.cxx:596
 AtlHistFactoryPlotterTask.cxx:597
 AtlHistFactoryPlotterTask.cxx:598
 AtlHistFactoryPlotterTask.cxx:599
 AtlHistFactoryPlotterTask.cxx:600
 AtlHistFactoryPlotterTask.cxx:601
 AtlHistFactoryPlotterTask.cxx:602
 AtlHistFactoryPlotterTask.cxx:603
 AtlHistFactoryPlotterTask.cxx:604
 AtlHistFactoryPlotterTask.cxx:605
 AtlHistFactoryPlotterTask.cxx:606
 AtlHistFactoryPlotterTask.cxx:607
 AtlHistFactoryPlotterTask.cxx:608
 AtlHistFactoryPlotterTask.cxx:609
 AtlHistFactoryPlotterTask.cxx:610
 AtlHistFactoryPlotterTask.cxx:611
 AtlHistFactoryPlotterTask.cxx:612
 AtlHistFactoryPlotterTask.cxx:613
 AtlHistFactoryPlotterTask.cxx:614
 AtlHistFactoryPlotterTask.cxx:615
 AtlHistFactoryPlotterTask.cxx:616
 AtlHistFactoryPlotterTask.cxx:617
 AtlHistFactoryPlotterTask.cxx:618
 AtlHistFactoryPlotterTask.cxx:619
 AtlHistFactoryPlotterTask.cxx:620
 AtlHistFactoryPlotterTask.cxx:621
 AtlHistFactoryPlotterTask.cxx:622
 AtlHistFactoryPlotterTask.cxx:623
 AtlHistFactoryPlotterTask.cxx:624
 AtlHistFactoryPlotterTask.cxx:625
 AtlHistFactoryPlotterTask.cxx:626
 AtlHistFactoryPlotterTask.cxx:627
 AtlHistFactoryPlotterTask.cxx:628
 AtlHistFactoryPlotterTask.cxx:629
 AtlHistFactoryPlotterTask.cxx:630
 AtlHistFactoryPlotterTask.cxx:631
 AtlHistFactoryPlotterTask.cxx:632
 AtlHistFactoryPlotterTask.cxx:633
 AtlHistFactoryPlotterTask.cxx:634
 AtlHistFactoryPlotterTask.cxx:635
 AtlHistFactoryPlotterTask.cxx:636
 AtlHistFactoryPlotterTask.cxx:637
 AtlHistFactoryPlotterTask.cxx:638
 AtlHistFactoryPlotterTask.cxx:639
 AtlHistFactoryPlotterTask.cxx:640
 AtlHistFactoryPlotterTask.cxx:641
 AtlHistFactoryPlotterTask.cxx:642
 AtlHistFactoryPlotterTask.cxx:643
 AtlHistFactoryPlotterTask.cxx:644
 AtlHistFactoryPlotterTask.cxx:645
 AtlHistFactoryPlotterTask.cxx:646
 AtlHistFactoryPlotterTask.cxx:647
 AtlHistFactoryPlotterTask.cxx:648
 AtlHistFactoryPlotterTask.cxx:649
 AtlHistFactoryPlotterTask.cxx:650
 AtlHistFactoryPlotterTask.cxx:651
 AtlHistFactoryPlotterTask.cxx:652
 AtlHistFactoryPlotterTask.cxx:653
 AtlHistFactoryPlotterTask.cxx:654
 AtlHistFactoryPlotterTask.cxx:655
 AtlHistFactoryPlotterTask.cxx:656
 AtlHistFactoryPlotterTask.cxx:657
 AtlHistFactoryPlotterTask.cxx:658
 AtlHistFactoryPlotterTask.cxx:659
 AtlHistFactoryPlotterTask.cxx:660
 AtlHistFactoryPlotterTask.cxx:661
 AtlHistFactoryPlotterTask.cxx:662
 AtlHistFactoryPlotterTask.cxx:663
 AtlHistFactoryPlotterTask.cxx:664
 AtlHistFactoryPlotterTask.cxx:665
 AtlHistFactoryPlotterTask.cxx:666
 AtlHistFactoryPlotterTask.cxx:667
 AtlHistFactoryPlotterTask.cxx:668
 AtlHistFactoryPlotterTask.cxx:669
 AtlHistFactoryPlotterTask.cxx:670
 AtlHistFactoryPlotterTask.cxx:671
 AtlHistFactoryPlotterTask.cxx:672
 AtlHistFactoryPlotterTask.cxx:673
 AtlHistFactoryPlotterTask.cxx:674
 AtlHistFactoryPlotterTask.cxx:675
 AtlHistFactoryPlotterTask.cxx:676
 AtlHistFactoryPlotterTask.cxx:677
 AtlHistFactoryPlotterTask.cxx:678
 AtlHistFactoryPlotterTask.cxx:679
 AtlHistFactoryPlotterTask.cxx:680
 AtlHistFactoryPlotterTask.cxx:681
 AtlHistFactoryPlotterTask.cxx:682
 AtlHistFactoryPlotterTask.cxx:683
 AtlHistFactoryPlotterTask.cxx:684
 AtlHistFactoryPlotterTask.cxx:685
 AtlHistFactoryPlotterTask.cxx:686
 AtlHistFactoryPlotterTask.cxx:687
 AtlHistFactoryPlotterTask.cxx:688
 AtlHistFactoryPlotterTask.cxx:689
 AtlHistFactoryPlotterTask.cxx:690
 AtlHistFactoryPlotterTask.cxx:691
 AtlHistFactoryPlotterTask.cxx:692
 AtlHistFactoryPlotterTask.cxx:693
 AtlHistFactoryPlotterTask.cxx:694
 AtlHistFactoryPlotterTask.cxx:695
 AtlHistFactoryPlotterTask.cxx:696
 AtlHistFactoryPlotterTask.cxx:697
 AtlHistFactoryPlotterTask.cxx:698
 AtlHistFactoryPlotterTask.cxx:699
 AtlHistFactoryPlotterTask.cxx:700
 AtlHistFactoryPlotterTask.cxx:701
 AtlHistFactoryPlotterTask.cxx:702
 AtlHistFactoryPlotterTask.cxx:703
 AtlHistFactoryPlotterTask.cxx:704
 AtlHistFactoryPlotterTask.cxx:705
 AtlHistFactoryPlotterTask.cxx:706
 AtlHistFactoryPlotterTask.cxx:707
 AtlHistFactoryPlotterTask.cxx:708
 AtlHistFactoryPlotterTask.cxx:709
 AtlHistFactoryPlotterTask.cxx:710
 AtlHistFactoryPlotterTask.cxx:711
 AtlHistFactoryPlotterTask.cxx:712
 AtlHistFactoryPlotterTask.cxx:713
 AtlHistFactoryPlotterTask.cxx:714
 AtlHistFactoryPlotterTask.cxx:715
 AtlHistFactoryPlotterTask.cxx:716
 AtlHistFactoryPlotterTask.cxx:717
 AtlHistFactoryPlotterTask.cxx:718
 AtlHistFactoryPlotterTask.cxx:719
 AtlHistFactoryPlotterTask.cxx:720
 AtlHistFactoryPlotterTask.cxx:721
 AtlHistFactoryPlotterTask.cxx:722
 AtlHistFactoryPlotterTask.cxx:723
 AtlHistFactoryPlotterTask.cxx:724
 AtlHistFactoryPlotterTask.cxx:725
 AtlHistFactoryPlotterTask.cxx:726
 AtlHistFactoryPlotterTask.cxx:727
 AtlHistFactoryPlotterTask.cxx:728
 AtlHistFactoryPlotterTask.cxx:729
 AtlHistFactoryPlotterTask.cxx:730
 AtlHistFactoryPlotterTask.cxx:731
 AtlHistFactoryPlotterTask.cxx:732
 AtlHistFactoryPlotterTask.cxx:733