//____________________________________________________________________
//
// DATA/MC Histogram Plotter
//
// Task for creating and plotting lists of stacked or overlayed
// MC histograms with DATA on top
//
// * The same binning for all histograms is required
// * Until now only 1d histograms are supported
//
// The plots are made from input files containing histograms for the
// various MC samples (signal + bckg) as well as DATA. Here, it is
// assumed that the directory and histogram structure is the same for
// each input file. The samples will be normalized w.r.t. the given
// luminosities
//
// The list of plots can be exported in two ways (combination
// possible):
//
// (1) All plots are stored in a single .root file. Here, the
// directory structure of the input files is preserved.
//
// (2) Export to various graphical formats like eps, ps, pdf, png or C
// macro. Since the number of plots is usually high, the directory
// structure of the input files is mapped onto the file system and the
// image files will be stored in their respective directories.  In
// case of an already existing version of the directory tree a backup
// copy is created first under the name $ExportDir_backup where
// $ExportDir indicates the name of the export directory given by
// SetExportDir().
//
// Samples can be combined in groups for better drawing. See the
// examples below. The way of drawing can be changed afterwards via
// HepDataMCPlot::SetGroupHistograms().
//
// Legend: The default behaviour is not to draw a legend inside the
// plots since the number of samples is nornmally high and therefore
// the legend would fit badly into the pad. (However, this behaviour
// can be changed with the help of the SetLegend() member function,
// accessible alspo from the TBrowser) It is recommended to draw the
// legend in an additional pad. In case of an exported .root file this
// is easily possible by using the HepDataMCPlot::DrawLegendPad()
// function (can also be used from the TBrowser). In case of exported
// graphical files an additional file containing only the legend is
// created in toplevel export directory under the name Legend.eps etc.
//
// Example 1 (ungrouped histograms):
// {
//     HepDataMCPlotter *pl = new HepDataMCPlotter("single-top", "Single-Top Analysis");
//     pl->SetExportDir("~/atlas/APlusPlus/libSingleTop/hist/tChannelAnalysis/test");
//     pl->SetLumiDATA(100.);
//     pl->AddMCSample("$LIBSINGLETOP/hist/tChannelAnalysis/tchannel_enu.root",
//                     "MC single-top t-channel e#nu", 120., kOrange);
//     pl->AddMCSample("$LIBSINGLETOP/hist/tChannelAnalysis/tchannel_munu.root",
//                     "MC single-top t-channel #mu#nu", 130., kRed);
//     pl->AddMCSample("$LIBSINGLETOP/hist/tChannelAnalysis/tchannel_taunu.root",
//                     "MC single-top t-channel #tau#nu", 110., kMagenta);
//     pl->AddMCSample("$LIBSINGLETOP/hist/tChannelAnalysis/schannel_enu.root",
//                     "MC single-top s-channel e#nu", 120., kBlue);
//     pl->AddMCSample("$LIBSINGLETOP/hist/tChannelAnalysis/schannel_muunu.root",
//                     "MC single-top s-channel #mu#nu", 120., kCyan);
//     pl->AddMCSample("$LIBSINGLETOP/hist/tChannelAnalysis/Wtproduction.root",
//                     "MC single-top Wt production", 90., kGreen);
//     gROOT->GetListOfBrowsables()->Add(pl);
//     new TBrowser;
// }
//
//
// Example 2 (grouped histograms):
// {
//     HepDataMCPlotter *pl_test = new HepDataMCPlotter("DATA-MC plotter", "Create all Data-MC plots");
//     pl_test->SetWorkingDir("$LIBSINGLETOP/hist/test/plots_datamc");
//     pl_test->SetLumiDATA(100.);
//    
//     // ttbar
//     pl_test->AddMCFolder("ttbar", "ttbar lnln", kRed);
//     (pl_test->AddMCSample("ttbar", "$LIBSINGLETOP/hist/test/ttbar_lnln_np0_hists.root",
//                           "MC ttbar, Np0", 160., kRed-4))->SetLumi(160.);
//     (pl_test->AddMCSample("ttbar", "$LIBSINGLETOP/hist/test/ttbar_lnln_np1_hists.root",
//                           "MC ttbar, Np1", 180., kRed-7))->SetLumi(180.);
//     (pl_test->AddMCSample("ttbar", "$LIBSINGLETOP/hist/test/ttbar_lnln_np2_hists.root",
//                           "MC ttbar, Np2", 150., kRed-9))->SetLumi(150.);
//    
//     // Z+jets
//     pl_test->AddMCFolder("Zjets", "Z+jets", kBlue);
//     (pl_test->AddMCSample("Zjets", "$LIBSINGLETOP/hist/test/zee_np0_hists.root",
//                           "MC Zee, Np0", 70., kBlue-4))->SetLumi(70.);
//     (pl_test->AddMCSample("Zjets", "$LIBSINGLETOP/hist/test/zee_np1_hists.root",
//                           "MC Zee, Np1", 60., kBlue-7))->SetLumi(60.);
//     (pl_test->AddMCSample("Zjets", "$LIBSINGLETOP/hist/test/zmumu_np0_hists.root",
//                           "MC Zmumu, Np0", 90., kBlue-9))->SetLumi(90.);
//     (pl_test->AddMCSample("Zjets", "$LIBSINGLETOP/hist/test/zmumu_np1_hists.root",
//                           "MC Zmumu, Np1", 110., kBlue-10))->SetLumi(110.);
//     (pl_test->AddMCSample("Zjets", "$LIBSINGLETOP/hist/test/zmumu_np2_hists.root",
//                           "MC Zmumu, Np2", 120., kBlue-8))->SetLumi(120.);
// }
//
//
//  
// Author: Oliver Maria Kind <mailto: kind@mail.desy.de>
// Update: $Id: HepDataMCPlotter.cxx,v 1.32 2017/07/28 09:34:11 kaphle Exp $
// Copyright: 2009 (C) Oliver Maria Kind
//
#ifndef HEP_HepDataMCPlotter
#include <HepDataMCPlotter.h>
#endif
#include <HepDataMCSample.h>
#include <TDirectory.h>
#include <TFile.h>
#include <TH1.h>
#include <TKey.h>
#include <TSystem.h>
#include <TStyle.h>
#include <TObjString.h>
#include <TCanvas.h>
#include <TROOT.h>
#include <TObjectTable.h> 
#include <TLegendEntry.h>
#include <TMath.h>
#include <iostream>
#include <TFeldmanCousins.h>
#include <TStyle.h>
#include <TTree.h>

using namespace std;

#ifndef __CINT__
ClassImp(HepDataMCPlotter);
#endif


//____________________________________________________________________

HepDataMCPlotter::HepDataMCPlotter(const char* name, const char* title) :
    TTask(name, title) {
    //
    // Default constructor
    //
    fListOfDataFileNames = new TList;
    fListOfDataFiles     = new TList;
    fListOfPlots         = new TList;
    fListOfInFiles       = new TList;
    fMCSamples           = new TList;
    fMCSingleSamples     = new TList;
    fMCFolders           = new TList;
    fNtuplePlotCmds      = new TList;
    fLumiDATA = 1.;
    fExportDir = new TString("./");
    fExportROOT = kTRUE;
    fExportEPS  = kFALSE;
    fExportPS   = kFALSE;
    fExportPDF  = kFALSE;
    fExportPNG  = kFALSE;
    fExportC    = kFALSE;
    fDrawLegend = kFALSE;
    fGroupHistograms = kTRUE;
    fDrawMCError     = kFALSE;
    fDrawDataZeroEntryErrors = kTRUE;
    fUnifyMCStack    = kFALSE;
    fOutputRootFile = 0;
    fLogyaxis = kFALSE;
    fDrawCMSLumiAtlasLabel = kTRUE;
    fUseAtlasStyle = kTRUE;
    fAtlasLabelStatus = "Internal";
    fCenterOfMassEnergyLabel = "7";
    fLuminosityLabel = "4.7 fb^{-1}"; 
}

//____________________________________________________________________

HepDataMCPlotter::~HepDataMCPlotter() {
    //
    // Default destructor
    //
    fListOfDataFileNames->Delete(); delete fListOfDataFileNames;
    fListOfDataFiles->Delete();     delete fListOfDataFiles;
    delete fListOfPlots;
    delete fListOfInFiles;
    fMCSamples->Delete(); delete fMCSamples;
    fMCFolders->Delete(); delete fMCFolders;
    fNtuplePlotCmds->Delete(); delete fNtuplePlotCmds;
    delete fExportDir;
    if ( fOutputRootFile != 0 ) delete fOutputRootFile;
}

//____________________________________________________________________

void HepDataMCPlotter::AddDataFile(const char* path, const char* label = "DATA") {
    //
    // Add file to the list of data files.
    // The label is used for the legend
    //
    fListOfDataFileNames->Add(new TNamed(path, label));
}

//____________________________________________________________________

HepDataMCSample* HepDataMCPlotter::AddMCSample(const char* path,
					       const char* label,
					       Color_t color,
					       Style_t line_style,
					       Width_t line_width,
					       Style_t fill_style) {
    //
    // Add MC sample given by the path to its histogram file.
    // The label will be used in the corresponding legend entry.
    // The line and fill attributes are used for drawing the histograms
    // in stacked and overlay mode, resp.
    //
    HepDataMCSample *sample = new HepDataMCSample(path, label, color, line_style,
						  line_width, fill_style); 
    fMCSamples->Add(sample);
    fMCSingleSamples->Add(sample);
    return sample;
}

//____________________________________________________________________

HepDataMCSample* HepDataMCPlotter::AddMCSample(const char* path,
					       const char* label,
					       Color_t color) {
    //
    // Same as above but line style and width, and fill style are set
    // to the defaults given by the current style
    //
    return AddMCSample(path, label, color, gStyle->GetHistLineStyle(),
		       gStyle->GetHistLineWidth(),
		       gStyle->GetHistFillStyle());
}

//____________________________________________________________________

HepDataMCSample* HepDataMCPlotter::AddMCSample(const char* path,
					       const char* label,
					       Float_t xsec,
					       Color_t color) {
    //
    // Same as above but line style and width, and fill style are set
    // to the defaults given by the current style
    //
    if ( gDebug > 0 ) Info("AddMCSample", "path = %s", path);
    HepDataMCSample *sample = AddMCSample(path, label, color,
					  gStyle->GetHistLineStyle(),
					  gStyle->GetHistLineWidth(),
					  gStyle->GetHistFillStyle());
    sample->SetXsection(xsec);
    return sample;
}

//____________________________________________________________________

