ROOT logo
// runEMCalJetAnalysis.C
// =====================
// This macro can be used to run a jet analysis within the EMCal 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

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

AliAnalysisGrid* CreateAlienHandler(const char* uniqueName, const char* gridDir, const char* gridMode, const char* runNumbers, const Int_t nrunspermaster, 
                                     const char* pattern, TString additionalCode, TString additionalHeaders, Int_t maxFilesPerWorker, 
                                     Int_t workerTTL, Bool_t isMC);
                                    
//______________________________________________________________________________
void AnalysisTrainCorrJetsLocal (
         const char*    dataType            = "AOD",                       // set the analysis type, AOD, ESD or sESD
         Bool_t         useGrid             = kTRUE,                      // local or grid
	 TString localfilename = "/data/Work/jets/testEMCalJetFramework/ptJdistrAug2nd/setMCtasks/map/inheritDev/files_LHC10f7a.txt",
         const char*    gridMode            = "test",                      // set the grid run mode (can be "full", "test", "offline", "submit" or "terminate")
         const char*    pattern             = "*AOD136/*AliAOD.root", //"*/*/AliAOD.root" "*ESDs/pass1/AOD106/*AliAOD.root",    // file pattern (here one can specify subdirs like passX etc.) (used on grid)
         const char*    gridDir             = "/alice/sim/LHC10f7a",   // /alice/data/2011/LHC11d /alice/sim/2012/LHC12f2b   dir on alien, where the files live (used on grid)
         const char*    runNumbers          = /*114931 */" 115186 115193 115393 115401 115414 116102 116288 116402 116403 116562 116571 116574 116643 116645 117048 117050 117052 117053 117054 117059 117060 117063 117065 117077 117086 117092 117099 117109 117112 117116 117220 117222 119159 119161 119163 119841 119842 119844 119845 119846 119849 119853 119856 119859 119862 120067 120069 120072 120073 120076 120079 120244 120503 120504 120505 120616 120617 120671 120741 120750 120758 120820 120821 120822 120823 120824 120825 120829 122374 122375 124187 124191 124355 124358 124362 124367 124378 124380 124381 124604 124605 124606 124607 124608 124702 124746 124750 124751 125023 125085 125097 125100 125101 125133 125134 125139 125140 125156 125186 125296 125628 125630 125632 125633 125842 125843 125844 125847 125848 125849 125850 125851 125855 126004 126007 126008 126073 126078 126081 126082 126088 126090 126097 126158 126160 126167 126168 126283 126284 126285 126350 126351 126352 126359 126403 126404 126405 126406 126407 126408 126409 126422 126424 126425 126432 126437 127719 127724 127729 127730 127814 127819 127930 127940 128263 128778 128913 129536 129599 129639 129641 129654 129659 129666 129667 129723 129725 129726 129729 129735 129736 129738 129742 129744 129959 129960 129961 129962 129966 129983 130149 130151 130157 130158 130172 130178 130179 130342 130343 130354 130356 130358 130360 130375 130479 130480 130481 130517 130519 130520 130524 130526 130601 130608 130620 130621 130623 130628 130696 130704 130793 130795 130798 130799 130834 130840 130842 130844 130847 130848",             // considered run numbers (used on grid) /*LHC12g 188359 188362, LHC11a 146860 146859*/ /*LHC12f2b 158285 159582 */
	 const Int_t nrunspermaster= 100,
         UInt_t         numLocalFiles       = 10,                          // number of files analyzed locally  
         const char*    runPeriod           = "LHC10f7a",                    // set the run period (used on grid)
         const char*    uniqueName          = "DJetNewCodeMCSandBchJ",     // 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           = kFALSE,                      // trigger, if tender task should be used
         Bool_t         isMC                = kTRUE,                      // trigger, if MC handler should be used
	 Bool_t         isReco                = kTRUE,
	 Bool_t         isMap                = kTRUE,
         // 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   = 20,
         Int_t          workerTTL           = 86000,
	 Int_t          nfiletestmode       = 3
         )
{

  // Some pre-settings and constants
  TStopwatch watch;
  watch.Start();

  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 = localfilename;
    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";

  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/FlavourJetTasks/macros/AddTasksFlavourJet.C");
  //List of arguments:

  // const Int_t iCandType = 1 /*0 = D0, 1=Dstar...*/,
  //  const TString sCutFile = "cutsHF/D0toKpiCutsppRecVtxNoPileupRejNoEMCAL.root",
  //  const Double_t dJetPtCut   = 1.,
  //  const Double_t dJetAreaCut = 0.,
  //  const char *acctype = "TPC",
  //  const TString sRunPeriod = "LHC10b",
  //  const Int_t    uBeamType = 0,
  //  const UInt_t uTriggerMask = AliVEvent::kMB, /*for jets; the D mesons trigger is defined in the cut object*/
  //  const Bool_t bIsMC = kFALSE,
  //  const Bool_t bIsReco = kFALSE,
  //  const Bool_t bIsMap = kFALSE,
  //  TString sText=""/*completes the name of the candidate task lists*/

  //AddTasksFlavourJet(1,"/data/Work/jets/testEMCalJetFramework/CutFilesMB/DStartoKpipiCuts_new.root",10.,0.,"TPC",runPeriod,0,pSel,isMC,isReco,isMap,"");
  AddTasksFlavourJet(1,"/data/Work/jets/testEMCalJetFramework/CutFilesMB/DStartoKpipiCuts.root",5.,0.,"TPC",runPeriod,0,pSel,isMC,isReco,isMap,"");

  // 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);
  }

  if(gridMode=="full") mgr->SetUseProgressBar(1, 25);
        
  if (!mgr->InitAnalysis()) 
    return;
  mgr->PrintStatus();

  if (useGrid) 
  {  // GRID CALCULATION

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

    mgr->SetGridHandler(plugin);

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

    TChain* chain = 0;
    if (usedData == "AOD") 
    {
      Printf("Run Create AOD Chain");
      gROOT->LoadMacro("/data/Work/jets/testEMCalJetFramework/AODchainWithFriend/CreateAODChain.C");
      chain = CreateAODChain(localFiles.Data(), numLocalFiles,0,kTRUE,kTRUE);
      //Printf("Chain Friend has %d entries", ((TTree*)chain->GetFriend())->GetEntriesFast());
    }
    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(10);
    mgr->StartAnalysis("local", chain);
  }
  watch.Stop();
  watch.Print();
}

