ROOT logo
AliAnalysisTaskSE * AddTaskMatchingChain(
					 const char*    periodstr          = "LHC11h",
					 const UInt_t   pSel               = AliVEvent::kAny,
					 const char*    inClus             = "EmcCaloClusters",
					 const Double_t trackeff           = 1.0,
					 const Bool_t   doAODTrackProp     = kTRUE,
					 const Double_t maxMatchR          = 0.1,
					 const Bool_t   modifyMatchObjs    = kTRUE,
					 const Bool_t   doHistos           = kFALSE
) {

  // Add task macros for EMCal cluster track matching

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

  AliVEventHandler *evhand = mgr->GetInputEventHandler();
  if (!evhand) {
    Error("AddTaskClusTrackMatching", "This task requires an input event handler");
    return NULL;
  }
  
  TString dType("ESD");
  if (!evhand->InheritsFrom("AliESDInputHandler")) 
    dType = "AOD";

  // Set trackcuts according to period. 
  TString period(periodstr);

  TString inputClus   = TString::Format(inClus);
  TString inputTracks = "AODFilterTracks";

  //----------------------- Filter Tracks -----------------------------------------------------
  const Double_t edist = 440;
  if (dType == "ESD") {
    inputTracks = "ESDFilterTracks";
    TString trackCuts(Form("Hybrid_%s", period.Data()));   
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalEsdTrackFilter.C");
    AliEmcalEsdTrackFilterTask *esdfilter = AddTaskEmcalEsdTrackFilter(inputTracks,trackCuts);
    esdfilter->SetDoPropagation(kTRUE);
    esdfilter->SetDist(edist);
    esdfilter->SelectCollisionCandidates(pSel);
    esdfilter->SetTrackEfficiency(trackeff);
  } else if (dType == "AOD") {
    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalAodTrackFilter.C");
    AliEmcalAodTrackFilterTask *aodfilter = AddTaskEmcalAodTrackFilter(inputTracks,"tracks",period);
    if (doAODTrackProp) {
      aodfilter->SetDist(edist);
      aodfilter->SetAttemptPropMatch(kTRUE);
    }
    aodfilter->SelectCollisionCandidates(pSel);
    aodfilter->SetTrackEfficiency(trackeff);
  }

  //----------------------- Produce EmcalParticles -----------------------------------------------------
  // Produce objects (AliEmcalParticle) for tracks and clusters 
  // used for cluster-track matching
  TString emctracks = Form("EmcalTracks_%s",inputTracks.Data());
  TString emcclusters = Form("EmcalClusters_%s",inputClus.Data());
  Printf("emctracks: %s  inputTracks: %s",emctracks.Data(),inputTracks.Data());
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalParticleMaker.C");
  AliEmcalParticleMaker *emcalParts = AddTaskEmcalParticleMaker(inputTracks,inputClus,emctracks,emcclusters);
  emcalParts->SelectCollisionCandidates(pSel);

  //----------------------- Cluster-Track matching -----------------------------------------------------
  gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalClusTrackMatcher.C");
  AliEmcalClusTrackMatcherTask *emcalClus =  AddTaskEmcalClusTrackMatcher(emctracks,emcclusters,maxMatchR,modifyMatchObjs,doHistos);
  emcalClus->SelectCollisionCandidates(pSel);

  Printf("3-- inputTracks: %s emctracks: %s emcclusters: %s",inputTracks.Data(),emctracks.Data(),emcclusters.Data());

  return emcalClus;
}
 AddTaskMatchingChain.C:1
 AddTaskMatchingChain.C:2
 AddTaskMatchingChain.C:3
 AddTaskMatchingChain.C:4
 AddTaskMatchingChain.C:5
 AddTaskMatchingChain.C:6
 AddTaskMatchingChain.C:7
 AddTaskMatchingChain.C:8
 AddTaskMatchingChain.C:9
 AddTaskMatchingChain.C:10
 AddTaskMatchingChain.C:11
 AddTaskMatchingChain.C:12
 AddTaskMatchingChain.C:13
 AddTaskMatchingChain.C:14
 AddTaskMatchingChain.C:15
 AddTaskMatchingChain.C:16
 AddTaskMatchingChain.C:17
 AddTaskMatchingChain.C:18
 AddTaskMatchingChain.C:19
 AddTaskMatchingChain.C:20
 AddTaskMatchingChain.C:21
 AddTaskMatchingChain.C:22
 AddTaskMatchingChain.C:23
 AddTaskMatchingChain.C:24
 AddTaskMatchingChain.C:25
 AddTaskMatchingChain.C:26
 AddTaskMatchingChain.C:27
 AddTaskMatchingChain.C:28
 AddTaskMatchingChain.C:29
 AddTaskMatchingChain.C:30
 AddTaskMatchingChain.C:31
 AddTaskMatchingChain.C:32
 AddTaskMatchingChain.C:33
 AddTaskMatchingChain.C:34
 AddTaskMatchingChain.C:35
 AddTaskMatchingChain.C:36
 AddTaskMatchingChain.C:37
 AddTaskMatchingChain.C:38
 AddTaskMatchingChain.C:39
 AddTaskMatchingChain.C:40
 AddTaskMatchingChain.C:41
 AddTaskMatchingChain.C:42
 AddTaskMatchingChain.C:43
 AddTaskMatchingChain.C:44
 AddTaskMatchingChain.C:45
 AddTaskMatchingChain.C:46
 AddTaskMatchingChain.C:47
 AddTaskMatchingChain.C:48
 AddTaskMatchingChain.C:49
 AddTaskMatchingChain.C:50
 AddTaskMatchingChain.C:51
 AddTaskMatchingChain.C:52
 AddTaskMatchingChain.C:53
 AddTaskMatchingChain.C:54
 AddTaskMatchingChain.C:55
 AddTaskMatchingChain.C:56
 AddTaskMatchingChain.C:57
 AddTaskMatchingChain.C:58
 AddTaskMatchingChain.C:59
 AddTaskMatchingChain.C:60
 AddTaskMatchingChain.C:61
 AddTaskMatchingChain.C:62
 AddTaskMatchingChain.C:63
 AddTaskMatchingChain.C:64
 AddTaskMatchingChain.C:65
 AddTaskMatchingChain.C:66
 AddTaskMatchingChain.C:67
 AddTaskMatchingChain.C:68
 AddTaskMatchingChain.C:69
 AddTaskMatchingChain.C:70
 AddTaskMatchingChain.C:71
 AddTaskMatchingChain.C:72
 AddTaskMatchingChain.C:73
 AddTaskMatchingChain.C:74
 AddTaskMatchingChain.C:75
 AddTaskMatchingChain.C:76
 AddTaskMatchingChain.C:77
 AddTaskMatchingChain.C:78