adding the option for hybrid tracks global+global constrained as well as global+TPC...
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskFragmentationFunction.C
1
2 /*************************************************************************************************
3 ***  Add Fragmentation Function Task ***
4 **************************************************************************************************
5 The fragmentation function task expects an ESD filter and jet finder running before this task. 
6 Or it runs on delta-AODs filled with filtered tracks and jets before.
7
8 ** Parameters **
9 (char) recJetsBranch: branch in AOD for (reconstructed) jets
10 (char) genJetsBranch: branch in AOD for (generated) jets
11 (char) jetType: "AOD"   jets from recJetsBranch
12                 "AODMC" jets from genJetsBranch
13                 "KINE"  jets from PYCELL
14                  +"b" (e.g. "AODb") jets with acceptance cuts
15 (char) trackType: "AOD"     reconstructed tracks from AOD filled by ESD filter (choose filter mask!)
16                   "AODMC"   MC tracks from AOD filled by kine filter
17                   "KINE"    kine particles from MC event 
18                   +"2" (e.g. "AOD2")  charged tracks only
19                   +"b" (e.g. "AOD2b") with acceptance cuts
20 (UInt_t) filterMask: select filter bit of ESD filter task
21
22 ***************************************************************************************************/
23
24
25
26
27 AliAnalysisTaskFragmentationFunction *AddTaskFragmentationFunction(UInt_t iFlag=1, UInt_t filterMask=32, Int_t eventClass=0){
28         
29         AliAnalysisTaskFragmentationFunction *ff=0;
30
31         // UA1 Jets
32         // only reconstructed (default)
33         if(iFlag&(1<<0)) ff = AddTaskFragmentationFunction("jetsAOD_UA1", "", "", "", "", filterMask, 0.4,0,1000., eventClass);
34         // charged MC tracks and jets
35         if(iFlag&(1<<1)) ff = AddTaskFragmentationFunction("jetsAOD_UA1", "", "jetsAODMC2_UA1", "AODMC", "AODMC2", filterMask, 0.4,0,1000., eventClass);
36         // charged MC tracks and jets with acceptance cuts
37         if(iFlag&(1<<2)) ff = AddTaskFragmentationFunction("jetsAOD_UA1", "", "jetsAODMC2_UA1", "AODMCb", "AODMC2b", filterMask, 0.4,0,1000., eventClass);
38         // kine tracks in acceptance, pythia jets in acceptance
39         if(iFlag&(1<<3)) ff = AddTaskFragmentationFunction("jetsAOD_UA1", "", "", "KINEb", "KINEb", filterMask, 0.4,0,1000., eventClass);
40         // reconstructed charged tracks after cuts, MC jets in acceptance 
41         if(iFlag&(1<<4)) ff = AddTaskFragmentationFunction("jetsAOD_UA1", "", "jetsMC2b", "AODMCb", "AOD2b", filterMask, 0.4,0,1000., eventClass);
42         // reconstruction efficiency: pointing with rec jet axis into gen tracks 
43         if(iFlag&(1<<5)) ff = AddTaskFragmentationFunction("jetsAOD_UA1", "", "jetsAODMC2_UA1", "AODb", "AODMC2b", filterMask, 0.4,0,1000., eventClass);
44
45         // kt jets
46         // only reconstructed 
47         if(iFlag&(1<<10)) ff = AddTaskFragmentationFunction("clustersAOD_KT", "jeteventbackground_clustersAOD_KT", "", "", "", filterMask, 0.4,0,150., eventClass, "_Skip00");
48         // charged MC tracks and jets
49         if(iFlag&(1<<11)) ff = AddTaskFragmentationFunction("clustersAOD_KT", "jeteventbackground_clustersAOD_KT", "jetsAODMC2_FASTKT", "AODMC", "AODMC2", filterMask, 0.4,0,150.,eventClass,"_Skip00");
50         // charged MC tracks and jets with acceptance cuts
51         if(iFlag&(1<<12)) ff = AddTaskFragmentationFunction("clustersAOD_KT", "jeteventbackground_clustersAOD_KT", "jetsAODMC2_FASTKT", "AODMCb", "AODMC2b", filterMask, 0.4,0,150.,eventClass, "_Skip00");
52
53         // anti-kt jets
54         // Jet not background subtracted
55         // only reconstructed 
56         if(iFlag&(1<<20)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "jeteventbackground_clustersAOD_KT", "", "", "", filterMask, 0.4,0,150., eventClass, "_Skip02");
57         // charged MC tracks and jets
58         if(iFlag&(1<<21)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "jeteventbackground_clustersAOD_KT", "jetsAODMC2_FASTJET", "AODMC", "AODMC2", filterMask, 0.4,0,150.,eventClass, "_Skip02");
59         // charged MC tracks and jets with acceptance cuts
60         if(iFlag&(1<<22)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "jeteventbackground_clustersAOD_KT", "jetsAODMC2_FASTJET", "AODMCb", "AODMC2b", filterMask, 0.4,0,150.,eventClass, "_Skip02");
61
62         // Jet background subtracted
63         if(iFlag&(1<<23)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "", "", "", "", filterMask, 0.4,1,150.,eventClass, "_Skip02");
64         // charged MC tracks and jets
65         if(iFlag&(1<<24)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "", "jetsAODMC2_FASTJET", "AODMC", "AODMC2", filterMask, 0.4,1,150.,eventClass, "_Skip02");
66         // charged MC tracks and jets with acceptance cuts
67         if(iFlag&(1<<25)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "", "jetsAODMC2_FASTJET", "AODMCb", "AODMC2b", filterMask, 0.4,1,150., eventClass, "_Skip02");
68
69        if(iFlag&(1<<26)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "", "", "", "", filterMask, 0.4,2,150.,eventClass, "_Skip02");
70
71        if(iFlag&(1<<27)) ff = AddTaskFragmentationFunction("clustersAOD_ANTIKT", "", "", "", "", filterMask, 0.4,3,150.,eventClass, "_Skip02"); 
72
73       // SISCONE 
74       if(iFlag&(1<<28)) ff = AddTaskFragmentationFunction("jetsAOD_SISCONE", "", "", "", "", filterMask, 0.4,1,150.,eventClass);
75       if(iFlag&(1<<29)) ff = AddTaskFragmentationFunction("jetsAOD_SISCONE", "", "", "", "", filterMask, 0.4,2,150.,eventClass);
76       if(iFlag&(1<<30)) ff = AddTaskFragmentationFunction("jetsAOD_SISCONE", "", "", "", "", filterMask, 0.4,3,150.,eventClass);
77
78         return ff;
79 }
80
81 // _______________________________________________________________________________________
82
83 AliAnalysisTaskFragmentationFunction *AddTaskFragmentationFunction(
84         const char* recJetsBranch,
85         const char* recJetsBackBranch,
86         const char* genJetsBranch,
87         const char* jetType,
88         const char* trackType,
89         UInt_t filterMask,
90         Float_t radius,
91         int kBackgroundMode,
92         float PtTrackMin,
93         Int_t eventClass=0,
94         TString BrOpt="",
95         TString BrOpt2="",
96         Float_t radiusBckg=0.4)
97 {
98    // Creates a fragmentation function task,
99    // configures it and adds it to the analysis manager.
100
101    //******************************************************************************
102    //*** Configuration Parameter **************************************************
103    //******************************************************************************
104
105    // space for configuration parameter: histo bin, cuts, ...
106    // so far only default parameter used
107
108    Int_t debug = -1; // debug level, -1: not set here
109
110    //******************************************************************************
111
112
113    
114    // Get the pointer to the existing analysis manager via the static access method.
115    //==============================================================================
116    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
117    if (!mgr) {
118           ::Error("AddTaskFragmentationFunction", "No analysis manager to connect to.");
119           return NULL;
120    }
121    
122    // Check the analysis type using the event handlers connected to the analysis manager.
123    //==============================================================================
124    if (!mgr->GetInputEventHandler()) {
125          ::Error("AddTaskFragmentationFunction", "This task requires an input event handler");
126           return NULL;
127    }
128
129    TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
130    Printf("Data Type: %s", type.Data());
131
132    TString branchRecBackJets(recJetsBackBranch);
133    TString branchRecJets(recJetsBranch);
134    TString branchGenJets(genJetsBranch);
135    TString typeJets(jetType);
136    TString typeTracks(trackType);
137
138    if(branchRecBackJets.Length()==0) branchRecBackJets = "noRecBackJets";
139    if(branchRecJets.Length()==0) branchRecJets = "noRecJets";
140    if(branchGenJets.Length()==0) branchGenJets = "noGenJets";
141    if(typeTracks.Length()==0) typeTracks = "trackTypeUndef";
142    if(typeJets.Length()==0)   typeJets   = "jetTypeUndef";
143    
144    // Create the task and configure it.
145    //===========================================================================
146
147    AliAnalysisTaskFragmentationFunction *task = new AliAnalysisTaskFragmentationFunction(
148         Form("Fragmentation Function %s %s %s %s", branchRecJets.Data(), branchGenJets.Data(), typeJets.Data(), typeTracks.Data()));
149    
150    if(debug>=0) task->SetDebugLevel(debug);
151    
152    Printf("Rec Jets %s", branchRecJets.Data());
153    Printf("Back Rec Jets %s", branchRecBackJets.Data());
154    Printf("Gen Jets %s", branchGenJets.Data());
155    Printf("Jet Type %s", typeJets.Data());
156    Printf("Track Type %s", typeTracks.Data());
157    
158    // attach the filter mask and options
159    TString cAdd = "";
160    cAdd += Form("%02d",(int)((radius+0.01)*10.));
161    cAdd += Form("_B%d",(int)((kBackgroundMode)));
162    cAdd += Form("_Filter%05d",filterMask);
163    cAdd += Form("_Cut%05d",(int)((PtTrackMin)));
164    cAdd += Form("%s",BrOpt.Data());
165    cAdd += Form("%s",BrOpt2.Data());
166    Printf("%s",cAdd.Data());
167
168    TString cAddb = "";
169    cAddb += Form("%02d",(int)((radiusBckg+0.01)*10.));
170    cAddb += Form("_B%d",(int)((kBackgroundMode)));
171    cAddb += Form("_Filter%05d",filterMask);
172    cAddb += Form("_Cut%05d",(int)((PtTrackMin)));
173    cAddb += Form("%s",BrOpt.Data());
174    cAddb += Form("%s",BrOpt2.Data());
175    Printf("%s",cAddb.Data());
176
177    TString cAddmc = "";
178    cAddmc += Form("%02d",(int)((radius+0.01)*10.));
179    cAddmc += Form("_B%d",(int)((kBackgroundMode)));
180    cAddmc += Form("_Filter%05d",filterMask);
181    cAddmc += Form("_Cut%05d",(int)((PtTrackMin)));
182    Printf("%s",cAddmc.Data());
183
184
185    if(branchRecJets.Contains("AOD")&&branchRecJets.Contains("jets")&&!branchRecJets.Contains("MC"))branchRecJets = branchRecJets + cAdd;
186    if(branchRecJets.Contains("AOD")&&branchRecJets.Contains("cluster")&&!branchRecJets.Contains("MC"))branchRecJets = branchRecJets + cAdd;
187
188    if(branchRecBackJets.Contains("back")&&branchRecBackJets.Contains("cluster")&&!branchRecBackJets.Contains("MC"))branchRecBackJets = branchRecBackJets + cAddb; 
189
190    if(branchGenJets.Contains("AOD")&&branchGenJets.Contains("MC"))branchGenJets = branchGenJets + cAddmc;
191
192    Printf("Gen jets branch %s: ", branchGenJets.Data());
193    Printf("Rec jets branch %s: ", branchRecJets.Data());
194    Printf("Jet backg branch %s: ", branchRecBackJets.Data());
195
196    if(!branchRecJets.Contains("noRecJets")) task->SetBranchRecJets(branchRecJets);
197    if(!branchRecBackJets.Contains("noRecBackJets")) task->SetBranchRecBackJets(branchRecBackJets);
198    if(!branchGenJets.Contains("noGenJets")) task->SetBranchGenJets(branchGenJets);
199
200
201    if(typeTracks.Contains("AODMC2b"))      task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODMCChargedAcceptance);
202    else if(typeTracks.Contains("AODMC2"))  task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODMCCharged);
203    else if(typeTracks.Contains("AODMC"))   task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODMCAll);
204    else if(typeTracks.Contains("KINE2b"))  task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackKineChargedAcceptance);
205    else if(typeTracks.Contains("KINE2"))   task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackKineCharged);
206    else if(typeTracks.Contains("KINE"))    task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackKineAll);
207    else if(typeTracks.Contains("AODb"))    task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODCuts);
208    else if(typeTracks.Contains("AOD"))     task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAOD);
209    else if(typeTracks.Contains("trackTypeUndef")) task->SetTrackTypeGen(0); // undefined
210    else Printf("trackType %s not found", typeTracks.Data());
211
212    if(typeJets.Contains("AODMCb"))         task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsGenAcceptance);
213    else if(typeJets.Contains("AODMC"))     task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsGen);
214    else if(typeJets.Contains("KINEb"))     task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsKineAcceptance);
215    else if(typeJets.Contains("KINE"))      task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsKine);
216    else if(typeJets.Contains("AODb"))      task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsRecAcceptance);
217    else if(typeJets.Contains("AOD"))       task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsRec);
218    else if(typeJets.Contains("jetTypeUndef")) task->SetJetTypeGen(0); // undefined
219    else Printf("jetType %s not found", typeJets.Data());
220    
221    if(typeJets.Contains("AODMCb")) task->SetJetTypeRecEff(AliAnalysisTaskFragmentationFunction::kJetsGenAcceptance); // kJetsRecAcceptance
222    else if(typeJets.Contains("AODb")) task->SetJetTypeRecEff(AliAnalysisTaskFragmentationFunction::kJetsRecAcceptance); 
223    else task->SetJetTypeRecEff(0);
224
225    task->SetFilterMask(filterMask);
226    task->SetEventClass(eventClass);
227   
228    // Set default parameters 
229    // Cut selection 
230    task->SetTrackCuts();       // default : pt > 0.150 GeV, |eta|<0.9, full phi acc
231    task->SetJetCuts();         // default: jet pt > 5 GeV, |eta|<0.5, full phi acc
232    task->SetDiJetCuts();       // default: type of cut = 1 (cut in deltaPhi), deltaPhi = 0., cdf = 0.5, fraction of pt = 0.6
233    task->SetKindSlices();      // default: kindSlice = 1 (inv mass)
234    task->SetFFRadius();        // default: R = 0.4
235    task->SetFFBckgRadius();    // default: R = 0.7
236    task->SetBckgSubMethod();   // default: subMethod = O, 1 = leading jet removed for rho extraction, 2 = 2 leading jets removed
237    task->SetIJMode(0);          // default: ijMode = 1
238    task->SetQAMode();          // default: qaMode = 3
239    task->SetFFMode();          // default: ffMode = 1
240    task->SetDJMode(0);          // default: djMode = 1
241    task->SetEffMode(0);         // default: effMode = 1
242    task->SetPhiCorrMode(0);     // default: phiCorrMode = 1
243    task->SetHighPtThreshold(); // default: pt > 5 Gev
244    task->UseRecEffRecJetPtBins(); // efficiency in bins of rec/gen jet pt - default: kTRUE  
245
246    task->SetBckgMode(1);        // default: bgMode = 1 
247    task->SetBckgType();
248    task->SetBranchRecBackClusters(Form("clustersAOD_KT04_B0_Filter%05d_Cut00150_Skip00",filterMask));
249
250    // Define histo bins
251    task->SetFFHistoBins();
252    task->SetQAJetHistoBins();
253    task->SetQATrackHistoBins();
254    task->SetIJHistoBins();
255    task->SetDiJetHistoBins();
256    task->SetQADiJetHistoBins();
257
258    mgr->AddTask(task);
259
260    // Create ONLY the output containers for the data produced by the task.
261    // Get and connect other common input/output containers via the manager as below
262    //==============================================================================
263
264    AliAnalysisDataContainer *coutput_FragFunc = mgr->CreateContainer(
265       Form("fracfunc_%s_%s_%s_%s_cl%d", branchRecJets.Data(), branchGenJets.Data(), typeTracks.Data(), typeJets.Data(), eventClass),
266       TList::Class(),
267       AliAnalysisManager::kOutputContainer,
268       Form("%s:PWG4_FragmentationFunction_%s_%s_%s_%s_cl%d", 
269          AliAnalysisManager::GetCommonFileName(), branchRecJets.Data(), branchGenJets. Data(), typeTracks.Data(), typeJets.Data(), eventClass));
270
271    mgr->ConnectInput  (task, 0, mgr->GetCommonInputContainer());
272    mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
273    mgr->ConnectOutput (task, 1, coutput_FragFunc);
274    
275    return task;
276 }