HepDataMCSample* HepDataMCPlotter::AddMCSample(HepDataMCFolder *folder,
					       const char* path,
					       const char* label,
					       Float_t xsec,
					       Color_t color) {
    //
    // Add an MC sample given by the path to its histogram file to the
    // given folder. The folder can be used to group histograms in
    // order to make the plot and its legend better readable, in
    // particluar when dealing with many samples. The given label will
    // be used in the corresponding legend entry. The line and fill
    // attributes are used for drawing the histograms in stacked and
    // overlay mode, resp. The given x-section is used for the
    // luminosity weighting when drawing the stack of all samples.
    //
    HepDataMCSample *sample = new HepDataMCSample(path, label, color,
						  gStyle->GetHistLineStyle(),
						  gStyle->GetHistLineWidth(),
						  gStyle->GetHistFillStyle());
    folder->Add(sample);
    sample->SetXsection(xsec);
    return sample;
}

//____________________________________________________________________

HepDataMCSample* HepDataMCPlotter::AddMCSample(const char* folder_name,
					       const char* path,
					       const char* label,
					       Float_t xsec,
					       Color_t color) {
    //
    // Add an MC sample given by the path to its histogram file to the
    // given folder. The folder can be used to group histograms in
    // order to make the plot and its legend better readable, in
    // particluar when dealing with many samples. The given label will
    // be used in the corresponding legend entry. The line and fill
    // attributes are used for drawing the histograms in stacked and
    // overlay mode, resp. The given x-section is used for the
    // luminosity weighting when drawing the stack of all samples.
    //

    // Get folder
    HepDataMCFolder *folder = (HepDataMCFolder*)fMCFolders->FindObject(folder_name);
    if ( folder == 0 ) {
	Error("AddMCSample",
	      "Could not find folder \"%s\" in the list of existing folders. Abort!",
	      folder_name);
	gSystem->Abort(0);
    }

    // Create sample and add it to the given folder
    HepDataMCSample *sample = new HepDataMCSample(path, label, color,
						  gStyle->GetHistLineStyle(),
						  gStyle->GetHistLineWidth(),
						  gStyle->GetHistFillStyle());
    folder->Add(sample);
    sample->SetXsection(xsec);
    return sample;
}

//____________________________________________________________________

void HepDataMCPlotter::InitInput() {
	// 
	// Open all input files for reading and add them to the list of
	// input files.
	// In case single HepDataMCPlots are being produced instead
	// of using HepDataMCPlotter::Exec() this routine must be 
	// called first explicitly.
	// 
    if ( fListOfDataFileNames != 0 ) {
	Info(__FUNCTION__, "Loop over DataFileNames");
	TIter next_file(fListOfDataFileNames);
	TNamed *file = 0;
	TFile *f = 0;
	while ( (file = (TNamed*)next_file()) ) {
	    if ( gSystem->AccessPathName(file->GetName()) )
		continue; // only consider existing DATA files
	    f = new TFile( file->GetName(), "read");
	    fListOfInFiles->Add(f);
	    fListOfDataFiles->Add(f);
	}
    }
    Info(__FUNCTION__, "Loop over MCFolders");
    TFile *mcfile = 0;
    TIter next_mcfolder(fMCFolders);
    HepDataMCFolder *mc_folder = 0;
    HepDataMCSample *mc_sample = 0;
    while ( (mc_folder = (HepDataMCFolder*)next_mcfolder()) ) {
		TIter next_mcsample(mc_folder->GetMCSamples());
		while ( (mc_sample = (HepDataMCSample*)next_mcsample()) ) {
			mcfile = mc_sample->Open();
			if ( mcfile != 0 ) {
				fListOfInFiles->Add(mcfile);
				if ( gDebug > 0 ) Info("InitInput", "Add file %s", mcfile->GetName());
			}
		}
    }
    Info(__FUNCTION__, "Loop over MCSamples");
    TIter next_mcsample2(fMCSamples);
    while ( (mc_sample = (HepDataMCSample*)next_mcsample2()) ) {
		mcfile = mc_sample->Open();
		if ( mcfile != 0 ) {
			fListOfInFiles->Add(mcfile);
			if ( gDebug > 0 ) Info("InitInput", "Add file %s", mcfile->GetName());
		}
    }
}

//____________________________________________________________________

void HepDataMCPlotter::Exec(Option_t *option) {
    //
    // Execute task
    //
    // The plot building process is performed in two steps: First a
    // list of plots is created by inspecting all keys in the input
    // files. In the next step for each list entry a plot is created
    // and all existing histograms are added. The directory structure
    // is preserved. The two steps are needed because only one plot
    // can be kept in memory at a time. Otherwise one would have to
    // keep all plots in memory in parallel which would blow the
    // available RAM.
    //
    fListOfInFiles->Delete();
    
    // Execute in batch mode to prevent from drawing all the histograms
    // (very time-consuming when working from remote)
    Bool_t savmode = gROOT->IsBatch();
    gROOT->SetBatch(kTRUE);

    // remove warning issued from h.Sumw2() in normalize()
    TH1::SetDefaultSumw2();
    
    cout << endl;
    Info("Exec", "Begin of task \"%s\"", GetName());
    
    // Open all input files for reading and add them to the list of
    // input files
    InitInput();
	
    // Build the list of plots
    BuildListOfPlots();

    // Save a backup copy of the output directory in case the export
    // directory already exists
    if ( !gSystem->AccessPathName(gSystem
				  ->ExpandPathName(fExportDir
						   ->Data())) ) {
	Info("Exec", "Save backup copy of export directory \"%s\"",
	     fExportDir->Data());
	TString path2 = fExportDir->Strip(TString::kTrailing, '/');
	Info("Exec", "mv --force --strip-trailing-slashes %s %s_backup",
			   path2.Data(),
			   path2.Data());
	gSystem->Exec(Form("cp -r %s %s_backup",
			   path2.Data(),
			   path2.Data()));
	gSystem->Exec(Form("rm -fr  %s", fExportDir->Data()));
    }
    gSystem->Exec(Form("mkdir  %s", fExportDir->Data()));

    // Open .root output file for writing
    if ( fExportROOT ) {
	if ( fOutputRootFile != 0 ) delete fOutputRootFile;
	fOutputRootFile = new TFile(Form("%s/%s.root",
					 fExportDir->Data(),
					 GetName()), "recreate");
    }
    
    // Loop over the list of plot names and build all plots and export
    // them
    TIter next_plot(fListOfPlots);
    TNamed *pname = 0;
    TString qcdtool = TString("/QCDMMTool");
    while ( (pname = (TNamed*)next_plot()) ) {
	if ( qcdtool.EqualTo(pname->GetTitle()) ) {
	    Warning(__FUNCTION__, "Using hardcoded tool name to skip "
		    "histograms created only in QCDMMTool");
	    continue; 
	} // SK ugly hack
	if ( gDebug > 0 ) {
	    Info(__FUNCTION__, "Start building of plot %s %s",
		 pname->GetName(), pname->GetTitle());
	}
        HepDataMCPlot *pl = BuildPlot(pname);  
	if ( pl == 0 ) continue;
 	if ( gDebug > 0 ) {
	    Info(__FUNCTION__, "Created plot %s %s",
		 pl->GetName(), pl->GetTitle());
	}
 	Export(pl, pname);   
 	delete pl->GetHistDATA();
 	delete pl;
    }

    // Loop over the list of ntuple plot commands and create plots
    TIter next_cmd(fNtuplePlotCmds);
    HepNtuplePlotCmd *cmd = 0;
    while ( (cmd = (HepNtuplePlotCmd*)next_cmd()) ) {
        Info("Exec", "Start building of ntuple plot %s %s",
	    cmd->GetPlotName(), cmd->GetPlotTitle());
        HepDataMCPlot *pl = BuildNtuplePlot(cmd);  
	if ( pl == 0 ) continue;
 	Info("Exec", "Created plot %s %s",
 	     pl->GetName(), pl->GetTitle());
	Export(pl, new TNamed(pl->GetName(), ""));   
	//OMK 	delete pl->GetHistDATA();
	delete pl;
    }
    
    // Close all input files
    TFile *infile = 0;
    TIter next_infile(fListOfInFiles);
    while ( (infile = (TFile*)next_infile()) ) {
	infile->Close();
    }

    // Close output .root file
    delete fOutputRootFile; fOutputRootFile = 0;
    
    Info("Exec", "End of task \"%s\"", GetName());
    cout << endl;

    // Re-set mode
    gROOT->SetBatch(savmode);
}

//____________________________________________________________________

void HepDataMCPlotter::BuildListOfPlots() {
    //
    // Loop over all histograms in the DATA file (if exisiting) or the
    // 1st MC file otherwise and create a list containg the names of
    // all plots
    //
    TFile *infile = 0;
    TIter next_infile(fListOfInFiles);
    while ( (infile = (TFile*)next_infile()) ) {
	if ( gDebug > 0 ) {
	    Info("BuildListOfPlots", "Processing input file %s", infile->GetName());
	}
	ReadHistogramsFromDir(infile);
    }
}
	
//____________________________________________________________________

void HepDataMCPlotter::ReadHistogramsFromDir(TDirectory *dir) {
    //
    // Read all histograms from given directory
    // and all its sub-directories
    //
    dir->cd();
    
    TIter next_key(dir->GetListOfKeys());
    TKey *key = 0;
    while ( (key = (TKey*)next_key()) ) {
	if ( gDebug > 0 ) Info("ReadHistogramsFromDir", "key = %s %s",
	     key->GetName(), key->GetClassName());
	TString keyname = key->GetName();
	if ( keyname.Contains("fullCutFlow") ||
	     keyname.Contains("allEventsHFOR") ) {
	    // skip cutflow histograms since naming is different
	    // for data one and mc with systematics...
	    // physics_systematic_fullCutFlow...
	    // for data it's always nominal, which causes problems
	    continue;
	}

	if ( strcmp(key->GetClassName(), "TDirectoryFile") == 0 ) {
	    // Change into sub-directory
	    TDirectoryFile *dir = (TDirectoryFile*)key->ReadObj();
	    if ( gDebug > 0 ) Info("ReadHistogramsFromDir", "cd %s", dir->GetName());
	    ReadHistogramsFromDir(dir);
	    delete dir;
	} else if ( (strcmp(key->GetClassName(), "TH1F") == 0)
		    || (strcmp(key->GetClassName(), "TH1D") == 0) ) {
	    // Add name and path of 1-dim histogram to list of plots
	    // if the plot has not been added before already
	    TString path = HepDataMCPlot::GetPathInsideFile(dir);
	    
	    Bool_t alreadyInList = kFALSE;
	    TIter next_plot(fListOfPlots);
	    while(TNamed* pl = (TNamed*)next_plot()){
		if((strcmp(pl->GetName(),key->GetName()) == 0) &&
		   (strcmp(pl->GetTitle(),path.Data()) == 0))
		  alreadyInList = kTRUE;
	    }
	    if (!alreadyInList) {
		fListOfPlots->Add(new TNamed(key->GetName(), path.Data()));
		if ( gDebug > 0 ) Info("ReadHistogramsFromDir", "Add plot %s", key->GetName());
	    }
	}
    }
}

//____________________________________________________________________

