]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/GammaConv/macros/AddTask_GammaConvNeutralMesonPiPlPiMiPiZero_CaloMode_pPb.C
Merge branch 'master_patch'
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / macros / AddTask_GammaConvNeutralMesonPiPlPiMiPiZero_CaloMode_pPb.C
1 void AddTask_GammaConvNeutralMesonPiPlPiMiPiZero_CaloMode_pPb(    
2                                                                                 Int_t trainConfig = 1,
3                                                                                 Bool_t isMC       = kFALSE, //run MC 
4                                                                                 Bool_t enableQAMesonTask = kTRUE, //enable QA in AliAnalysisTaskNeutralMesonToPiPlPiMiPiZero
5                                                                                 TString fileNameInputForWeighting = "MCSpectraInput.root", // path to file for weigting input
6                                                                                 Bool_t doWeighting = kFALSE,  //enable Weighting
7                                                                                 TString generatorName = "HIJING",                               
8                                                                                 TString cutnumberAODBranch = "0000000060084001001500000"
9                                                                                 ) {
10
11         // ================= Load Librariers =================================
12         gSystem->Load("libCore.so");  
13         gSystem->Load("libTree.so");
14         gSystem->Load("libGeom.so");
15         gSystem->Load("libVMC.so");
16         gSystem->Load("libPhysics.so");
17         gSystem->Load("libMinuit");
18         gSystem->Load("libSTEERBase");
19         gSystem->Load("libESD");
20         gSystem->Load("libAOD");
21         gSystem->Load("libANALYSIS");
22         gSystem->Load("libANALYSISalice");  
23         gSystem->Load("libPWGGAGammaConv.so");
24         gSystem->Load("libCDB.so");
25         gSystem->Load("libSTEER.so");
26         gSystem->Load("libSTEERBase.so");
27         gSystem->Load("libTENDER.so");
28         gSystem->Load("libTENDERSupplies.so");
29
30         Int_t isHeavyIon = 2;
31         Int_t neutralPionMode = 2;
32         
33         // ================== GetAnalysisManager ===============================
34         AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
35         if (!mgr) {
36                 Error(Form("AddTask_GammaConvNeutralMesonPiPlPiMiPiZero_pPb_%i",trainConfig), "No analysis manager found.");
37                 return ;
38         }
39
40         // ================== GetInputEventHandler =============================
41         AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
42         
43         //========= Add PID Reponse to ANALYSIS manager ====
44         if(!(AliPIDResponse*)mgr->GetTask("PIDResponseTask")){
45                 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
46                 AddTaskPIDResponse(isMC);
47         }
48         
49         //=========  Set Cutnumber for V0Reader ================================
50         TString cutnumberPhoton = "060084001001500000000";
51         TString cutnumberEvent = "8000000";
52         TString PionCuts      = "000000200";            //Electron Cuts
53         
54
55         
56         Bool_t doEtaShift = kFALSE;
57
58         AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
59         
60         //========= Add V0 Reader to  ANALYSIS manager if not yet existent =====
61         if( !(AliV0ReaderV1*)mgr->GetTask("V0ReaderV1") ){
62                 AliV0ReaderV1 *fV0ReaderV1 = new AliV0ReaderV1("V0ReaderV1");
63                 
64                 fV0ReaderV1->SetUseOwnXYZCalculation(kTRUE);
65                 fV0ReaderV1->SetCreateAODs(kFALSE);// AOD Output
66                 fV0ReaderV1->SetUseAODConversionPhoton(kTRUE);
67                 
68                 if (!mgr) {
69                         Error("AddTask_V0ReaderV1", "No analysis manager found.");
70                         return;
71                 }
72
73                 AliConvEventCuts *fEventCuts=NULL;
74                 if(cutnumberEvent!=""){
75                         fEventCuts= new AliConvEventCuts(cutnumberEvent.Data(),cutnumberEvent.Data());
76                         fEventCuts->SetPreSelectionCutFlag(kTRUE);
77                         if(fEventCuts->InitializeCutsFromCutString(cutnumberEvent.Data())){
78                                 fEventCuts->DoEtaShift(doEtaShift);
79                                 fV0ReaderV1->SetEventCuts(fEventCuts);
80                                 fEventCuts->SetFillCutHistograms("",kTRUE);
81                         }
82                 }
83
84                 // Set AnalysisCut Number
85                 AliConversionPhotonCuts *fCuts=NULL;
86                 if(cutnumberPhoton!=""){
87                         fCuts= new AliConversionPhotonCuts(cutnumberPhoton.Data(),cutnumberPhoton.Data());
88                         fCuts->SetPreSelectionCutFlag(kTRUE);
89                         fCuts->SetIsHeavyIon(isHeavyIon);
90                         if(fCuts->InitializeCutsFromCutString(cutnumberPhoton.Data())){
91                                 fV0ReaderV1->SetConversionCuts(fCuts);
92                                 fCuts->SetFillCutHistograms("",kTRUE);
93                         }
94                 }
95
96                 if(inputHandler->IsA()==AliAODInputHandler::Class()){
97                 // AOD mode
98                         fV0ReaderV1->SetDeltaAODBranchName(Form("GammaConv_%s_gamma",cutnumberAODBranch.Data()));
99                 }
100                 fV0ReaderV1->Init();
101
102                 AliLog::SetGlobalLogLevel(AliLog::kInfo);
103
104                 //connect input V0Reader
105                 mgr->AddTask(fV0ReaderV1);
106                 mgr->ConnectInput(fV0ReaderV1,0,cinput);
107         }
108
109         //================================================
110         //========= Add Electron Selector ================
111
112
113         if( !(AliPrimaryPionSelector*)mgr->GetTask("PionSelector") ){
114
115                 AliPrimaryPionSelector *fPionSelector = new AliPrimaryPionSelector("PionSelector");
116                 // Set AnalysisCut Number
117
118                 AliPrimaryPionCuts *fPionCuts=0;
119                 if( PionCuts!=""){
120                         fPionCuts= new AliPrimaryPionCuts(PionCuts.Data(),PionCuts.Data());
121                         if(fPionCuts->InitializeCutsFromCutString(PionCuts.Data())){
122                                 fPionSelector->SetPrimaryPionCuts(fPionCuts);
123                                 fPionCuts->SetFillCutHistograms("",kTRUE);
124
125                         }
126                 }
127
128                 fPionSelector->Init();
129                 mgr->AddTask(fPionSelector);
130                 
131                 AliAnalysisDataContainer *cinput1  = mgr->GetCommonInputContainer();
132
133                 //connect input V0Reader
134                 mgr->ConnectInput (fPionSelector,0,cinput1);
135
136         }
137
138         
139         
140         AliAnalysisTaskNeutralMesonToPiPlPiMiPiZero *task=NULL;
141
142         task= new AliAnalysisTaskNeutralMesonToPiPlPiMiPiZero(Form("GammaConvNeutralMesonPiPlPiMiPiZero_%i_%i",neutralPionMode, trainConfig));
143
144         task->SetIsHeavyIon(2);
145         task->SetIsMC(isMC);
146
147         // Cut Numbers to use in Analysis
148         Int_t numberOfCuts = 1;
149
150         TString *eventCutArray                  = new TString[numberOfCuts];
151         TString *ClusterCutarray                = new TString[numberOfCuts];
152         TString *PionCutarray                   = new TString[numberOfCuts];
153         TString *NeutralPionCutarray    = new TString[numberOfCuts];
154         TString *MesonCutarray                  = new TString[numberOfCuts];
155         
156         Bool_t doEtaShiftIndCuts = kFALSE;
157         TString stringShift = "";
158
159         // Shifting in pPb direction
160
161         doEtaShiftIndCuts = kTRUE;
162         stringShift = "pPb";
163
164         // EMCAL modes
165         if( trainConfig == 1 ) {
166                 // everything open
167                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "000010400"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
168         } else if( trainConfig == 2 ) {
169                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, min pt charged pi = 100 MeV
170                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002010700"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
171         } else if( trainConfig == 3 ) {
172                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 5 sigma, min pt charged pi = 100 MeV
173                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002013700"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
174         } else if( trainConfig == 4 ) {
175                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
176                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
177         } else if( trainConfig == 5 ) {
178                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
179                 // closing neural pion cuts, 0.1 < M_gamma,gamma < 0.145
180                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035031000000"; MesonCutarray[0] = "01035030000000";         
181         } else if( trainConfig == 6 ) {
182                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
183                 // closing neural pion cuts, 0.11 < M_gamma,gamma < 0.145
184                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035032000000"; MesonCutarray[0] = "01035030000000";         
185         } else if( trainConfig == 7 ) {
186                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
187                 // closing neural pion cuts, 0.12 < M_gamma,gamma < 0.145
188                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035033000000"; MesonCutarray[0] = "01035030000000";         
189         } else if( trainConfig == 8 ) {
190                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 5 sigma, min pt charged pi = 100 MeV
191                 // closing neural pion cuts, 0.12 < M_gamma,gamma < 0.145
192                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002013700"; NeutralPionCutarray[0] = "01035033000000"; MesonCutarray[0] = "01035030000000";                         
193         } else if( trainConfig == 9 ) {
194                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, pi+pi- mass Cut at 0.75, min pt charged pi = 100 MeV
195                 // closing neural pion cuts, 0.1 < M_gamma,gamma < 0.145
196                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "10000040022030000"; PionCutarray[0] = "002010702"; NeutralPionCutarray[0] = "01035031000000"; MesonCutarray[0] = "01035030000000"; 
197         }
198
199         
200         // PHOS modes
201         if( trainConfig == 31 ) {
202                 // everything open
203                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "000010400"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
204         } else if( trainConfig == 32 ) {
205                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, min pt charged pi = 100 MeV
206                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002010700"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
207         } else if( trainConfig == 33 ) {
208                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 5 sigma, min pt charged pi = 100 MeV
209                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002013700"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
210         } else if( trainConfig == 34 ) {
211                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
212                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035030000000"; MesonCutarray[0] = "01035030000000"; 
213         } else if( trainConfig == 35 ) {
214                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
215                 // closing neural pion cuts, 0.1 < M_gamma,gamma < 0.145
216                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035031000000"; MesonCutarray[0] = "01035030000000";         
217         } else if( trainConfig == 36 ) {
218                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
219                 // closing neural pion cuts, 0.11 < M_gamma,gamma < 0.145
220                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035032000000"; MesonCutarray[0] = "01035030000000";         
221         } else if( trainConfig == 37 ) {
222                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 4 sigma, min pt charged pi = 100 MeV
223                 // closing neural pion cuts, 0.12 < M_gamma,gamma < 0.145
224                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002016700"; NeutralPionCutarray[0] = "01035033000000"; MesonCutarray[0] = "01035030000000";         
225         } else if( trainConfig == 38 ) {
226                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, ITS dEdx = \pm 5 sigma, min pt charged pi = 100 MeV
227                 // closing neural pion cuts, 0.12 < M_gamma,gamma < 0.145
228                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002013700"; NeutralPionCutarray[0] = "01035033000000"; MesonCutarray[0] = "01035030000000";                         
229         } else if( trainConfig == 39 ) {
230                 // closing charged pion cuts, minimum TPC cluster = 80, TPC dEdx pi = \pm 3 sigma, pi+pi- mass Cut at 0.75, min pt charged pi = 100 MeV
231                 // closing neural pion cuts, 0.1 < M_gamma,gamma < 0.145
232                 eventCutArray[ 0] = "8000011"; ClusterCutarray[0] = "20000030022000000"; PionCutarray[0] = "002010702"; NeutralPionCutarray[0] = "01035031000000"; MesonCutarray[0] = "01035030000000"; 
233         }
234
235         
236         TList *EventCutList = new TList();
237         TList *ClusterCutList  = new TList();
238         TList *NeutralPionCutList = new TList();
239         TList *MesonCutList = new TList();
240         TList *PionCutList  = new TList();
241
242         TList *HeaderList = new TList();
243         TObjString *Header1 = new TObjString("pi0_1");
244         HeaderList->Add(Header1);
245         TObjString *Header3 = new TObjString("eta_2");
246         HeaderList->Add(Header3);
247         
248         EventCutList->SetOwner(kTRUE);
249         AliConvEventCuts **analysisEventCuts = new AliConvEventCuts*[numberOfCuts];
250         ClusterCutList->SetOwner(kTRUE);
251         AliCaloPhotonCuts **analysisClusterCuts = new AliCaloPhotonCuts*[numberOfCuts];
252         NeutralPionCutList->SetOwner(kTRUE);
253         AliConversionMesonCuts **analysisNeutralPionCuts   = new AliConversionMesonCuts*[numberOfCuts];
254         MesonCutList->SetOwner(kTRUE);
255         AliConversionMesonCuts **analysisMesonCuts   = new AliConversionMesonCuts*[numberOfCuts];
256         PionCutList->SetOwner(kTRUE);
257         AliPrimaryPionCuts **analysisPionCuts     = new AliPrimaryPionCuts*[numberOfCuts];
258
259         for(Int_t i = 0; i<numberOfCuts; i++){
260                 analysisEventCuts[i] = new AliConvEventCuts();   
261                 analysisEventCuts[i]->InitializeCutsFromCutString(eventCutArray[i].Data());
262                 EventCutList->Add(analysisEventCuts[i]);
263                 analysisEventCuts[i]->SetFillCutHistograms("",kFALSE);
264
265                 analysisClusterCuts[i] = new AliCaloPhotonCuts();
266                 if( ! analysisClusterCuts[i]->InitializeCutsFromCutString(ClusterCutarray[i].Data()) ) {
267                                 cout<<"ERROR: analysisClusterCuts [" <<i<<"]"<<endl;
268                                 return 0;
269                 } else {                                
270                         ClusterCutList->Add(analysisClusterCuts[i]);
271                         analysisClusterCuts[i]->SetFillCutHistograms("");                       
272                 }
273
274                 analysisNeutralPionCuts[i] = new AliConversionMesonCuts();
275                 if( ! analysisNeutralPionCuts[i]->InitializeCutsFromCutString(NeutralPionCutarray[i].Data()) ) {
276                         cout<<"ERROR: analysisMesonCuts [ " <<i<<" ] "<<endl;
277                         return 0;
278                 } else {
279                         NeutralPionCutList->Add(analysisNeutralPionCuts[i]);
280                         analysisNeutralPionCuts[i]->SetFillCutHistograms("");
281                 }
282         
283                 analysisMesonCuts[i] = new AliConversionMesonCuts();
284                 if( ! analysisMesonCuts[i]->InitializeCutsFromCutString(MesonCutarray[i].Data()) ) {
285                         cout<<"ERROR: analysisMesonCuts [ " <<i<<" ] "<<endl;
286                         return 0;
287                 } else {
288                         MesonCutList->Add(analysisMesonCuts[i]);
289                         analysisMesonCuts[i]->SetFillCutHistograms("");
290                 }
291                 analysisEventCuts[i]->SetAcceptedHeader(HeaderList);
292                 
293                 TString cutName( Form("%s_%s_%s_%s_%s",eventCutArray[i].Data(), ClusterCutarray[i].Data(),PionCutarray[i].Data(),NeutralPionCutarray[i].Data(), MesonCutarray[i].Data() ) );
294                 analysisPionCuts[i] = new AliPrimaryPionCuts();
295                 if( !analysisPionCuts[i]->InitializeCutsFromCutString(PionCutarray[i].Data())) {
296                         cout<< "ERROR:  analysisPionCuts [ " <<i<<" ] "<<endl;
297                         return 0;
298                 } else { 
299                         PionCutList->Add(analysisPionCuts[i]);
300                         analysisPionCuts[i]->SetFillCutHistograms("",kFALSE,cutName); 
301                 }
302         }
303
304         task->SetNeutralPionMode(neutralPionMode);
305         task->SetEventCutList(numberOfCuts,EventCutList);
306         task->SetClusterCutList(ClusterCutList);
307         task->SetNeutralPionCutList(NeutralPionCutList);
308         task->SetMesonCutList(MesonCutList);
309         task->SetPionCutList(PionCutList);
310
311         task->SetMoveParticleAccordingToVertex(kTRUE);
312
313         if(enableQAMesonTask) task->SetDoMesonQA(kTRUE);
314
315         //connect containers
316         AliAnalysisDataContainer *coutput =
317         mgr->CreateContainer(Form("GammaConvNeutralMesonPiPlPiMiPiZero_%i_%i",neutralPionMode, trainConfig), TList::Class(),
318                                                         AliAnalysisManager::kOutputContainer,Form("GammaConvNeutralMesonPiPlPiMiPiZero_%i_%i.root",neutralPionMode, trainConfig));
319
320         mgr->AddTask(task);
321         mgr->ConnectInput(task,0,cinput);
322         mgr->ConnectOutput(task,1,coutput);
323
324         return;
325
326 }