ROOT logo
// $Id$

void runJetAna(
  const char     *datatype     = "aod",            // aod, esd, sesd
  const char     *runtype      = "local",          // local or grid (when local gridmode specifies input txt file)
  const char     *gridmode     = "aod_files.txt",  // grid mode (can be "full", "test", "offline", "submit" or "terminate")
  const char     *taskname     = "JetAna")         // name of grid generated macros
{

  enum eDataType { kAod, kEsd, kSesd };
  enum eRunType  { kLocal, kGrid };

  eRunType rType = kLocal;
  if (strcmp(runtype, "grid")==0) 
    rType = kGrid;
  eDataType dType = kAod;
  if (strcmp(datatype, "esd")==0)
    dType = kEsd;
  else if (strcmp(datatype, "sesd")==0)
    dType = kSesd;

  // load the libraries
  LoadLibs();
   
  // analysis manager
  AliAnalysisManager* mgr = new AliAnalysisManager(taskname);

  if (dType == kAod) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddAODHandler.C");
    AliAODInputHandler* inH = AddAODHandler();
  } else {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddESDHandler.C");
    AliESDInputHandler* inH = AddESDHandler();
  }

  if (0) {
    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/train/AddAODOutputHandler.C");
    AliAODHandler* aodoutHandler = AddAODOutputHandler();
  }

  // PSel task
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPhysicsSelection.C");
  AliPhysicsSelectionTask *physSelTask = AddTaskEmcalPhysicsSelection(kTRUE, kTRUE, 
                                                                      AliVEvent::kAnyINT /*| AliVEvent::kCentral| AliVEvent::kSemiCentral*/,
                                                                      10,10);

  // Setup task
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSetup.C");
  AliEmcalSetupTask *setupTask = AddTaskEmcalSetup();

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

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

  TString inputTracks("tracks");
  if (dType == kEsd) {
    inputTracks = "HybridTracks";

    // Hybrid tracks maker for ESD
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalEsdTpcTrack.C");
    AliEmcalEsdTpcTrackTask *hybTask = AddTaskEmcalEsdTpcTrack(inputTracks);

    // Track propagator
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTrackPropagator.C");
    AliEmcalTrackPropagatorTask *propTask = AddTaskEmcalTrackPropagator(inputTracks);
  }
  else if (dType == kSesd) {
    inputTracks = "Tracks";
  }

  // PicoTracks maker
  TString tracksName("PicoTracks");
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
  AliEmcalPicoTrackMaker *pTrackTask = AddTaskEmcalPicoTrackMaker(tracksName, inputTracks, "LHC11h");

  TString clusName("CaloClusters");
  if (dType == kAod)
    clusName = "caloClusters";

  // EmcalParticle maker
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalParticleMaker.C");
  AliEmcalParticleMaker *emcalParts = 
    AddTaskEmcalParticleMaker(tracksName,clusName,"EmcalTracks","EmcalClusters");

  // Cluster-track matcher
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalClusTrackMatcher.C");
  AliEmcalClusTrackMatcherTask *matcherTask = AddTaskEmcalClusTrackMatcher("EmcalTracks","EmcalClusters");

  // Hadronic correction task
  TString clusNameCorr(Form("%sCorr",clusName.Data()));
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskHadCorr.C");
  AliHadCorrTask *hcorr = AddTaskHadCorr("EmcalTracks","EmcalClusters",clusNameCorr);

  if (0) {
  // Embedding task
  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetEmbedding.C");
  AliJetEmbeddingTask* jemb = AddTaskJetEmbedding(tracksName, clusNameCorr, "JetEmbeddingTask", 10, 10, -0.9, 0.9);

  // Jet finder
  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
  AliEmcalJetTask *jetTask = AddTaskEmcalJet(tracksName, clusNameCorr);

  // Scale task
  gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskScale.C");
  AliAnalysisTaskScale *scaleTask = AddTaskScale(tracksName, clusNameCorr);
  }
  if (1) {
    UInt_t val = AliVEvent::kAny;
    //val = AliVEvent::kAnyINT | AliVEvent::kCentral| AliVEvent::kSemiCentral;
    //val = AliVEvent::kEMCEGA;
    //val = AliVEvent::kEMCEJE;
    val = AliEmcalPhysicsSelection::kEmcalHT;

    TObjArray *toptasks = mgr->GetTasks();
    for (Int_t i=0; i<toptasks->GetEntries(); ++i) {
      AliAnalysisTaskSE *task = dynamic_cast<AliAnalysisTaskSE*>(toptasks->At(i));
      if (!task)
        continue;
      TString name(task->ClassName());
      if (name.Contains("PhysicsSelection"))
        continue;
      ::Info("setPSel", "Set physics selection for %s (%s)", task->GetName(), task->ClassName());
      task->SelectCollisionCandidates(val);
    }
  }

  mgr->SetDebugLevel(0);
  mgr->SetUseProgressBar(1, 25);

  if (!mgr->InitAnalysis()) 
    return;
  mgr->PrintStatus();
  
  if (rType == kGrid) {
    mgr->StartAnalysis(gridmode);
  } else {
    const char *txtfile = gridmode;
    if (dType == kAod) {
      gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/CreateAODChain.C");
      chain = CreateAODChain(txtfile, 5);
    } else {
      gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/CreateESDChain.C");
      TChain* chain = CreateESDChain(txtfile, 5);
    }
    mgr->StartAnalysis("local", chain);
  }

  return;
}

