//____________________________________________________________________
//
// Data/MC Plotter Task for A++ analyses
// 
//
//  
// Author: Soeren Stamm <mailto: stamm@physik.hu-berlin.de>
// Update: $Id: AtlDataMCPlotterTask.cxx,v 1.21 2017/07/28 16:23:08 kaphle Exp $
// Copyright: 2013 (C) Soeren Stamm
//
#ifndef ATLAS_AtlDataMCPlotterTask
#include <AtlDataMCPlotterTask.h>
#endif
#include <TROOT.h>
#include <TBrowser.h>
#include <TMath.h>
#include <TString.h>
#include <TObjString.h>
#include <TObjArray.h>
#include <TSystem.h>
#include <fstream>
#include <iostream>
#include <TClass.h>
#include <TTree.h>
#include <TFile.h>
#include <TChain.h>
#include <HepNtuplePlotCmd.h>

using namespace std;

#ifndef __CINT__
ClassImp(AtlDataMCPlotterTask);
#endif

//____________________________________________________________________

AtlDataMCPlotterTask::AtlDataMCPlotterTask(const char* name,
					   const char* title) :
    AtlTask(name, title) {
    //
    // Default constructor
    //
    fRootScript = 0;
    fListOfUserEnvs = new TList;
    fListOfFolders  = new TList;
    fNtuplePlotCmds = new TList;
    fDataLuminosity = 0.;
    fLuminosityLabel         = 0;
    fCenterOfMassEnergyLabel = 0;
    fAtlasLabelStatus        = 0;
    fDrawDataZeroEntryErrors = kFALSE;
    fDrawMCError             = kTRUE;
    fExportPDF               = kFALSE;
    fUseOverflowUnderflow    = kFALSE;
    fDrawSignalOverlay       = kFALSE;
    fScaleOverlay            = 1.;
    
    SetBatchNodeAll(kTRUE);
    
    AddUserEnv("LIBHEPUTILS");
    AddUserEnv("LIBATLASANALYSIS");
}

//____________________________________________________________________

AtlDataMCPlotterTask::~AtlDataMCPlotterTask() {
    //
    // Default destructor
    //
    fListOfUserEnvs->Delete(); delete fListOfUserEnvs;
    fListOfFolders->Delete();  delete fListOfFolders;
    delete fNtuplePlotCmds;
    if ( fLuminosityLabel != 0 )         delete fLuminosityLabel;
    if ( fCenterOfMassEnergyLabel != 0)  delete fCenterOfMassEnergyLabel;
    if ( fAtlasLabelStatus != 0 )        delete fAtlasLabelStatus;
}

//____________________________________________________________________

void AtlDataMCPlotterTask::ExecInteractiveJob(Option_t *option) {
    //
    // Interactive execution
    //
    TString opt = option;
    
    // Start Plotting
    CreateRootScript(opt.Data());

    gROOT->Macro(Form("%s/plottertask.C", fJobHome->Data()));
}

//____________________________________________________________________

void AtlDataMCPlotterTask::CreateRunScript(Option_t*) {
    //
    // Create Run Script
    //
    
    ofstream out;
    out.open(fRunScript->Data());
    out << "#!/bin/sh" << endl
	<< "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
	<< "# !!! This is an automatically generated file !!!" << endl
	<< "# !!! D O   N O T   E D I T                   !!!" << endl
	<< "# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
	<< "#" << endl
	<< "# Run script for A++ Data/MC plotter job submission" << endl
	<< "#" << endl << endl
	<< "# Set environment" << endl;
    // Platform
    if ( gSystem->Getenv("ARCH_TYPE") != 0 ) {
	out << "export ARCH_TYPE=" << gSystem->Getenv("ARCH_TYPE") << endl;
    } else {
	Error("CreateRunScript",
	      "Environment variable ARCH_TYPE not set. Abort!");
	gSystem->Abort(0);
    }
    
    if (!WriteEnvSetup(out)) {

    // ROOT
    out << "export ROOTSYS=" << gSystem->Getenv("ROOTSYS") << endl
	<< "export PATH=${ROOTSYS}/bin:${PATH}" << endl
	<< "export LD_LIBRARY_PATH=${ROOTSYS}/lib:${LD_LIBRARY_PATH}" << endl;
    
    // A++ and user-defined libraries
    TIter next_lib(fListOfUserEnvs);
    TNamed *env = 0;
    while ( (env = (TNamed*)next_lib()) ) {
	if ( gSystem->Getenv(env->GetName()) != 0 ) {
	    out << "export " << env->GetName() << "="
		<< gSystem->Getenv(env->GetName()) << endl
		<< "export LD_LIBRARY_PATH=${"
		<< env->GetName() << "}/lib/${ARCH_TYPE}:${LD_LIBRARY_PATH}"
		<< endl;
	} else {
	    Error("CreateRunScript", "Environment variable %s not set. Abort!",
		  env->GetName());
	    gSystem->Abort(0);
	}
    }

    }
    out	<< endl << endl
	<< "# Job execution" << endl;

    out << "JOBHOME=" << fJobHome->Data() << endl
	<< "cd $JOBHOME" << endl	
	<< "root -q -l -b plottertask.C > " << fLogFilePath->Data()
	<< " 2>&1" << endl;
    out.close();    
}

