#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) {
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() {
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") {
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) {
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) {
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) {
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) {
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) {
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);
}
HepDataMCSample *sample = new HepDataMCSample(path, label, color,
gStyle->GetHistLineStyle(),
gStyle->GetHistLineWidth(),
gStyle->GetHistFillStyle());
folder->Add(sample);
sample->SetXsection(xsec);
return sample;
}
void HepDataMCPlotter::InitInput() {
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;
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) {
fListOfInFiles->Delete();
Bool_t savmode = gROOT->IsBatch();
gROOT->SetBatch(kTRUE);
TH1::SetDefaultSumw2();
cout << endl;
Info("Exec", "Begin of task \"%s\"", GetName());
InitInput();
BuildListOfPlots();
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()));
if ( fExportROOT ) {
if ( fOutputRootFile != 0 ) delete fOutputRootFile;
fOutputRootFile = new TFile(Form("%s/%s.root",
fExportDir->Data(),
GetName()), "recreate");
}
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;
}
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;
}
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(), ""));
delete pl;
}
TFile *infile = 0;
TIter next_infile(fListOfInFiles);
while ( (infile = (TFile*)next_infile()) ) {
infile->Close();
}
delete fOutputRootFile; fOutputRootFile = 0;
Info("Exec", "End of task \"%s\"", GetName());
cout << endl;
gROOT->SetBatch(savmode);
}
void HepDataMCPlotter::BuildListOfPlots() {
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) {
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") ) {
continue;
}
if ( strcmp(key->GetClassName(), "TDirectoryFile") == 0 ) {
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) ) {
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 {
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;
TIter next_folder(fMCFolders);
HepDataMCFolder *folder = 0;
while ( (folder = (HepDataMCFolder*)next_folder()) ) {
plot->AddMCFolder(folder);
}
TIter next_singlesample(fMCSingleSamples);
HepDataMCSample *single_sample = 0;
while ( (single_sample = (HepDataMCSample*)next_singlesample()) ) {
plot->AddMCSingleSample(single_sample);
}
}
void HepDataMCPlotter::AddHistMC(HepDataMCPlot *plot, TH1F *h,
HepDataMCSample *mc_sample,
HepDataMCFolder *folder,
Float_t LumiScale) const {
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) {
HepDataMCPlot *plot = 0;
TFile *f;
TH1F *h = 0;
if ( fListOfDataFiles->GetEntries() > 0 ) {
TIter next_file(fListOfDataFiles);
f = (TFile*) next_file();
h = GetHistFromFile(f, PlotName);
while ( (f = (TFile*)next_file()) )
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);
}
}
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);
}
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) {
Plot->SetDrawMCError(fDrawMCError, kFALSE);
Plot->SetUnifyMCStack(fUnifyMCStack, kFALSE);
Plot->SetDrawDataZeroEntryErrors(fDrawDataZeroEntryErrors);
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();
}
}
TString fullpath;
if ( fExportEPS || fExportPS || fExportPDF || fExportPNG || fExportC ) {
fullpath.Append(fExportDir->Data());
fullpath.Append(PlotName->GetTitle());
gSystem->Exec(Form("mkdir -p %s", fullpath.Data()));
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");
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()));
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()));
delete c;
}
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) {
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());
}
delete subdirs;
delete subdir;
return gDirectory;
}
void HepDataMCPlotter::SetGroupHistograms(Bool_t GroupHistograms) {
fGroupHistograms = GroupHistograms;
TIter next_plot(fListOfPlots);
HepDataMCPlot *plot = 0;
while ( (plot = (HepDataMCPlot*)next_plot()) ) {
plot->SetGroupHistograms(GroupHistograms);
}
}
void HepDataMCPlotter::SetDrawMCError(Bool_t DrawMCError) {
fDrawMCError = DrawMCError;
}
void HepDataMCPlotter::SetDrawDataZeroEntryErrors(Bool_t DrawDataZeroEntryErrors) {
fDrawDataZeroEntryErrors = DrawDataZeroEntryErrors;
}
void HepDataMCPlotter::SetUnifyMCStack(Bool_t UnifyMCStack) {
fUnifyMCStack = UnifyMCStack;
}
void HepDataMCPlotter::SetLogyaxis(Bool_t Logyaxis) {
fLogyaxis = Logyaxis;
}
void HepDataMCPlotter::AddMCFolder(const char* name, const char* title,
Color_t color) {
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);
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 {
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) {
fNtuplePlotCmds->Add(new HepNtuplePlotCmd(TreeName, VarExp,
Selection, PlotName,
PlotTitle, Nbins,
Xlow, Xup, XTitle,
YTitle));
}
HepDataMCPlot* HepDataMCPlotter::BuildNtuplePlot(HepNtuplePlotCmd *cmd) const {
HepDataMCPlot *plot = 0;
TFile *f = 0;
TH1F *h = 0;
TTree *t = 0;
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);
}
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();
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();
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());
}
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) {
fUseOverflowUnderflow = status;
}
void HepDataMCPlotter::SetDrawSignalOverlay(Bool_t status) {
fDrawSignalOverlay = status;
}
void HepDataMCPlotter::SetScaleOverlay(Float_t scale) {
fScaleOverlay = scale;
}
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