Improve use of JetContainers, fix cluster name in AddTasks
[u/mrichter/AliRoot.git] / PWGJE / FlavourJetTasks / macros / AddTasksFlavourJet.C
1 void AddTasksFlavourJet(const Int_t iCandType = 1 /*0 = D0, 1=Dstar...*/,
2    const TString sCutFile = "cutsHF/D0toKpiCutsppRecVtxNoPileupRejNoEMCAL.root",
3    const Double_t dJetPtCut   = 1.,
4    const Double_t dJetAreaCut = 0.,
5    const char *acctype = "TPC",
6    const TString sRunPeriod = "LHC10b",
7    const Int_t    uBeamType = 0,
8    const UInt_t uTriggerMask = AliVEvent::kMB, /*for jets; the D mesons trigger is defined in the cut object*/
9    const Bool_t bIsMC = kFALSE,
10    const Bool_t bIsReco = kFALSE,
11    const Bool_t bIsMap = kFALSE,
12    TString sText=""/*completes the name of the candidate task lists*/
13    )
14 {
15    const TString sInputTrkMC  = "MCParticlesSelected";
16    const TString sInputTrkRec  = "tracks";
17    const TString sUsedTrks  = "PicoTracks";
18    const TString sUsedClus  = "";
19    TString sInputTrk = bIsReco ? sInputTrkRec : sInputTrkMC;
20    const Int_t iJetAlgo = 1;
21    const Int_t iJetType = 1;
22  
23    const Int_t    nRadius = 1;
24    const Double_t aRadius[] = {  0.4  };
25    const TString  sRadius[] = { "R04" };
26    
27    //=============================================================================
28    
29    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
30    
31    if (!mgr) {
32       ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "No analysis manager to connect to.");
33       return;
34    }
35    
36    TString type = mgr->GetInputEventHandler()->GetDataType();
37    if (!type.Contains("ESD") && !type.Contains("AOD")) {
38       ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "Task manager to have an ESD or AOD input handler.");
39       return;
40    }
41    
42    if (!mgr->GetInputEventHandler()) {
43       ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "This task requires an input event handler");
44       return;
45    }
46    //=============================================================================
47    
48    UInt_t uAnaType = (((iJetType==0) ||     (iJetType==2)) ? 1 : 0);
49    Int_t  iLeading =  ((iJetType==0) ? 3 : ((iJetType==1)  ? 0 : 1));
50    Int_t leadHadType=0; /* 0=charged, 1=neutral, 2=both*/
51    //D mesons -- PID
52    gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
53    AliAnalysisTaskSE *taskRespPID = AddTaskPIDResponse(bIsMC);
54    
55    // -- D meson selection
56   
57    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/FlavourJetTasks/macros/AddTaskDFilterAndCorrelations.C");
58
59
60    // EMCal framework
61    // -- Physics selection task
62    if(!bIsMC){
63       gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPhysicsSelection.C");
64       AliPhysicsSelectionTask *physSelTask = AddTaskEmcalPhysicsSelection(kTRUE, kTRUE, uTriggerMask, 5, 5, 10, kTRUE, -1, -1, -1, -1);
65       
66       if (!physSelTask) {
67          cout << "no physSelTask"; 
68          return; 
69       }
70    }
71    // -- 
72    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSetup.C");
73    AliEmcalSetupTask *taskSetupEMCal = AddTaskEmcalSetup();
74    //taskSetupEMCal->SetOcdbPath("raw://"); //needed for period LHC12h and i
75    taskSetupEMCal->SetGeoPath("$ALICE_ROOT/OADB/EMCAL");
76    taskSetupEMCal->SelectCollisionCandidates(uTriggerMask);
77    
78    // Jet preparation
79    //gROOT->LoadMacro("/data/Work/jets/testEMCalJetFramework/code/v4/AddTaskJetPreparation.C");
80    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetPreparation.C");
81    AddTaskJetPreparation(sRunPeriod,"PicoTracks",bIsMC ? "MCParticlesSelected" : "",/*next 7 emcal default settings*/"","",2.,0.,0.03,0.015,0.15,uTriggerMask, kFALSE /*track cluster*/,kFALSE /*do histos*/,kTRUE /*make pico tracks*/,kTRUE /*make emcal trigger*/,kFALSE /*is emcal train*/);
82    
83    
84    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
85    //gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJetSample.C");
86    
87    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetResponseMaker.C");
88    
89    for (Int_t i=0; i<nRadius; i++) {
90       //jet reconstruction for correlation
91       //AliEmcalJetTask *taskFJ = AddTaskEmcalJet(bIsMC&&!bIsReco ? sInputTrkMC.Data() : sUsedTrks.Data(),sUsedClus.Data(),iJetAlgo,aRadius[i],iJetType);
92       //I think like follows it's fine: sUsedTrks contains the picotracks of MC or reco tracks according to IsReco
93       AliEmcalJetTask *taskFJ = AddTaskEmcalJet(sUsedTrks.Data(),sUsedClus.Data(),iJetAlgo,aRadius[i],iJetType);
94       
95       taskFJ->SelectCollisionCandidates(uTriggerMask);
96       
97             
98      // AliAnalysisTaskEmcalJetSample *taskjetsample=AddTaskEmcalJetSample(sUsedTrks.Data(),"",taskFJ->GetName(),
99         // "Rho",aRadius[i],dJetPtCut,dJetAreaCut,AliAnalysisTaskEmcalJet::kTPC,iLeading,
100         // "AliAnalysisTaskEmcalJetSample");
101       //taskjetsample->SelectCollisionCandidates(uTriggerMask);
102       
103       //Filter and correlation with D meson
104       
105       AddTaskDFilterAndCorrelations(
106          iCandType,
107          sCutFile,
108          bIsMC,
109          bIsReco,
110          "",
111          taskFJ->GetName(),
112          //Form("JetR%s",sRadius[i].Data()),
113          iLeading,
114          leadHadType,
115          aRadius[i],
116          dJetPtCut,
117          acctype
118         //percjetareacut=1.
119           );
120       
121       AliEmcalJetTask *taskMCJ;
122       //jet reconstruction for correction map
123       if(bIsMap){ 
124         taskMCJ = AddTaskEmcalJet(sInputTrkMC.Data(),sUsedClus.Data(),iJetAlgo,aRadius[i], iJetType);
125
126         AddTaskDFilterAndCorrelations(
127                                       iCandType,
128                                       sCutFile,
129                                       bIsMC,
130                                       kFALSE,
131                                       sText,
132                                       taskFJ->GetName(),
133                                       iLeading,
134                                       leadHadType,
135                                       aRadius[i],
136                                       dJetPtCut,
137                                       acctype
138                                       //percjetareacut=1.
139                                       );
140
141          
142         // definition of correction map
143         Int_t tag=0;
144         if(iCandType == 0) tag=AliEmcalJet::kD0;
145         if(iCandType == 1) tag=AliEmcalJet::kDStar;
146         Printf("************** tag = %d", tag&0x1);
147         AliJetResponseMaker* taskResp=AddTaskJetResponseMaker(
148                                                               sUsedTrks.Data(),sUsedClus.Data(),taskFJ->GetName(),"",aRadius[i],
149                                                               sInputTrkMC.Data(),"",taskMCJ->GetName(),"",aRadius[i],dJetPtCut,dJetAreaCut,5,0,AliJetResponseMaker::kGeometrical, 0.25,0.25,"TPC",-999,-999,-999,"AliJetResponseMaker", kFALSE, 0, -10,10, tag );
150         taskResp->SetMinJetMCPt(0); //added to bypass a return not needed (feature of PrepareJetTask)
151         //taskResp->SetHistoType(1);
152          
153       }
154    }
155    
156    return;
157 }
158
159 //run with multiple R
160 void AddTasksFlavourJet(
161    /*input for Jet Finder*/   
162    const UInt_t uTriggerMask = AliVEvent::kMB, /*for jets; the D mesons trigger is defined in the cut object*/
163    const TString sRunPeriod = "LHC13b", /*for track selection*/
164    Bool_t tmpoadb2012flag=kFALSE, /*kTRUE for LHC12h and LHC12i*/
165    const Bool_t bIsMC = kFALSE,
166    /*input for D mesons*/ 
167    const Int_t iCandType = 1 /*0 = D0, 1=Dstar...*/,
168    const TString sCutFile = "cutsHF/D0toKpiCutsppRecVtxNoPileupRejNoEMCAL.root",
169    const Double_t dJetPtCut   = 1.,
170    const Double_t dJetAreaCut = 0.,
171    const char *acctype = "TPC",
172    const Bool_t bIsReco = kFALSE,
173    const Bool_t bIsMap = kFALSE,
174    TString sText="",/*completes the name of the candidate task lists*/
175    Bool_t triggerOnLeadingJet = kFALSE
176 ){
177    Printf("############## JETS WITH RESOLUTION PARAMETER 0.2, 0.4, 0.6 ####################");
178
179    const Int_t    nRadius = 3;
180    const Double_t aRadius[] = {  0.2,   0.4,   0.6  };
181    const TString  sRadius[] = { "R02", "R04", "R06" };
182
183    const TString sInputTrkMC  = "MCParticlesSelected";
184    const TString sInputTrkRec  = "tracks";
185    const TString sUsedTrks  = "PicoTracks";
186    const TString sUsedClus  = "";
187    TString sInputTrk = bIsReco ? sInputTrkRec : sInputTrkMC;
188    const Int_t iJetAlgo = 1;
189    const Int_t iJetType = 1;
190
191    //=============================================================================
192    
193    UInt_t uAnaType = (((iJetType==0) ||     (iJetType==2)) ? 1 : 0);
194    Int_t  iLeading =  ((iJetType==0) ? 3 : ((iJetType==1)  ? 0 : 1));
195    Int_t leadHadType=0; /* 0=charged, 1=neutral, 2=both*/
196    
197    // EMCal framework
198    // -- Physics selection task
199    if(!bIsMC){
200       gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPhysicsSelection.C");
201       AliPhysicsSelectionTask *physSelTask = AddTaskEmcalPhysicsSelection(kTRUE, kTRUE, uTriggerMask, 5, 5, 10, kTRUE, -1, -1, -1, -1);
202       
203       if (!physSelTask) {
204          cout << "no physSelTask"; 
205          return; 
206       }
207    }
208    // -- EMCal setup
209    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSetup.C");
210    AliEmcalSetupTask *taskSetupEMCal = AddTaskEmcalSetup();
211    if(tmpoadb2012flag) taskSetupEMCal->SetOcdbPath("raw://"); //needed for period LHC12h and i
212    else taskSetupEMCal->SetGeoPath("$ALICE_ROOT/OADB/EMCAL");
213    taskSetupEMCal->SelectCollisionCandidates(uTriggerMask);
214    
215    // Jet preparation
216    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskJetPreparation.C");
217    AddTaskJetPreparation(sRunPeriod,"PicoTracks",bIsMC ? "MCParticlesSelected" : "",/*next 7 emcal default settings*/"","",2.,0.,0.03,0.015,0.15,uTriggerMask, kFALSE /*track cluster*/,kFALSE /*do histos*/,kTRUE /*make pico tracks*/,kTRUE /*make emcal trigger*/,kFALSE /*is emcal train*/);
218    
219    
220    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
221    
222    TString jetname[nRadius];
223    
224      for (Int_t i=0; i<nRadius; i++) {
225       //jet reconstruction
226       AliEmcalJetTask *taskFJ = AddTaskEmcalJet(sUsedTrks.Data(),sUsedClus.Data(),iJetAlgo,aRadius[i],iJetType);
227       
228       taskFJ->SelectCollisionCandidates(uTriggerMask);
229       
230       Printf("Now Jet Finder with R = %f",aRadius[i]);
231       jetname[i] = taskFJ->GetName();
232  
233   }
234    
235   for (Int_t i=0; i<nRadius; i++) {
236    
237       AddMyAnalysis(jetname[i],aRadius[i],iCandType,sCutFile,dJetPtCut,dJetAreaCut,
238          acctype,bIsMC,bIsReco,bIsMap,sText,triggerOnLeadingJet);
239   }
240 }
241
242 //run with HF tracks cuts (filterbit 4 and 9  -> 16, 512)
243 void AddTasksFlavourJet(
244    /*input for Jet Finder*/   
245    const UInt_t uTriggerMask = AliVEvent::kMB, /*for jets; the D mesons trigger is defined in the cut object*/
246    const Bool_t bIsMC = kFALSE,
247    const Double_t R=0.4,
248    /*input for D mesons*/ 
249    const Int_t iCandType = 1 /*0 = D0, 1=Dstar...*/,
250    const TString sCutFile = "cutsHF/D0toKpiCutsppRecVtxNoPileupRejNoEMCAL.root",
251    const Double_t dJetPtCut   = 1.,
252    const Double_t dJetAreaCut = 0.,
253    const char *acctype = "TPC",
254    const Bool_t bIsReco = kFALSE,
255    const Bool_t bIsMap = kFALSE,
256    TString sText="",/*completes the name of the candidate task lists*/
257    Bool_t triggerOnLeadingJet = kFALSE
258
259    ){
260
261
262 Printf("############## SELECT TRACKS WITH FILTER BIT 4 AND 9 ####################");
263 //=============================================================================
264
265 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
266
267 if (!mgr) {
268    ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "No analysis manager to connect to.");
269    return;
270 }
271
272 TString type = mgr->GetInputEventHandler()->GetDataType();
273 if (!type.Contains("ESD") && !type.Contains("AOD")) {
274    ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "Task manager to have an ESD or AOD input handler.");
275    return;
276 }
277
278 if (!mgr->GetInputEventHandler()) {
279    ::Error("AddTasksFlavourJet.C::AddTasksFlavourJet", "This task requires an input event handler");
280    return;
281 }
282 //=============================================================================
283
284 // EMCal framework
285 // -- Physics selection task
286 if(!bIsMC){
287    gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPhysicsSelection.C");
288    AliPhysicsSelectionTask *physSelTask = AddTaskEmcalPhysicsSelection(kTRUE, kTRUE, uTriggerMask, 5, 5, 10, kTRUE, -1, -1, -1, -1);
289    
290    if (!physSelTask) {
291       cout << "no physSelTask"; 
292       return; 
293    }
294 }
295 // -- 
296 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalSetup.C");
297 AliEmcalSetupTask *taskSetupEMCal = AddTaskEmcalSetup();
298 //taskSetupEMCal->SetOcdbPath("raw://"); //needed for period LHC12h and i
299 taskSetupEMCal->SetGeoPath("$ALICE_ROOT/OADB/EMCAL");
300 taskSetupEMCal->SelectCollisionCandidates(uTriggerMask);
301
302 //define the track sample
303 TString tracksHFname="HFTrackBits";
304 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalAodTrackFilter.C");
305 AliEmcalAodTrackFilterTask *trackfilter=AddTaskEmcalAodTrackFilter(tracksHFname,"tracks","","AliEmcalAodTrackFilterTask4HF" );
306 trackfilter->SetAODfilterBits(16,512);
307
308 //transofm into picotracks
309 gROOT->LoadMacro("$ALICE_ROOT/PWG/EMCAL/macros/AddTaskEmcalPicoTrackMaker.C");
310 AliEmcalPicoTrackMaker* picotracksHF=AddTaskEmcalPicoTrackMaker(Form("Pico%s",tracksHFname.Data()), tracksHFname,0,1000,-10,10,-10,10,1,"AliEmcalPicoTrackMakerHF");
311
312 //run the jet finder
313 gROOT->LoadMacro("$ALICE_ROOT/PWGJE/EMCALJetTasks/macros/AddTaskEmcalJet.C");
314 AliEmcalJetTask* taskFJ=AddTaskEmcalJet(Form("Pico%s",tracksHFname.Data()), "caloClusters", 1, R);
315 TString jetname = taskFJ->GetName();
316 AddMyAnalysis(jetname,R,iCandType,sCutFile,dJetPtCut,dJetAreaCut,
317    acctype,bIsMC,bIsReco,bIsMap,sText,triggerOnLeadingJet,Form("Pico%s",tracksHFname.Data()));
318
319
320 }
321 void AddMyAnalysis(TString& jetname, Double_t aRadius,
322    const Int_t iCandType = 1 /*0 = D0, 1=Dstar...*/,
323    const TString sCutFile = "cutsHF/D0toKpiCutsppRecVtxNoPileupRejNoEMCAL.root",
324    const Double_t dJetPtCut   = 1.,
325    const Double_t dJetAreaCut = 0.,
326    const char *acctype = "TPC",
327    const Bool_t bIsMC = kFALSE,
328    const Bool_t bIsReco = kFALSE,
329    const Bool_t bIsMap = kFALSE,
330    TString sText="",/*completes the name of the candidate task lists*/
331    Bool_t triggerOnLeadingJet = kFALSE,
332    const TString& trackArrName = "PicoTracks"
333 ){
334    
335    AliAnalysisManager* mgr = AliAnalysisManager::GetAnalysisManager();
336    //D mesons -- PID
337    TString pidTaskName="PIDResponseTask";
338    if(!mgr->GetTask(pidTaskName)){
339       gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
340       AliAnalysisTaskSE *taskRespPID = AddTaskPIDResponse(bIsMC);
341    }
342    
343    gROOT->LoadMacro("$ALICE_ROOT/PWGJE/FlavourJetTasks/macros/AddTaskDFilterAndCorrelations.C");
344   
345    //Filter and correlation with D meson
346    
347    AddTaskDFilterAndCorrelations(
348       iCandType,
349       sCutFile,
350       bIsMC,
351       bIsReco,
352       sText,
353       jetname,
354       trackArrName,
355       //Form("JetR%s",sRadius[i].Data()),
356       triggerOnLeadingJet,
357       0,
358       aRadius,
359       dJetPtCut,
360       acctype
361       //percjetareacut=1.
362       );
363    
364 }
365
366