void LoadLibs()
{
  // load root libraries
  gSystem->Load("libTree");
  gSystem->Load("libVMC");
  gSystem->Load("libGui");
  gSystem->Load("libXMLParser");
  gSystem->Load("libMinuit");
  gSystem->Load("libMinuit2");
  gSystem->Load("libProof");
  gSystem->Load("libGeom");
  gSystem->Load("libPhysics");

  // load aliroot libraries
  gSystem->Load("libSTEERBase");
  gSystem->Load("libESD");
  gSystem->Load("libAOD");
  gSystem->Load("libOADB");
  gSystem->Load("libANALYSIS");
  gSystem->Load("libANALYSISalice");
  gSystem->Load("libCDB");
  gSystem->Load("libRAWDatabase");
  gSystem->Load("libSTEER");
  gSystem->Load("libCORRFW");
  gSystem->Load("libEMCALUtils");
  gSystem->Load("libPHOSUtils");
  gSystem->Load("libPWGCaloTrackCorrBase");
  gSystem->Load("libPWGGACaloTrackCorrelations");
  gSystem->Load("libPWGGACaloTasks");
  gSystem->Load("libEMCALraw");
  gSystem->Load("libEMCALbase");
  gSystem->Load("libEMCALrec");
  gSystem->Load("libTRDbase");
  gSystem->Load("libVZERObase");
  gSystem->Load("libVZEROrec");
  gSystem->Load("libTENDER");   
  gSystem->Load("libTENDERSupplies"); 
 
  // load fastjet libraries
  gSystem->Load("libJETAN");
  gSystem->Load("/usr/lib64/libCGAL.so");
  gSystem->Load("$FASTJET/lib/libfastjet");
  gSystem->Load("$FASTJET/lib/libsiscone");
  gSystem->Load("$FASTJET/lib/libSISConePlugin");
  gSystem->Load("libFASTJETAN");
  gSystem->Load("libPWGEMCAL");
  gSystem->Load("libPWGGAEMCALTasks");
  gSystem->Load("libPWGJEEMCALJetTasks");
}

