ROOT logo
// $Id$

AliAnalysisTaskSE* AddTaskJetPreparation(
  const char*    periodstr          = "LHC11h",
  const char*    pTracksName        = "PicoTracks",
  const char*    usedMCParticles    = "MCParticlesSelected",
  const char*    usedClusters       = "CaloClusters",
  const char*    outClusName        = "CaloClustersCorr",
  Double_t hadcorr                  = 2.0,
  Double_t Eexcl                    = 0.00,
  Double_t phiMatch                 = 0.03,
  Double_t etaMatch                 = 0.015,
  Double_t minPtEt                  = 0.15,
  UInt_t   pSel                     = AliVEvent::kAny,
  Bool_t   trackclus                = kTRUE,
  Bool_t   doHistos                 = kFALSE,
  Bool_t   makePicoTracks           = kTRUE,
  Bool_t   makeTrigger              = kTRUE,
  Bool_t   isEmcalTrain             = kFALSE,
  Double_t trackeff                 = 1.0,
  Bool_t   doAODTrackProp           = kTRUE,
  Bool_t   modifyMatchObjs          = kTRUE,
  Bool_t   doTriggerQA              = kFALSE
)
{
  // Add task macros for all jet related helper tasks.

  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr)
  {
    Error("AddTaskJetPreparation","No analysis manager found.");
    return NULL;
  }

  AliVEventHandler *evhand = mgr->GetInputEventHandler();
  if (!evhand) {
    Error("AddTaskJetPreparation", "This task requires an input event handler");
    return NULL;
  }

  // Set trackcuts according to period. Every period used should be defined here
  TString period(periodstr);
  TString clusterColName(usedClusters);
  TString particleColName(usedMCParticles);
  TString picoTracksName(pTracksName);

  TString dType("ESD");
  if (!evhand->InheritsFrom("AliESDInputHandler")) 
    dType = "AOD";
  if ((dType == "AOD") && (clusterColName == "CaloClusters"))
    clusterColName = "caloClusters";
  if ((dType == "ESD") && (clusterColName == "caloClusters"))
    clusterColName = "CaloClusters";

  //----------------------- Trigger Maker -----------------------------------------------------
  if (makeTrigger) {
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTriggerMakerJSON.C");
    AliEMCALConfiguration emctriggerconf("triggerMakerConf");
    emctriggerconf.AddParam("doQA", new AliJSONBool(doTriggerQA));
    AliEmcalTriggerMaker *emcalTriggers = AddTaskEmcalTriggerMakerJSON(emctriggerconf.CreateJSONString());
    emcalTriggers->SelectCollisionCandidates(pSel);
  }

  //----------------------- Track Matching tasks -----------------------------------------------------
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskMatchingChain.C");
  AliEmcalClusTrackMatcherTask *emcalClus =  AddTaskMatchingChain(periodstr,pSel,
								  clusterColName,
								  trackeff,doAODTrackProp,
								  0.1,modifyMatchObjs,doHistos);
  
  //hard coded names of AliEmcalParticle strings to coincide with AddTaskClusTrackMatching
  TString inputTracks = "AODFilterTracks";
  if (dType == "ESD") inputTracks = "ESDFilterTracks";
  TString emctracks = Form("EmcalTracks_%s",inputTracks.Data());
  TString emcclusters = Form("EmcalClusters_%s",clusterColName.Data());
  Printf("1-- inputTracks: %s, emcclusters: %s, emctracks: %s",inputTracks.Data(),emcclusters.Data(),emctracks.Data());
  if(makePicoTracks) {
    //----------------------- Produce PicoTracks -----------------------------------------------------
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
    AliEmcalPicoTrackMaker *pTrackTask = AddTaskEmcalPicoTrackMaker(picoTracksName, inputTracks);
    //    pTrackTask->SetTrackEfficiency(trackeff); //now done in Esd/AodFilter
    pTrackTask->SelectCollisionCandidates(pSel);
  }

  //----------------------- Hadronic Correction -----------------------------------------------------
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskHadCorr.C"); 
  AliHadCorrTask *hCorr = AddTaskHadCorr(emctracks,emcclusters,outClusName,hadcorr,
					 minPtEt,phiMatch,etaMatch,Eexcl,trackclus,doHistos);
  hCorr->SelectCollisionCandidates(pSel);
  if (isEmcalTrain) {
    if (doHistos)
      RequestMemory(hCorr,500*1024);
  }

  // Produce MC particles
  if(particleColName != "") {
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskMCTrackSelector.C");
    AliEmcalMCTrackSelector *mcPartTask = AddTaskMCTrackSelector(particleColName, kFALSE, kFALSE);
    mcPartTask->SelectCollisionCandidates(pSel);
  }

  // Return one task that represents the jet preparation on LEGO trains
  return hCorr;
}
 AddTaskJetPreparationJSON.C:1
 AddTaskJetPreparationJSON.C:2
 AddTaskJetPreparationJSON.C:3
 AddTaskJetPreparationJSON.C:4
 AddTaskJetPreparationJSON.C:5
 AddTaskJetPreparationJSON.C:6
 AddTaskJetPreparationJSON.C:7
 AddTaskJetPreparationJSON.C:8
 AddTaskJetPreparationJSON.C:9
 AddTaskJetPreparationJSON.C:10
 AddTaskJetPreparationJSON.C:11
 AddTaskJetPreparationJSON.C:12
 AddTaskJetPreparationJSON.C:13
 AddTaskJetPreparationJSON.C:14
 AddTaskJetPreparationJSON.C:15
 AddTaskJetPreparationJSON.C:16
 AddTaskJetPreparationJSON.C:17
 AddTaskJetPreparationJSON.C:18
 AddTaskJetPreparationJSON.C:19
 AddTaskJetPreparationJSON.C:20
 AddTaskJetPreparationJSON.C:21
 AddTaskJetPreparationJSON.C:22
 AddTaskJetPreparationJSON.C:23
 AddTaskJetPreparationJSON.C:24
 AddTaskJetPreparationJSON.C:25
 AddTaskJetPreparationJSON.C:26
 AddTaskJetPreparationJSON.C:27
 AddTaskJetPreparationJSON.C:28
 AddTaskJetPreparationJSON.C:29
 AddTaskJetPreparationJSON.C:30
 AddTaskJetPreparationJSON.C:31
 AddTaskJetPreparationJSON.C:32
 AddTaskJetPreparationJSON.C:33
 AddTaskJetPreparationJSON.C:34
 AddTaskJetPreparationJSON.C:35
 AddTaskJetPreparationJSON.C:36
 AddTaskJetPreparationJSON.C:37
 AddTaskJetPreparationJSON.C:38
 AddTaskJetPreparationJSON.C:39
 AddTaskJetPreparationJSON.C:40
 AddTaskJetPreparationJSON.C:41
 AddTaskJetPreparationJSON.C:42
 AddTaskJetPreparationJSON.C:43
 AddTaskJetPreparationJSON.C:44
 AddTaskJetPreparationJSON.C:45
 AddTaskJetPreparationJSON.C:46
 AddTaskJetPreparationJSON.C:47
 AddTaskJetPreparationJSON.C:48
 AddTaskJetPreparationJSON.C:49
 AddTaskJetPreparationJSON.C:50
 AddTaskJetPreparationJSON.C:51
 AddTaskJetPreparationJSON.C:52
 AddTaskJetPreparationJSON.C:53
 AddTaskJetPreparationJSON.C:54
 AddTaskJetPreparationJSON.C:55
 AddTaskJetPreparationJSON.C:56
 AddTaskJetPreparationJSON.C:57
 AddTaskJetPreparationJSON.C:58
 AddTaskJetPreparationJSON.C:59
 AddTaskJetPreparationJSON.C:60
 AddTaskJetPreparationJSON.C:61
 AddTaskJetPreparationJSON.C:62
 AddTaskJetPreparationJSON.C:63
 AddTaskJetPreparationJSON.C:64
 AddTaskJetPreparationJSON.C:65
 AddTaskJetPreparationJSON.C:66
 AddTaskJetPreparationJSON.C:67
 AddTaskJetPreparationJSON.C:68
 AddTaskJetPreparationJSON.C:69
 AddTaskJetPreparationJSON.C:70
 AddTaskJetPreparationJSON.C:71
 AddTaskJetPreparationJSON.C:72
 AddTaskJetPreparationJSON.C:73
 AddTaskJetPreparationJSON.C:74
 AddTaskJetPreparationJSON.C:75
 AddTaskJetPreparationJSON.C:76
 AddTaskJetPreparationJSON.C:77
 AddTaskJetPreparationJSON.C:78
 AddTaskJetPreparationJSON.C:79
 AddTaskJetPreparationJSON.C:80
 AddTaskJetPreparationJSON.C:81
 AddTaskJetPreparationJSON.C:82
 AddTaskJetPreparationJSON.C:83
 AddTaskJetPreparationJSON.C:84
 AddTaskJetPreparationJSON.C:85
 AddTaskJetPreparationJSON.C:86
 AddTaskJetPreparationJSON.C:87
 AddTaskJetPreparationJSON.C:88
 AddTaskJetPreparationJSON.C:89
 AddTaskJetPreparationJSON.C:90
 AddTaskJetPreparationJSON.C:91
 AddTaskJetPreparationJSON.C:92
 AddTaskJetPreparationJSON.C:93
 AddTaskJetPreparationJSON.C:94
 AddTaskJetPreparationJSON.C:95
 AddTaskJetPreparationJSON.C:96
 AddTaskJetPreparationJSON.C:97
 AddTaskJetPreparationJSON.C:98
 AddTaskJetPreparationJSON.C:99
 AddTaskJetPreparationJSON.C:100
 AddTaskJetPreparationJSON.C:101
 AddTaskJetPreparationJSON.C:102
 AddTaskJetPreparationJSON.C:103
 AddTaskJetPreparationJSON.C:104
 AddTaskJetPreparationJSON.C:105