added jetArea Cut in FF task, moved from TH3F to THnSparse in JetChem task, added...
[u/mrichter/AliRoot.git] / PWGJE / StrangenessInJets / macros / AddTaskJetChem.C
1 AliAnalysisTaskJetChem *AddTaskJetChem(const char* recJetsBranch = "clustersAOD_ANTIKT02_B2_Filter00768_Cut00150_Skip00", TString cutVar = "noCutVar", Int_t eventClass = 1, Int_t K0type = AliAnalysisTaskJetChem::kOffl, Int_t Latype = AliAnalysisTaskJetChem::kOffl, Int_t ALatype = AliAnalysisTaskJetChem::kOffl, Bool_t IsArmenterosSelected = kTRUE, Bool_t IsJetPtBiasSelected = kTRUE, Double_t jetradius = 0.2, Double_t V0EtaCut = 0.7, Double_t jetEtaCut = 0.5, Bool_t IsMC = kFALSE, Double_t DeltaVtxZCut = 0.1, Int_t filtermask = 768, Int_t fdebug = -1)
2 {
3   // Creates a JetChem task,
4   // configures it and adds it to the analysis manager.
5   //for cut variations, set TString cutVar either to "noCutVar", "CPAMin", "CPAMax", "DCADMin", "DCADMax", "LifetMin" or "LifetMax"
6    
7   // Get the pointer to the existing analysis manager via the static access method.
8   //==============================================================================
9   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
10   if (!mgr) {
11     ::Error("AddTaskJetChem", "No analysis manager to connect to.");
12     return NULL;
13   }
14   
15   // Check the analysis type using the event handlers connected to the analysis manager.
16   //==============================================================================
17   if (!mgr->GetInputEventHandler()) {
18     ::Error("AddTaskJetChem", "This task requires an input event handler");
19     return NULL;
20   }
21   
22   TString type = mgr->GetInputEventHandler()->GetDataType(); // can be "ESD" or "AOD", or "MC"?
23   Printf("Data Type: %s", type.Data());
24   
25   
26   // Create the task and configure it.
27   //===========================================================================
28   AliAnalysisTaskJetChem *task = new AliAnalysisTaskJetChem("TaskJetChem");
29
30   Int_t debug = fdebug; // debug level
31   if(debug>=0) task->SetDebugLevel(debug);
32   
33   TString branchRecJets(recJetsBranch);
34   if(!branchRecJets.Contains("noRecJets")) task->SetBranchRecJets(branchRecJets);
35
36   // Double_t V0EtaCut, Double_t jetEtaCut, Bool_t IsMC, Double_t DeltaVtxZCut can be set externally
37
38   fJetAreaMin = 0.6*TMath::Pi()*jetradius*jetradius;//calculate jetareamin cut value for FF task
39   task->SetJetMinArea(fJetAreaMin);//cut on jet area, applied together with all other jet cuts in jet finding by AliAnalysisTaskFragmentationFunction.cxx
40   task->SetCutJetEta(jetEtaCut);
41   task->SetDeltaZVertexCut(DeltaVtxZCut);
42   task->SetBranchRecBackClusters("clustersAOD_KT04_B0_Filter00768_Cut00150_Skip00"); 
43   //task->SetEventSelectionMask(AliVEvent::kMB); //for 2010 Pb-Pb data !!
44   task->SetEventSelectionMask(AliVEvent::kAnyINT | AliVEvent::kCentral | AliVEvent::kSemiCentral); //event selection for 2011 Pb-Pb data
45   task->SetEventClass(eventClass);
46   task->SetK0Type(K0type);
47   task->SetLaType(Latype); 
48   task->SetALaType(ALatype); 
49   task->SetSelectArmenteros(IsArmenterosSelected);
50   task->SetAnalysisMC(IsMC); // 0: real data, 1: MC data
51
52   if(K0type == AliAnalysisTaskJetChem::kOnFlyPrim || AliAnalysisTaskJetChem::kOfflPrim) task->SetFilterMaskK0(768);
53   if(Latype == AliAnalysisTaskJetChem::kOnFlyPrim || AliAnalysisTaskJetChem::kOfflPrim) task->SetFilterMaskLa(768);
54   if(ALatype == AliAnalysisTaskJetChem::kOnFlyPrim || AliAnalysisTaskJetChem::kOfflPrim) task->SetFilterMaskALa(768);
55
56   task->SetFFRadius(jetradius); //jet cone size
57   task->SetFilterMask(filtermask);//2011 Track FilterMask
58
59   //Cuts---------------------------------
60
61   
62   task->SetTrackCuts(0.15, -0.9, 0.9, 0., 2*TMath::Pi());// (pt Cut, daughtertrack rap's, phi min max cuts)
63   task->SetJetCuts(5., (-1)*jetEtaCut, jetEtaCut, 0., 2*TMath::Pi());//(jet pt Cut, jet acceptance, phi min max cuts)
64   task->SetCuttrackPosEta(0.8);
65   task->SetCuttrackNegEta(0.8);
66   task->SetCutV0Eta(V0EtaCut); //pseudorapidity cut, dont use 0.5, because too many tracks would fall out of the acceptance; recommended cut for jet analysis of strange particles: 0.75
67   task->SetCosOfPointingAngle(0.998);
68   task->SetAcceptKinkDaughters(kFALSE);//accept kink daughters -> dont use this cut anymore
69   task->SetRequireTPCRefit(kTRUE);
70   task->SetCutV0DecayMin(0.);//multiples of ctau, cut on 2D decay distance over transverse mom. (for K0s, Lambda, Antilambda)
71   task->SetCutV0DecayMax(5.);//multiples of ctau (for K0s, Lambda, Antilambda) Lee Barnby uses 3.0, use 5.0!!!!!
72   task->SetCutDcaV0Daughters(1.);//cut value in multiples of sigma default: 1.
73   task->SetCutDcaPosToPrimVertex(0.1); //cut value in cm 
74   task->SetCutDcaNegToPrimVertex(0.1); //cut value in cm
75   task->SetCutV0RadiusMin(5.);//in cm previous value was 0.9 cm
76   task->SetCutV0RadiusMax(100.);//in cm
77   task->SetCutBetheBloch(3.);//in units of sigma
78
79   //task->SetCutRatioTPC(0.8);//Cut on Ratio of crossed Rows over findable clusters in TPC -> not used anymore by Strangeness PAG group
80    //task->SetCuttrackPosNcls(70);
81   //task->SetCuttrackNegNcls(70);
82   //task->SetCuttrackPosRap(100000.0);
83   //task->SetCuttrackNegRap(100000.0);
84   //task->SetCutV0Rap(0.5);
85   //task->SetCutV0totMom(10000.);//tot Mom of V0s 
86
87   //Armenteros Cut:
88  
89   if(IsArmenterosSelected == 1){
90     task->SetCutArmenteros(0.2);
91   } else {
92     task->SetCutArmenteros(0.);
93   }
94   
95   if(IsJetPtBiasSelected == 1){
96     task->SetFFMinLTrackPt(5.);//at least one track must have a track-pt higher or equal than this JetMinPt value
97   } else {
98     task->SetFFMinLTrackPt(-1.);
99   }
100   
101   //------------------------------------
102   // Define histo bins
103   task->SetFFHistoBins();
104   task->SetQAJetHistoBins();
105   task->SetQATrackHistoBins();
106   task->SetFFInvMassHistoBins();
107   task->SetFFInvMassLaHistoBins();
108   
109   mgr->AddTask(task);
110   
111    // Create ONLY the output containers for the data produced by the task.
112    // Get and connect other common input/output containers via the manager as below
113    //==============================================================================
114
115    TString strK0type;
116    if(K0type ==  AliAnalysisTaskJetChem::kOnFly)     strK0type = "OnFly";
117    if(K0type ==  AliAnalysisTaskJetChem::kOnFlyPID)  strK0type = "OnFlyPID";
118    if(K0type ==  AliAnalysisTaskJetChem::kOnFlydEdx) strK0type = "OnFlydEdx";
119    if(K0type ==  AliAnalysisTaskJetChem::kOnFlyPrim) strK0type = "OnFlyPrim";
120    if(K0type ==  AliAnalysisTaskJetChem::kOffl)      strK0type = "Offl";
121    if(K0type ==  AliAnalysisTaskJetChem::kOfflPID)   strK0type = "OfflPID";
122    if(K0type ==  AliAnalysisTaskJetChem::kOffldEdx)  strK0type = "OffldEdx";
123    if(K0type ==  AliAnalysisTaskJetChem::kOfflPrim)  strK0type = "OfflPrim";
124
125    TString strLatype;
126    if(Latype ==  AliAnalysisTaskJetChem::kOnFly)     strLatype = "OnFly";
127    if(Latype ==  AliAnalysisTaskJetChem::kOnFlyPID)  strLatype = "OnFlyPID";
128    if(Latype ==  AliAnalysisTaskJetChem::kOnFlydEdx) strLatype = "OnFlydEdx";
129    if(Latype ==  AliAnalysisTaskJetChem::kOnFlyPrim) strLatype = "OnFlyPrim";
130    if(Latype ==  AliAnalysisTaskJetChem::kOffl)      strLatype = "Offl";
131    if(Latype ==  AliAnalysisTaskJetChem::kOfflPID)   strLatype = "OfflPID";
132    if(Latype ==  AliAnalysisTaskJetChem::kOffldEdx)  strLatype = "OffldEdx";
133    if(Latype ==  AliAnalysisTaskJetChem::kOfflPrim)  strLatype = "OfflPrim";
134
135    TString strALatype;
136    if(ALatype ==  AliAnalysisTaskJetChem::kOnFly)     strALatype = "OnFly";
137    if(ALatype ==  AliAnalysisTaskJetChem::kOnFlyPID)  strALatype = "OnFlyPID";
138    if(ALatype ==  AliAnalysisTaskJetChem::kOnFlydEdx) strALatype = "OnFlydEdx";
139    if(ALatype ==  AliAnalysisTaskJetChem::kOnFlyPrim) strALatype = "OnFlyPrim";
140    if(ALatype ==  AliAnalysisTaskJetChem::kOffl)      strALatype = "Offl";
141    if(ALatype ==  AliAnalysisTaskJetChem::kOfflPID)   strALatype = "OfflPID";
142    if(ALatype ==  AliAnalysisTaskJetChem::kOffldEdx)  strALatype = "OffldEdx";
143    if(ALatype ==  AliAnalysisTaskJetChem::kOfflPrim)  strALatype = "OfflPrim";
144    
145    if((IsArmenterosSelected == 0) && (IsJetPtBiasSelected == 0)){
146        TString listName1(Form("PWG4_JetChem_%s_%s_cl%d_%s",branchRecJets.Data(),strK0type.Data(),eventClass,cutVar.Data()));
147        AliAnalysisDataContainer *coutput_JetChem = mgr->CreateContainer(listName1, 
148                                                                         TList::Class(),
149                                                                         AliAnalysisManager::kOutputContainer,
150                                                                         Form("%s:PWG4_zimmerma_JetChem",AliAnalysisManager::GetCommonFileName()));
151        
152      }
153
154    if((IsArmenterosSelected == 1) && (IsJetPtBiasSelected == 0)){
155      TString listName2(Form("PWG4_JetChem_%s_%s_cl%d_Armenteros_%s",branchRecJets.Data(),strK0type.Data(),eventClass,cutVar.Data()));
156        AliAnalysisDataContainer *coutput_JetChem = mgr->CreateContainer(listName2, 
157                                                                         TList::Class(),
158                                                                         AliAnalysisManager::kOutputContainer,
159                                                                         Form("%s:PWG4_zimmerma_JetChem_Armenteros",AliAnalysisManager::GetCommonFileName()));
160        
161      }
162       
163    
164    if((IsArmenterosSelected == 0) && (IsJetPtBiasSelected == 1)) {
165      TString listName3(Form("PWG4_JetChem_%s_%s_cl%d_JetPtbias_%s",branchRecJets.Data(),strK0type.Data(),eventClass,cutVar.Data()));
166        AliAnalysisDataContainer *coutput_JetChem = mgr->CreateContainer(listName3, 
167                                                                         TList::Class(),
168                                                                         AliAnalysisManager::kOutputContainer,
169                                                                         Form("%s:PWG4_zimmerma_JetChem_JetPtBias",AliAnalysisManager::GetCommonFileName()));
170      }
171    
172    if((IsArmenterosSelected == 1) && (IsJetPtBiasSelected == 1)) {
173        TString listName4(Form("PWG4_JetChem_%s_%s_cl%d_Armenteros_JetPtBias_%s",branchRecJets.Data(),strK0type.Data(),eventClass,cutVar.Data()));
174        AliAnalysisDataContainer *coutput_JetChem = mgr->CreateContainer(listName4, 
175                                                                         TList::Class(),
176                                                                         AliAnalysisManager::kOutputContainer,
177                                                                         Form("%s:PWG4_zimmerma_JetChem_Armenteros_JetPtBias",AliAnalysisManager::GetCommonFileName()));
178      } 
179    
180
181
182
183
184    mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
185    mgr->ConnectOutput(task, 1, coutput_JetChem);
186    
187    return task;
188 }