AliAnalysisGrid* CreateAlienHandler(const char *taskname, 
                                    const char *gridmode, 
                                    const char *proofcluster, 
                                    const char *proofdataset)
{
  // TODO
  return 0;
}

 runJetAna.C:1
 runJetAna.C:2
 runJetAna.C:3
 runJetAna.C:4
 runJetAna.C:5
 runJetAna.C:6
 runJetAna.C:7
 runJetAna.C:8
 runJetAna.C:9
 runJetAna.C:10
 runJetAna.C:11
 runJetAna.C:12
 runJetAna.C:13
 runJetAna.C:14
 runJetAna.C:15
 runJetAna.C:16
 runJetAna.C:17
 runJetAna.C:18
 runJetAna.C:19
 runJetAna.C:20
 runJetAna.C:21
 runJetAna.C:22
 runJetAna.C:23
 runJetAna.C:24
 runJetAna.C:25
 runJetAna.C:26
 runJetAna.C:27
 runJetAna.C:28
 runJetAna.C:29
 runJetAna.C:30
 runJetAna.C:31
 runJetAna.C:32
 runJetAna.C:33
 runJetAna.C:34
 runJetAna.C:35
 runJetAna.C:36
 runJetAna.C:37
 runJetAna.C:38
 runJetAna.C:39
 runJetAna.C:40
 runJetAna.C:41
 runJetAna.C:42
 runJetAna.C:43
 runJetAna.C:44
 runJetAna.C:45
 runJetAna.C:46
 runJetAna.C:47
 runJetAna.C:48
 runJetAna.C:49
 runJetAna.C:50
 runJetAna.C:51
 runJetAna.C:52
 runJetAna.C:53
 runJetAna.C:54
 runJetAna.C:55
 runJetAna.C:56
 runJetAna.C:57
 runJetAna.C:58
 runJetAna.C:59
 runJetAna.C:60
 runJetAna.C:61
 runJetAna.C:62
 runJetAna.C:63
 runJetAna.C:64
 runJetAna.C:65
 runJetAna.C:66
 runJetAna.C:67
 runJetAna.C:68
 runJetAna.C:69
 runJetAna.C:70
 runJetAna.C:71
 runJetAna.C:72
 runJetAna.C:73
 runJetAna.C:74
 runJetAna.C:75
 runJetAna.C:76
 runJetAna.C:77
 runJetAna.C:78
 runJetAna.C:79
 runJetAna.C:80
 runJetAna.C:81
 runJetAna.C:82
 runJetAna.C:83
 runJetAna.C:84
 runJetAna.C:85
 runJetAna.C:86
 runJetAna.C:87
 runJetAna.C:88
 runJetAna.C:89
 runJetAna.C:90
 runJetAna.C:91
 runJetAna.C:92
 runJetAna.C:93
 runJetAna.C:94
 runJetAna.C:95
 runJetAna.C:96
 runJetAna.C:97
 runJetAna.C:98
 runJetAna.C:99
 runJetAna.C:100
 runJetAna.C:101
 runJetAna.C:102
 runJetAna.C:103
 runJetAna.C:104
 runJetAna.C:105
 runJetAna.C:106
 runJetAna.C:107
 runJetAna.C:108
 runJetAna.C:109
 runJetAna.C:110
 runJetAna.C:111
 runJetAna.C:112
 runJetAna.C:113
 runJetAna.C:114
 runJetAna.C:115
 runJetAna.C:116
 runJetAna.C:117
 runJetAna.C:118
 runJetAna.C:119
 runJetAna.C:120
 runJetAna.C:121
 runJetAna.C:122
 runJetAna.C:123
 runJetAna.C:124
 runJetAna.C:125
 runJetAna.C:126
 runJetAna.C:127
 runJetAna.C:128
 runJetAna.C:129
 runJetAna.C:130
 runJetAna.C:131
 runJetAna.C:132
 runJetAna.C:133
 runJetAna.C:134
 runJetAna.C:135
 runJetAna.C:136
 runJetAna.C:137
 runJetAna.C:138
 runJetAna.C:139
 runJetAna.C:140
 runJetAna.C:141
 runJetAna.C:142
 runJetAna.C:143
 runJetAna.C:144
 runJetAna.C:145
 runJetAna.C:146
 runJetAna.C:147
 runJetAna.C:148
 runJetAna.C:149
 runJetAna.C:150
 runJetAna.C:151
 runJetAna.C:152
 runJetAna.C:153
 runJetAna.C:154
 runJetAna.C:155
 runJetAna.C:156
 runJetAna.C:157
 runJetAna.C:158
 runJetAna.C:159
 runJetAna.C:160
 runJetAna.C:161
 runJetAna.C:162
 runJetAna.C:163
 runJetAna.C:164
 runJetAna.C:165
 runJetAna.C:166
 runJetAna.C:167
 runJetAna.C:168
 runJetAna.C:169
 runJetAna.C:170
 runJetAna.C:171
 runJetAna.C:172
 runJetAna.C:173
 runJetAna.C:174
 runJetAna.C:175
 runJetAna.C:176
 runJetAna.C:177
 runJetAna.C:178
 runJetAna.C:179
 runJetAna.C:180
 runJetAna.C:181
 runJetAna.C:182
 runJetAna.C:183
 runJetAna.C:184
 runJetAna.C:185
 runJetAna.C:186
 runJetAna.C:187
 runJetAna.C:188
 runJetAna.C:189
 runJetAna.C:190
 runJetAna.C:191
 runJetAna.C:192
 runJetAna.C:193
 runJetAna.C:194
 runJetAna.C:195
 runJetAna.C:196
 runJetAna.C:197
 runJetAna.C:198
 runJetAna.C:199
 runJetAna.C:200
 runJetAna.C:201
 runJetAna.C:202
 runJetAna.C:203
 runJetAna.C:204
 runJetAna.C:205
 runJetAna.C:206
 runJetAna.C:207
 runJetAna.C:208
 runJetAna.C:209
 runJetAna.C:210
 runJetAna.C:211
 runJetAna.C:212
 runJetAna.C:213
 runJetAna.C:214
 runJetAna.C:215
 runJetAna.C:216
 runJetAna.C:217
 runJetAna.C:218