//____________________________________________________________________

Bool_t AtlDataMCPlotterTask::ExecBatchJob(Option_t *option) {
    //
    // Exec Batch Job
    //

    TString opt = option;
    
    // Create submit scripts
    CreateRootScript(opt.Data());

    // Submit batch job
    return SubmitBatchJob();
}

//____________________________________________________________________

void AtlDataMCPlotterTask::AddUserEnv(const char* env) {
    //
    // Add user-defined environment variable for shared library search
    // paths
    //
    fListOfUserEnvs->Add(new TNamed(env, ""));
}


//____________________________________________________________________

void AtlDataMCPlotterTask::CreateRootScript(Option_t *option) {
    //
    // Create Root script for A++ analysis job execution
    //
    TString opt = option;
    
    // =============
    // Create script
    // =============
    if ( fRootScript != 0 ) delete fRootScript;
    fRootScript = new TString(fJobHome->Data());
    fRootScript->Append("/plottertask.C");
    
    ofstream out;
    out.open(fRootScript->Data());
    
    // Header
    out << "{" << endl
	<< "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
	<< "// !!! This is an automatically generated file !!!" << endl
	<< "// !!! D O   N O T   E D I T                   !!!" << endl
	<< "// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl
	<< "//" << endl;
    if ( fGridJob ) {
	out << "// Root script for A++ Data/MC Plotter grid job execution"
	    << endl;
    } else {
	out << "// Root script for A++ Data/MC Plotter batch job execution"
	    << endl;
    }
    out << "//" << endl;
    
    out << "HepDataMCPlotter *pl = new HepDataMCPlotter(\"MCPlotter\", \"Create all Data-MC plots\");" << endl
	<< "pl->SetWorkingDir(\"" << gSystem->DirName(fOutputFileName->Data())
	<< "\");"  << endl;
    if ( fDrawDataZeroEntryErrors ) {
	out << "pl->SetDrawDataZeroEntryErrors(kTRUE);" << endl;
    } else {
	out << "pl->SetDrawDataZeroEntryErrors(kFALSE);" << endl;
    }
    if ( fDrawMCError ) {
	out << "pl->SetDrawMCError(kTRUE);" << endl;
    } else {
	out << "pl->SetDrawMCError(kFALSE);" << endl;
    }
    out << "pl->SetAtlasLabelStatus(\"" << fAtlasLabelStatus->Data()
	<< "\");" << endl
	<< "pl->SetCenterOfMassEnergyLabel(\""
	<< fCenterOfMassEnergyLabel->Data() << "\");" << endl
	<< "pl->SetLuminosityLabel(\"" << fLuminosityLabel->Data()
	<< "\");" << endl;
    if ( fExportPDF ) {
	out << "pl->SetExportPDF(kTRUE);" << endl;
    } else {
	out << "pl->SetExportPDF(kFALSE);" << endl;
    }
    if ( fUseOverflowUnderflow ) {
	out << "pl->SetUseOverflowUnderflow(kTRUE);" << endl;
    } else {
	out << "pl->SetUseOverflowUnderflow(kFALSE);" << endl;
    }
    if ( fDrawSignalOverlay ) {
	out << "pl->SetDrawSignalOverlay(kTRUE);" << endl;
    } else {
	out << "pl->SetDrawSignalOverlay(kFALSE);" << endl;
    }
    out << "pl->SetScaleOverlay(" << fScaleOverlay << ");" << endl;
    
    // Add ntuple plot commands (if any)
    if ( fNtuplePlotCmds->GetEntries() > 0 ) {
        out << "// Add ntuple plot commands" << endl;
        TIter next_cmd(fNtuplePlotCmds);
        HepNtuplePlotCmd *cmd = 0;
        while ( (cmd = (HepNtuplePlotCmd*)next_cmd()) ) {
	    out << "pl->AddNtuplePlotCmd(\""
	        << cmd->GetTreeName() << "\", \""
		<< cmd->GetVarExp() << "\", \""
		<< cmd->GetSelection() << "\", \""
		<< cmd->GetPlotName() << "\", \""
		<< cmd->GetPlotTitle() << "\", "
		<< cmd->GetNbins() << ", "
		<< cmd->GetXlow() << ", "
		<< cmd->GetXup() << ", \""
		<< cmd->GetXTitle() << "\", \""
		<< cmd->GetYTitle() << "\");"
		<< endl;
	}
	out << endl;
    }
    
    // Add samples
    AtlPlotterFolder *folder = 0;
    AtlSample *sample = 0;
    TIter next_folder(fListOfFolders);
    while ( (folder = (AtlPlotterFolder*)next_folder()) ) {
        if ( folder->GetListOfSamples()->IsEmpty() )
            continue;

	// Data
	if ( ((AtlSample*)folder->GetListOfSamples()->At(0))->IsDATA() ) {
	    TIter next_sample( folder->GetListOfSamples() );
	    
	    out << "// Add " << folder->GetName() << " sample" << endl;
	    while ( (sample = (AtlSample*)next_sample()) ) {
		out << "pl->AddDataFile(\"" << sample->GetPathName() << "\", "
		    << "\"" << folder->GetName() << "\");" << endl;
	    }
	    out << "pl->SetLumiDATA(" << fDataLuminosity  << ");" << endl;
	} else if ( ((AtlSample*)folder->GetListOfSamples()->At(0))->IsQCD() ) {
	    // QCD
	    out << "// Add group " << folder->GetName() << endl
		<< "pl->AddMCFolder(\"" << folder->GetName() << "\", "
		<< "\"" << folder->GetTitle() << "\", "
		<< folder->GetColor() << ");" << endl;
	    
	    TIter next_sample( folder->GetListOfSamples() );
	    while ( (sample = (AtlSample*)next_sample()) ) {
		out << "(pl->AddMCSample(\"" << folder->GetName() << "\", "
		    << "\"" << sample->GetPathName() << "\", "
		    << "\"" << sample->GetName() << "\", "
		    << 1. << ", " // QCD has xsection = 1
		    << sample->GetColor() << "))"
		    << "->SetLumi(" << fDataLuminosity << ");" << endl;
	    }
	} else {
	    // MC
	    out << "// Add group " << folder->GetName() << endl
			<< "pl->AddMCFolder(\"" << folder->GetName() << "\", "
			<< "\""  << folder->GetTitle() << "\", "
			<< folder->GetColor() << ");" << endl;
	    
	    TIter next_sample( folder->GetListOfSamples() );
	    while ( (sample = (AtlSample*)next_sample()) ) {
		out << "pl->AddMCSample(\"" << folder->GetName() << "\", "
		    << "\"" << sample->GetPathName() << "\", "
		    << "\"" << sample->GetName() << "\", "
		    << sample->GetXsection() << ", "
		    << sample->GetColor() << ");" << endl;
	    }
	}	
	out << endl << endl;
    }

    // Turn on debugging
    if ( fDebug > 0 ) {
	out << "" << endl;
	out << "gDebug = " << fDebug << ";" << endl;
    }

    out << "" << endl;
    out << "pl->Exec();" << endl;
    out << "}" << endl;

    out.close();
}

