]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG4/macros/AddTaskFragmentationFunction.C
Updated Fragmentation function task (added Di jet part and intra-jet radiation) ...
[u/mrichter/AliRoot.git] / PWG4 / macros / AddTaskFragmentationFunction.C
1
2 /*************************************************************************************************
3 ***  Add Fragmentation Function Task ***
4 **************************************************************************************************
5 The fragmenation 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=16){
28         
29         AliAnalysisTaskFragmentationFunction *ff=0;
30
31         // only reconstructed (default)
32         if(iFlag&(1<<0)) ff = AddTaskFragmentationFunction("jets", "", "", "", filterMask);
33         // MC tracks in acceptance, MC jets in acceptance
34         if(iFlag&(1<<1)) ff = AddTaskFragmentationFunction("jets", "AODMC2b", "AODMCb", "AODMCb", filterMask);
35         // kine tracks in acceptance, pythia jets in acceptance
36         if(iFlag&(1<<2)) ff = AddTaskFragmentationFunction("jets", "", "KINEb", "KINEb", filterMask);
37         // reconstructed charged tracks after cuts, MC jets in acceptance 
38         if(iFlag&(1<<3)) ff = AddTaskFragmentationFunction("jets", "AODMC2b", "AODMCb", "AOD2b", filterMask);
39         
40         return ff;
41 }
42
43 // _______________________________________________________________________________________
44
45 AliAnalysisTaskFragmentationFunction *AddTaskFragmentationFunction(
46         const char* recJetsBranch,
47         const char* genJetsBranch,
48         const char* jetType,
49         const char* trackType,
50         UInt_t filterMask)
51 {
52    // Creates a fragmentation function task,
53    // configures it and adds it to the analysis manager.
54
55    //******************************************************************************
56    //*** Configuration Parameter **************************************************
57    //******************************************************************************
58
59    // space for configuration parameter: histo bin, cuts, ...
60    // so far only default parameter used
61
62    Int_t debug = -1; // debug level, -1: not set here
63
64    //******************************************************************************
65
66
67    
68    // Get the pointer to the existing analysis manager via the static access method.
69    //==============================================================================
70    AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
71    if (!mgr) {
72           ::Error("AddTaskFragmentationFunction", "No analysis manager to connect to.");
73           return NULL;
74    }
75    
76    // Check the analysis type using the event handlers connected to the analysis manager.
77    //==============================================================================
78    if (!mgr->GetInputEventHandler()) {
79          ::Error("AddTaskFragmentationFunction", "This task requires an input event handler");
80           return NULL;
81    }
82
83    TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD"
84    Printf("Data Type: %s", type.Data());
85
86    TString branchRecJets(recJetsBranch);
87    TString branchGenJets(genJetsBranch);
88    TString typeJets(jetType);
89    TString typeTracks(trackType);
90
91    if(branchRecJets.Length()==0) branchRecJets = "noRecJets";
92    if(branchGenJets.Length()==0) branchGenJets = "noGenJets";
93    if(typeTracks.Length()==0) typeTracks = "trackTypeUndef";
94    if(typeJets.Length()==0)   typeJets   = "jetTypeUndef";
95    
96    // Create the task and configure it.
97    //===========================================================================
98
99    AliAnalysisTaskFragmentationFunction *task = new AliAnalysisTaskFragmentationFunction(
100         Form("Fragmenation Function %s %s %s %s", branchRecJets.Data(), branchGenJets.Data(), typeJets.Data(), typeTracks.Data()));
101    
102    if(debug>=0) task->SetDebugLevel(debug);
103    
104    Printf("Rec Jets %s", branchRecJets.Data());
105    Printf("Gen Jets %s", branchGenJets.Data());
106    Printf("Jet Type %s", typeJets.Data());
107    Printf("Track Type %s", typeTracks.Data());
108    
109    if(!branchRecJets.Contains("noRecJets")) task->SetBranchRecJets(branchRecJets);
110    if(!branchGenJets.Contains("noGenJets")) task->SetBranchGenJets(branchGenJets);
111
112
113    if(typeTracks.Contains("AODMC2b"))      task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODMCChargedAcceptance);
114    else if(typeTracks.Contains("AODMC2"))  task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODMCCharged);
115    else if(typeTracks.Contains("AODMC"))   task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODMCAll);
116    else if(typeTracks.Contains("KINE2b"))  task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackKineChargedAcceptance);
117    else if(typeTracks.Contains("KINE2"))   task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackKineCharged);
118    else if(typeTracks.Contains("KINE"))    task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackKineAll);
119    else if(typeTracks.Contains("AODb"))    task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAODCuts);
120    else if(typeTracks.Contains("AOD"))     task->SetTrackTypeGen(AliAnalysisTaskFragmentationFunction::kTrackAOD);
121    else if(typeTracks.Contains("trackTypeUndef")) task->SetTrackTypeGen(0); // undefined
122    else Printf("trackType %s not found", typeTracks.Data());
123
124    if(typeJets.Contains("AODMCb"))         task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsGenAcceptance);
125    else if(typeJets.Contains("AODMC"))     task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsGen);
126    else if(typeJets.Contains("KINEb"))     task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsKineAcceptance);
127    else if(typeJets.Contains("KINE"))      task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsKine);
128    else if(typeJets.Contains("AODb"))      task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsRecAcceptance);
129    else if(typeJets.Contains("AOD"))       task->SetJetTypeGen(AliAnalysisTaskFragmentationFunction::kJetsRec);
130    else if(typeJets.Contains("jetTypeUndef")) task->SetJetTypeGen(0); // undefined
131    else Printf("jetType %s not found", typeJets.Data());
132    
133    task->SetFilterMask(filterMask);
134   
135    // set default parameter 
136    task->SetTrackCuts();       // default : pt > 0.150 GeV, |eta|<0.9, full phi acc
137    task->SetJetCuts();         // default: jet pt > 5 GeV, |eta|<0.5, full phi acc
138    task->SetDiJetCuts();       // default: to be defined
139    task->SetFFRadius();        // default: R = 0.4
140    
141    task->SetHighPtThreshold(); // default: pt > 5 Gev
142    task->SetFFHistoBins();
143    task->SetQAJetHistoBins();
144    task->SetQATrackHistoBins();
145
146    mgr->AddTask(task);
147
148    // Create ONLY the output containers for the data produced by the task.
149    // Get and connect other common input/output containers via the manager as below
150    //==============================================================================
151
152    AliAnalysisDataContainer *coutput_FragFunc = mgr->CreateContainer(
153       Form("fracfunc_%s_%s_%s_%s", branchRecJets.Data(), branchGenJets.Data(), typeTracks.Data(), typeJets.Data()),
154       TList::Class(),
155       AliAnalysisManager::kOutputContainer,
156       Form("%s:PWG4_FragmentationFunction_%s_%s_%s_%s", 
157          AliAnalysisManager::GetCommonFileName(), branchRecJets.Data(), branchGenJets. Data(), typeTracks.Data(), typeJets.Data()));
158
159    mgr->ConnectInput  (task, 0, mgr->GetCommonInputContainer());
160    mgr->ConnectOutput (task, 0, mgr->GetCommonOutputContainer());
161    mgr->ConnectOutput (task, 1, coutput_FragFunc);
162    
163    return task;
164 }