ROOT logo
// runEMCalAnalysis.C
// =====================
// This macro can be used to run EMCal analysis within the EMCal part of the Jet Framework.
//
// Examples:
// -> Analyze ESDs from the pA pilot run on the AliEn grid with your task in AnaClass.cxx/.h
//     dataType = "ESD", useGrid = kTRUE, pattern = "*ESDs/pass2/*ESDs.root", addCXXs = "AnaClass.cxx", 
//     addHs = "AnaClass.h", gridDir = "/alice/data/2012/LHC12g", gridMode = "full", runNumbers = "188359 188362"
//     
// -> Analyze AODs (up to 96 files) locally given in files_aod.txt
//     dataType = "AOD", useGrid = kFALSE, numLocalFiles = 96
//
// MERGING ON ALIEN
// ++++++++++++++++
// If you run on the grid, you can monitor the jobs with alimonitor.cern.ch. When enough of them are in DONE state,
// you have to merge the output. This can be done automatically, if you just change the gridMode to "terminate" and
// give the EXACT name of the task whose output should be merged in uniqueName.
// 
//
// Authors: R. Haake, S. Aiola, M. Verweij

#include <ctime>
#include "TGrid.h"

AliAnalysisGrid* CreateAlienHandler(const char* uniqueName, const char* gridDir, const char* gridMode, const char* runNumbers, 
                                     const char* pattern, TString additionalCode, TString additionalHeaders, Int_t maxFilesPerWorker, 
                                     Int_t workerTTL, Bool_t isMC);
                                    
