]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGJE/EMCALJetTasks/macros/AddTaskJetMultiPreparation.C
Split: fix refs to AddTaskCentrality.C
[u/mrichter/AliRoot.git] / PWGJE / EMCALJetTasks / macros / AddTaskJetMultiPreparation.C
1 AliAnalysisTaskSE* AddTaskJetMultiPreparation(
2   const char*    periodstr          = "LHC13b",
3   TString        usedTracks         = "PicoTracks",
4   const char*    usedMCParticles    = "MCParticlesSelected",
5   const char*    usedClusters       = "CaloClusters",
6   TString        outClusName        = "CaloClustersCorr",
7   const Double_t hadCorr            = 2.0,
8   const Double_t Eexcl              = 0.00,
9   const Double_t phiMatch           = 0.03,
10   const Double_t etaMatch           = 0.015,
11   const Double_t minPtEt            = 0.15,
12   const UInt_t   pSel               = AliVEvent::kAny,
13   const Bool_t   trackclus          = kTRUE,
14   const Bool_t   doHistos           = kFALSE,
15   const Bool_t   makePicoTracks     = kTRUE,
16   const Bool_t   makeTrigger        = kFALSE,
17   const Bool_t   isEmcalTrain       = kFALSE,
18   const Double_t trackEff           = 1.0,
19   const Bool_t   doAODTrackProp     = kFALSE
20 )
21 {
22     // Add task macros for all jet related helper tasks.
23     AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
24     if (!mgr)
25     {
26         Error("AddTaskJetPreparation","No analysis manager found.");
27         return 0;
28     }
29
30     AliVEventHandler *evhand = mgr->GetInputEventHandler();
31     if (!evhand)
32     {
33         Error("AddTaskJetPreparation", "This task requires an input event handler");
34         return NULL;
35     }
36
37     // Convert hadCorr & trackEff to TStrings to be used in naming conventions
38     TString sTrackEff = "";
39     TString sHadCorr = "";
40     Int_t tEff = Int_t(trackEff*100);
41     Int_t hC = Int_t(hadCorr*100);
42     
43     if (trackEff<0.1)
44     {
45         sTrackEff = Form("00%d",tEff);
46     }
47     else if (trackEff<1.0)
48     {
49         sTrackEff = Form("0%d",tEff);
50     }
51     else
52     {
53         sTrackEff = Form("%d",tEff);
54     }
55     
56     if (hadCorr<0.1)
57     {
58         sHadCorr = Form("00%d",hC);
59     }
60     else if (hadCorr<1.0)
61     {
62         sHadCorr = Form("0%d",hC);
63     }
64     else
65     {
66         sHadCorr = Form("%d",hC);
67     }
68     
69     // Establish names for output collections and tasks
70     TString sPicoTracks = usedTracks + "_" + sTrackEff;
71     TString sEmcalTriggers = "EmcalTriggers_" + sTrackEff;
72     TString sEmcalTracks = "EmcalTracks_" + sTrackEff;
73     TString sEmcalClusters = "EmcalClusters_" + sTrackEff;
74     TString sCaloClustersCorr = outClusName + "_" + sTrackEff + "_" + sHadCorr;
75     
76     TString sESDTrackFilterName = "AliEmcalEsdTrackFilterTask";
77     TString sAODTrackPropagatorName = "AliEmcalTrackPropagatorTaskAOD";
78     TString sEmcalPicoTrackMakerName = "EmcalPicoTrackMaker_" + sTrackEff;
79     TString sEmcalParticleMakerName = "EmcalParticleMaker_" + sTrackEff;
80     TString sEmcalTriggerMakerName = "EmcalTriggerMaker_" + sTrackEff;
81     TString sEmcalTriggerMakerSetupOutName = "EmcalTriggerMakerSetupOut_" + sTrackEff;
82     TString sMCTrackSelectorName = "AliEmcalMCTrackSelector";
83     
84     // Set trackcuts according to period. Every period used should be definied here
85     TString period(periodstr);
86     TString clusterColName(usedClusters);
87     TString particleColName(usedMCParticles);
88     TString dType("ESD");
89     
90     if (!evhand->InheritsFrom("AliESDInputHandler"))
91     {
92         dType = "AOD";
93     }
94
95     if ((dType == "AOD") && (clusterColName == "CaloClusters"))
96     {
97         clusterColName = "caloClusters";
98     }
99     if ((dType == "ESD") && (clusterColName == "caloClusters"))
100     {
101         clusterColName = "CaloClusters";
102     }
103
104     if (0)
105     {
106         gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTrackPropagator.C");
107         AliEmcalTrackPropagatorTask *proptask = AddTaskEmcalTrackPropagator();
108         proptask->SelectCollisionCandidates(pSel);
109     }
110
111     if (makePicoTracks && (dType == "ESD" || dType == "AOD") )
112     {
113         TString inputTracks = "AODFilterTracks";
114         const Double_t edist = 440;
115         if (dType == "ESD")
116         {
117             inputTracks = "ESDFilterTracks";
118             TString trackCuts(Form("Hybrid_%s",period.Data()));
119             
120             // Hybrid tracks maker for ESD
121             AliEmcalEsdTrackFilterTask *esdFilter = mgr->GetTask(sESDTrackFilterName.Data());
122             if (!esdFilter)
123             {
124                 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalEsdTrackFilter.C");
125                 AliEmcalEsdTrackFilterTask *esdFilter = AddTaskEmcalEsdTrackFilter(inputTracks.Data(),trackCuts.Data());
126                 esdFilter->SetDoPropagation(kTRUE);
127                 esdFilter->SetDist(edist);
128                 esdFilter->SelectCollisionCandidates(pSel);
129             }
130         }
131         else if (dType == "AOD")
132         {
133             // Track propagator to extend track to the EMCal surface
134             AliEmcalAodTrackFilterTask *aodFilter = mgr->GetTask(sAODTrackPropagatorName.Data());
135             if (!aodFilter)
136             {
137                 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalAodTrackFilter.C");
138                 AliEmcalAodTrackFilterTask *aodFilter = AddTaskEmcalAodTrackFilter(inputTracks.Data(),"tracks",period.Data());
139                 aodFilter->SetDist(edist);
140                 aodFilter->SelectCollisionCandidates(pSel);
141                 if (doAODTrackProp == kTRUE)
142                 {
143                     aodFilter->SetDoPropagation(kTRUE);
144                 }
145             }
146         }
147
148         // Produce PicoTracks
149         AliEmcalPicoTrackMaker *pTrackTask = mgr->GetTask(sEmcalPicoTrackMakerName.Data());
150         if (!pTrackTask)
151         {
152             gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
153             pTrackTask = AddTaskEmcalPicoTrackMaker(sPicoTracks.Data(), inputTracks.Data(),0,1000,-10,10,-10,10,trackEff,sEmcalPicoTrackMakerName.Data());
154             pTrackTask->SelectCollisionCandidates(pSel);
155         }
156     }
157
158     // Trigger maker
159     if (makeTrigger)
160     {
161         AliEmcalTriggerMaker *emcalTriggers = mgr->GetTask(sEmcalTriggerMakerName.Data());
162         if (!emcalTriggers)
163         {
164             gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalTriggerMaker.C");
165             emcalTriggers = AddTaskEmcalTriggerMaker(sEmcalTriggers.Data(),sEmcalTriggerMakerSetupOutName.Data(),0,0,sEmcalTriggerMakerName.Data(),0,0,0,0,0,0);
166             emcalTriggers->SelectCollisionCandidates(pSel);
167         }
168     }
169
170     // Produce particles used for hadronic correction, then match!
171     AliEmcalParticleMaker *emcalParts = mgr->GetTask(sEmcalParticleMakerName.Data());
172     if (!emcalParts)
173     {
174         gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalParticleMaker.C");
175         emcalParts = AddTaskEmcalParticleMaker(sPicoTracks.Data(),clusterColName.Data(),sEmcalTracks.Data(),sEmcalClusters.Data(),sEmcalParticleMakerName.Data());
176         emcalParts->SelectCollisionCandidates(pSel);
177
178         // Relate tracks and clusters
179         gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalClusTrackMatcher.C");
180         AliEmcalClusTrackMatcherTask *emcalClus = AddTaskEmcalClusTrackMatcher(sEmcalTracks.Data(),sEmcalClusters.Data(),0.1,doHistos);
181         emcalClus->SetModifyObjs(kFALSE);
182         emcalClus->SelectCollisionCandidates(pSel);
183         if (isEmcalTrain)
184         {
185             RequestMemory(emcalClus,100*1024);
186         }
187     }
188
189     // Make Corrected CaloClusters
190     gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskHadCorr.C");
191     AliHadCorrTask *hCorr = AddTaskHadCorr(sEmcalTracks.Data(),sEmcalClusters.Data(),sCaloClustersCorr.Data(),hadCorr,minPtEt,phiMatch,etaMatch,Eexcl,trackclus,doHistos);
192     hCorr->SelectCollisionCandidates(pSel);
193     if (isEmcalTrain)
194     {
195         if (doHistos)
196         {
197             RequestMemory(hCorr,500*1024);
198         }
199     }
200
201     // Produce MC particles
202     if(particleColName != "")
203     {
204         AliEmcalMCTrackSelector *mcPartTask = mgr->GetTask(sMCTrackSelectorName.Data());
205         if (!mcPartTask)
206         {
207             gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskMCTrackSelector.C");
208             AliEmcalMCTrackSelector *mcPartTask = AddTaskMCTrackSelector(particleColName.Data(), kFALSE, kFALSE);
209             mcPartTask->SelectCollisionCandidates(pSel);
210         }
211     }
212
213     // Return one task that represents the jet preparation on LEGO trains
214     return emcalParts;
215 }