//____________________________________________________________________

void AtlDataMCPlotterTask::ExecGridJob(const Option_t*) {
    //
    // Exec grid job
    //
    Error("ExecGridJob", "Not supported! Abort!");
    gSystem->Abort(0);
}

//____________________________________________________________________

void AtlDataMCPlotterTask::ExecNAFBatchJob(const Option_t*) {
    //
    // Exec NAF batch job
    //
    Error("ExecNAFBatchJob", "Not supported! Abort!");
    gSystem->Abort(0);
}

//____________________________________________________________________

void AtlDataMCPlotterTask::CreateNAFBatchRunScript() {
    //
    // Create NAF Batch Run Script
    //
    Error("ExecNAFBatchRunScript", "Not supported! Abort!");
    gSystem->Abort(0);
}

//____________________________________________________________________

void AtlDataMCPlotterTask::CreateGridRunScript() {
    //
    // Create Grid Run Script
    //
    Error("ExecGridRunScript", "Not supported! Abort!");
    gSystem->Abort(0);
}

//____________________________________________________________________

void AtlDataMCPlotterTask::SetAtlasLabelStatus(const char* label) {
    //
    // Sets the Atlas label status of the plotter
    //
    if ( fAtlasLabelStatus != 0 ) delete fAtlasLabelStatus;
    fAtlasLabelStatus = new TString(label);
}

//____________________________________________________________________

void AtlDataMCPlotterTask::SetCenterOfMassEnergyLabel(const char* label) {
    //
    // Sets the  of the plotter
    //
    if ( fCenterOfMassEnergyLabel != 0 ) delete fCenterOfMassEnergyLabel;
    fCenterOfMassEnergyLabel = new TString(label);
}

//____________________________________________________________________

void AtlDataMCPlotterTask::SetLuminosityLabel(const char* label) {
    //
    // Sets the luminosity label of the plotter
    //
    if ( fLuminosityLabel != 0 ) delete fLuminosityLabel;
    fLuminosityLabel = new TString(label);
}

//____________________________________________________________________


void AtlDataMCPlotterTask::SetDrawDataZeroEntryErrors(Bool_t status) {
    //
    // Sets whether the plotter shall draw zero entry errors for data
    //
    fDrawDataZeroEntryErrors = status;
}

//____________________________________________________________________

void AtlDataMCPlotterTask::SetDrawMCError(Bool_t status) {
    //
    // Sets whether the plotter shall draw the MC error
    //
    fDrawMCError = status;
}

//____________________________________________________________________