//______________________________________________________________________________
void runEMCalAnalysis(
         Bool_t         useGrid             = kTRUE,                      // local or grid
         const char*    gridMode            = "test",                      // set the grid run mode (can be "full", "test", "offline", "submit" or "terminate")
         const char*    dataType            = "AOD",                       // set the analysis type, AOD, ESD or sESD
         const char*    pattern             = "*ESDs/pass2/AOD145/*AOD.root",    // file pattern (here one can specify subdirs like passX etc.) (used on grid)
         const char*    gridDir             = "/alice/data/2011/LHC11h_2",   // dir on alien, where the files live (used on grid)
         const char*    runNumbers          = "167903 167915",             // considered run numbers (used on grid)
         UInt_t         numLocalFiles       = 1,                          // number of files analyzed locally  
         const char*    runPeriod           = "LHC11h",                    // set the run period (used on grid)
         const char*    uniqueName          = "EMCal_LEGOTrainTest",     // sets base string for the name of the task on the grid
         UInt_t         pSel                = AliVEvent::kAny,             // used event selection for every task except for the analysis tasks
         Bool_t         useTender           = kTRUE,                       // trigger, if tender, track and cluster selection should be used (always)
         Bool_t         isMC                = kFALSE,                      // trigger, if MC handler should be used
         // Here you have to specify additional code files you want to use but that are not in aliroot
         const char*    addCXXs             = "",
         const char*    addHs               = "",

         // These two settings depend on the dataset and your quotas on the AliEN services
         Int_t          maxFilesPerWorker   = 4,
         Int_t          workerTTL           = 7200

         )
{

  // Some pre-settings and constants
  enum AlgoType {kKT, kANTIKT};
  enum JetType  {kFULLJETS, kCHARGEDJETS, kNEUTRALJETS};
  gSystem->SetFPEMask();
  gSystem->Setenv("ETRAIN_ROOT", ".");
  gSystem->Setenv("ETRAIN_PERIOD", runPeriod);
  // change this objects to strings
  TString usedData(dataType);
  TString additionalCXXs(addCXXs);
  TString additionalHs(addHs);
  cout << dataType << " analysis chosen" << endl;
  if (useGrid)  
  {
    cout << "-- using AliEn grid.\n";
    if (usedData == "sESD") 
    {
      cout << "Skimmed ESD analysis not available on the grid!" << endl;
      return;
    }
  }
  else
    cout << "-- using local analysis.\n";
  

  // Load necessary libraries
  LoadLibs();

  // Create analysis manager
  AliAnalysisManager* mgr = new AliAnalysisManager(uniqueName);

  // Check type of input and create handler for it
  TString localFiles("-1");
  if(usedData == "AOD")
  {
    localFiles = "files_aod.txt";
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddAODHandler.C");
    AliAODInputHandler* aodH = AddAODHandler();
  }
  else if((usedData == "ESD") || (usedData == "sESD"))
  {
    if (usedData == "ESD")
      localFiles = "files_esd.txt";
    else
      localFiles = "files_sesd.txt";
    
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddESDHandler.C");
    AliESDInputHandler* esdH = AddESDHandler();
  }
  else
  {
    cout << "Data type not recognized! You have to specify ESD, AOD, or sESD!\n";
  }

  if(!useGrid)
    cout << "Using " << localFiles.Data() << " as input file list.\n";

  // Create MC handler, if MC is demanded
  if (isMC && (usedData != "AOD"))
  {
    AliMCEventHandler* mcH = new AliMCEventHandler();
    mcH->SetPreReadMode(AliMCEventHandler::kLmPreRead);
    mcH->SetReadTR(kTRUE);
    mgr->SetMCtruthEventHandler(mcH); 
  }
  
  // ################# Now: Add some basic tasks

  // Physics selection task
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPhysicsSelection.C");
  AliPhysicsSelectionTask *physSelTask = AddTaskEmcalPhysicsSelection(kTRUE, kTRUE, pSel, 5, 5, 10, kTRUE, -1, -1, -1, -1);

  if (!physSelTask) 
  {
    cout << "no physSelTask"; 
    return; 
  }

  // Centrality task
  if (usedData == "ESD") {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskCentrality.C");
    AliCentralitySelectionTask *centralityTask = AddTaskCentrality(kTRUE);
  }

  // Compatibility task, only needed for skimmed ESD
  if (usedData == "sESD") {
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalCompat.C");
    AliEmcalCompatTask *comptask = AddTaskEmcalCompat();
  }

  // Setup task
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSetup.C");
  AliEmcalSetupTask *setupTask = AddTaskEmcalSetup();
  setupTask->SetGeoPath("$ALICE_ROOT/OADB/EMCAL");
  
  // Tender Supplies
  if (useTender) {
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPreparation.C");
    //adjust pass when running locally. On grid give empty string, will be picked up automatically from path to ESD/AOD file
    AliAnalysisTaskSE *clusm = AddTaskEmcalPreparation(runPeriod,"pass1"); 
  }

  // Names of the different objects passed around; these are the default names; added here mostly for documentation purposes
  // rhoName is only set if the background subtraction is switched on (doBkg)
  TString tracksName = "AODFilterTracks";
  TString clustersName = "EmcCaloClusters";

  // ################# Now: Call jet preparation macro (picotracks, hadronic corrected caloclusters, ...) 
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskMatchingChain.C");
  AddTaskMatchingChain(runPeriod,pSel,
		       clustersName,1.,kTRUE,
		       0.1,kTRUE,kTRUE);
  
  // ################# Now: Add analysis task
  // Here you can put in your AddTaskMacro for your task
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSample.C");
  AliAnalysisTaskEmcalSample* anaTask = AddTaskEmcalSample(tracksName, clustersName, 4);

  // Set the physics selection for all given tasks
  TObjArray *toptasks = mgr->GetTasks();
  for (Int_t i=0; i<toptasks->GetEntries(); ++i) 
  {
    AliAnalysisTaskSE *task = dynamic_cast<AliAnalysisTaskSE*>(toptasks->At(i));
    if (!task)
      continue;
    if (task->InheritsFrom("AliPhysicsSelectionTask"))
      continue;
    ::Info("setPSel", "Set physics selection for %s (%s)", task->GetName(), task->ClassName());
    task->SelectCollisionCandidates(pSel);
  }

  mgr->SetUseProgressBar(1, 25);
        
  if (!mgr->InitAnalysis()) 
    return;
  mgr->PrintStatus();

  if (useGrid) 
  {  // GRID CALCULATION

    AliAnalysisGrid *plugin = CreateAlienHandler(uniqueName, gridDir, gridMode, runNumbers, pattern, additionalCXXs, additionalHs, maxFilesPerWorker, workerTTL, isMC);
    mgr->SetGridHandler(plugin);

    // start analysis
    cout << "Starting GRID Analysis...";
    mgr->SetDebugLevel(0);
    mgr->StartAnalysis("grid",10);
  }
  else
  {  // LOCAL CALCULATION

    TChain* chain = 0;
    if (usedData == "AOD") 
    {
      gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/CreateAODChain.C");
      chain = CreateAODChain(localFiles.Data(), numLocalFiles);
    }
    else
    {  // ESD or skimmed ESD
      gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/CreateESDChain.C");
      chain = CreateESDChain(localFiles.Data(), numLocalFiles);
    }
    
    // start analysis
    cout << "Starting LOCAL Analysis...";
    mgr->SetDebugLevel(2);
    mgr->StartAnalysis("local", chain);
  }
}