//______________________________________________________________________________
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("libPWGTools.so");
  //gSystem->Load("libPWGPP.so");
  gSystem->Load("libPWGHFbase");
  //gSystem->Load("libPWGDQdielectron");
  //gSystem->Load("libPWGHFhfe");
  gSystem->Load("libPWGflowBase.so");
  gSystem->Load("libPWGflowTasks.so");
  gSystem->Load("libPWGHFvertexingHF");
  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("libESDfilter");
  gSystem->Load("libPWGEMCAL");
  gSystem->Load("libPWGGAEMCALTasks");
  //gSystem->Load("libPWGCFCorrelationsBase");
  //gSystem->Load("libPWGCFCorrelationsDPhi");

  //load CGAL, Fastjet3 
  //gSystem->Load("libCGAL");
  gSystem->Load("libfastjet");
  gSystem->Load("libfastjet");
  gSystem->Load("libsiscone");
  gSystem->Load("libsiscone_spherical");
  gSystem->Load("libfastjetplugins");
  gSystem->Load("libfastjettools");
  gSystem->Load("libfastjetcontribfragile");
  gSystem->Load("libJETAN");
  gSystem->Load("libFASTJETAN");
  gSystem->Load("libPWGGAEMCALTasks");

  gSystem->Load("libPWGJEEMCALJetTasks");
  gSystem->Load("libPWGJEFlavourJetTasks");


  // include paths
  gSystem->AddIncludePath("-Wno-deprecated");
  gSystem->AddIncludePath("-I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/EMCAL -I$ALICE_ROOT/PWG/EMCAL -I$ALICE_ROOT/PWGJE/EMCALJetTasks");
  gSystem->AddIncludePath(" -I$ALICE_ROOT/PWGHF/ -I$ALICE_ROOT/PWGHF/base -I$ALICE_ROOT/PWGHF/vertexingHF -I$ALICE_ROOT/PWGJE/FlavourJetTasks");
  gSystem->AddIncludePath("-I$ALICE_ROOT/PWGDQ/dielectron -I$ALICE_ROOT/PWGHF/hfe");
  gSystem->AddIncludePath("-I$ALICE_ROOT/JETAN -I$ALICE_ROOT/JETAN/fastjet");
}

AliAnalysisGrid* CreateAlienHandler(const char* uniqueName, const char* gridDir, const char* gridMode, const char* runNumbers, const Int_t nrunspermaster,
                                     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();
  }else tmpName +="_20130412_122423";
  */
  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 libESDfilter.so libAOD.so libOADB.so libANALYSIS.so libCDB.so libRAWDatabase.so libSTEER.so libANALYSISalice.so libCORRFW.so libPWGTools.so libPWGHFbase.so libPWGflowBase.so libPWGflowTasks.so libPWGHFvertexingHF.so libEMCALUtils.so libEMCALraw.so libEMCALbase.so libTENDER.so libPWGEMCAL.so libPWGGAEMCALTasks.so libPWGTools.so libCGAL.so libfastjet.so libsiscone.so libsiscone_spherical.so libfastjetplugins.so libfastjettools.so libfastjetcontribfragile.so libJETAN.so libFASTJETAN.so  libPWGJE.so libPWGJEEMCALJetTasks.so libPWGJEFlavourJetTasks.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-20141005");

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

  plugin->AddRunList(runNumbers);
  plugin->SetNrunsPerMaster(nrunspermaster);

  plugin->SetGridWorkingDir(Form("%s",tmpName.Data()));
  plugin->SetGridOutputDir("output"); 

  plugin->SetAnalysisSource(additionalCode.Data());
  plugin->SetAdditionalLibs(tmpAdditionalLibs.Data());
  plugin->AddIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/STEER/STEER -I$ALICE_ROOT/STEER/STEERBase -I$ALICE_ROOT/STEER/ESD -I$ALICE_ROOT/STEER/AOD -I$ALICE_ROOT/ANALYSIS  -I$ALICE_ROOT/OADB -I$ALICE_ROOT/PWGHF -I$ALICE_ROOT/PWGHF/base -I$ALICE_ROOT/PWGHF/vertexingHF -I$ALICE_ROOT/PWG/FLOW/Base -I$ALICE_ROOT/PWG/FLOW/Tasks  -I$ALICE_ROOT/PWGJE  -I$ALICE_ROOT/JETAN -I$ALICE_ROOT/PWGJE/EMCALJetTasks -I$ALICE_ROOT/PWGJE/FlavourJetTasks -g");
  plugin->AddExternalPackage("boost::v1_53_0");
  plugin->AddExternalPackage("cgal::v4.4");
  plugin->AddExternalPackage("fastjet::v3.0.6_1.012");

  plugin->SetDefaultOutputs(kTRUE);
  // merging via jdl
  plugin->SetMergeViaJDL(kTRUE);
  plugin->SetOneStageMerging(kFALSE);
  plugin->SetMaxMergeStages(2);

  //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");

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