TH1F* HepDataMCPlotter::GetHistFromFile(TFile *f, TNamed *PlotName) {
    TH1 * h = 0;
    f->GetObject(Form("%s/%s", PlotName->GetTitle(), PlotName->GetName()), h);
    if ( !h ) {
	Warning(__FUNCTION__, "Plot named %s/%s not found in file %s",
		PlotName->GetTitle(), PlotName->GetName(), f->GetName());
    }
    TH1F * h1 = dynamic_cast<TH1F *>(h);
    if ( !h1 ) {
        TDirectory::TContext directoryContext(h->GetDirectory());
        h1 = new TH1F();
        h->Copy(*h1);
        h->SetDirectory(gDirectory);
    }
    return h1;
}

//____________________________________________________________________

HepDataMCPlot* HepDataMCPlotter::CreatePlotFromHist(TH1F *h) const {
    //
    // Create plot and use the given hisotgram for setting name, title
    // and axis titles of the plot
    //
    h->SetStats(kFALSE);
    if ( gDebug > 0 ) Info("CreatePlotFromHist", "plot = %s %s", h->GetName(), h->GetTitle());
    HepDataMCPlot *plot = new HepDataMCPlot(h->GetName(), h->GetTitle());
    plot->SetXTitle(h->GetXaxis()->GetTitle());
    plot->SetYTitle(h->GetYaxis()->GetTitle());
    plot->SetUseAtlasStyle(fUseAtlasStyle);
    plot->SetAtlasLabelStatus(fAtlasLabelStatus);
    plot->SetCenterOfMassEnergyLabel(fCenterOfMassEnergyLabel);
    plot->SetLuminosityLabel(fLuminosityLabel);
    plot->SetDrawCMSLumiAtlasLabel(fDrawCMSLumiAtlasLabel);
    plot->SetDrawDataZeroEntryErrors(fDrawDataZeroEntryErrors);
    plot->SetDrawMCError(fDrawMCError, kFALSE);
    plot->SetUseOverflowUnderflow(fUseOverflowUnderflow);
    plot->SetDrawSignalOverlay(fDrawSignalOverlay);
    plot->SetScaleOverlay(fScaleOverlay);
    
    return plot; // <<<<==== Why here ??? OMK
    
    // Copy the existing folder structure to the plot
    TIter next_folder(fMCFolders);
    HepDataMCFolder *folder = 0;
    while ( (folder = (HepDataMCFolder*)next_folder()) ) {
	plot->AddMCFolder(folder);
    }

    // Copy single samples to the plot
    TIter next_singlesample(fMCSingleSamples);
    HepDataMCSample *single_sample = 0;
    while ( (single_sample = (HepDataMCSample*)next_singlesample()) ) {
	plot->AddMCSingleSample(single_sample);
    }

    //    return plot; <<<<==== ??? OMK
}

//____________________________________________________________________

void HepDataMCPlotter::AddHistMC(HepDataMCPlot *plot, TH1F *h,
				 HepDataMCSample *mc_sample,
				 HepDataMCFolder *folder,
				 Float_t LumiScale) const {
    //
    // Add MC histogram to given plot.
    // The histogram ist normalized.
    // In case of non-existing folder the zero pointer is used (default).
    //
    Normalize(*h, mc_sample, LumiScale);
    if ( folder == 0 ) {
	plot->AddHistMC(h, mc_sample);
	if ( gDebug > 0 ) {
	    Info("AddHistMC", "hist %s   sample %s", h->GetName(),
		 mc_sample->GetFile()->GetName());
	}
    } else { 
	plot->AddHistMC(h, folder, mc_sample);
	if ( gDebug > 0 ) {
	    Info("AddHistMC",
		 "hist %s   sample %s   folder %s", h->GetName(),
		 mc_sample->GetFile()->GetName(), folder->GetName());
	}
    }
}

//____________________________________________________________________

HepDataMCPlot* HepDataMCPlotter::BuildPlot(TNamed *PlotName) {
    //
    // Build plot of given name
    //
    HepDataMCPlot *plot = 0;
    TFile *f;
    TH1F *h = 0;
    
    //
    // Step 1: Add DATA histogram to plot (if existing)
    // ================================================
    if ( fListOfDataFiles->GetEntries() > 0 ) {
	TIter next_file(fListOfDataFiles);
	f = (TFile*) next_file();           // first file in list
	h = GetHistFromFile(f, PlotName);   // init hist
	while ( (f = (TFile*)next_file()) ) // loop over remaining files
	    if ( h != 0) { h->Add(GetHistFromFile(f, PlotName)); }
	
	if ( h != 0 ) {
	    if ( plot == 0 ) plot = CreatePlotFromHist(h);
	    TNamed *data = (TNamed*) fListOfDataFileNames->At(0);
	    plot->SetHistDATA(h, data->GetTitle(), fLumiDATA);
	}
    }
    
    //
    // Step 2: Loop over all grouped samples and add normalized MC
    // histograms to MC stack of the plot
    // ===========================================================
    TIter next_folder(fMCFolders);
    HepDataMCSample *mc_sample = 0;
    HepDataMCFolder *folder = 0;
    while ( (folder = (HepDataMCFolder*)next_folder()) ) {
	TIter next_mcsample(folder->GetMCSamples());
	while ( (mc_sample = (HepDataMCSample*)next_mcsample()) ) {
	    f = mc_sample->GetFile();  
	    h = GetHistFromFile(f, PlotName);
	    if ( h != 0 ) {
		if ( plot == 0 ) plot = CreatePlotFromHist(h);
		AddHistMC(plot, h, mc_sample, folder);
	    }
	}
	if ( plot != 0 ) plot->AddMCFolder(folder);
    }
    
    //
    // Step 3: Loop over all remaining un-grouped samples and add
    // normalized MC histograms to MC stack of the plot
    // ==========================================================
    TIter next_mcsample(fMCSamples);
    while ( (mc_sample = (HepDataMCSample*)next_mcsample()) ) {
        f = mc_sample->GetFile();  
	h = GetHistFromFile(f, PlotName);
	if ( h != 0 ) {
	    if ( plot == 0 ) plot = CreatePlotFromHist(h);
	    AddHistMC(plot, h, mc_sample);
	    if ( plot != 0 ) plot->AddMCSingleSample(mc_sample);
	}
    }
    
    plot->SetLumiDATA(fLumiDATA);
    
    return plot;
}

//____________________________________________________________________

void HepDataMCPlotter::Export(HepDataMCPlot *Plot, TNamed *PlotName) {
    //
    // Export the given plot to the .root output file and to the file
    // system in various graphical formats
    //
    
    // Set drawing of MC errors
    Plot->SetDrawMCError(fDrawMCError, kFALSE);
    
    // Set unifying the MC stack
    Plot->SetUnifyMCStack(fUnifyMCStack, kFALSE);

    // Set drawing of 0 data entry bin upper errors
    Plot->SetDrawDataZeroEntryErrors(fDrawDataZeroEntryErrors);
    
    // Export to .root file
    TDirectory *dir = 0;
    if ( fExportROOT ) {
	dir = (TDirectory*)fOutputRootFile
	    ->FindObject(PlotName->GetTitle());
	if ( dir == 0 )
	    dir = MkDirWithParents(fOutputRootFile, PlotName->GetTitle());
	dir->cd();
	if ( Plot->GetHistDATA() != 0 ) Plot->GetHistDATA()->SetDirectory(dir);
	if ( Plot->GetMCHistStack()->GetHists() == 0 ) {
	    Warning("Export", "No hists in stack");
	    cerr.flush();
	} else {
	    TIter next_hist(Plot->GetMCHistStack()->GetHists());  
	    TH1F *h = 0;
	    while ( (h = (TH1F*)next_hist()) ) {   
		h->SetDirectory(dir);
	    }
	    Plot->Write();  
	}
    }
    
    // Create a new (corresponding) directory on the file system
    TString fullpath;
    if ( fExportEPS || fExportPS || fExportPDF || fExportPNG || fExportC ) {
	fullpath.Append(fExportDir->Data());
	fullpath.Append(PlotName->GetTitle());
	gSystem->Exec(Form("mkdir -p %s", fullpath.Data()));
	
	// Create canvas
        TCanvas *c = new TCanvas("c1", "c1");
        c->SetName(Form("c_%s",  Plot->GetName()));
        c->SetTitle(Plot->GetTitle());
        if ( fLogyaxis ) c->SetLogy();

        Plot->Draw(fDrawLegend?"":"noleg");
        
        // Save plot in different formats
        if ( fExportEPS )
	    c->SaveAs(Form("%s/%s.eps", fullpath.Data(), Plot->GetName()));
        if ( fExportPS )
	    c->SaveAs(Form("%s/%s.ps",  fullpath.Data(), Plot->GetName()));
        if ( fExportPDF )
	    c->SaveAs(Form("%s/%s.pdf", fullpath.Data(), Plot->GetName()));
        if ( fExportPNG )
	    c->SaveAs(Form("%s/%s.png", fullpath.Data(), Plot->GetName()));
        if ( fExportC )
        c->SaveAs(Form("%s/%s.C",   fullpath.Data(), Plot->GetName()));  
        
        // Export graphics file(s) containing the legend
        Plot->DrawLegend();
        Plot->DrawLegendPad();
	    if ( fExportEPS )
	    c->SaveAs(Form("%s/Legend.eps", fExportDir->Data()));
	    if ( fExportPS )
	    c->SaveAs(Form("%s/Legend.ps",  fExportDir->Data()));
	    if ( fExportPDF )
	    c->SaveAs(Form("%s/Legend.pdf", fExportDir->Data()));
	    if ( fExportPNG )
		c->SaveAs(Form("%s/Legend.png", fExportDir->Data()));
	    if ( fExportC )
		c->SaveAs(Form("%s/Legend.C",   fExportDir->Data()));
	    
	    // Clean-up of canvas
	    delete c; 
    }
    
    // Delete clones histogram objects. Needed until ROOT bug in TLegend::Clone() is fixed.
    TLegend *LegendLarge = Plot->GetLegendLarge();
    if (LegendLarge != 0)  {
	TIter next_obj(LegendLarge->GetListOfPrimitives());  
	TLegendEntry *obj = 0;
	while ( (obj = (TLegendEntry*)next_obj()) ) {
	    delete (TH1F*)obj->GetObject();
	}   
    }
}

//____________________________________________________________________

TDirectory* HepDataMCPlotter::MkDirWithParents(TFile *f, const char* dir) {
    //
    // Create the given directoy and all of its parents if necessary
    // in the given file
    //
    TString fulldir(dir);
    TObjArray *subdirs = fulldir.Tokenize("/");
    f->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());
	}
	gDirectory->cd(subdir->GetString().Data());
    }

    //Clear objects
    delete subdirs;
    delete subdir;

    return gDirectory;
}

//____________________________________________________________________

void HepDataMCPlotter::SetGroupHistograms(Bool_t GroupHistograms) {
    //
    // Switch grouping of histograms on or off
    //
    fGroupHistograms = GroupHistograms;
    TIter next_plot(fListOfPlots);
    HepDataMCPlot *plot = 0;
    while ( (plot = (HepDataMCPlot*)next_plot()) ) {
	plot->SetGroupHistograms(GroupHistograms);
    }
}

