]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/RESONANCES/macros/lego_train/RsnConfig.C
PWG2/SPECTRA -> PWGLF/SPECTRA migration
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / RsnConfig.C
1 #ifndef __CINT__
2 #include <PWG2/RESONANCES/AliRsnCutPrimaryVertex.h>
3 #include <PWG2/RESONANCES/AliRsnValuePair.h>
4 #include <PWG2/RESONANCES/AliRsnListOutput.h>
5 #include <PWG2/RESONANCES/AliRsnPairDef.h>
6 #include <PWG2/RESONANCES/AliRsnLoopPair.h>
7 #include <PWG2/RESONANCES/AliRsnAnalysisTask.h>
8 #include <PWG2/RESONANCES/AliRsnLoopDaughter.h>
9 #include <PWG2/RESONANCES/AliRsnValueDaughter.h>
10 #include <PWG2/RESONANCES/AliRsnMiniAnalysisTask.h>
11 #include <PWG2/RESONANCES/AliRsnCutMiniPair.h>
12 #include <PWG2/RESONANCES/AliRsnInputHandler.h>
13 #include <PWG2/RESONANCES/AliRsnMiniMonitor.h>
14 #include <ANALYSIS/AliAnalysisManager.h>
15 #include <PWG2/RESONANCES/AliRsnValueEvent.h>
16 #endif
17
18 Bool_t RsnConfig(AliAnalysisTaskSE *task,Bool_t isMC,Bool_t isMixing,AliRsnInputHandler *rsnIH=0,TList *listRsn=0) {
19
20    if (!task) return kFALSE;
21
22    if (!listRsn) {
23       return kFALSE;
24    }
25    Bool_t valid;
26    Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
27
28    Int_t cutIndex = 0;
29    Int_t numOfCuts = 0;
30
31    // set commol eventCuts
32
33    if (!RsnLoadMacroFromConfig("AddRsnCommonEventCuts.C")) return kFALSE;
34    AliRsnCutSet *commonEventCuts = AddRsnCommonEventCuts(task);
35
36    if (!RsnLoadMacroFromConfig("AddRsnCommonPairCuts.C")) return kFALSE;
37    AliRsnCutSet *commonPairCuts = AddRsnCommonPairCuts();
38
39    TIter next(listRsn);
40    TNamed *rsnObj=0;
41    TString rsnName,rsnNameOpt,rsnNameOptFull,rsnCutName,rsnCutOpt,rsnCutNameOptFull;
42    while ((rsnObj = (TNamed *)next())) {
43       GetOptionFromString(rsnObj->GetName(),rsnName,rsnNameOpt);
44       rsnNameOptFull=rsnName; if (!rsnNameOpt.IsNull()) rsnNameOptFull += Form("_%s",rsnNameOpt.Data());
45
46       GetOptionFromString(rsnObj->GetTitle(),rsnCutName,rsnCutOpt);
47       rsnCutNameOptFull=rsnCutName; if (!rsnCutOpt.IsNull())rsnCutNameOptFull += Form("_%s",rsnCutOpt.Data());
48
49       if (!RsnLoadMacroFromConfig(Form("AddRsnDaughterCuts%s.C",rsnCutName.Data()))) return kFALSE;
50       if (!RsnLoadMacroFromConfig(Form("AddRsnPairs%s.C",rsnName.Data()))) return kFALSE;
51
52       rsnNameOptFull.ToLower();
53       rsnName.ToLower();
54       // add cuts
55       if (!rsnName.CompareTo("phi")) {
56          numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kKaon,AliPID::kKaon,\"%s\",%d,(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),isRsnMini,rsnIH, task));
57          if (numOfCuts) {
58             if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_K",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
59             AddRsnPairsPhi(task,isMC,isMixing,AliPID::kKaon,cutIndex,AliPID::kKaon,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
60             cutIndex+=numOfCuts;
61          }
62       } else if (!rsnName.CompareTo("kstar")) {
63          numOfCuts = gROOT->ProcessLine(Form("AddRsnDaughterCuts%s(AliPID::kKaon,AliPID::kPion,\"%s\",%d,(AliRsnInputHandler*)%p,(AliAnalysisTaskSE*)%p)",rsnCutName.Data(), rsnCutOpt.Data(),isRsnMini,rsnIH,task));
64          if (numOfCuts) {
65             if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex,commonEventCuts,commonPairCuts,Form("%s_%s_K",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
66             if (rsnNameOpt.Contains("mon")) AddParticleMonitor(task,isMC,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s_%s_pi",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
67             AddRsnPairsKStar(task,isMC,isMixing,AliPID::kKaon,cutIndex,AliPID::kPion,cutIndex+1,commonEventCuts,commonPairCuts,Form("%s_%s",rsnNameOptFull.Data(),rsnCutNameOptFull.Data()));
68             cutIndex+=numOfCuts;
69          }
70       } else {
71          Printf("Error : Particle %s is not supported !!!!",rsnName.Data());
72          return kFALSE;
73       }
74
75    }
76
77    return kTRUE;
78 }
79
80 Bool_t RsnLoadMacroFromConfig(TString macro,TString path="") {
81
82    Bool_t valid;
83    TString lego_path = AliAnalysisManager::GetGlobalStr("rsnLegoTrainPath",valid);
84    if (!valid) lego_path = "$ALICE_ROOT/PWG2/RESONANCES/macros/lego_train";
85
86    if (!gSystem->AccessPathName(macro.Data())) {
87       gROOT->LoadMacro(macro.Data());
88       Printf("Macro loaded from %s/%s ...",gSystem->pwd(),macro.Data());
89       return kTRUE;
90    }
91
92    if (!gSystem->AccessPathName(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())))) {
93       gROOT->LoadMacro(gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
94       Printf("Macro loaded from %s ...",gSystem->ExpandPathName(Form("%s/%s",lego_path.Data(),macro.Data())));
95       return kTRUE;
96    }
97
98    Printf("Error loading %s",macro.Data());
99
100    return kFALSE;
101 }
102
103 void GetOptionFromString(TString str,TString &outStr1,TString &outStr2,TString d=":") {
104    //   TStringO
105    TObjArray *tokens = str.Tokenize(d.Data());
106    TObjString *objStr =  (TObjString *)tokens->At(0);
107    if (!objStr) {
108       outStr1 = "err";
109       outStr2 = "";
110       return;
111    }
112    outStr1 = objStr->GetString();
113
114    objStr =  (TObjString *) tokens->At(1);
115    if (!objStr) {
116       outStr2 = "";
117       return;
118    }
119    outStr2 = objStr->GetString();
120
121 }
122
123 Bool_t AddPair(AliAnalysisTaskSE *task, Bool_t isMC,Bool_t isMixing, AliPID::EParticleType pType1,Int_t listID1, AliPID::EParticleType pType2,Int_t listID2, Int_t pdgMother,Double_t massMother, AliRsnCutSet *commonEventCuts=0,AliRsnCutSet *commonPairCuts=0, TString name = "") {
124
125    Bool_t valid;
126    Int_t useMCMomentum = AliAnalysisManager::GetGlobalInt("rsnUseMCMomentum",valid);
127
128    Bool_t typeSame = (pType1 == pType2);
129
130    //    Printf("------------- id1=%d id2=%d",listID1,listID2);
131
132    TList *listLoops = new TList;
133
134    // pair definition
135    AliRsnPairDef  *pairDefPM         = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '+', (AliRsnDaughter::ESpecies)pType2, '-', pdgMother, massMother);
136    AliRsnPairDef  *pairDefMP         = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '-', (AliRsnDaughter::ESpecies)pType2, '+', pdgMother, massMother);
137    AliRsnPairDef  *pairDefPP         = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '+', (AliRsnDaughter::ESpecies)pType2, '+', pdgMother, massMother);
138    AliRsnPairDef  *pairDefMM         = new AliRsnPairDef((AliRsnDaughter::ESpecies)pType1, '-', (AliRsnDaughter::ESpecies)pType2, '-', pdgMother, massMother);
139
140    // loop object creation
141    AliRsnLoopPair *lp = 0;
142
143    // sets +-
144    lp = new AliRsnLoopPair(Form("%s_PM", name.Data()), pairDefPM, kFALSE);
145    listLoops->Add(lp);
146
147    if (!typeSame) {
148       lp = new AliRsnLoopPair(Form("%s_MP", name.Data()), pairDefMP, kFALSE);
149       listLoops->Add(lp);
150    }
151
152    // sets +- TRUE pairs
153    if (isMC) {
154       lp = new AliRsnLoopPair(Form("%s_PM_TRUE", name.Data()), pairDefPM, kFALSE);
155       lp->SetOnlyTrue(kTRUE);
156       lp->SetCheckDecay(kTRUE);
157       listLoops->Add(lp);
158       if (!typeSame) {
159          lp = new AliRsnLoopPair(Form("%s_MP_TRUE", name.Data()), pairDefMP, kFALSE);
160          lp->SetOnlyTrue(kTRUE);
161          lp->SetCheckDecay(kTRUE);
162          listLoops->Add(lp);
163       }
164       // sets +- TRUE paris (MC is used for momentum)
165       lp = new AliRsnLoopPair(Form("%s_PM_TRUE_MC", name.Data()), pairDefPM, kFALSE);
166       lp->SetTrueMC(kTRUE);
167       listLoops->Add(lp);
168       if (!typeSame) {
169          // sets +- TRUE paris (MC is used for momentum)
170          lp = new AliRsnLoopPair(Form("%s_MP_TRUE_MC", name.Data()), pairDefMP, kFALSE);
171          lp->SetTrueMC(kTRUE);
172          listLoops->Add(lp);
173       }
174    }
175
176    // sets ++
177    lp = new AliRsnLoopPair(Form("%s_PP", name.Data()), pairDefPP, kFALSE);
178    listLoops->Add(lp);
179
180    // sets --
181    lp = new AliRsnLoopPair(Form("%s_MM", name.Data()), pairDefMM, kFALSE);
182    listLoops->Add(lp);
183
184    if (isMixing) {
185       // sets +- Mixing (NOT mini)
186       lp = new AliRsnLoopPair(Form("%s_PM", name.Data()), pairDefPM, kTRUE);
187       listLoops->Add(lp);
188
189       // sets -+ Mixing (NOT mini)
190       lp = new AliRsnLoopPair(Form("%s_MP", name.Data()), pairDefMP, kTRUE);
191       listLoops->Add(lp);
192
193       // sets ++ Mixing (NOT mini)
194       lp = new AliRsnLoopPair(Form("%s_PP", name.Data()), pairDefPP, kTRUE);
195       listLoops->Add(lp);
196
197       // sets -- Mixing (NOT mini)
198       lp = new AliRsnLoopPair(Form("%s_MM", name.Data()), pairDefMM, kTRUE);
199       listLoops->Add(lp);
200    }
201
202
203    // loops over all AliRsnLoops and sets everything (don't touch it if you don't know what you are doing)
204    TIter next(listLoops);
205    while ((lp = (AliRsnLoopPair *)next.Next())) {
206       lp->SetListID(0, listID1);
207       lp->SetListID(1, listID2);
208       lp->SetMCRefInfo(useMCMomentum);
209       if (commonPairCuts) lp->SetPairCuts(commonPairCuts);
210       if (commonEventCuts) lp->SetEventCuts(commonEventCuts);
211       if (name.Contains("phi")) AddPairOutputPhi(lp);
212       else if (name.Contains("kstar")) AddPairOutputKStar(lp);
213       else continue;
214       ((AliRsnAnalysisTask *)task)->AddLoop(lp);
215    }
216    return kTRUE;
217 }
218
219 // void AddMonitorOutput(AliRsnLoopDaughter *mon)
220
221 void AddMonitorOutput(TObjArray *mon)
222 {
223
224    if (!mon) {Printf("Error: mon is null !!!!");return;}
225
226    Bool_t valid;
227    Int_t useMCMomentum = AliAnalysisManager::GetGlobalInt("rsnUseMCMomentum",valid);
228    if (useMCMomentum) return;
229
230    // dEdx tpc
231    AliRsnValueDaughter *axisMomTPC = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc);
232    AliRsnValueDaughter *axisSigTPC = new AliRsnValueDaughter("sTPC", AliRsnValueDaughter::kTPCsignal);
233    axisMomTPC->SetBins(0.0,5.0,0.01);
234    axisSigTPC->SetBins(0.0,500.0,2.0);
235
236    // output: 2D histogram of TPC signal vs. TPC momentum
237    AliRsnListOutput *outMonitordEdxTPC = new AliRsnListOutput("dEdx", AliRsnListOutput::kHistoDefault);
238    outMonitordEdxTPC->AddValue(axisMomTPC);
239    outMonitordEdxTPC->AddValue(axisSigTPC);
240
241    // add outputs to loop
242    mon->Add(outMonitordEdxTPC);
243
244    // dEdx tpc
245    AliRsnValueDaughter *axisMomTPCForTOF = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc);
246    AliRsnValueDaughter *axisSigTOF = new AliRsnValueDaughter("sTOF", AliRsnValueDaughter::kTOFsignal);
247    axisMomTPCForTOF->SetBins(0.0,5.0,0.01);
248    axisSigTOF->SetBins(0.0,500.0,2.0);
249
250    // output: 2D histogram of TPC signal vs. TPC momentum
251    AliRsnListOutput *outMonitordEdxTOF = new AliRsnListOutput("Edx", AliRsnListOutput::kHistoDefault);
252    outMonitordEdxTOF->AddValue(axisMomTPCForTOF);
253    outMonitordEdxTOF->AddValue(axisSigTOF);
254
255    // add outputs to loop
256    //    mon->Add(outMonitordEdxTOF);
257
258
259    // Momentum
260    AliRsnValueDaughter *axisMomP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kP);
261    axisMomP->SetBins(0.0,5.0,0.01);
262
263    // output: 2D histogram of TPC signal vs. TPC momentum
264    AliRsnListOutput *outMonitorP = new AliRsnListOutput("P", AliRsnListOutput::kHistoDefault);
265    outMonitorP->AddValue(axisMomP);
266
267    // add outputs to loop
268    mon->Add(outMonitorP);
269
270    // Momentum Pt
271    AliRsnValueDaughter *axisMomPt = new AliRsnValueDaughter("pt", AliRsnValueDaughter::kPt);
272    axisMomPt->SetBins(0.0,5.0,0.01);
273
274    // output: 2D histogram of TPC signal vs. TPC momentum
275    AliRsnListOutput *outMonitorPt = new AliRsnListOutput("Pt", AliRsnListOutput::kHistoDefault);
276    outMonitorPt->AddValue(axisMomPt);
277
278    // add outputs to loop
279    mon->Add(outMonitorPt);
280
281    // Eta
282    AliRsnValueDaughter *axisMomEta = new AliRsnValueDaughter("eta", AliRsnValueDaughter::kEta);
283    axisMomEta->SetBins(-1.0,1.0,0.01);
284
285    // output: 2D histogram of TPC signal vs. TPC momentum
286    AliRsnListOutput *outMonitorEta = new AliRsnListOutput("Eta", AliRsnListOutput::kHistoDefault);
287    outMonitorEta->AddValue(axisMomEta);
288
289    // add outputs to loop
290    mon->Add(outMonitorEta);
291
292    // kTOFnsigmaK
293    AliRsnValueDaughter *axisTPCnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTPCnsigmaK);
294    axisTPCnsigmaK->SetBins(1000,0,100);
295
296    // output: 2D histogram of TPC signal vs. TPC momentum
297    AliRsnListOutput *outMonitorTPCnsigmaK = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
298    outMonitorTPCnsigmaK->AddValue(axisTPCnsigmaK);
299
300    // add outputs to loop
301    mon->Add(outMonitorTPCnsigmaK);
302
303    // kTPCnsigmaPi
304    AliRsnValueDaughter *axisTPCnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTPCnsigmaPi);
305    axisTPCnsigmaPi->SetBins(1000,0,100);
306
307    // output: 2D histogram of TPC signal vs. TPC momentum
308    AliRsnListOutput *outMonitorTPCnsigmaPi = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
309    outMonitorTPCnsigmaPi->AddValue(axisTPCnsigmaPi);
310
311    // add outputs to loop
312    mon->Add(outMonitorTPCnsigmaPi);
313
314    // kTPCnsigmaP
315    AliRsnValueDaughter *axisTPCnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTPCnsigmaP);
316    axisTPCnsigmaP->SetBins(1000,0,100);
317
318    // output: 2D histogram of TPC signal vs. TPC momentum
319    AliRsnListOutput *outMonitorTPCnsigmaP = new AliRsnListOutput("TPC_nsigma", AliRsnListOutput::kHistoDefault);
320    outMonitorTPCnsigmaP->AddValue(axisTPCnsigmaP);
321
322    // add outputs to loop
323    mon->Add(outMonitorTPCnsigmaP);
324
325
326    // kTOFnsigmaK
327    AliRsnValueDaughter *axisTOFnsigmaK = new AliRsnValueDaughter("K", AliRsnValueDaughter::kTOFnsigmaK);
328    axisTOFnsigmaK->SetBins(1000,0,100);
329
330    // output: 2D histogram of TPC signal vs. TPC momentum
331    AliRsnListOutput *outMonitorTOFnsigmaK = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
332    outMonitorTOFnsigmaK->AddValue(axisTOFnsigmaK);
333
334    // add outputs to loop
335    mon->Add(outMonitorTOFnsigmaK);
336
337    // kTOFnsigmaPi
338    AliRsnValueDaughter *axisTOFnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTOFnsigmaPi);
339    axisTOFnsigmaPi->SetBins(1000,0,100);
340
341    // output: 2D histogram of TPC signal vs. TPC momentum
342    AliRsnListOutput *outMonitorTOFnsigmaPi = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
343    outMonitorTOFnsigmaPi->AddValue(axisTOFnsigmaPi);
344
345    // add outputs to loop
346    mon->Add(outMonitorTOFnsigmaPi);
347
348    // kTOFnsigmaP
349    AliRsnValueDaughter *axisTOFnsigmaP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kTOFnsigmaP);
350    axisTOFnsigmaP->SetBins(1000,0,100);
351
352    // output: 2D histogram of TPC signal vs. TPC momentum
353    AliRsnListOutput *outMonitorTOFnsigmaP = new AliRsnListOutput("TOF_nsigma", AliRsnListOutput::kHistoDefault);
354    outMonitorTOFnsigmaP->AddValue(axisTOFnsigmaP);
355
356    // add outputs to loop
357    mon->Add(outMonitorTOFnsigmaP);
358
359
360    AliRsnListOutput *outMonitorPTvsMult = new AliRsnListOutput("PTvsMult",AliRsnListOutput::kHistoDefault);
361    AliRsnValueDaughter *vd1 = new AliRsnValueDaughter("pt",AliRsnValueDaughter::kPt);
362    vd1->SetBins(0.0,5.0,0.01);
363    outMonitorPTvsMult->AddValue(vd1);
364
365    AliRsnValueEvent *ve1 = new AliRsnValueEvent("mult",AliRsnValueEvent::kMult);
366    ve1->SetBins(0.0,100.0,1);
367    outMonitorPTvsMult->AddValue(ve1);
368    mon->Add(outMonitorPTvsMult);
369
370    //    mon->SetMCRefInfo(gRsnUseMCMomentum);
371
372 }
373
374 void AddMonitorOutputMini(AliRsnMiniAnalysisTask *task,Int_t listID1,TString name = "",Char_t charge='0')
375 {
376    TString chargeName="all";
377    if ( charge == '+' ) chargeName = "pos";
378    if ( charge == '-' ) chargeName = "neg";
379
380    AliRsnMiniMonitor *mondEdx = new AliRsnMiniMonitor(Form("%s_dEdxTPCvsP_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kdEdxTPCvsP, listID1);
381    mondEdx->SetCharge(charge);
382
383    AliRsnMiniMonitor *monPt = new AliRsnMiniMonitor(Form("%s_Pt_%s", name.Data(),chargeName.Data()),AliRsnMiniMonitor::kTrackPt, listID1);
384    monPt->SetCharge(charge);
385
386 }
387
388 void AddParticleMonitor(AliAnalysisTaskSE *task, Bool_t isMC, Int_t listID1,AliRsnCutSet *commonEventCuts=0,AliRsnCutSet *cutPair=0,TString name = "")
389 {
390    Bool_t valid;
391    Int_t isRsnMini = AliAnalysisManager::GetGlobalInt("rsnUseMiniPackage",valid);
392    if (isRsnMini) {
393       Printf("Monitoring by mini is not supported now. It will be soon !!!");
394       return ;
395       //       AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
396       //
397       //       AddMonitorOutputMini((AliRsnMiniAnalysisTask *)task,listID1,name);
398       //       AddMonitorOutputMini((AliRsnMiniAnalysisTask *)task,listID1,name,'+');
399       //       AddMonitorOutputMini((AliRsnMiniAnalysisTask *)task,listID1,name,'-');
400    } else {
401       TList *listLoops = new TList;
402       // monitor definition
403       AliRsnDaughterDef *tracksAll = new AliRsnDaughterDef(AliRsnDaughter::kTrack /*'+' or '-'*/);
404       AliRsnDaughterDef *tracksPos = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'+');
405       AliRsnDaughterDef *tracksNeg = new AliRsnDaughterDef(AliRsnDaughter::kTrack,'-');
406
407       AliRsnLoopDaughter *lm =0;
408       // loop object
409       listLoops->Add(new AliRsnLoopDaughter(Form("%s_all", name.Data()), listID1, tracksAll));
410       listLoops->Add(new AliRsnLoopDaughter(Form("%s_pos", name.Data()), listID1, tracksPos));
411       listLoops->Add(new AliRsnLoopDaughter(Form("%s_neg", name.Data()), listID1, tracksNeg));
412
413       TIter next(listLoops);
414       while ((lm = (AliRsnLoopDaughter *)next.Next())) {
415          if (commonEventCuts) lm->SetEventCuts(commonEventCuts);
416          AddMonitorOutput(lm);
417          ((AliRsnAnalysisTask *)task)->AddLoop(lm);
418       }
419    }
420 }