]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/macros/AddTaskJets.C
added jet finders for lower p_T (lo seed UA1, seed less cone, kT
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskJets.C
1 AliJetReader *CreateJetReader(Char_t *jr,UInt_t filterMask); // Common config\r
2 AliJetFinder *CreateJetFinder(Char_t *jf,Float_t radius = -1);\r
3 \r
4 AliAnalysisTaskJets *AddTaskJets(Char_t *jr, Char_t *jf,Float_t radius = -1,UInt_t filterMask = 0); // for the new AF\r
5 Int_t AddTaskJetsDelta(char *nonStdFile = "",UInt_t filterMask = 0,Bool_t kUseAODMC = kTRUE);\r
6 AliAnalysisTaskJets *AddTaskJets(UInt_t filterMask = 0);\r
7 \r
8 AliAnalysisTaskJets *AddTaskJets(UInt_t filterMask ){\r
9   // fills the standard "jets" branch in the AOD\r
10   // need the ESDFilter to run before, to access the AODtracks\r
11   // Tracks selected by the first Filter (1<<0)\r
12   // needs to be adapted for different cuts\r
13   \r
14   // UA1 as standard chosen, since it is the most robust and simple JF\r
15   // R = 0.4 suffficient to provide accurate jet axis for correlation studies\r
16   // energy resolution suffers a little\r
17   // Acceptance of jets not limited by the Jet Finder but should be done\r
18   // by user to abs(eta) < 0.5 \r
19 \r
20   return AddTaskJets("AOD","UA1",0.4,filterMask);\r
21 \r
22 }\r
23 \r
24 \r
25 \r
26 Int_t AddTaskJetsDelta(char *nonStdFile,UInt_t filterMask,Bool_t kUseAODMC){\r
27 \r
28   // Adds a whole set of jet finders  all to be written\r
29   // to a delta AOD\r
30   \r
31   // this can in principle be done also with on the fly \r
32   // if we have an ESD input jet fidner task does automatically fetch the ouput aod\r
33 \r
34    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
35    if (!mgr) {\r
36       ::Error("AddTaskJetsDelta", "No analysis manager to connect to.");\r
37       return 0;\r
38    }  \r
39    \r
40    // Check the analysis type using the event handlers connected to the analysis manager.\r
41    //==============================================================================\r
42    if (!mgr->GetInputEventHandler()) {\r
43       ::Error("AddTaskJetsDelta", "This task requires an input event handler");\r
44       return 0;\r
45    }\r
46 \r
47   AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();\r
48   if (!aodh) {\r
49     ::Error("AddTaskJetsDelta", "This task needs an output event handler");\r
50     return 0;\r
51   }   \r
52 \r
53   TString outFile(nonStdFile);\r
54 \r
55   TString type = mgr->GetInputEventHandler()->GetDataType();\r
56 \r
57   AliAnalysisTaskJets *jetana = 0;\r
58   Int_t iCount = 0;\r
59 \r
60 \r
61   const char *cJF[9]        = {"UA1","UA1","UA1","CDF","DA","SISCONE","FASTJET","FASTKT","UA1LO"};\r
62   const Float_t radius[9]   = {  0.4,  0.7,  1.0,  0.7, 0.7,      0.4,      0.4,     0.4,    0.4};\r
63   UInt_t  flag[9]           = {    6,    7,    7,    7,   7,        7,        7,       7,       7};\r
64   // flag[5] = 0; // set siscone to 0 for proof mode...\r
65   // flag first bit AOD, second bit AODMC2 third bit AODMC2\r
66   // i.e. 7 all, 6 only MC2 and MC\r
67   // this stay at three\r
68   const char *cReader[3] = {"AOD","AODMC","AODMC2"};  \r
69 \r
70   for(int i = 0; i< 9;i++){\r
71     if(!kUseAODMC)flag[i]&=1;\r
72     for(int ib = 0;ib<3;ib++){      \r
73       if(flag[i]&(1<<ib)){\r
74         jetana = AddTaskJets(cReader[ib],cJF[i],radius[i],filterMask);\r
75         if(jetana){\r
76           char *cRadius = "";\r
77           if(radius[i]>0)cRadius = Form("%02d",(int)((radius[i]+0.01)*10.)); // add an offset beacuse of precision\r
78           jetana->SetNonStdBranch(Form("jets%s_%s%s",cReader[ib],cJF[i],cRadius));\r
79           if(outFile.Length()>0)jetana->SetNonStdOutputFile(outFile.Data());\r
80           iCount++;\r
81         }\r
82       }\r
83     }\r
84   }\r
85     \r
86   Printf("Added %d JetFinders",iCount);\r
87 }\r
88 \r
89 \r
90 \r
91 \r
92 \r
93 \r
94 AliAnalysisTaskJets *AddTaskJets(Char_t *jr, Char_t *jf, Float_t radius,UInt_t filterMask)\r
95 {\r
96   // Creates a jet finder task, configures it and adds it to the analysis manager.\r
97 \r
98    // Get the pointer to the existing analysis manager via the static access method.\r
99    //==============================================================================\r
100    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();\r
101    if (!mgr) {\r
102       ::Error("AddTaskJets", "No analysis manager to connect to.");\r
103       return NULL;\r
104    }  \r
105    \r
106    // Check the analysis type using the event handlers connected to the analysis manager.\r
107    //==============================================================================\r
108    if (!mgr->GetInputEventHandler()) {\r
109       ::Error("AddTaskJets", "This task requires an input event handler");\r
110       return NULL;\r
111    }\r
112 \r
113   AliAODHandler *aodh = (AliAODHandler*)mgr->GetOutputEventHandler();\r
114   if (!aodh) {\r
115     ::Error("AddTaskJets", "This task needs an output event handler");\r
116     return NULL;\r
117   }   \r
118 \r
119 \r
120    // Create the task and configure it.\r
121    //===========================================================================\r
122    AliAnalysisTaskJets *jetana;\r
123    AliJetReader *er = CreateJetReader(jr,filterMask);\r
124     // Define jet header and jet finder\r
125    AliJetFinder *jetFinder = CreateJetFinder(jf,radius);\r
126 \r
127    if (jetFinder){\r
128        if (er) jetFinder->SetJetReader(er);\r
129    }\r
130 \r
131    char *cRadius = "";\r
132    if(radius>0)cRadius = Form("%02d",(int)((radius+0.01)*10.));\r
133 \r
134    jetana = new AliAnalysisTaskJets(Form("JetAnalysis%s_%s%s",jr,jf,cRadius));\r
135    TString type = mgr->GetInputEventHandler()->GetDataType();\r
136    if (type == "AOD") jetana->SetNonStdBranch(Form("jets%s",jf));\r
137    \r
138    TString c_jr(jr);\r
139    c_jr.ToLower();\r
140    TString c_jf(jf);\r
141    c_jf.ToLower();\r
142 \r
143    AliAnalysisDataContainer *cout_jet = mgr->CreateContainer(Form("jethist_%s_%s%s",c_jr.Data(),c_jf.Data(),cRadius), TList::Class(),\r
144                                                              AliAnalysisManager::kOutputContainer, Form("%s:PWG4_jethist_%s_%s%s",AliAnalysisManager::GetCommonFileName(),\r
145                                                              c_jr.Data(),c_jf.Data(),cRadius));\r
146    /*\r
147    AliAnalysisDataContainer *cout_jet = mgr->CreateContainer(Form("jethist_%s_%s%s",c_jr.Data(),c_jf.Data(),cRadius), TList::Class(),\r
148                                                              AliAnalysisManager::kOutputContainer,"ckb_test.root");\r
149    */\r
150    // Connect jet finder to task.\r
151    jetana->SetJetFinder(jetFinder);\r
152    jetana->SetConfigFile("");\r
153    jetana->SetDebugLevel(0);\r
154    mgr->AddTask(jetana);\r
155 \r
156    // Create ONLY the output containers for the data produced by the task.\r
157    // Get and connect other common input/output containers via the manager as below\r
158    //==============================================================================\r
159    mgr->ConnectInput  (jetana, 0, mgr->GetCommonInputContainer());\r
160 // AOD output slot will be used in a different way in future\r
161    mgr->ConnectOutput (jetana, 0, mgr->GetCommonOutputContainer());\r
162    mgr->ConnectOutput (jetana, 1, cout_jet);\r
163    \r
164    return jetana;\r
165 }\r
166 \r
167 AliJetFinder *CreateJetFinder(Char_t *jf,Float_t radius){\r
168   AliJetFinder *jetFinder = 0;\r
169 \r
170   switch (jf) {\r
171   case "CDF":\r
172     AliCdfJetHeader *jh = new AliCdfJetHeader();\r
173     jh->SetRadius(0.7);\r
174     if(radius>0)jh->SetRadius(radius);    \r
175     jh->SetAODwrite(kTRUE);\r
176     //    jh->SetDebugCDF(1);\r
177     jetFinder = new AliCdfJetFinder();\r
178     if (jh) jetFinder->SetJetHeader(jh);\r
179     break;\r
180 \r
181   case "DA":\r
182     AliDAJetHeader *jh=new AliDAJetHeader();\r
183     jh->SetComment("DA jet code with default parameters");\r
184     jh->SelectJets(kTRUE);\r
185     jh->SetRadius(0.7);\r
186     if(radius>0)jh->SetRadius(radius);\r
187     jh->SetEtMin(5.);\r
188     jetFinder = new AliDAJetFinder();\r
189     if (jh) jetFinder->SetJetHeader(jh);\r
190     break;\r
191 \r
192   case "FASTJET":\r
193     // DEFAULT is ANTI KT\r
194     AliFastJetHeaderV1 *jh = new AliFastJetHeaderV1();\r
195     jh->SetRparam(0.4); // setup parameters                                  \r
196     if(radius>0)jh->SetRparam(radius);\r
197     jh->SetAlgorithm(2); // antikt from fastjet/JetDefinition.hh\r
198     jetFinder = new AliFastJetFinder();\r
199     jh->SetPtMin(1);\r
200     if (jh) jetFinder->SetJetHeader(jh);\r
201     break;\r
202 \r
203   case "FASTKT":\r
204     AliFastJetHeaderV1 *jh = new AliFastJetHeaderV1();\r
205     jh->SetRparam(0.4); // setup parameters                                  \r
206     if(radius>0)jh->SetRparam(radius);\r
207     jh->SetAlgorithm(0); // kt from fastjet/JetDefinition.hh\r
208     jh->SetPtMin(1);\r
209     jetFinder = new AliFastJetFinder();\r
210     if (jh) jetFinder->SetJetHeader(jh);\r
211     break;\r
212 \r
213   case "SISCONE":\r
214     AliSISConeJetHeader * jh = new AliSISConeJetHeader();\r
215 \r
216     jh->SetJetEtaMax(1.5);\r
217     jh->SetJetEtaMin(-1.5);\r
218 \r
219     //siscone parameters\r
220     jh->SetConeRadius(0.4);                   // default cone radius\r
221     if(radius>0)jh->SetConeRadius(radius);   // cone radius\r
222 \r
223     jh->SetOverlapThreshold(0.75);            // overlap parameter, between 0 and 1 excluded!! 0.75 value is advised\r
224     jh->SetPtProtojetMin(0);                  // pt min of protojets\r
225     jh->SetMinJetPt(10);                      // Ptmin of jets (GeV)\r
226 \r
227     //do you want to subtract BG (0 = no, 1 = yes)\r
228     jh->SetBGMode(0);\r
229 \r
230     //for background\r
231     jh->SetRapRange( -0.9, 0.9);              // rapidity range for subtracting background must be < ghostmaxrap-0.95*R\r
232     jh->SetPhiRange(0 , 2*TMath::Pi());       // phi range for subtracting background\r
233     \r
234     //to determine jets area\r
235     jh->SetBGAlgorithm(1);                    // algorithm for rho calculation : 0 = kT, 1 = Cambridge\r
236     jh->SetGhostEtaMax(4);                    // eta max where ghosts are generated \r
237     jh->SetGhostArea(0.05);                   // area of a ghost \r
238     jh->SetMeanGhostKt(1e-100);               // average transverse momentum of the ghosts.\r
239     jh->SetAreaTypeNumber(4);                 // from 1 to 5 : 1 = active_area, 2 = active_area_explicit_ghosts, 3 = one_ghost_passive_area, 4 = passive_area, 5 = voronoi_area\r
240     jetFinder = new AliSISConeJetFinder();\r
241     if (jh) jetFinder->SetJetHeader(jh);\r
242     break;\r
243 \r
244   case "UA1":\r
245     AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();\r
246     jh->SetComment("UA1 jet code with default parameters");\r
247     jh->BackgMode(0);\r
248     jh->SetRadius(0.4);\r
249     if(radius>0)jh->SetRadius(radius);\r
250     jh->SetEtSeed(4.);\r
251     jh->SetNAcceptJets(6);\r
252     jh->SetLegoNbinPhi(432);\r
253     jh->SetLegoNbinEta(274);\r
254     jh->SetLegoEtaMin(-2);\r
255     jh->SetLegoEtaMax(+2);\r
256     jh->SetMinJetEt(5.);\r
257     jh->SetJetEtaMax(1.5);\r
258     jh->SetJetEtaMin(-1.5);\r
259 \r
260     jetFinder = new AliUA1JetFinderV1();\r
261     if (jh) jetFinder->SetJetHeader(jh);\r
262     break;\r
263   case "UA1LO":\r
264     AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();\r
265     jh->SetComment("UA1 jet code with Lo Pt settings parameters");\r
266     jh->BackgMode(0);\r
267     jh->SetRadius(0.4);\r
268     if(radius>0)jh->SetRadius(radius);\r
269     jh->SetEtSeed(1.);\r
270     jh->SetNAcceptJets(6);\r
271     jh->SetLegoNbinPhi(432);\r
272     jh->SetLegoNbinEta(274);\r
273     jh->SetLegoEtaMin(-2);\r
274     jh->SetLegoEtaMax(+2);\r
275     jh->SetMinJetEt(1.);\r
276     jh->SetJetEtaMax(1.5);\r
277     jh->SetJetEtaMin(-1.5);\r
278 \r
279     jetFinder = new AliUA1JetFinderV1();\r
280     if (jh) jetFinder->SetJetHeader(jh);\r
281     break;\r
282 \r
283 \r
284 \r
285   case "UA1MC":\r
286     AliUA1JetHeaderV1 *jh=new AliUA1JetHeaderV1();\r
287     jh->SetComment("UA1 jet code with default MC parameters");\r
288     jh->BackgMode(0);\r
289     jh->SetRadius(1.0);\r
290     if(radius>0)jh->SetRadius(radius);\r
291     jh->SetEtSeed(4.);\r
292     jh->SetNAcceptJets(6);\r
293     jh->SetLegoNbinPhi(432);\r
294     jh->SetLegoNbinEta(274);\r
295     jh->SetLegoEtaMin(-2);\r
296     jh->SetLegoEtaMax(+2);\r
297     jh->SetMinJetEt(5.);\r
298     jh->SetJetEtaMax(1.5);\r
299     jh->SetJetEtaMin(-1.5);\r
300     jetFinder = new AliUA1JetFinderV1();\r
301     if (jh) jetFinder->SetJetHeader(jh);\r
302     break;\r
303   default:\r
304     Printf("\n >>>>>>> AddTaskJets Error Wrong jet finder selected\n");\r
305     break;\r
306   }\r
307 \r
308   return jetFinder;\r
309 \r
310 }\r
311 \r
312 AliJetReader *CreateJetReader(Char_t *jr,UInt_t filterMask){\r
313   AliJetReader *er = 0;\r
314 \r
315   switch (jr) {\r
316   case "MC":\r
317     AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();\r
318     jrh->SetComment("MC full Kinematics");\r
319     jrh->SetFastSimTPC(kFALSE);\r
320     jrh->SetFastSimEMCAL(kFALSE);\r
321     jrh->SetPtCut(0.);\r
322     jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0 .9                                                                             \r
323     // Define reader and set its header                                     \r
324     er = new AliJetKineReader();\r
325     er->SetReaderHeader(jrh);\r
326     break;\r
327   case "MC2":\r
328     AliJetKineReaderHeader *jrh = new AliJetKineReaderHeader();\r
329     jrh->SetComment("MC full Kinematics spearate config charged only");\r
330     jrh->SetFastSimTPC(kFALSE);\r
331     jrh->SetFastSimEMCAL(kFALSE);\r
332     jrh->SetChargedOnly(kTRUE);\r
333     jrh->SetPtCut(0.);\r
334     jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0 .9                                                                             \r
335     // Define reader and set its header                                     \r
336     er = new AliJetKineReader();\r
337     er->SetReaderHeader(jrh);\r
338     break;\r
339   case "ESD":\r
340     AliJetESDReaderHeader *jrh = new AliJetESDReaderHeader();\r
341     jrh->SetComment("Testing");\r
342     jrh->SetFirstEvent(0);\r
343     jrh->SetLastEvent(1000);\r
344     jrh->SetPtCut(0.);\r
345     jrh->SetReadSignalOnly(kFALSE);\r
346     // Define reader and set its header                                     \r
347     er = new AliJetESDReader();\r
348     er->SetReaderHeader(jrh);\r
349     break;\r
350 \r
351   case "AOD":\r
352     AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();\r
353     jrh->SetComment("AOD Reader");\r
354     jrh->SetPtCut(0.);\r
355     jrh->SetTestFilterMask(16); // Change this one for a different set of cuts\r
356     if(filterMask>0)jrh->SetTestFilterMask(filterMask); \r
357     // Define reader and set its header\r
358     er = new AliJetAODReader();\r
359     er->SetReaderHeader(jrh);\r
360     break;\r
361   case "AODMC":\r
362     AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();\r
363     jrh->SetComment("AOD MC Reader");\r
364     jrh->SetPtCut(0.);\r
365     jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9\r
366     jrh->SetReadAODMC(1);// 1 all primary MC , 2 all primary charged\r
367     // Define reader and set its header\r
368     er = new AliJetAODReader();\r
369     er->SetReaderHeader(jrh);\r
370     break;\r
371   case "AODMC2":\r
372     AliJetAODReaderHeader *jrh = new AliJetAODReaderHeader();\r
373     jrh->SetComment("AOD MC Reader");\r
374     jrh->SetPtCut(0.);\r
375     jrh->SetFiducialEta(-2.1,2.1); // to take all MC particles default is 0.9\r
376     jrh->SetReadAODMC(2);// 1 all primary MC , 2 all primary charged\r
377     // Define reader and set its header\r
378     er = new AliJetAODReader();\r
379     er->SetReaderHeader(jrh);\r
380     break;\r
381 \r
382   default:\r
383     ::Error("AddTaskJets", "Wrong jet reader selected\n");\r
384     return 0;\r
385   }\r
386 \r
387   return er;\r
388 \r
389 }\r