//____________________________________________________________________

void HepDataMCPlotter::SetDrawMCError(Bool_t DrawMCError) {
    //
    // Switch drawing of MC errors on or off.
    //
    fDrawMCError = DrawMCError;
}

//____________________________________________________________________


void HepDataMCPlotter::SetDrawDataZeroEntryErrors(Bool_t DrawDataZeroEntryErrors) {
    //
    // Draw the Data error bars even for 0 data entry bins
    //
    fDrawDataZeroEntryErrors = DrawDataZeroEntryErrors;
}

//____________________________________________________________________

void HepDataMCPlotter::SetUnifyMCStack(Bool_t UnifyMCStack) {
    //
    // Unify MC stack histograms into a single histogram
    //
    fUnifyMCStack = UnifyMCStack;
}

//____________________________________________________________________

void HepDataMCPlotter::SetLogyaxis(Bool_t Logyaxis) {
    //
    // Plot y axis in logarithmic scale
    //
    fLogyaxis = Logyaxis;
}

//____________________________________________________________________

void HepDataMCPlotter::AddMCFolder(const char* name, const char* title,
				   Color_t color) {
    //
    // Add folder for grouping histograms
    //
    // Line and fill style are set to the defaults given by the
    // current style
    //
    HepDataMCFolder *folder = new HepDataMCFolder(name, title, color,
						  gStyle->GetHistLineStyle(),
						  gStyle->GetHistLineWidth(),
						  gStyle->GetHistFillStyle());
    fMCFolders->Add(folder);
    Info(__FUNCTION__,
	 "Added folder \"%s\" with title \"%s\" to list of MCFolders",
	 name, title);

    // Add folder to all plots also for later use
    TIter next_plot(fListOfPlots);
    HepDataMCPlot *plot = 0;
    while ( (plot = (HepDataMCPlot*)next_plot()) ) {
	plot->AddMCFolder(folder);
    }
}

//____________________________________________________________________

void HepDataMCPlotter::Normalize(TH1F &h, HepDataMCSample *sample,
    Float_t LumiScale) const {
    //
    // Weight given histogram with the lumi of the given MC sample and
    // normalize it to DATA luminosity.
    //
    // LumiScale is an additional factor which can be given to the MC
    // lumi (default = 1)
    //
    h.Sumw2();
    Double_t lumiMC = sample->GetLumi() * LumiScale;
    Double_t scale = ( lumiMC == 0. ) ? 0. : fLumiDATA/lumiMC;
    h.Scale(scale);
    h.SetStats(kFALSE);
}

//____________________________________________________________________

void HepDataMCPlotter::AddNtuplePlotCmd(const char* TreeName,
					const char* VarExp,
					const char* Selection,
					const char* PlotName,
					const char* PlotTitle, Int_t Nbins,
					Double_t Xlow, Double_t Xup,
					const char* XTitle,
					const char* YTitle) {
    //
    // Add ntuple draw command (see TTree::Draw()) to be used by the
    // plotter
    //
    fNtuplePlotCmds->Add(new HepNtuplePlotCmd(TreeName, VarExp,
					      Selection, PlotName,
					      PlotTitle, Nbins,
					      Xlow, Xup, XTitle,
					      YTitle));
}

//____________________________________________________________________

HepDataMCPlot* HepDataMCPlotter::BuildNtuplePlot(HepNtuplePlotCmd *cmd) const {
    //
    // Build plot from ntuple by using TTree::Draw()
    //
    HepDataMCPlot *plot = 0;
    TFile *f = 0;
    TH1F  *h = 0;
    TTree *t = 0;

    // DATA
    if ( fListOfDataFiles->GetEntries() > 0 ) {
        TIter next_datafile(fListOfDataFiles);
	h = new TH1F(Form("%s_data", cmd->GetPlotName()),
		     cmd->GetPlotTitle(), cmd->GetNbins(),
		     cmd->GetXlow(), cmd->GetXup());
	h->Sumw2();
	h->SetXTitle(cmd->GetXTitle());
	h->SetYTitle(cmd->GetYTitle());
	while ( (f = (TFile*)next_datafile()) ) {
	     t = (TTree*)f->Get(cmd->GetTreeName());
	     t->Draw(Form("%s>>+%s", cmd->GetVarExp(), h->GetName()),
		     cmd->GetSelection());
	     if ( plot == 0 ) plot = CreatePlotFromHist(h);
	}
	TNamed *data = (TNamed*) fListOfDataFileNames->At(0);
	plot->SetName(cmd->GetPlotName());
	plot->SetTitle(cmd->GetPlotTitle());
	plot->SetHistDATA(h, data->GetTitle(), fLumiDATA);
    }

    // MC folders
    TIter next_folder(fMCFolders);
    HepDataMCSample *mc_sample = 0;
    HepDataMCFolder *folder = 0;
    // TH1F *h_nevt = 0;
    // Float_t NSelEvents = 0.;
    // Long64_t NTreeEntries = 0;
    while ( (folder = (HepDataMCFolder*)next_folder()) ) {
	TIter next_mcsample(folder->GetMCSamples());
	while ( (mc_sample = (HepDataMCSample*)next_mcsample()) ) {
	    f = mc_sample->GetFile();
	    t = (TTree*)f->Get(cmd->GetTreeName());
	    h = new TH1F(Form("%s_%s", cmd->GetPlotName(),
			      mc_sample->GetTitle()),
			 cmd->GetPlotTitle(), cmd->GetNbins(),
			 cmd->GetXlow(), cmd->GetXup());
	    h->SetXTitle(cmd->GetXTitle());
	    h->SetYTitle(cmd->GetYTitle());
	    h->Sumw2();
	    
	    // Check if tree exists
	    if ( t == 0 ) {
		Error("BuildNtuplePlot",
		      "Could not find tree %s in file %s! Abort!",
		      cmd->GetTreeName(), f->GetName());
		gSystem->Abort(0);
	    }
	    
	    t->Draw(Form("%s>>%s", cmd->GetVarExp(), h->GetName()),
		    cmd->GetSelection());
	    if ( plot == 0 ) {
		plot = CreatePlotFromHist(h);
		plot->SetName(cmd->GetPlotName());
		plot->SetTitle(cmd->GetPlotTitle());
	    }
		
	    // Check if no. of selected events and number of events inside the tree are the same.
	    // If not scale MC lumi accordingly
	    // Look for JobInfo histogram. If this doesn't exist try
	    // cut-flow (from SgTop-D3PDs)
	    // h_nevt = (TH1F*)f->Get("job_info/h_nevts");
	    // if ( h_nevt != 0 ) {
	    // 	NSelEvents = h_nevt->GetBinContent(10);
	    // }
	    // NTreeEntries = t->GetEntries();
	    Float_t LumiScale = 1.;

	    AddHistMC(plot, h, mc_sample, folder, LumiScale);
	}
	if ( plot != 0 ) plot->AddMCFolder(folder);
    }
    return plot;
}

//____________________________________________________________________

void HepDataMCPlotter::SetUseOverflowUnderflow(Bool_t status) {
    //
    // Set flag for drawing the under- and overflow bins
    //
    fUseOverflowUnderflow = status;
}

//____________________________________________________________________

void HepDataMCPlotter::SetDrawSignalOverlay(Bool_t status) {
    //
    // Set flag for drawing the signal MC (assumed to be the least
    // entry in the MC histogram stack) as overlay instead as part of
    // the stack
    //
    fDrawSignalOverlay = status;
}

//____________________________________________________________________

