]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/GammaConv/macros/AddTask_GammaCalo_PbPb.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / macros / AddTask_GammaCalo_PbPb.C
1 void AddTask_GammaCalo_PbPb(            Int_t trainConfig = 1,  //change different set of cuts
2                                                                         Bool_t isMC   = kFALSE, //run MC 
3                                                                         Int_t enableQAMesonTask = 0, //enable QA in AliAnalysisTaskGammaConvV1
4                                                                         Int_t enableQAClusterTask = 0, // enable additional QA task
5                                                                         TString fileNameInputForWeighting = "MCSpectraInput.root", // path to file for weigting input
6                                                                         Int_t headerSelectionInt = 0,  // 1 pi0 header, 2 eta header, 3 both (only for "named" boxes)
7                                                                         TString cutnumberAODBranch = "1000000060084000001500000",
8                                                                         TString periodName = "LHC13d2",  //name of the period for added signals and weighting
9                                     Bool_t doWeighting = kFALSE,  //enable Weighting
10                                     Bool_t isUsingTHnSparse = kTRUE //enable or disable usage of THnSparses for background estimation
11                                                                 ) {
12
13         // ================= Load Librariers =================================
14         gSystem->Load("libCore");  
15         gSystem->Load("libTree");
16         gSystem->Load("libGeom");
17         gSystem->Load("libVMC");
18         gSystem->Load("libPhysics");
19         gSystem->Load("libMinuit");
20         gSystem->Load("libSTEERBase");
21         gSystem->Load("libESD");
22         gSystem->Load("libAOD");
23         gSystem->Load("libANALYSIS");
24         gSystem->Load("libANALYSISalice");  
25         gSystem->Load("libCDB");
26         gSystem->Load("libSTEER");
27         gSystem->Load("libSTEERBase");
28         gSystem->Load("libTender");
29         gSystem->Load("libTenderSupplies");
30         gSystem->Load("libPWGflowBase");
31         gSystem->Load("libPWGflowTasks");
32         gSystem->Load("libPWGGAGammaConv");
33         
34         Int_t isHeavyIon = 1;
35         
36         // ================== GetAnalysisManager ===============================
37         AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
38         if (!mgr) {
39                 Error(Form("AddTask_GammaConvV1_%i",trainConfig), "No analysis manager found.");
40                 return ;
41         }
42
43         // ================== GetInputEventHandler =============================
44         AliVEventHandler *inputHandler=mgr->GetInputEventHandler();
45         
46         //========= Add PID Reponse to ANALYSIS manager ====
47         if(!(AliPIDResponse*)mgr->GetTask("PIDResponseTask")){
48                 gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPIDResponse.C");
49                 AddTaskPIDResponse(isMC);
50         }
51         
52         //=========  Set Cutnumber for V0Reader ================================
53         TString cutnumberPhoton = "000000084001001500000000";
54         TString cutnumberEvent = "1000000";
55         AliAnalysisDataContainer *cinput = mgr->GetCommonInputContainer();
56
57         //========= Add V0 Reader to  ANALYSIS manager if not yet existent =====
58         if( !(AliV0ReaderV1*)mgr->GetTask("V0ReaderV1") ){
59                 AliV0ReaderV1 *fV0ReaderV1 = new AliV0ReaderV1("V0ReaderV1");
60                 
61                 fV0ReaderV1->SetUseOwnXYZCalculation(kTRUE);
62                 fV0ReaderV1->SetCreateAODs(kFALSE);// AOD Output
63                 fV0ReaderV1->SetUseAODConversionPhoton(kTRUE);
64
65                 if (!mgr) {
66                         Error("AddTask_V0ReaderV1", "No analysis manager found.");
67                         return;
68                 }
69
70                 AliConvEventCuts *fEventCuts=NULL;
71                 if(cutnumberEvent!=""){
72                         fEventCuts= new AliConvEventCuts(cutnumberEvent.Data(),cutnumberEvent.Data());
73                         fEventCuts->SetPreSelectionCutFlag(kTRUE);
74                         if(fEventCuts->InitializeCutsFromCutString(cutnumberEvent.Data())){
75                                 fV0ReaderV1->SetEventCuts(fEventCuts);
76                                 fEventCuts->SetFillCutHistograms("",kTRUE);
77                         }
78                 }
79
80                 
81                 // Set AnalysisCut Number
82                 AliConversionPhotonCuts *fCuts=NULL;
83                 if(cutnumberPhoton!=""){
84                         fCuts= new AliConversionPhotonCuts(cutnumberPhoton.Data(),cutnumberPhoton.Data());
85                         fCuts->SetPreSelectionCutFlag(kTRUE);
86                         fCuts->SetIsHeavyIon(isHeavyIon);
87                         if(fCuts->InitializeCutsFromCutString(cutnumberPhoton.Data())){
88                                 fV0ReaderV1->SetConversionCuts(fCuts);
89                                 fCuts->SetFillCutHistograms("",kTRUE);
90                         }
91                 }
92
93                 if(inputHandler->IsA()==AliAODInputHandler::Class()){
94                 // AOD mode
95                         fV0ReaderV1->SetDeltaAODBranchName(Form("GammaConv_%s_gamma",cutnumberAODBranch.Data()));
96                 }
97                 fV0ReaderV1->Init();
98
99                 AliLog::SetGlobalLogLevel(AliLog::kFatal);
100
101                 //connect input V0Reader
102                 mgr->AddTask(fV0ReaderV1);
103                 mgr->ConnectInput(fV0ReaderV1,0,cinput);
104
105         }
106
107         //================================================
108         //========= Add task to the ANALYSIS manager =====
109         //================================================
110         AliAnalysisTaskGammaCalo *task=NULL;
111         task= new AliAnalysisTaskGammaCalo(Form("GammaCalo_%i",trainConfig));
112         task->SetIsHeavyIon(isHeavyIon);
113         task->SetIsMC(isMC);
114         // Cut Numbers to use in Analysis
115         Int_t numberOfCuts = 5;
116
117         TString *eventCutArray = new TString[numberOfCuts];
118         TString *clusterCutArray = new TString[numberOfCuts];
119         TString *mesonCutArray = new TString[numberOfCuts];
120
121         // meson cuts
122         // meson type (Dalitz or not), BG scheme, pool depth, rotation degrees, rapidity cut, radius cut, alpha, chi2, shared electrons, reject to close v0, MC smearing, dca, dca, dca
123   
124         if (trainConfig == 1){ // EMCAL clusters
125                 eventCutArray[ 0] = "6010001"; clusterCutArray[0] = "10000040032030000"; mesonCutArray[ 0] = "01631031000000"; // 0-5%
126                 eventCutArray[ 1] = "6120001"; clusterCutArray[1] = "10000040032030000"; mesonCutArray[ 1] = "01631031000000"; // 5-10%
127                 eventCutArray[ 2] = "5010001"; clusterCutArray[2] = "10000040032030000"; mesonCutArray[ 2] = "01631031000000"; // 0-10%
128                 eventCutArray[ 3] = "5240001"; clusterCutArray[3] = "10000040032030000"; mesonCutArray[ 3] = "01631031000000"; // 20-40%
129                 eventCutArray[ 4] = "5250001"; clusterCutArray[4] = "10000040032030000"; mesonCutArray[ 4] = "01631031000000"; // 20-50%
130         } else if (trainConfig == 2){ // EMCAL clusters
131                 eventCutArray[ 0] = "6010001"; clusterCutArray[0] = "10000040032030000"; mesonCutArray[ 0] = "01631031000000"; // 0-5%
132                 eventCutArray[ 1] = "6120001"; clusterCutArray[1] = "10000040032030000"; mesonCutArray[ 1] = "01631031000000"; // 5-10%
133                 eventCutArray[ 2] = "5010001"; clusterCutArray[2] = "10000040032030000"; mesonCutArray[ 2] = "01631031000000"; // 0-10%
134                 eventCutArray[ 3] = "5120001"; clusterCutArray[3] = "10000040032030000"; mesonCutArray[ 3] = "01631031000000"; // 10-20%
135                 eventCutArray[ 4] = "5240001"; clusterCutArray[4] = "10000040032030000"; mesonCutArray[ 4] = "01631031000000"; // 20-40%                
136         } else if (trainConfig == 3){ // EMCAL clusters
137                 eventCutArray[ 0] = "5460001"; clusterCutArray[0] = "10000040032030000"; mesonCutArray[ 0] = "01631031000000"; // 40-60%
138                 eventCutArray[ 1] = "5680001"; clusterCutArray[1] = "10000040032030000"; mesonCutArray[ 1] = "01631031000000"; // 60-80%
139                 eventCutArray[ 2] = "5260001"; clusterCutArray[2] = "10000040032030000"; mesonCutArray[ 2] = "01631031000000"; // 20-60%
140                 eventCutArray[ 3] = "5480001"; clusterCutArray[3] = "10000040032030000"; mesonCutArray[ 3] = "01631031000000"; // 40-80%
141                 eventCutArray[ 4] = "5250001"; clusterCutArray[4] = "10000040032030000"; mesonCutArray[ 4] = "01631031000000"; // 20-50%                                
142         } else if (trainConfig == 31){ // PHOS clusters
143                 eventCutArray[ 0] = "6010001"; clusterCutArray[0] = "20000040033200000"; mesonCutArray[ 0] = "01631031000000"; // 0-5%
144                 eventCutArray[ 1] = "6120001"; clusterCutArray[1] = "20000040033200000"; mesonCutArray[ 1] = "01631031000000"; // 5-10%
145                 eventCutArray[ 2] = "5010001"; clusterCutArray[2] = "20000040033200000"; mesonCutArray[ 2] = "01631031000000"; // 0-10%
146                 eventCutArray[ 3] = "5240001"; clusterCutArray[3] = "20000040033200000"; mesonCutArray[ 3] = "01631031000000"; // 20-40%
147                 eventCutArray[ 4] = "5250001"; clusterCutArray[4] = "20000040033200000"; mesonCutArray[ 4] = "01631031000000"; // 20-50%
148         } else if (trainConfig == 32){ // PHOS clusters
149                 eventCutArray[ 0] = "6010001"; clusterCutArray[0] = "20000040033200000"; mesonCutArray[ 0] = "01631031000000"; // 0-5%
150                 eventCutArray[ 1] = "6120001"; clusterCutArray[1] = "20000040033200000"; mesonCutArray[ 1] = "01631031000000"; // 5-10%
151                 eventCutArray[ 2] = "5010001"; clusterCutArray[2] = "20000040033200000"; mesonCutArray[ 2] = "01631031000000"; // 0-10%
152                 eventCutArray[ 3] = "5120001"; clusterCutArray[3] = "20000040033200000"; mesonCutArray[ 3] = "01631031000000"; // 10-20%
153                 eventCutArray[ 4] = "5240001"; clusterCutArray[4] = "20000040033200000"; mesonCutArray[ 4] = "01631031000000"; // 20-40%                
154         } else if (trainConfig == 33){ // PHOS clusters
155                 eventCutArray[ 0] = "5460001"; clusterCutArray[0] = "20000040033200000"; mesonCutArray[ 0] = "01631031000000"; // 40-60%
156                 eventCutArray[ 1] = "5680001"; clusterCutArray[1] = "20000040033200000"; mesonCutArray[ 1] = "01631031000000"; // 60-80%
157                 eventCutArray[ 2] = "5260001"; clusterCutArray[2] = "20000040033200000"; mesonCutArray[ 2] = "01631031000000"; // 20-60%
158                 eventCutArray[ 3] = "5480001"; clusterCutArray[3] = "20000040033200000"; mesonCutArray[ 3] = "01631031000000"; // 40-80%
159                 eventCutArray[ 4] = "5250001"; clusterCutArray[4] = "20000040033200000"; mesonCutArray[ 4] = "01631031000000"; // 20-50%                                                
160         } else {
161                 Error(Form("GammaConvCalo_%i",trainConfig), "wrong trainConfig variable no cuts have been specified for the configuration");
162                 return;
163         }
164
165         TList *EventCutList = new TList();
166         TList *ConvCutList = new TList();
167         TList *ClusterCutList = new TList();
168         TList *MesonCutList = new TList();
169
170         TList *HeaderList = new TList();
171         if (periodName.CompareTo("LHC13d2")==0){
172                 TObjString *Header1 = new TObjString("pi0_1");
173                 HeaderList->Add(Header1);
174         //    TObjString *Header3 = new TObjString("eta_2");
175         //    HeaderList->Add(Header3);
176
177         } else if (periodName.CompareTo("LHC12a17x_fix")==0){
178                 TObjString *Header1 = new TObjString("PARAM");
179                 HeaderList->Add(Header1);
180         } else if (periodName.CompareTo("LHC14a1a")==0){
181                 if (headerSelectionInt == 1){ 
182                         TObjString *Header1 = new TObjString("pi0_1");
183                         HeaderList->Add(Header1);
184                 } else if (headerSelectionInt == 2){
185                         TObjString *Header1 = new TObjString("eta_2");
186                         HeaderList->Add(Header1);
187                 } else {
188                         TObjString *Header1 = new TObjString("pi0_1");
189                         HeaderList->Add(Header1);
190                         TObjString *Header2 = new TObjString("eta_2");
191                         HeaderList->Add(Header2);
192                 }  
193         } else if (periodName.CompareTo("LHC14a1b")==0 || periodName.CompareTo("LHC14a1c")==0){
194                 TObjString *Header1 = new TObjString("BOX");
195                 HeaderList->Add(Header1);
196         }       
197
198         TList *EventCutList = new TList();
199         TList *ClusterCutList = new TList();
200         TList *MesonCutList = new TList();
201
202
203         EventCutList->SetOwner(kTRUE);
204         AliConvEventCuts **analysisEventCuts = new AliConvEventCuts*[numberOfCuts];
205         ClusterCutList->SetOwner(kTRUE);
206         AliCaloPhotonCuts **analysisClusterCuts = new AliCaloPhotonCuts*[numberOfCuts];
207         MesonCutList->SetOwner(kTRUE);
208         AliConversionMesonCuts **analysisMesonCuts = new AliConversionMesonCuts*[numberOfCuts];
209
210         for(Int_t i = 0; i<numberOfCuts; i++){
211                 analysisEventCuts[i] = new AliConvEventCuts();   
212                 analysisEventCuts[i]->InitializeCutsFromCutString(eventCutArray[i].Data());
213                 EventCutList->Add(analysisEventCuts[i]);
214                 analysisEventCuts[i]->SetFillCutHistograms("",kFALSE);
215                         
216                 analysisClusterCuts[i] = new AliCaloPhotonCuts();
217                 analysisClusterCuts[i]->InitializeCutsFromCutString(clusterCutArray[i].Data());
218                 ClusterCutList->Add(analysisClusterCuts[i]);
219                 analysisClusterCuts[i]->SetFillCutHistograms("");
220                 
221                 analysisMesonCuts[i] = new AliConversionMesonCuts();
222                 analysisMesonCuts[i]->InitializeCutsFromCutString(mesonCutArray[i].Data());
223                 MesonCutList->Add(analysisMesonCuts[i]);
224                 analysisMesonCuts[i]->SetFillCutHistograms("");
225                 analysisEventCuts[i]->SetAcceptedHeader(HeaderList);
226         }
227         task->SetEventCutList(numberOfCuts,EventCutList);
228         task->SetCaloCutList(numberOfCuts,ClusterCutList);
229         task->SetMesonCutList(numberOfCuts,MesonCutList);
230         task->SetDoMesonAnalysis(kTRUE);
231         task->SetDoMesonQA(enableQAMesonTask); //Attention new switch for Pi0 QA
232         task->SetDoClusterQA(enableQAClusterTask);  //Attention new switch small for Cluster QA
233     task->SetUseTHnSparse(isUsingTHnSparse);
234
235         //connect containers
236         AliAnalysisDataContainer *coutput =
237                 mgr->CreateContainer(Form("GammaCalo_%i",trainConfig), TList::Class(),
238                                                         AliAnalysisManager::kOutputContainer,Form("GammaCalo_%i.root",trainConfig));
239
240         mgr->AddTask(task);
241         mgr->ConnectInput(task,0,cinput);
242         mgr->ConnectOutput(task,1,coutput);
243
244         return;
245
246 }