//______________________________________________________________________________
void LoadLibs()
{
  // Load common libraries (better too many than too few)
  gSystem->Load("libTree");
  gSystem->Load("libVMC");
  gSystem->Load("libGeom");
  gSystem->Load("libGui");
  gSystem->Load("libXMLParser");
  gSystem->Load("libMinuit");
  gSystem->Load("libMinuit2");
  gSystem->Load("libProof");
  gSystem->Load("libPhysics");
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libOADB");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libCDB");
  gSystem->Load("libRAWDatabase");
  gSystem->Load("libSTEER");
  gSystem->Load("libEVGEN");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCORRFW");
  gSystem->Load("libTOFbase");
  //gSystem->Load("libTOFrec");
  gSystem->Load("libRAWDatabase.so");
  gSystem->Load("libRAWDatarec.so");
  gSystem->Load("libTPCbase.so");
  gSystem->Load("libTPCrec.so");
  gSystem->Load("libITSbase.so");
  gSystem->Load("libITSrec.so");
  gSystem->Load("libTRDbase.so");
  gSystem->Load("libTENDER.so");
  gSystem->Load("libSTAT.so");
  gSystem->Load("libTRDrec.so");
  gSystem->Load("libHMPIDbase.so");
  gSystem->Load("libPWGPP.so");
  gSystem->Load("libPWGHFbase");
  gSystem->Load("libPWGDQdielectron");
  gSystem->Load("libPWGHFhfe");
  gSystem->Load("libEMCALUtils");
  gSystem->Load("libPHOSUtils");
  gSystem->Load("libPWGCaloTrackCorrBase");
  gSystem->Load("libEMCALraw");
  gSystem->Load("libEMCALbase");
  gSystem->Load("libEMCALrec");
  gSystem->Load("libTRDbase");
  gSystem->Load("libVZERObase");
  gSystem->Load("libVZEROrec");
  gSystem->Load("libTENDER");
  gSystem->Load("libTENDERSupplies");
  gSystem->Load("libPWGTools");
  gSystem->Load("libPWGEMCAL");
  gSystem->Load("libESDfilter");
  gSystem->Load("libPWGGAEMCALTasks");
  gSystem->Load("libPWGCFCorrelationsBase");
  gSystem->Load("libPWGCFCorrelationsDPhi");

  // include paths
  gSystem->AddIncludePath("-Wno-deprecated");
  gSystem->AddIncludePath("-I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/EMCAL");
  gSystem->AddIncludePath("-I$ALICE_ROOT/PWGDQ/dielectron -I$ALICE_ROOT/PWGHF/hfe");
}