void HepDataMCPlotter::SetScaleOverlay(Float_t scale) {
    //
    // Set scale factor of the overlay histogram (see
    // SetDrawSignalOverlay())
    //
    fScaleOverlay = scale;
}

 HepDataMCPlotter.cxx:1
 HepDataMCPlotter.cxx:2
 HepDataMCPlotter.cxx:3
 HepDataMCPlotter.cxx:4
 HepDataMCPlotter.cxx:5
 HepDataMCPlotter.cxx:6
 HepDataMCPlotter.cxx:7
 HepDataMCPlotter.cxx:8
 HepDataMCPlotter.cxx:9
 HepDataMCPlotter.cxx:10
 HepDataMCPlotter.cxx:11
 HepDataMCPlotter.cxx:12
 HepDataMCPlotter.cxx:13
 HepDataMCPlotter.cxx:14
 HepDataMCPlotter.cxx:15
 HepDataMCPlotter.cxx:16
 HepDataMCPlotter.cxx:17
 HepDataMCPlotter.cxx:18
 HepDataMCPlotter.cxx:19
 HepDataMCPlotter.cxx:20
 HepDataMCPlotter.cxx:21
 HepDataMCPlotter.cxx:22
 HepDataMCPlotter.cxx:23
 HepDataMCPlotter.cxx:24
 HepDataMCPlotter.cxx:25
 HepDataMCPlotter.cxx:26
 HepDataMCPlotter.cxx:27
 HepDataMCPlotter.cxx:28
 HepDataMCPlotter.cxx:29
 HepDataMCPlotter.cxx:30
 HepDataMCPlotter.cxx:31
 HepDataMCPlotter.cxx:32
 HepDataMCPlotter.cxx:33
 HepDataMCPlotter.cxx:34
 HepDataMCPlotter.cxx:35
 HepDataMCPlotter.cxx:36
 HepDataMCPlotter.cxx:37
 HepDataMCPlotter.cxx:38
 HepDataMCPlotter.cxx:39
 HepDataMCPlotter.cxx:40
 HepDataMCPlotter.cxx:41
 HepDataMCPlotter.cxx:42
 HepDataMCPlotter.cxx:43
 HepDataMCPlotter.cxx:44
 HepDataMCPlotter.cxx:45
 HepDataMCPlotter.cxx:46
 HepDataMCPlotter.cxx:47
 HepDataMCPlotter.cxx:48
 HepDataMCPlotter.cxx:49
 HepDataMCPlotter.cxx:50
 HepDataMCPlotter.cxx:51
 HepDataMCPlotter.cxx:52
 HepDataMCPlotter.cxx:53
 HepDataMCPlotter.cxx:54
 HepDataMCPlotter.cxx:55
 HepDataMCPlotter.cxx:56
 HepDataMCPlotter.cxx:57
 HepDataMCPlotter.cxx:58
 HepDataMCPlotter.cxx:59
 HepDataMCPlotter.cxx:60
 HepDataMCPlotter.cxx:61
 HepDataMCPlotter.cxx:62
 HepDataMCPlotter.cxx:63
 HepDataMCPlotter.cxx:64
 HepDataMCPlotter.cxx:65
 HepDataMCPlotter.cxx:66
 HepDataMCPlotter.cxx:67
 HepDataMCPlotter.cxx:68
 HepDataMCPlotter.cxx:69
 HepDataMCPlotter.cxx:70
 HepDataMCPlotter.cxx:71
 HepDataMCPlotter.cxx:72
 HepDataMCPlotter.cxx:73
 HepDataMCPlotter.cxx:74
 HepDataMCPlotter.cxx:75
 HepDataMCPlotter.cxx:76
 HepDataMCPlotter.cxx:77
 HepDataMCPlotter.cxx:78
 HepDataMCPlotter.cxx:79
 HepDataMCPlotter.cxx:80
 HepDataMCPlotter.cxx:81
 HepDataMCPlotter.cxx:82
 HepDataMCPlotter.cxx:83
 HepDataMCPlotter.cxx:84
 HepDataMCPlotter.cxx:85
 HepDataMCPlotter.cxx:86
 HepDataMCPlotter.cxx:87
 HepDataMCPlotter.cxx:88
 HepDataMCPlotter.cxx:89
 HepDataMCPlotter.cxx:90
 HepDataMCPlotter.cxx:91
 HepDataMCPlotter.cxx:92
 HepDataMCPlotter.cxx:93
 HepDataMCPlotter.cxx:94
 HepDataMCPlotter.cxx:95
 HepDataMCPlotter.cxx:96
 HepDataMCPlotter.cxx:97
 HepDataMCPlotter.cxx:98
 HepDataMCPlotter.cxx:99
 HepDataMCPlotter.cxx:100
 HepDataMCPlotter.cxx:101
 HepDataMCPlotter.cxx:102
 HepDataMCPlotter.cxx:103
 HepDataMCPlotter.cxx:104
 HepDataMCPlotter.cxx:105
 HepDataMCPlotter.cxx:106
 HepDataMCPlotter.cxx:107
 HepDataMCPlotter.cxx:108
 HepDataMCPlotter.cxx:109
 HepDataMCPlotter.cxx:110
 HepDataMCPlotter.cxx:111
 HepDataMCPlotter.cxx:112
 HepDataMCPlotter.cxx:113
 HepDataMCPlotter.cxx:114
 HepDataMCPlotter.cxx:115
 HepDataMCPlotter.cxx:116
 HepDataMCPlotter.cxx:117
 HepDataMCPlotter.cxx:118
 HepDataMCPlotter.cxx:119
 HepDataMCPlotter.cxx:120
 HepDataMCPlotter.cxx:121
 HepDataMCPlotter.cxx:122
 HepDataMCPlotter.cxx:123
 HepDataMCPlotter.cxx:124
 HepDataMCPlotter.cxx:125
 HepDataMCPlotter.cxx:126
 HepDataMCPlotter.cxx:127
 HepDataMCPlotter.cxx:128
 HepDataMCPlotter.cxx:129
 HepDataMCPlotter.cxx:130
 HepDataMCPlotter.cxx:131
 HepDataMCPlotter.cxx:132
 HepDataMCPlotter.cxx:133
 HepDataMCPlotter.cxx:134
 HepDataMCPlotter.cxx:135
 HepDataMCPlotter.cxx:136
 HepDataMCPlotter.cxx:137
 HepDataMCPlotter.cxx:138
 HepDataMCPlotter.cxx:139
 HepDataMCPlotter.cxx:140
 HepDataMCPlotter.cxx:141
 HepDataMCPlotter.cxx:142
 HepDataMCPlotter.cxx:143
 HepDataMCPlotter.cxx:144
 HepDataMCPlotter.cxx:145
 HepDataMCPlotter.cxx:146
 HepDataMCPlotter.cxx:147
 HepDataMCPlotter.cxx:148
 HepDataMCPlotter.cxx:149
 HepDataMCPlotter.cxx:150
 HepDataMCPlotter.cxx:151
 HepDataMCPlotter.cxx:152
 HepDataMCPlotter.cxx:153
 HepDataMCPlotter.cxx:154
 HepDataMCPlotter.cxx:155
 HepDataMCPlotter.cxx:156
 HepDataMCPlotter.cxx:157
 HepDataMCPlotter.cxx:158
 HepDataMCPlotter.cxx:159
 HepDataMCPlotter.cxx:160
 HepDataMCPlotter.cxx:161
 HepDataMCPlotter.cxx:162
 HepDataMCPlotter.cxx:163
 HepDataMCPlotter.cxx:164
 HepDataMCPlotter.cxx:165
 HepDataMCPlotter.cxx:166
 HepDataMCPlotter.cxx:167
 HepDataMCPlotter.cxx:168
 HepDataMCPlotter.cxx:169
 HepDataMCPlotter.cxx:170
 HepDataMCPlotter.cxx:171
 HepDataMCPlotter.cxx:172
 HepDataMCPlotter.cxx:173
 HepDataMCPlotter.cxx:174
 HepDataMCPlotter.cxx:175
 HepDataMCPlotter.cxx:176
 HepDataMCPlotter.cxx:177
 HepDataMCPlotter.cxx:178
 HepDataMCPlotter.cxx:179
 HepDataMCPlotter.cxx:180
 HepDataMCPlotter.cxx:181
 HepDataMCPlotter.cxx:182
 HepDataMCPlotter.cxx:183
 HepDataMCPlotter.cxx:184
 HepDataMCPlotter.cxx:185
 HepDataMCPlotter.cxx:186
 HepDataMCPlotter.cxx:187
 HepDataMCPlotter.cxx:188
 HepDataMCPlotter.cxx:189
 HepDataMCPlotter.cxx:190
 HepDataMCPlotter.cxx:191
 HepDataMCPlotter.cxx:192
 HepDataMCPlotter.cxx:193
 HepDataMCPlotter.cxx:194
 HepDataMCPlotter.cxx:195
 HepDataMCPlotter.cxx:196
 HepDataMCPlotter.cxx:197
 HepDataMCPlotter.cxx:198
 HepDataMCPlotter.cxx:199
 HepDataMCPlotter.cxx:200
 HepDataMCPlotter.cxx:201
 HepDataMCPlotter.cxx:202
 HepDataMCPlotter.cxx:203
 HepDataMCPlotter.cxx:204
 HepDataMCPlotter.cxx:205
 HepDataMCPlotter.cxx:206
 HepDataMCPlotter.cxx:207
 HepDataMCPlotter.cxx:208
 HepDataMCPlotter.cxx:209
 HepDataMCPlotter.cxx:210
 HepDataMCPlotter.cxx:211
 HepDataMCPlotter.cxx:212
 HepDataMCPlotter.cxx:213
 HepDataMCPlotter.cxx:214
 HepDataMCPlotter.cxx:215
 HepDataMCPlotter.cxx:216
 HepDataMCPlotter.cxx:217
 HepDataMCPlotter.cxx:218
 HepDataMCPlotter.cxx:219
 HepDataMCPlotter.cxx:220
 HepDataMCPlotter.cxx:221
 HepDataMCPlotter.cxx:222
 HepDataMCPlotter.cxx:223
 HepDataMCPlotter.cxx:224
 HepDataMCPlotter.cxx:225
 HepDataMCPlotter.cxx:226
 HepDataMCPlotter.cxx:227
 HepDataMCPlotter.cxx:228
 HepDataMCPlotter.cxx:229
 HepDataMCPlotter.cxx:230
 HepDataMCPlotter.cxx:231
 HepDataMCPlotter.cxx:232
 HepDataMCPlotter.cxx:233
 HepDataMCPlotter.cxx:234
 HepDataMCPlotter.cxx:235
 HepDataMCPlotter.cxx:236
 HepDataMCPlotter.cxx:237
 HepDataMCPlotter.cxx:238
 HepDataMCPlotter.cxx:239
 HepDataMCPlotter.cxx:240
 HepDataMCPlotter.cxx:241
 HepDataMCPlotter.cxx:242
 HepDataMCPlotter.cxx:243
 HepDataMCPlotter.cxx:244
 HepDataMCPlotter.cxx:245
 HepDataMCPlotter.cxx:246
 HepDataMCPlotter.cxx:247
 HepDataMCPlotter.cxx:248
 HepDataMCPlotter.cxx:249
 HepDataMCPlotter.cxx:250
 HepDataMCPlotter.cxx:251
 HepDataMCPlotter.cxx:252
 HepDataMCPlotter.cxx:253
 HepDataMCPlotter.cxx:254
 HepDataMCPlotter.cxx:255
 HepDataMCPlotter.cxx:256
 HepDataMCPlotter.cxx:257
 HepDataMCPlotter.cxx:258
 HepDataMCPlotter.cxx:259
 HepDataMCPlotter.cxx:260
 HepDataMCPlotter.cxx:261
 HepDataMCPlotter.cxx:262
 HepDataMCPlotter.cxx:263
 HepDataMCPlotter.cxx:264
 HepDataMCPlotter.cxx:265
 HepDataMCPlotter.cxx:266
 HepDataMCPlotter.cxx:267
 HepDataMCPlotter.cxx:268
 HepDataMCPlotter.cxx:269
 HepDataMCPlotter.cxx:270
 HepDataMCPlotter.cxx:271
 HepDataMCPlotter.cxx:272
 HepDataMCPlotter.cxx:273
 HepDataMCPlotter.cxx:274
 HepDataMCPlotter.cxx:275
 HepDataMCPlotter.cxx:276
 HepDataMCPlotter.cxx:277
 HepDataMCPlotter.cxx:278
 HepDataMCPlotter.cxx:279
 HepDataMCPlotter.cxx:280
 HepDataMCPlotter.cxx:281
 HepDataMCPlotter.cxx:282
 HepDataMCPlotter.cxx:283
 HepDataMCPlotter.cxx:284
 HepDataMCPlotter.cxx:285
 HepDataMCPlotter.cxx:286
 HepDataMCPlotter.cxx:287
 HepDataMCPlotter.cxx:288
 HepDataMCPlotter.cxx:289
 HepDataMCPlotter.cxx:290
 HepDataMCPlotter.cxx:291
 HepDataMCPlotter.cxx:292
 HepDataMCPlotter.cxx:293
 HepDataMCPlotter.cxx:294
 HepDataMCPlotter.cxx:295
 HepDataMCPlotter.cxx:296
 HepDataMCPlotter.cxx:297
 HepDataMCPlotter.cxx:298
 HepDataMCPlotter.cxx:299
 HepDataMCPlotter.cxx:300
 HepDataMCPlotter.cxx:301
 HepDataMCPlotter.cxx:302
 HepDataMCPlotter.cxx:303
 HepDataMCPlotter.cxx:304
 HepDataMCPlotter.cxx:305
 HepDataMCPlotter.cxx:306
 HepDataMCPlotter.cxx:307
 HepDataMCPlotter.cxx:308
 HepDataMCPlotter.cxx:309
 HepDataMCPlotter.cxx:310
 HepDataMCPlotter.cxx:311
 HepDataMCPlotter.cxx:312
 HepDataMCPlotter.cxx:313
 HepDataMCPlotter.cxx:314
 HepDataMCPlotter.cxx:315
 HepDataMCPlotter.cxx:316
 HepDataMCPlotter.cxx:317
 HepDataMCPlotter.cxx:318
 HepDataMCPlotter.cxx:319
 HepDataMCPlotter.cxx:320
 HepDataMCPlotter.cxx:321
 HepDataMCPlotter.cxx:322
 HepDataMCPlotter.cxx:323
 HepDataMCPlotter.cxx:324
 HepDataMCPlotter.cxx:325
 HepDataMCPlotter.cxx:326
 HepDataMCPlotter.cxx:327
 HepDataMCPlotter.cxx:328
 HepDataMCPlotter.cxx:329
 HepDataMCPlotter.cxx:330
 HepDataMCPlotter.cxx:331
 HepDataMCPlotter.cxx:332
 HepDataMCPlotter.cxx:333
 HepDataMCPlotter.cxx:334
 HepDataMCPlotter.cxx:335
 HepDataMCPlotter.cxx:336
 HepDataMCPlotter.cxx:337
 HepDataMCPlotter.cxx:338
 HepDataMCPlotter.cxx:339
 HepDataMCPlotter.cxx:340
 HepDataMCPlotter.cxx:341
 HepDataMCPlotter.cxx:342
 HepDataMCPlotter.cxx:343
 HepDataMCPlotter.cxx:344
 HepDataMCPlotter.cxx:345
 HepDataMCPlotter.cxx:346
 HepDataMCPlotter.cxx:347
 HepDataMCPlotter.cxx:348
 HepDataMCPlotter.cxx:349
 HepDataMCPlotter.cxx:350
 HepDataMCPlotter.cxx:351
 HepDataMCPlotter.cxx:352
 HepDataMCPlotter.cxx:353
 HepDataMCPlotter.cxx:354
 HepDataMCPlotter.cxx:355
 HepDataMCPlotter.cxx:356
 HepDataMCPlotter.cxx:357
 HepDataMCPlotter.cxx:358
 HepDataMCPlotter.cxx:359
 HepDataMCPlotter.cxx:360
 HepDataMCPlotter.cxx:361
 HepDataMCPlotter.cxx:362
 HepDataMCPlotter.cxx:363
 HepDataMCPlotter.cxx:364
 HepDataMCPlotter.cxx:365
 HepDataMCPlotter.cxx:366
 HepDataMCPlotter.cxx:367
 HepDataMCPlotter.cxx:368
 HepDataMCPlotter.cxx:369
 HepDataMCPlotter.cxx:370
 HepDataMCPlotter.cxx:371
 HepDataMCPlotter.cxx:372
 HepDataMCPlotter.cxx:373
 HepDataMCPlotter.cxx:374
 HepDataMCPlotter.cxx:375
 HepDataMCPlotter.cxx:376
 HepDataMCPlotter.cxx:377
 HepDataMCPlotter.cxx:378
 HepDataMCPlotter.cxx:379
 HepDataMCPlotter.cxx:380
 HepDataMCPlotter.cxx:381
 HepDataMCPlotter.cxx:382
 HepDataMCPlotter.cxx:383
 HepDataMCPlotter.cxx:384
 HepDataMCPlotter.cxx:385
 HepDataMCPlotter.cxx:386
 HepDataMCPlotter.cxx:387
 HepDataMCPlotter.cxx:388
 HepDataMCPlotter.cxx:389
 HepDataMCPlotter.cxx:390
 HepDataMCPlotter.cxx:391
 HepDataMCPlotter.cxx:392
 HepDataMCPlotter.cxx:393
 HepDataMCPlotter.cxx:394
 HepDataMCPlotter.cxx:395
 HepDataMCPlotter.cxx:396
 HepDataMCPlotter.cxx:397
 HepDataMCPlotter.cxx:398
 HepDataMCPlotter.cxx:399
 HepDataMCPlotter.cxx:400
 HepDataMCPlotter.cxx:401
 HepDataMCPlotter.cxx:402
 HepDataMCPlotter.cxx:403
 HepDataMCPlotter.cxx:404
 HepDataMCPlotter.cxx:405
 HepDataMCPlotter.cxx:406
 HepDataMCPlotter.cxx:407
 HepDataMCPlotter.cxx:408
 HepDataMCPlotter.cxx:409
 HepDataMCPlotter.cxx:410
 HepDataMCPlotter.cxx:411
 HepDataMCPlotter.cxx:412
 HepDataMCPlotter.cxx:413
 HepDataMCPlotter.cxx:414
 HepDataMCPlotter.cxx:415
 HepDataMCPlotter.cxx:416
 HepDataMCPlotter.cxx:417
 HepDataMCPlotter.cxx:418
 HepDataMCPlotter.cxx:419
 HepDataMCPlotter.cxx:420
 HepDataMCPlotter.cxx:421
 HepDataMCPlotter.cxx:422
 HepDataMCPlotter.cxx:423
 HepDataMCPlotter.cxx:424
 HepDataMCPlotter.cxx:425
 HepDataMCPlotter.cxx:426
 HepDataMCPlotter.cxx:427
 HepDataMCPlotter.cxx:428
 HepDataMCPlotter.cxx:429
 HepDataMCPlotter.cxx:430
 HepDataMCPlotter.cxx:431
 HepDataMCPlotter.cxx:432
 HepDataMCPlotter.cxx:433
 HepDataMCPlotter.cxx:434
 HepDataMCPlotter.cxx:435
 HepDataMCPlotter.cxx:436
 HepDataMCPlotter.cxx:437
 HepDataMCPlotter.cxx:438
 HepDataMCPlotter.cxx:439
 HepDataMCPlotter.cxx:440
 HepDataMCPlotter.cxx:441
 HepDataMCPlotter.cxx:442
 HepDataMCPlotter.cxx:443
 HepDataMCPlotter.cxx:444
 HepDataMCPlotter.cxx:445
 HepDataMCPlotter.cxx:446
 HepDataMCPlotter.cxx:447
 HepDataMCPlotter.cxx:448
 HepDataMCPlotter.cxx:449
 HepDataMCPlotter.cxx:450
 HepDataMCPlotter.cxx:451
 HepDataMCPlotter.cxx:452
 HepDataMCPlotter.cxx:453
 HepDataMCPlotter.cxx:454
 HepDataMCPlotter.cxx:455
 HepDataMCPlotter.cxx:456
 HepDataMCPlotter.cxx:457
 HepDataMCPlotter.cxx:458
 HepDataMCPlotter.cxx:459
 HepDataMCPlotter.cxx:460
 HepDataMCPlotter.cxx:461
 HepDataMCPlotter.cxx:462
 HepDataMCPlotter.cxx:463
 HepDataMCPlotter.cxx:464
 HepDataMCPlotter.cxx:465
 HepDataMCPlotter.cxx:466
 HepDataMCPlotter.cxx:467
 HepDataMCPlotter.cxx:468
 HepDataMCPlotter.cxx:469
 HepDataMCPlotter.cxx:470
 HepDataMCPlotter.cxx:471
 HepDataMCPlotter.cxx:472
 HepDataMCPlotter.cxx:473
 HepDataMCPlotter.cxx:474
 HepDataMCPlotter.cxx:475
 HepDataMCPlotter.cxx:476
 HepDataMCPlotter.cxx:477
 HepDataMCPlotter.cxx:478
 HepDataMCPlotter.cxx:479
 HepDataMCPlotter.cxx:480
 HepDataMCPlotter.cxx:481
 HepDataMCPlotter.cxx:482
 HepDataMCPlotter.cxx:483
 HepDataMCPlotter.cxx:484
 HepDataMCPlotter.cxx:485
 HepDataMCPlotter.cxx:486
 HepDataMCPlotter.cxx:487
 HepDataMCPlotter.cxx:488
 HepDataMCPlotter.cxx:489
 HepDataMCPlotter.cxx:490
 HepDataMCPlotter.cxx:491
 HepDataMCPlotter.cxx:492
 HepDataMCPlotter.cxx:493
 HepDataMCPlotter.cxx:494
 HepDataMCPlotter.cxx:495
 HepDataMCPlotter.cxx:496
 HepDataMCPlotter.cxx:497
 HepDataMCPlotter.cxx:498
 HepDataMCPlotter.cxx:499
 HepDataMCPlotter.cxx:500
 HepDataMCPlotter.cxx:501
 HepDataMCPlotter.cxx:502
 HepDataMCPlotter.cxx:503
 HepDataMCPlotter.cxx:504
 HepDataMCPlotter.cxx:505
 HepDataMCPlotter.cxx:506
 HepDataMCPlotter.cxx:507
 HepDataMCPlotter.cxx:508
 HepDataMCPlotter.cxx:509
 HepDataMCPlotter.cxx:510
 HepDataMCPlotter.cxx:511
 HepDataMCPlotter.cxx:512
 HepDataMCPlotter.cxx:513
 HepDataMCPlotter.cxx:514
 HepDataMCPlotter.cxx:515
 HepDataMCPlotter.cxx:516
 HepDataMCPlotter.cxx:517
 HepDataMCPlotter.cxx:518
 HepDataMCPlotter.cxx:519
 HepDataMCPlotter.cxx:520
 HepDataMCPlotter.cxx:521
 HepDataMCPlotter.cxx:522
 HepDataMCPlotter.cxx:523
 HepDataMCPlotter.cxx:524
 HepDataMCPlotter.cxx:525
 HepDataMCPlotter.cxx:526
 HepDataMCPlotter.cxx:527
 HepDataMCPlotter.cxx:528
 HepDataMCPlotter.cxx:529
 HepDataMCPlotter.cxx:530
 HepDataMCPlotter.cxx:531
 HepDataMCPlotter.cxx:532
 HepDataMCPlotter.cxx:533
 HepDataMCPlotter.cxx:534
 HepDataMCPlotter.cxx:535
 HepDataMCPlotter.cxx:536
 HepDataMCPlotter.cxx:537
 HepDataMCPlotter.cxx:538
 HepDataMCPlotter.cxx:539
 HepDataMCPlotter.cxx:540
 HepDataMCPlotter.cxx:541
 HepDataMCPlotter.cxx:542
 HepDataMCPlotter.cxx:543
 HepDataMCPlotter.cxx:544
 HepDataMCPlotter.cxx:545
 HepDataMCPlotter.cxx:546
 HepDataMCPlotter.cxx:547
 HepDataMCPlotter.cxx:548
 HepDataMCPlotter.cxx:549
 HepDataMCPlotter.cxx:550
 HepDataMCPlotter.cxx:551
 HepDataMCPlotter.cxx:552
 HepDataMCPlotter.cxx:553
 HepDataMCPlotter.cxx:554
 HepDataMCPlotter.cxx:555
 HepDataMCPlotter.cxx:556
 HepDataMCPlotter.cxx:557
 HepDataMCPlotter.cxx:558
 HepDataMCPlotter.cxx:559
 HepDataMCPlotter.cxx:560
 HepDataMCPlotter.cxx:561
 HepDataMCPlotter.cxx:562
 HepDataMCPlotter.cxx:563
 HepDataMCPlotter.cxx:564
 HepDataMCPlotter.cxx:565
 HepDataMCPlotter.cxx:566
 HepDataMCPlotter.cxx:567
 HepDataMCPlotter.cxx:568
 HepDataMCPlotter.cxx:569
 HepDataMCPlotter.cxx:570
 HepDataMCPlotter.cxx:571
 HepDataMCPlotter.cxx:572
 HepDataMCPlotter.cxx:573
 HepDataMCPlotter.cxx:574
 HepDataMCPlotter.cxx:575
 HepDataMCPlotter.cxx:576
 HepDataMCPlotter.cxx:577
 HepDataMCPlotter.cxx:578
 HepDataMCPlotter.cxx:579
 HepDataMCPlotter.cxx:580
 HepDataMCPlotter.cxx:581
 HepDataMCPlotter.cxx:582
 HepDataMCPlotter.cxx:583
 HepDataMCPlotter.cxx:584
 HepDataMCPlotter.cxx:585
 HepDataMCPlotter.cxx:586
 HepDataMCPlotter.cxx:587
 HepDataMCPlotter.cxx:588
 HepDataMCPlotter.cxx:589
 HepDataMCPlotter.cxx:590
 HepDataMCPlotter.cxx:591
 HepDataMCPlotter.cxx:592
 HepDataMCPlotter.cxx:593
 HepDataMCPlotter.cxx:594
 HepDataMCPlotter.cxx:595
 HepDataMCPlotter.cxx:596
 HepDataMCPlotter.cxx:597
 HepDataMCPlotter.cxx:598
 HepDataMCPlotter.cxx:599
 HepDataMCPlotter.cxx:600
 HepDataMCPlotter.cxx:601
 HepDataMCPlotter.cxx:602
 HepDataMCPlotter.cxx:603
 HepDataMCPlotter.cxx:604
 HepDataMCPlotter.cxx:605
 HepDataMCPlotter.cxx:606
 HepDataMCPlotter.cxx:607
 HepDataMCPlotter.cxx:608
 HepDataMCPlotter.cxx:609
 HepDataMCPlotter.cxx:610
 HepDataMCPlotter.cxx:611
 HepDataMCPlotter.cxx:612
 HepDataMCPlotter.cxx:613
 HepDataMCPlotter.cxx:614
 HepDataMCPlotter.cxx:615
 HepDataMCPlotter.cxx:616
 HepDataMCPlotter.cxx:617
 HepDataMCPlotter.cxx:618
 HepDataMCPlotter.cxx:619
 HepDataMCPlotter.cxx:620
 HepDataMCPlotter.cxx:621
 HepDataMCPlotter.cxx:622
 HepDataMCPlotter.cxx:623
 HepDataMCPlotter.cxx:624
 HepDataMCPlotter.cxx:625
 HepDataMCPlotter.cxx:626
 HepDataMCPlotter.cxx:627
 HepDataMCPlotter.cxx:628
 HepDataMCPlotter.cxx:629
 HepDataMCPlotter.cxx:630
 HepDataMCPlotter.cxx:631
 HepDataMCPlotter.cxx:632
 HepDataMCPlotter.cxx:633
 HepDataMCPlotter.cxx:634
 HepDataMCPlotter.cxx:635
 HepDataMCPlotter.cxx:636
 HepDataMCPlotter.cxx:637
 HepDataMCPlotter.cxx:638
 HepDataMCPlotter.cxx:639
 HepDataMCPlotter.cxx:640
 HepDataMCPlotter.cxx:641
 HepDataMCPlotter.cxx:642
 HepDataMCPlotter.cxx:643
 HepDataMCPlotter.cxx:644
 HepDataMCPlotter.cxx:645
 HepDataMCPlotter.cxx:646
 HepDataMCPlotter.cxx:647
 HepDataMCPlotter.cxx:648
 HepDataMCPlotter.cxx:649
 HepDataMCPlotter.cxx:650
 HepDataMCPlotter.cxx:651
 HepDataMCPlotter.cxx:652
 HepDataMCPlotter.cxx:653
 HepDataMCPlotter.cxx:654
 HepDataMCPlotter.cxx:655
 HepDataMCPlotter.cxx:656
 HepDataMCPlotter.cxx:657
 HepDataMCPlotter.cxx:658
 HepDataMCPlotter.cxx:659
 HepDataMCPlotter.cxx:660
 HepDataMCPlotter.cxx:661
 HepDataMCPlotter.cxx:662
 HepDataMCPlotter.cxx:663
 HepDataMCPlotter.cxx:664
 HepDataMCPlotter.cxx:665
 HepDataMCPlotter.cxx:666
 HepDataMCPlotter.cxx:667
 HepDataMCPlotter.cxx:668
 HepDataMCPlotter.cxx:669
 HepDataMCPlotter.cxx:670
 HepDataMCPlotter.cxx:671
 HepDataMCPlotter.cxx:672
 HepDataMCPlotter.cxx:673
 HepDataMCPlotter.cxx:674
 HepDataMCPlotter.cxx:675
 HepDataMCPlotter.cxx:676
 HepDataMCPlotter.cxx:677
 HepDataMCPlotter.cxx:678
 HepDataMCPlotter.cxx:679
 HepDataMCPlotter.cxx:680
 HepDataMCPlotter.cxx:681
 HepDataMCPlotter.cxx:682
 HepDataMCPlotter.cxx:683
 HepDataMCPlotter.cxx:684
 HepDataMCPlotter.cxx:685
 HepDataMCPlotter.cxx:686
 HepDataMCPlotter.cxx:687
 HepDataMCPlotter.cxx:688
 HepDataMCPlotter.cxx:689
 HepDataMCPlotter.cxx:690
 HepDataMCPlotter.cxx:691
 HepDataMCPlotter.cxx:692
 HepDataMCPlotter.cxx:693
 HepDataMCPlotter.cxx:694
 HepDataMCPlotter.cxx:695
 HepDataMCPlotter.cxx:696
 HepDataMCPlotter.cxx:697
 HepDataMCPlotter.cxx:698
 HepDataMCPlotter.cxx:699
 HepDataMCPlotter.cxx:700
 HepDataMCPlotter.cxx:701
 HepDataMCPlotter.cxx:702
 HepDataMCPlotter.cxx:703
 HepDataMCPlotter.cxx:704
 HepDataMCPlotter.cxx:705
 HepDataMCPlotter.cxx:706
 HepDataMCPlotter.cxx:707
 HepDataMCPlotter.cxx:708
 HepDataMCPlotter.cxx:709
 HepDataMCPlotter.cxx:710
 HepDataMCPlotter.cxx:711
 HepDataMCPlotter.cxx:712
 HepDataMCPlotter.cxx:713
 HepDataMCPlotter.cxx:714
 HepDataMCPlotter.cxx:715
 HepDataMCPlotter.cxx:716
 HepDataMCPlotter.cxx:717
 HepDataMCPlotter.cxx:718
 HepDataMCPlotter.cxx:719
 HepDataMCPlotter.cxx:720
 HepDataMCPlotter.cxx:721
 HepDataMCPlotter.cxx:722
 HepDataMCPlotter.cxx:723
 HepDataMCPlotter.cxx:724
 HepDataMCPlotter.cxx:725
 HepDataMCPlotter.cxx:726
 HepDataMCPlotter.cxx:727
 HepDataMCPlotter.cxx:728
 HepDataMCPlotter.cxx:729
 HepDataMCPlotter.cxx:730
 HepDataMCPlotter.cxx:731
 HepDataMCPlotter.cxx:732
 HepDataMCPlotter.cxx:733
 HepDataMCPlotter.cxx:734
 HepDataMCPlotter.cxx:735
 HepDataMCPlotter.cxx:736
 HepDataMCPlotter.cxx:737
 HepDataMCPlotter.cxx:738
 HepDataMCPlotter.cxx:739
 HepDataMCPlotter.cxx:740
 HepDataMCPlotter.cxx:741
 HepDataMCPlotter.cxx:742
 HepDataMCPlotter.cxx:743
 HepDataMCPlotter.cxx:744
 HepDataMCPlotter.cxx:745
 HepDataMCPlotter.cxx:746
 HepDataMCPlotter.cxx:747
 HepDataMCPlotter.cxx:748
 HepDataMCPlotter.cxx:749
 HepDataMCPlotter.cxx:750
 HepDataMCPlotter.cxx:751
 HepDataMCPlotter.cxx:752
 HepDataMCPlotter.cxx:753
 HepDataMCPlotter.cxx:754
 HepDataMCPlotter.cxx:755
 HepDataMCPlotter.cxx:756
 HepDataMCPlotter.cxx:757
 HepDataMCPlotter.cxx:758
 HepDataMCPlotter.cxx:759
 HepDataMCPlotter.cxx:760
 HepDataMCPlotter.cxx:761
 HepDataMCPlotter.cxx:762
 HepDataMCPlotter.cxx:763
 HepDataMCPlotter.cxx:764
 HepDataMCPlotter.cxx:765
 HepDataMCPlotter.cxx:766
 HepDataMCPlotter.cxx:767
 HepDataMCPlotter.cxx:768
 HepDataMCPlotter.cxx:769
 HepDataMCPlotter.cxx:770
 HepDataMCPlotter.cxx:771
 HepDataMCPlotter.cxx:772
 HepDataMCPlotter.cxx:773
 HepDataMCPlotter.cxx:774
 HepDataMCPlotter.cxx:775
 HepDataMCPlotter.cxx:776
 HepDataMCPlotter.cxx:777
 HepDataMCPlotter.cxx:778
 HepDataMCPlotter.cxx:779
 HepDataMCPlotter.cxx:780
 HepDataMCPlotter.cxx:781
 HepDataMCPlotter.cxx:782
 HepDataMCPlotter.cxx:783
 HepDataMCPlotter.cxx:784
 HepDataMCPlotter.cxx:785
 HepDataMCPlotter.cxx:786
 HepDataMCPlotter.cxx:787
 HepDataMCPlotter.cxx:788
 HepDataMCPlotter.cxx:789
 HepDataMCPlotter.cxx:790
 HepDataMCPlotter.cxx:791
 HepDataMCPlotter.cxx:792
 HepDataMCPlotter.cxx:793
 HepDataMCPlotter.cxx:794
 HepDataMCPlotter.cxx:795
 HepDataMCPlotter.cxx:796
 HepDataMCPlotter.cxx:797
 HepDataMCPlotter.cxx:798
 HepDataMCPlotter.cxx:799
 HepDataMCPlotter.cxx:800
 HepDataMCPlotter.cxx:801
 HepDataMCPlotter.cxx:802
 HepDataMCPlotter.cxx:803
 HepDataMCPlotter.cxx:804
 HepDataMCPlotter.cxx:805
 HepDataMCPlotter.cxx:806
 HepDataMCPlotter.cxx:807
 HepDataMCPlotter.cxx:808
 HepDataMCPlotter.cxx:809
 HepDataMCPlotter.cxx:810
 HepDataMCPlotter.cxx:811
 HepDataMCPlotter.cxx:812
 HepDataMCPlotter.cxx:813
 HepDataMCPlotter.cxx:814
 HepDataMCPlotter.cxx:815
 HepDataMCPlotter.cxx:816
 HepDataMCPlotter.cxx:817
 HepDataMCPlotter.cxx:818
 HepDataMCPlotter.cxx:819
 HepDataMCPlotter.cxx:820
 HepDataMCPlotter.cxx:821
 HepDataMCPlotter.cxx:822
 HepDataMCPlotter.cxx:823
 HepDataMCPlotter.cxx:824
 HepDataMCPlotter.cxx:825
 HepDataMCPlotter.cxx:826
 HepDataMCPlotter.cxx:827
 HepDataMCPlotter.cxx:828
 HepDataMCPlotter.cxx:829
 HepDataMCPlotter.cxx:830
 HepDataMCPlotter.cxx:831
 HepDataMCPlotter.cxx:832
 HepDataMCPlotter.cxx:833
 HepDataMCPlotter.cxx:834
 HepDataMCPlotter.cxx:835
 HepDataMCPlotter.cxx:836
 HepDataMCPlotter.cxx:837
 HepDataMCPlotter.cxx:838
 HepDataMCPlotter.cxx:839
 HepDataMCPlotter.cxx:840
 HepDataMCPlotter.cxx:841
 HepDataMCPlotter.cxx:842
 HepDataMCPlotter.cxx:843
 HepDataMCPlotter.cxx:844
 HepDataMCPlotter.cxx:845
 HepDataMCPlotter.cxx:846
 HepDataMCPlotter.cxx:847
 HepDataMCPlotter.cxx:848
 HepDataMCPlotter.cxx:849
 HepDataMCPlotter.cxx:850
 HepDataMCPlotter.cxx:851
 HepDataMCPlotter.cxx:852
 HepDataMCPlotter.cxx:853
 HepDataMCPlotter.cxx:854
 HepDataMCPlotter.cxx:855
 HepDataMCPlotter.cxx:856
 HepDataMCPlotter.cxx:857
 HepDataMCPlotter.cxx:858
 HepDataMCPlotter.cxx:859
 HepDataMCPlotter.cxx:860
 HepDataMCPlotter.cxx:861
 HepDataMCPlotter.cxx:862
 HepDataMCPlotter.cxx:863
 HepDataMCPlotter.cxx:864
 HepDataMCPlotter.cxx:865
 HepDataMCPlotter.cxx:866
 HepDataMCPlotter.cxx:867
 HepDataMCPlotter.cxx:868
 HepDataMCPlotter.cxx:869
 HepDataMCPlotter.cxx:870
 HepDataMCPlotter.cxx:871
 HepDataMCPlotter.cxx:872
 HepDataMCPlotter.cxx:873
 HepDataMCPlotter.cxx:874
 HepDataMCPlotter.cxx:875
 HepDataMCPlotter.cxx:876
 HepDataMCPlotter.cxx:877
 HepDataMCPlotter.cxx:878
 HepDataMCPlotter.cxx:879
 HepDataMCPlotter.cxx:880
 HepDataMCPlotter.cxx:881
 HepDataMCPlotter.cxx:882
 HepDataMCPlotter.cxx:883
 HepDataMCPlotter.cxx:884
 HepDataMCPlotter.cxx:885
 HepDataMCPlotter.cxx:886
 HepDataMCPlotter.cxx:887
 HepDataMCPlotter.cxx:888
 HepDataMCPlotter.cxx:889
 HepDataMCPlotter.cxx:890
 HepDataMCPlotter.cxx:891
 HepDataMCPlotter.cxx:892
 HepDataMCPlotter.cxx:893
 HepDataMCPlotter.cxx:894
 HepDataMCPlotter.cxx:895
 HepDataMCPlotter.cxx:896
 HepDataMCPlotter.cxx:897
 HepDataMCPlotter.cxx:898
 HepDataMCPlotter.cxx:899
 HepDataMCPlotter.cxx:900
 HepDataMCPlotter.cxx:901
 HepDataMCPlotter.cxx:902
 HepDataMCPlotter.cxx:903
 HepDataMCPlotter.cxx:904
 HepDataMCPlotter.cxx:905
 HepDataMCPlotter.cxx:906
 HepDataMCPlotter.cxx:907
 HepDataMCPlotter.cxx:908
 HepDataMCPlotter.cxx:909
 HepDataMCPlotter.cxx:910
 HepDataMCPlotter.cxx:911
 HepDataMCPlotter.cxx:912
 HepDataMCPlotter.cxx:913
 HepDataMCPlotter.cxx:914
 HepDataMCPlotter.cxx:915
 HepDataMCPlotter.cxx:916
 HepDataMCPlotter.cxx:917
 HepDataMCPlotter.cxx:918
 HepDataMCPlotter.cxx:919
 HepDataMCPlotter.cxx:920
 HepDataMCPlotter.cxx:921
 HepDataMCPlotter.cxx:922
 HepDataMCPlotter.cxx:923
 HepDataMCPlotter.cxx:924
 HepDataMCPlotter.cxx:925
 HepDataMCPlotter.cxx:926
 HepDataMCPlotter.cxx:927
 HepDataMCPlotter.cxx:928
 HepDataMCPlotter.cxx:929
 HepDataMCPlotter.cxx:930
 HepDataMCPlotter.cxx:931
 HepDataMCPlotter.cxx:932
 HepDataMCPlotter.cxx:933
 HepDataMCPlotter.cxx:934
 HepDataMCPlotter.cxx:935
 HepDataMCPlotter.cxx:936
 HepDataMCPlotter.cxx:937
 HepDataMCPlotter.cxx:938
 HepDataMCPlotter.cxx:939
 HepDataMCPlotter.cxx:940
 HepDataMCPlotter.cxx:941
 HepDataMCPlotter.cxx:942
 HepDataMCPlotter.cxx:943
 HepDataMCPlotter.cxx:944
 HepDataMCPlotter.cxx:945
 HepDataMCPlotter.cxx:946
 HepDataMCPlotter.cxx:947
 HepDataMCPlotter.cxx:948
 HepDataMCPlotter.cxx:949
 HepDataMCPlotter.cxx:950
 HepDataMCPlotter.cxx:951
 HepDataMCPlotter.cxx:952
 HepDataMCPlotter.cxx:953
 HepDataMCPlotter.cxx:954
 HepDataMCPlotter.cxx:955
 HepDataMCPlotter.cxx:956
 HepDataMCPlotter.cxx:957
 HepDataMCPlotter.cxx:958
 HepDataMCPlotter.cxx:959
 HepDataMCPlotter.cxx:960
 HepDataMCPlotter.cxx:961
 HepDataMCPlotter.cxx:962
 HepDataMCPlotter.cxx:963
 HepDataMCPlotter.cxx:964
 HepDataMCPlotter.cxx:965
 HepDataMCPlotter.cxx:966
 HepDataMCPlotter.cxx:967
 HepDataMCPlotter.cxx:968
 HepDataMCPlotter.cxx:969
 HepDataMCPlotter.cxx:970
 HepDataMCPlotter.cxx:971
 HepDataMCPlotter.cxx:972
 HepDataMCPlotter.cxx:973
 HepDataMCPlotter.cxx:974
 HepDataMCPlotter.cxx:975
 HepDataMCPlotter.cxx:976
 HepDataMCPlotter.cxx:977
 HepDataMCPlotter.cxx:978
 HepDataMCPlotter.cxx:979
 HepDataMCPlotter.cxx:980
 HepDataMCPlotter.cxx:981
 HepDataMCPlotter.cxx:982
 HepDataMCPlotter.cxx:983
 HepDataMCPlotter.cxx:984
 HepDataMCPlotter.cxx:985
 HepDataMCPlotter.cxx:986
 HepDataMCPlotter.cxx:987
 HepDataMCPlotter.cxx:988
 HepDataMCPlotter.cxx:989
 HepDataMCPlotter.cxx:990
 HepDataMCPlotter.cxx:991
 HepDataMCPlotter.cxx:992
 HepDataMCPlotter.cxx:993
 HepDataMCPlotter.cxx:994
 HepDataMCPlotter.cxx:995
 HepDataMCPlotter.cxx:996
 HepDataMCPlotter.cxx:997
 HepDataMCPlotter.cxx:998
 HepDataMCPlotter.cxx:999
 HepDataMCPlotter.cxx:1000
 HepDataMCPlotter.cxx:1001
 HepDataMCPlotter.cxx:1002
 HepDataMCPlotter.cxx:1003
 HepDataMCPlotter.cxx:1004
 HepDataMCPlotter.cxx:1005
 HepDataMCPlotter.cxx:1006
 HepDataMCPlotter.cxx:1007
 HepDataMCPlotter.cxx:1008
 HepDataMCPlotter.cxx:1009
 HepDataMCPlotter.cxx:1010
 HepDataMCPlotter.cxx:1011
 HepDataMCPlotter.cxx:1012
 HepDataMCPlotter.cxx:1013
 HepDataMCPlotter.cxx:1014
 HepDataMCPlotter.cxx:1015
 HepDataMCPlotter.cxx:1016
 HepDataMCPlotter.cxx:1017
 HepDataMCPlotter.cxx:1018
 HepDataMCPlotter.cxx:1019
 HepDataMCPlotter.cxx:1020
 HepDataMCPlotter.cxx:1021
 HepDataMCPlotter.cxx:1022
 HepDataMCPlotter.cxx:1023
 HepDataMCPlotter.cxx:1024
 HepDataMCPlotter.cxx:1025
 HepDataMCPlotter.cxx:1026
 HepDataMCPlotter.cxx:1027
 HepDataMCPlotter.cxx:1028
 HepDataMCPlotter.cxx:1029
 HepDataMCPlotter.cxx:1030
 HepDataMCPlotter.cxx:1031
 HepDataMCPlotter.cxx:1032
 HepDataMCPlotter.cxx:1033
 HepDataMCPlotter.cxx:1034
 HepDataMCPlotter.cxx:1035
 HepDataMCPlotter.cxx:1036
 HepDataMCPlotter.cxx:1037
 HepDataMCPlotter.cxx:1038
 HepDataMCPlotter.cxx:1039
 HepDataMCPlotter.cxx:1040
 HepDataMCPlotter.cxx:1041
 HepDataMCPlotter.cxx:1042
 HepDataMCPlotter.cxx:1043
 HepDataMCPlotter.cxx:1044
 HepDataMCPlotter.cxx:1045
 HepDataMCPlotter.cxx:1046
 HepDataMCPlotter.cxx:1047
 HepDataMCPlotter.cxx:1048
 HepDataMCPlotter.cxx:1049
 HepDataMCPlotter.cxx:1050
 HepDataMCPlotter.cxx:1051
 HepDataMCPlotter.cxx:1052
 HepDataMCPlotter.cxx:1053
 HepDataMCPlotter.cxx:1054
 HepDataMCPlotter.cxx:1055
 HepDataMCPlotter.cxx:1056
 HepDataMCPlotter.cxx:1057
 HepDataMCPlotter.cxx:1058
 HepDataMCPlotter.cxx:1059