void AtlDataMCPlotterTask::SetExportPDF(Bool_t status) {
    //
    // Sets whether the plotter automatically exports a Pdf file
    //
    fExportPDF = status;
}

//____________________________________________________________________

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

//____________________________________________________________________

void AtlDataMCPlotterTask::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 AtlDataMCPlotterTask::SetScaleOverlay(Float_t scale) {
    //
    // Set scale factor of the overlay histogram (see
    // SetDrawSignalOverlay())
    //
    fScaleOverlay = scale;
}

 AtlDataMCPlotterTask.cxx:1
 AtlDataMCPlotterTask.cxx:2
 AtlDataMCPlotterTask.cxx:3
 AtlDataMCPlotterTask.cxx:4
 AtlDataMCPlotterTask.cxx:5
 AtlDataMCPlotterTask.cxx:6
 AtlDataMCPlotterTask.cxx:7
 AtlDataMCPlotterTask.cxx:8
 AtlDataMCPlotterTask.cxx:9
 AtlDataMCPlotterTask.cxx:10
 AtlDataMCPlotterTask.cxx:11
 AtlDataMCPlotterTask.cxx:12
 AtlDataMCPlotterTask.cxx:13
 AtlDataMCPlotterTask.cxx:14
 AtlDataMCPlotterTask.cxx:15
 AtlDataMCPlotterTask.cxx:16
 AtlDataMCPlotterTask.cxx:17
 AtlDataMCPlotterTask.cxx:18
 AtlDataMCPlotterTask.cxx:19
 AtlDataMCPlotterTask.cxx:20
 AtlDataMCPlotterTask.cxx:21
 AtlDataMCPlotterTask.cxx:22
 AtlDataMCPlotterTask.cxx:23
 AtlDataMCPlotterTask.cxx:24
 AtlDataMCPlotterTask.cxx:25
 AtlDataMCPlotterTask.cxx:26
 AtlDataMCPlotterTask.cxx:27
 AtlDataMCPlotterTask.cxx:28
 AtlDataMCPlotterTask.cxx:29
 AtlDataMCPlotterTask.cxx:30
 AtlDataMCPlotterTask.cxx:31
 AtlDataMCPlotterTask.cxx:32
 AtlDataMCPlotterTask.cxx:33
 AtlDataMCPlotterTask.cxx:34
 AtlDataMCPlotterTask.cxx:35
 AtlDataMCPlotterTask.cxx:36
 AtlDataMCPlotterTask.cxx:37
 AtlDataMCPlotterTask.cxx:38
 AtlDataMCPlotterTask.cxx:39
 AtlDataMCPlotterTask.cxx:40
 AtlDataMCPlotterTask.cxx:41
 AtlDataMCPlotterTask.cxx:42
 AtlDataMCPlotterTask.cxx:43
 AtlDataMCPlotterTask.cxx:44
 AtlDataMCPlotterTask.cxx:45
 AtlDataMCPlotterTask.cxx:46
 AtlDataMCPlotterTask.cxx:47
 AtlDataMCPlotterTask.cxx:48
 AtlDataMCPlotterTask.cxx:49
 AtlDataMCPlotterTask.cxx:50
 AtlDataMCPlotterTask.cxx:51
 AtlDataMCPlotterTask.cxx:52
 AtlDataMCPlotterTask.cxx:53
 AtlDataMCPlotterTask.cxx:54
 AtlDataMCPlotterTask.cxx:55
 AtlDataMCPlotterTask.cxx:56
 AtlDataMCPlotterTask.cxx:57
 AtlDataMCPlotterTask.cxx:58
 AtlDataMCPlotterTask.cxx:59
 AtlDataMCPlotterTask.cxx:60
 AtlDataMCPlotterTask.cxx:61
 AtlDataMCPlotterTask.cxx:62
 AtlDataMCPlotterTask.cxx:63
 AtlDataMCPlotterTask.cxx:64
 AtlDataMCPlotterTask.cxx:65
 AtlDataMCPlotterTask.cxx:66
 AtlDataMCPlotterTask.cxx:67
 AtlDataMCPlotterTask.cxx:68
 AtlDataMCPlotterTask.cxx:69
 AtlDataMCPlotterTask.cxx:70
 AtlDataMCPlotterTask.cxx:71
 AtlDataMCPlotterTask.cxx:72
 AtlDataMCPlotterTask.cxx:73
 AtlDataMCPlotterTask.cxx:74
 AtlDataMCPlotterTask.cxx:75
 AtlDataMCPlotterTask.cxx:76
 AtlDataMCPlotterTask.cxx:77
 AtlDataMCPlotterTask.cxx:78
 AtlDataMCPlotterTask.cxx:79
 AtlDataMCPlotterTask.cxx:80
 AtlDataMCPlotterTask.cxx:81
 AtlDataMCPlotterTask.cxx:82
 AtlDataMCPlotterTask.cxx:83
 AtlDataMCPlotterTask.cxx:84
 AtlDataMCPlotterTask.cxx:85
 AtlDataMCPlotterTask.cxx:86
 AtlDataMCPlotterTask.cxx:87
 AtlDataMCPlotterTask.cxx:88
 AtlDataMCPlotterTask.cxx:89
 AtlDataMCPlotterTask.cxx:90
 AtlDataMCPlotterTask.cxx:91
 AtlDataMCPlotterTask.cxx:92
 AtlDataMCPlotterTask.cxx:93
 AtlDataMCPlotterTask.cxx:94
 AtlDataMCPlotterTask.cxx:95
 AtlDataMCPlotterTask.cxx:96
 AtlDataMCPlotterTask.cxx:97
 AtlDataMCPlotterTask.cxx:98
 AtlDataMCPlotterTask.cxx:99
 AtlDataMCPlotterTask.cxx:100
 AtlDataMCPlotterTask.cxx:101
 AtlDataMCPlotterTask.cxx:102
 AtlDataMCPlotterTask.cxx:103
 AtlDataMCPlotterTask.cxx:104
 AtlDataMCPlotterTask.cxx:105
 AtlDataMCPlotterTask.cxx:106
 AtlDataMCPlotterTask.cxx:107
 AtlDataMCPlotterTask.cxx:108
 AtlDataMCPlotterTask.cxx:109
 AtlDataMCPlotterTask.cxx:110
 AtlDataMCPlotterTask.cxx:111
 AtlDataMCPlotterTask.cxx:112
 AtlDataMCPlotterTask.cxx:113
 AtlDataMCPlotterTask.cxx:114
 AtlDataMCPlotterTask.cxx:115
 AtlDataMCPlotterTask.cxx:116
 AtlDataMCPlotterTask.cxx:117
 AtlDataMCPlotterTask.cxx:118
 AtlDataMCPlotterTask.cxx:119
 AtlDataMCPlotterTask.cxx:120
 AtlDataMCPlotterTask.cxx:121
 AtlDataMCPlotterTask.cxx:122
 AtlDataMCPlotterTask.cxx:123
 AtlDataMCPlotterTask.cxx:124
 AtlDataMCPlotterTask.cxx:125
 AtlDataMCPlotterTask.cxx:126
 AtlDataMCPlotterTask.cxx:127
 AtlDataMCPlotterTask.cxx:128
 AtlDataMCPlotterTask.cxx:129
 AtlDataMCPlotterTask.cxx:130
 AtlDataMCPlotterTask.cxx:131
 AtlDataMCPlotterTask.cxx:132
 AtlDataMCPlotterTask.cxx:133
 AtlDataMCPlotterTask.cxx:134
 AtlDataMCPlotterTask.cxx:135
 AtlDataMCPlotterTask.cxx:136
 AtlDataMCPlotterTask.cxx:137
 AtlDataMCPlotterTask.cxx:138
 AtlDataMCPlotterTask.cxx:139
 AtlDataMCPlotterTask.cxx:140
 AtlDataMCPlotterTask.cxx:141
 AtlDataMCPlotterTask.cxx:142
 AtlDataMCPlotterTask.cxx:143
 AtlDataMCPlotterTask.cxx:144
 AtlDataMCPlotterTask.cxx:145
 AtlDataMCPlotterTask.cxx:146
 AtlDataMCPlotterTask.cxx:147
 AtlDataMCPlotterTask.cxx:148
 AtlDataMCPlotterTask.cxx:149
 AtlDataMCPlotterTask.cxx:150
 AtlDataMCPlotterTask.cxx:151
 AtlDataMCPlotterTask.cxx:152
 AtlDataMCPlotterTask.cxx:153
 AtlDataMCPlotterTask.cxx:154
 AtlDataMCPlotterTask.cxx:155
 AtlDataMCPlotterTask.cxx:156
 AtlDataMCPlotterTask.cxx:157
 AtlDataMCPlotterTask.cxx:158
 AtlDataMCPlotterTask.cxx:159
 AtlDataMCPlotterTask.cxx:160
 AtlDataMCPlotterTask.cxx:161
 AtlDataMCPlotterTask.cxx:162
 AtlDataMCPlotterTask.cxx:163
 AtlDataMCPlotterTask.cxx:164
 AtlDataMCPlotterTask.cxx:165
 AtlDataMCPlotterTask.cxx:166
 AtlDataMCPlotterTask.cxx:167
 AtlDataMCPlotterTask.cxx:168
 AtlDataMCPlotterTask.cxx:169
 AtlDataMCPlotterTask.cxx:170
 AtlDataMCPlotterTask.cxx:171
 AtlDataMCPlotterTask.cxx:172
 AtlDataMCPlotterTask.cxx:173
 AtlDataMCPlotterTask.cxx:174
 AtlDataMCPlotterTask.cxx:175
 AtlDataMCPlotterTask.cxx:176
 AtlDataMCPlotterTask.cxx:177
 AtlDataMCPlotterTask.cxx:178
 AtlDataMCPlotterTask.cxx:179
 AtlDataMCPlotterTask.cxx:180
 AtlDataMCPlotterTask.cxx:181
 AtlDataMCPlotterTask.cxx:182
 AtlDataMCPlotterTask.cxx:183
 AtlDataMCPlotterTask.cxx:184
 AtlDataMCPlotterTask.cxx:185
 AtlDataMCPlotterTask.cxx:186
 AtlDataMCPlotterTask.cxx:187
 AtlDataMCPlotterTask.cxx:188
 AtlDataMCPlotterTask.cxx:189
 AtlDataMCPlotterTask.cxx:190
 AtlDataMCPlotterTask.cxx:191
 AtlDataMCPlotterTask.cxx:192
 AtlDataMCPlotterTask.cxx:193
 AtlDataMCPlotterTask.cxx:194
 AtlDataMCPlotterTask.cxx:195
 AtlDataMCPlotterTask.cxx:196
 AtlDataMCPlotterTask.cxx:197
 AtlDataMCPlotterTask.cxx:198
 AtlDataMCPlotterTask.cxx:199
 AtlDataMCPlotterTask.cxx:200
 AtlDataMCPlotterTask.cxx:201
 AtlDataMCPlotterTask.cxx:202
 AtlDataMCPlotterTask.cxx:203
 AtlDataMCPlotterTask.cxx:204
 AtlDataMCPlotterTask.cxx:205
 AtlDataMCPlotterTask.cxx:206
 AtlDataMCPlotterTask.cxx:207
 AtlDataMCPlotterTask.cxx:208
 AtlDataMCPlotterTask.cxx:209
 AtlDataMCPlotterTask.cxx:210
 AtlDataMCPlotterTask.cxx:211
 AtlDataMCPlotterTask.cxx:212
 AtlDataMCPlotterTask.cxx:213
 AtlDataMCPlotterTask.cxx:214
 AtlDataMCPlotterTask.cxx:215
 AtlDataMCPlotterTask.cxx:216
 AtlDataMCPlotterTask.cxx:217
 AtlDataMCPlotterTask.cxx:218
 AtlDataMCPlotterTask.cxx:219
 AtlDataMCPlotterTask.cxx:220
 AtlDataMCPlotterTask.cxx:221
 AtlDataMCPlotterTask.cxx:222
 AtlDataMCPlotterTask.cxx:223
 AtlDataMCPlotterTask.cxx:224
 AtlDataMCPlotterTask.cxx:225
 AtlDataMCPlotterTask.cxx:226
 AtlDataMCPlotterTask.cxx:227
 AtlDataMCPlotterTask.cxx:228
 AtlDataMCPlotterTask.cxx:229
 AtlDataMCPlotterTask.cxx:230
 AtlDataMCPlotterTask.cxx:231
 AtlDataMCPlotterTask.cxx:232
 AtlDataMCPlotterTask.cxx:233
 AtlDataMCPlotterTask.cxx:234
 AtlDataMCPlotterTask.cxx:235
 AtlDataMCPlotterTask.cxx:236
 AtlDataMCPlotterTask.cxx:237
 AtlDataMCPlotterTask.cxx:238
 AtlDataMCPlotterTask.cxx:239
 AtlDataMCPlotterTask.cxx:240
 AtlDataMCPlotterTask.cxx:241
 AtlDataMCPlotterTask.cxx:242
 AtlDataMCPlotterTask.cxx:243
 AtlDataMCPlotterTask.cxx:244
 AtlDataMCPlotterTask.cxx:245
 AtlDataMCPlotterTask.cxx:246
 AtlDataMCPlotterTask.cxx:247
 AtlDataMCPlotterTask.cxx:248
 AtlDataMCPlotterTask.cxx:249
 AtlDataMCPlotterTask.cxx:250
 AtlDataMCPlotterTask.cxx:251
 AtlDataMCPlotterTask.cxx:252
 AtlDataMCPlotterTask.cxx:253
 AtlDataMCPlotterTask.cxx:254
 AtlDataMCPlotterTask.cxx:255
 AtlDataMCPlotterTask.cxx:256
 AtlDataMCPlotterTask.cxx:257
 AtlDataMCPlotterTask.cxx:258
 AtlDataMCPlotterTask.cxx:259
 AtlDataMCPlotterTask.cxx:260
 AtlDataMCPlotterTask.cxx:261
 AtlDataMCPlotterTask.cxx:262
 AtlDataMCPlotterTask.cxx:263
 AtlDataMCPlotterTask.cxx:264
 AtlDataMCPlotterTask.cxx:265
 AtlDataMCPlotterTask.cxx:266
 AtlDataMCPlotterTask.cxx:267
 AtlDataMCPlotterTask.cxx:268
 AtlDataMCPlotterTask.cxx:269
 AtlDataMCPlotterTask.cxx:270
 AtlDataMCPlotterTask.cxx:271
 AtlDataMCPlotterTask.cxx:272
 AtlDataMCPlotterTask.cxx:273
 AtlDataMCPlotterTask.cxx:274
 AtlDataMCPlotterTask.cxx:275
 AtlDataMCPlotterTask.cxx:276
 AtlDataMCPlotterTask.cxx:277
 AtlDataMCPlotterTask.cxx:278
 AtlDataMCPlotterTask.cxx:279
 AtlDataMCPlotterTask.cxx:280
 AtlDataMCPlotterTask.cxx:281
 AtlDataMCPlotterTask.cxx:282
 AtlDataMCPlotterTask.cxx:283
 AtlDataMCPlotterTask.cxx:284
 AtlDataMCPlotterTask.cxx:285
 AtlDataMCPlotterTask.cxx:286
 AtlDataMCPlotterTask.cxx:287
 AtlDataMCPlotterTask.cxx:288
 AtlDataMCPlotterTask.cxx:289
 AtlDataMCPlotterTask.cxx:290
 AtlDataMCPlotterTask.cxx:291
 AtlDataMCPlotterTask.cxx:292
 AtlDataMCPlotterTask.cxx:293
 AtlDataMCPlotterTask.cxx:294
 AtlDataMCPlotterTask.cxx:295
 AtlDataMCPlotterTask.cxx:296
 AtlDataMCPlotterTask.cxx:297
 AtlDataMCPlotterTask.cxx:298
 AtlDataMCPlotterTask.cxx:299
 AtlDataMCPlotterTask.cxx:300
 AtlDataMCPlotterTask.cxx:301
 AtlDataMCPlotterTask.cxx:302
 AtlDataMCPlotterTask.cxx:303
 AtlDataMCPlotterTask.cxx:304
 AtlDataMCPlotterTask.cxx:305
 AtlDataMCPlotterTask.cxx:306
 AtlDataMCPlotterTask.cxx:307
 AtlDataMCPlotterTask.cxx:308
 AtlDataMCPlotterTask.cxx:309
 AtlDataMCPlotterTask.cxx:310
 AtlDataMCPlotterTask.cxx:311
 AtlDataMCPlotterTask.cxx:312
 AtlDataMCPlotterTask.cxx:313
 AtlDataMCPlotterTask.cxx:314
 AtlDataMCPlotterTask.cxx:315
 AtlDataMCPlotterTask.cxx:316
 AtlDataMCPlotterTask.cxx:317
 AtlDataMCPlotterTask.cxx:318
 AtlDataMCPlotterTask.cxx:319
 AtlDataMCPlotterTask.cxx:320
 AtlDataMCPlotterTask.cxx:321
 AtlDataMCPlotterTask.cxx:322
 AtlDataMCPlotterTask.cxx:323
 AtlDataMCPlotterTask.cxx:324
 AtlDataMCPlotterTask.cxx:325
 AtlDataMCPlotterTask.cxx:326
 AtlDataMCPlotterTask.cxx:327
 AtlDataMCPlotterTask.cxx:328
 AtlDataMCPlotterTask.cxx:329
 AtlDataMCPlotterTask.cxx:330
 AtlDataMCPlotterTask.cxx:331
 AtlDataMCPlotterTask.cxx:332
 AtlDataMCPlotterTask.cxx:333
 AtlDataMCPlotterTask.cxx:334
 AtlDataMCPlotterTask.cxx:335
 AtlDataMCPlotterTask.cxx:336
 AtlDataMCPlotterTask.cxx:337
 AtlDataMCPlotterTask.cxx:338
 AtlDataMCPlotterTask.cxx:339
 AtlDataMCPlotterTask.cxx:340
 AtlDataMCPlotterTask.cxx:341
 AtlDataMCPlotterTask.cxx:342
 AtlDataMCPlotterTask.cxx:343
 AtlDataMCPlotterTask.cxx:344
 AtlDataMCPlotterTask.cxx:345
 AtlDataMCPlotterTask.cxx:346
 AtlDataMCPlotterTask.cxx:347
 AtlDataMCPlotterTask.cxx:348
 AtlDataMCPlotterTask.cxx:349
 AtlDataMCPlotterTask.cxx:350
 AtlDataMCPlotterTask.cxx:351
 AtlDataMCPlotterTask.cxx:352
 AtlDataMCPlotterTask.cxx:353
 AtlDataMCPlotterTask.cxx:354
 AtlDataMCPlotterTask.cxx:355
 AtlDataMCPlotterTask.cxx:356
 AtlDataMCPlotterTask.cxx:357
 AtlDataMCPlotterTask.cxx:358
 AtlDataMCPlotterTask.cxx:359
 AtlDataMCPlotterTask.cxx:360
 AtlDataMCPlotterTask.cxx:361
 AtlDataMCPlotterTask.cxx:362
 AtlDataMCPlotterTask.cxx:363
 AtlDataMCPlotterTask.cxx:364
 AtlDataMCPlotterTask.cxx:365
 AtlDataMCPlotterTask.cxx:366
 AtlDataMCPlotterTask.cxx:367
 AtlDataMCPlotterTask.cxx:368
 AtlDataMCPlotterTask.cxx:369
 AtlDataMCPlotterTask.cxx:370
 AtlDataMCPlotterTask.cxx:371
 AtlDataMCPlotterTask.cxx:372
 AtlDataMCPlotterTask.cxx:373
 AtlDataMCPlotterTask.cxx:374
 AtlDataMCPlotterTask.cxx:375
 AtlDataMCPlotterTask.cxx:376
 AtlDataMCPlotterTask.cxx:377
 AtlDataMCPlotterTask.cxx:378
 AtlDataMCPlotterTask.cxx:379
 AtlDataMCPlotterTask.cxx:380
 AtlDataMCPlotterTask.cxx:381
 AtlDataMCPlotterTask.cxx:382
 AtlDataMCPlotterTask.cxx:383
 AtlDataMCPlotterTask.cxx:384
 AtlDataMCPlotterTask.cxx:385
 AtlDataMCPlotterTask.cxx:386
 AtlDataMCPlotterTask.cxx:387
 AtlDataMCPlotterTask.cxx:388
 AtlDataMCPlotterTask.cxx:389
 AtlDataMCPlotterTask.cxx:390
 AtlDataMCPlotterTask.cxx:391
 AtlDataMCPlotterTask.cxx:392
 AtlDataMCPlotterTask.cxx:393
 AtlDataMCPlotterTask.cxx:394
 AtlDataMCPlotterTask.cxx:395
 AtlDataMCPlotterTask.cxx:396
 AtlDataMCPlotterTask.cxx:397
 AtlDataMCPlotterTask.cxx:398
 AtlDataMCPlotterTask.cxx:399
 AtlDataMCPlotterTask.cxx:400
 AtlDataMCPlotterTask.cxx:401
 AtlDataMCPlotterTask.cxx:402
 AtlDataMCPlotterTask.cxx:403
 AtlDataMCPlotterTask.cxx:404
 AtlDataMCPlotterTask.cxx:405
 AtlDataMCPlotterTask.cxx:406
 AtlDataMCPlotterTask.cxx:407
 AtlDataMCPlotterTask.cxx:408
 AtlDataMCPlotterTask.cxx:409
 AtlDataMCPlotterTask.cxx:410
 AtlDataMCPlotterTask.cxx:411
 AtlDataMCPlotterTask.cxx:412
 AtlDataMCPlotterTask.cxx:413
 AtlDataMCPlotterTask.cxx:414
 AtlDataMCPlotterTask.cxx:415
 AtlDataMCPlotterTask.cxx:416
 AtlDataMCPlotterTask.cxx:417
 AtlDataMCPlotterTask.cxx:418
 AtlDataMCPlotterTask.cxx:419
 AtlDataMCPlotterTask.cxx:420
 AtlDataMCPlotterTask.cxx:421
 AtlDataMCPlotterTask.cxx:422
 AtlDataMCPlotterTask.cxx:423
 AtlDataMCPlotterTask.cxx:424
 AtlDataMCPlotterTask.cxx:425
 AtlDataMCPlotterTask.cxx:426
 AtlDataMCPlotterTask.cxx:427
 AtlDataMCPlotterTask.cxx:428
 AtlDataMCPlotterTask.cxx:429
 AtlDataMCPlotterTask.cxx:430
 AtlDataMCPlotterTask.cxx:431
 AtlDataMCPlotterTask.cxx:432
 AtlDataMCPlotterTask.cxx:433
 AtlDataMCPlotterTask.cxx:434
 AtlDataMCPlotterTask.cxx:435
 AtlDataMCPlotterTask.cxx:436
 AtlDataMCPlotterTask.cxx:437
 AtlDataMCPlotterTask.cxx:438
 AtlDataMCPlotterTask.cxx:439
 AtlDataMCPlotterTask.cxx:440
 AtlDataMCPlotterTask.cxx:441
 AtlDataMCPlotterTask.cxx:442
 AtlDataMCPlotterTask.cxx:443
 AtlDataMCPlotterTask.cxx:444
 AtlDataMCPlotterTask.cxx:445
 AtlDataMCPlotterTask.cxx:446
 AtlDataMCPlotterTask.cxx:447
 AtlDataMCPlotterTask.cxx:448
 AtlDataMCPlotterTask.cxx:449
 AtlDataMCPlotterTask.cxx:450
 AtlDataMCPlotterTask.cxx:451
 AtlDataMCPlotterTask.cxx:452
 AtlDataMCPlotterTask.cxx:453
 AtlDataMCPlotterTask.cxx:454
 AtlDataMCPlotterTask.cxx:455
 AtlDataMCPlotterTask.cxx:456
 AtlDataMCPlotterTask.cxx:457
 AtlDataMCPlotterTask.cxx:458
 AtlDataMCPlotterTask.cxx:459
 AtlDataMCPlotterTask.cxx:460
 AtlDataMCPlotterTask.cxx:461
 AtlDataMCPlotterTask.cxx:462
 AtlDataMCPlotterTask.cxx:463
 AtlDataMCPlotterTask.cxx:464
 AtlDataMCPlotterTask.cxx:465
 AtlDataMCPlotterTask.cxx:466