AliAnalysisGrid* CreateAlienHandler(const char* uniqueName, const char* gridDir, const char* gridMode, const char* runNumbers, 
                                     const char* pattern, TString additionalCode, TString additionalHeaders, Int_t maxFilesPerWorker, 
                                     Int_t workerTTL, Bool_t isMC)
{
  TDatime currentTime;
  TString tmpName(uniqueName);

  // Only add current date and time when not in terminate mode! In this case the exact name has to be supplied by the user
  if(strcmp(gridMode, "terminate"))
  {
    tmpName += "_";
    tmpName += currentTime.GetDate();
    tmpName += "_";
    tmpName += currentTime.GetTime();
  }

  TString tmpAdditionalLibs("");
  tmpAdditionalLibs = Form("libTree.so libVMC.so libGeom.so libGui.so libXMLParser.so libMinuit.so libMinuit2.so libProof.so libPhysics.so libSTEERBase.so libESD.so libAOD.so libOADB.so libANALYSIS.so libCDB.so libRAWDatabase.so libSTEER.so libANALYSISalice.so libCORRFW.so libTOFbase.so libRAWDatabase.so libRAWDatarec.so libTPCbase.so libTPCrec.so libITSbase.so libITSrec.so libTRDbase.so libTENDER.so libSTAT.so libTRDrec.so libHMPIDbase.so libPWGPP.so libPWGHFbase.so libPWGDQdielectron.so libPWGHFhfe.so libEMCALUtils.so libPHOSUtils.so libPWGCaloTrackCorrBase.so libEMCALraw.so libEMCALbase.so libEMCALrec.so libTRDbase.so libVZERObase.so libVZEROrec.so libTENDER.so libTENDERSupplies.so libESDfilter.so libPWGTools.so libPWGEMCAL.so libPWGGAEMCALTasks.so libPWGCFCorrelationsBase.so libPWGCFCorrelationsDPhi.so  %s %s",additionalCode.Data(),additionalHeaders.Data());


  TString macroName("");
  TString execName("");
  TString jdlName("");
  macroName = Form("%s.C", tmpName.Data());
  execName = Form("%s.sh", tmpName.Data());
  jdlName = Form("%s.jdl", tmpName.Data());

  AliAnalysisAlien *plugin = new AliAnalysisAlien();
  plugin->SetOverwriteMode();
  plugin->SetRunMode(gridMode);
     
  // Here you can set the (Ali)ROOT version you want to use
  plugin->SetAPIVersion("V1.1x");
  plugin->SetROOTVersion("v5-34-08-6");
  plugin->SetAliROOTVersion("vAN-20140525");

  plugin->SetGridDataDir(gridDir); // e.g. "/alice/sim/LHC10a6"
  plugin->SetDataPattern(pattern); //dir structure in run directory
  if (!isMC)
   plugin->SetRunPrefix("000");

  plugin->AddRunList(runNumbers);

  plugin->SetGridWorkingDir(Form("work/%s",tmpName.Data()));
  plugin->SetGridOutputDir("output"); // In this case will be $HOME/work/output

  plugin->SetAnalysisSource(additionalCode.Data());
  plugin->SetAdditionalLibs(tmpAdditionalLibs.Data());

  plugin->SetDefaultOutputs(kTRUE);
  //plugin->SetMergeExcludes("");
  plugin->SetAnalysisMacro(macroName.Data());
  plugin->SetSplitMaxInputFileNumber(maxFilesPerWorker);
  plugin->SetExecutable(execName.Data());
  plugin->SetTTL(workerTTL);
  plugin->SetInputFormat("xml-single");
  plugin->SetJDLName(jdlName.Data());
  plugin->SetPrice(1);      
  plugin->SetSplitMode("se");
  plugin->SetNtestFiles(1);

  return plugin;
}
 runEMCalAnalysis.C:1
 runEMCalAnalysis.C:2
 runEMCalAnalysis.C:3
 runEMCalAnalysis.C:4
 runEMCalAnalysis.C:5
 runEMCalAnalysis.C:6
 runEMCalAnalysis.C:7
 runEMCalAnalysis.C:8
 runEMCalAnalysis.C:9
 runEMCalAnalysis.C:10
 runEMCalAnalysis.C:11
 runEMCalAnalysis.C:12
 runEMCalAnalysis.C:13
 runEMCalAnalysis.C:14
 runEMCalAnalysis.C:15
 runEMCalAnalysis.C:16
 runEMCalAnalysis.C:17
 runEMCalAnalysis.C:18
 runEMCalAnalysis.C:19
 runEMCalAnalysis.C:20
 runEMCalAnalysis.C:21
 runEMCalAnalysis.C:22
 runEMCalAnalysis.C:23
 runEMCalAnalysis.C:24
 runEMCalAnalysis.C:25
 runEMCalAnalysis.C:26
 runEMCalAnalysis.C:27
 runEMCalAnalysis.C:28
 runEMCalAnalysis.C:29
 runEMCalAnalysis.C:30
 runEMCalAnalysis.C:31
 runEMCalAnalysis.C:32
 runEMCalAnalysis.C:33
 runEMCalAnalysis.C:34
 runEMCalAnalysis.C:35
 runEMCalAnalysis.C:36
 runEMCalAnalysis.C:37
 runEMCalAnalysis.C:38
 runEMCalAnalysis.C:39
 runEMCalAnalysis.C:40
 runEMCalAnalysis.C:41
 runEMCalAnalysis.C:42
 runEMCalAnalysis.C:43
 runEMCalAnalysis.C:44
 runEMCalAnalysis.C:45
 runEMCalAnalysis.C:46
 runEMCalAnalysis.C:47
 runEMCalAnalysis.C:48
 runEMCalAnalysis.C:49
 runEMCalAnalysis.C:50
 runEMCalAnalysis.C:51
 runEMCalAnalysis.C:52
 runEMCalAnalysis.C:53
 runEMCalAnalysis.C:54
 runEMCalAnalysis.C:55
 runEMCalAnalysis.C:56
 runEMCalAnalysis.C:57
 runEMCalAnalysis.C:58
 runEMCalAnalysis.C:59
 runEMCalAnalysis.C:60
 runEMCalAnalysis.C:61
 runEMCalAnalysis.C:62
 runEMCalAnalysis.C:63
 runEMCalAnalysis.C:64
 runEMCalAnalysis.C:65
 runEMCalAnalysis.C:66
 runEMCalAnalysis.C:67
 runEMCalAnalysis.C:68
 runEMCalAnalysis.C:69
 runEMCalAnalysis.C:70
 runEMCalAnalysis.C:71
 runEMCalAnalysis.C:72
 runEMCalAnalysis.C:73
 runEMCalAnalysis.C:74
 runEMCalAnalysis.C:75
 runEMCalAnalysis.C:76
 runEMCalAnalysis.C:77
 runEMCalAnalysis.C:78
 runEMCalAnalysis.C:79
 runEMCalAnalysis.C:80
 runEMCalAnalysis.C:81
 runEMCalAnalysis.C:82
 runEMCalAnalysis.C:83
 runEMCalAnalysis.C:84
 runEMCalAnalysis.C:85
 runEMCalAnalysis.C:86
 runEMCalAnalysis.C:87
 runEMCalAnalysis.C:88
 runEMCalAnalysis.C:89
 runEMCalAnalysis.C:90
 runEMCalAnalysis.C:91
 runEMCalAnalysis.C:92
 runEMCalAnalysis.C:93
 runEMCalAnalysis.C:94
 runEMCalAnalysis.C:95
 runEMCalAnalysis.C:96
 runEMCalAnalysis.C:97
 runEMCalAnalysis.C:98
 runEMCalAnalysis.C:99
 runEMCalAnalysis.C:100
 runEMCalAnalysis.C:101
 runEMCalAnalysis.C:102
 runEMCalAnalysis.C:103
 runEMCalAnalysis.C:104
 runEMCalAnalysis.C:105
 runEMCalAnalysis.C:106
 runEMCalAnalysis.C:107
 runEMCalAnalysis.C:108
 runEMCalAnalysis.C:109
 runEMCalAnalysis.C:110
 runEMCalAnalysis.C:111
 runEMCalAnalysis.C:112
 runEMCalAnalysis.C:113
 runEMCalAnalysis.C:114
 runEMCalAnalysis.C:115
 runEMCalAnalysis.C:116
 runEMCalAnalysis.C:117
 runEMCalAnalysis.C:118
 runEMCalAnalysis.C:119
 runEMCalAnalysis.C:120
 runEMCalAnalysis.C:121
 runEMCalAnalysis.C:122
 runEMCalAnalysis.C:123
 runEMCalAnalysis.C:124
 runEMCalAnalysis.C:125
 runEMCalAnalysis.C:126
 runEMCalAnalysis.C:127
 runEMCalAnalysis.C:128
 runEMCalAnalysis.C:129
 runEMCalAnalysis.C:130
 runEMCalAnalysis.C:131
 runEMCalAnalysis.C:132
 runEMCalAnalysis.C:133
 runEMCalAnalysis.C:134
 runEMCalAnalysis.C:135
 runEMCalAnalysis.C:136
 runEMCalAnalysis.C:137
 runEMCalAnalysis.C:138
 runEMCalAnalysis.C:139
 runEMCalAnalysis.C:140
 runEMCalAnalysis.C:141
 runEMCalAnalysis.C:142
 runEMCalAnalysis.C:143
 runEMCalAnalysis.C:144
 runEMCalAnalysis.C:145
 runEMCalAnalysis.C:146
 runEMCalAnalysis.C:147
 runEMCalAnalysis.C:148
 runEMCalAnalysis.C:149
 runEMCalAnalysis.C:150
 runEMCalAnalysis.C:151
 runEMCalAnalysis.C:152
 runEMCalAnalysis.C:153
 runEMCalAnalysis.C:154
 runEMCalAnalysis.C:155
 runEMCalAnalysis.C:156
 runEMCalAnalysis.C:157
 runEMCalAnalysis.C:158
 runEMCalAnalysis.C:159
 runEMCalAnalysis.C:160
 runEMCalAnalysis.C:161
 runEMCalAnalysis.C:162
 runEMCalAnalysis.C:163
 runEMCalAnalysis.C:164
 runEMCalAnalysis.C:165
 runEMCalAnalysis.C:166
 runEMCalAnalysis.C:167
 runEMCalAnalysis.C:168
 runEMCalAnalysis.C:169
 runEMCalAnalysis.C:170
 runEMCalAnalysis.C:171
 runEMCalAnalysis.C:172
 runEMCalAnalysis.C:173
 runEMCalAnalysis.C:174
 runEMCalAnalysis.C:175
 runEMCalAnalysis.C:176
 runEMCalAnalysis.C:177
 runEMCalAnalysis.C:178
 runEMCalAnalysis.C:179
 runEMCalAnalysis.C:180
 runEMCalAnalysis.C:181
 runEMCalAnalysis.C:182
 runEMCalAnalysis.C:183
 runEMCalAnalysis.C:184
 runEMCalAnalysis.C:185
 runEMCalAnalysis.C:186
 runEMCalAnalysis.C:187
 runEMCalAnalysis.C:188
 runEMCalAnalysis.C:189
 runEMCalAnalysis.C:190
 runEMCalAnalysis.C:191
 runEMCalAnalysis.C:192
 runEMCalAnalysis.C:193
 runEMCalAnalysis.C:194
 runEMCalAnalysis.C:195
 runEMCalAnalysis.C:196
 runEMCalAnalysis.C:197
 runEMCalAnalysis.C:198
 runEMCalAnalysis.C:199
 runEMCalAnalysis.C:200
 runEMCalAnalysis.C:201
 runEMCalAnalysis.C:202
 runEMCalAnalysis.C:203
 runEMCalAnalysis.C:204
 runEMCalAnalysis.C:205
 runEMCalAnalysis.C:206
 runEMCalAnalysis.C:207
 runEMCalAnalysis.C:208
 runEMCalAnalysis.C:209
 runEMCalAnalysis.C:210
 runEMCalAnalysis.C:211
 runEMCalAnalysis.C:212
 runEMCalAnalysis.C:213
 runEMCalAnalysis.C:214
 runEMCalAnalysis.C:215
 runEMCalAnalysis.C:216
 runEMCalAnalysis.C:217
 runEMCalAnalysis.C:218
 runEMCalAnalysis.C:219
 runEMCalAnalysis.C:220
 runEMCalAnalysis.C:221
 runEMCalAnalysis.C:222
 runEMCalAnalysis.C:223
 runEMCalAnalysis.C:224
 runEMCalAnalysis.C:225
 runEMCalAnalysis.C:226
 runEMCalAnalysis.C:227
 runEMCalAnalysis.C:228
 runEMCalAnalysis.C:229
 runEMCalAnalysis.C:230
 runEMCalAnalysis.C:231
 runEMCalAnalysis.C:232
 runEMCalAnalysis.C:233
 runEMCalAnalysis.C:234
 runEMCalAnalysis.C:235
 runEMCalAnalysis.C:236
 runEMCalAnalysis.C:237
 runEMCalAnalysis.C:238
 runEMCalAnalysis.C:239
 runEMCalAnalysis.C:240
 runEMCalAnalysis.C:241
 runEMCalAnalysis.C:242
 runEMCalAnalysis.C:243
 runEMCalAnalysis.C:244
 runEMCalAnalysis.C:245
 runEMCalAnalysis.C:246
 runEMCalAnalysis.C:247
 runEMCalAnalysis.C:248
 runEMCalAnalysis.C:249
 runEMCalAnalysis.C:250
 runEMCalAnalysis.C:251
 runEMCalAnalysis.C:252
 runEMCalAnalysis.C:253
 runEMCalAnalysis.C:254
 runEMCalAnalysis.C:255
 runEMCalAnalysis.C:256
 runEMCalAnalysis.C:257
 runEMCalAnalysis.C:258
 runEMCalAnalysis.C:259
 runEMCalAnalysis.C:260
 runEMCalAnalysis.C:261
 runEMCalAnalysis.C:262
 runEMCalAnalysis.C:263
 runEMCalAnalysis.C:264
 runEMCalAnalysis.C:265
 runEMCalAnalysis.C:266
 runEMCalAnalysis.C:267
 runEMCalAnalysis.C:268
 runEMCalAnalysis.C:269
 runEMCalAnalysis.C:270
 runEMCalAnalysis.C:271
 runEMCalAnalysis.C:272
 runEMCalAnalysis.C:273
 runEMCalAnalysis.C:274
 runEMCalAnalysis.C:275
 runEMCalAnalysis.C:276
 runEMCalAnalysis.C:277
 runEMCalAnalysis.C:278
 runEMCalAnalysis.C:279
 runEMCalAnalysis.C:280
 runEMCalAnalysis.C:281
 runEMCalAnalysis.C:282
 runEMCalAnalysis.C:283
 runEMCalAnalysis.C:284
 runEMCalAnalysis.C:285
 runEMCalAnalysis.C:286
 runEMCalAnalysis.C:287
 runEMCalAnalysis.C:288
 runEMCalAnalysis.C:289
 runEMCalAnalysis.C:290
 runEMCalAnalysis.C:291
 runEMCalAnalysis.C:292
 runEMCalAnalysis.C:293
 runEMCalAnalysis.C:294
 runEMCalAnalysis.C:295
 runEMCalAnalysis.C:296
 runEMCalAnalysis.C:297
 runEMCalAnalysis.C:298
 runEMCalAnalysis.C:299
 runEMCalAnalysis.C:300
 runEMCalAnalysis.C:301
 runEMCalAnalysis.C:302
 runEMCalAnalysis.C:303
 runEMCalAnalysis.C:304
 runEMCalAnalysis.C:305
 runEMCalAnalysis.C:306
 runEMCalAnalysis.C:307
 runEMCalAnalysis.C:308
 runEMCalAnalysis.C:309
 runEMCalAnalysis.C:310
 runEMCalAnalysis.C:311
 runEMCalAnalysis.C:312
 runEMCalAnalysis.C:313
 runEMCalAnalysis.C:314
 runEMCalAnalysis.C:315
 runEMCalAnalysis.C:316
 runEMCalAnalysis.C:317
 runEMCalAnalysis.C:318
 runEMCalAnalysis.C:319
 runEMCalAnalysis.C:320
 runEMCalAnalysis.C:321
 runEMCalAnalysis.C:322
 runEMCalAnalysis.C:323
 runEMCalAnalysis.C:324
 runEMCalAnalysis.C:325
 runEMCalAnalysis.C:326
 runEMCalAnalysis.C:327
 runEMCalAnalysis.C:328
 runEMCalAnalysis.C:329
 runEMCalAnalysis.C:330
 runEMCalAnalysis.C:331
 runEMCalAnalysis.C:332
 runEMCalAnalysis.C:333
 runEMCalAnalysis.C:334
 runEMCalAnalysis.C:335
 runEMCalAnalysis.C:336
 runEMCalAnalysis.C:337
 runEMCalAnalysis.C:338
 runEMCalAnalysis.C:339
 runEMCalAnalysis.C:340
 runEMCalAnalysis.C:341
 runEMCalAnalysis.C:342
 runEMCalAnalysis.C:343
 runEMCalAnalysis.C:344
 runEMCalAnalysis.C:345
 runEMCalAnalysis.C:346
 runEMCalAnalysis.C:347
 runEMCalAnalysis.C:348
 runEMCalAnalysis.C:349
 runEMCalAnalysis.C:350
 runEMCalAnalysis.C:351