Updated cut classes and macro for Sigma* analysis (M. Venaruzzo)
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddRsnDaughterCutsLambdaNsigma.C
1 #ifndef __CINT__
2 #endif
3 Int_t AddRsnDaughterCutsLambdaNsigma(AliPID::EParticleType type1,AliPID::EParticleType type2,TString opt,Bool_t isRsnMini=kFALSE,AliRsnInputHandler *rsnIH=0,AliAnalysisTaskSE *task=0)
4 {
5
6    if (!rsnIH) return 0;
7
8    Bool_t valid = kTRUE;
9    Int_t isPP = AliAnalysisManager::GetGlobalInt("rsnIsPP",valid);
10    Int_t useCommonQualityCut = AliAnalysisManager::GetGlobalInt("rsnCommonQualityCut",valid);
11
12    Bool_t usePPCut = kFALSE;
13
14    if (isPP && (opt.Contains("usePP"))) usePPCut = kTRUE;
15
16
17    // === USER HAS TO SET CORRECT NUMBER OF CUTS SETS =====
18    Int_t numberOfCuts = 2;
19
20    //---------------------------------------------
21    //  Define single cutsP
22    //---------------------------------------------
23
24    Printf("AddRsnDaughterCutsLambda Option : %s",opt.Data());
25
26    Double_t nSigmaTPC_P=3.0;
27    Double_t nSigmaTPC_K=3.0;
28    Double_t nSigmaTOF_P=3.0;
29    Double_t nSigmaTOF_K=3.0;
30    Double_t etaRange=0.8;
31
32    // default values
33    Double_t nSigmaTPC_P=3.0;
34    Double_t nSigmaTPC_K=3.0;
35    Double_t nSigmaTOF_P=3.0;
36    Double_t nSigmaTOF_K=3.0;
37    Double_t etaRange=0.8;
38
39    Bool_t useTPC_P=kFALSE;
40    Bool_t useTOF_P=kFALSE;
41    Bool_t useTPC_K=kFALSE;
42    Bool_t useTOF_K=kFALSE;
43
44    if (opt.Contains("qualityonly")) {
45       useTPC_P=kFALSE;
46       useTOF_P=kFALSE;
47       useTPC_K=kFALSE;
48       useTOF_K=kFALSE;
49    } else if (!opt.Contains("nsig")) {
50       useTPC_P=kTRUE;
51       useTOF_P=kTRUE;
52       useTPC_K=kTRUE;
53       useTOF_K=kTRUE;
54    }
55
56    if (opt.Contains("PTPCnsig")) useTPC_P=kTRUE;
57    if (opt.Contains("PTOFnsig")) useTOF_P=kTRUE;
58    if (opt.Contains("KTPCnsig"))  useTPC_K=kTRUE;
59    if (opt.Contains("KTOFnsig"))  useTOF_K=kTRUE;
60
61    if (opt.Contains("PTPCnsig10")) nSigmaTPC_P = 1.0;
62    if (opt.Contains("PTPCnsig15")) nSigmaTPC_P = 1.5;
63    if (opt.Contains("PTPCnsig20")) nSigmaTPC_P = 2.0;
64    if (opt.Contains("PTPCnsig25")) nSigmaTPC_P = 2.5;
65    if (opt.Contains("PTPCnsig30")) nSigmaTPC_P = 3.0;
66
67    if (opt.Contains("KTPCnsig10")) nSigmaTPC_K = 1.0;
68    if (opt.Contains("KTPCnsig15")) nSigmaTPC_K = 1.5;
69    if (opt.Contains("KTPCnsig20")) nSigmaTPC_K = 2.0;
70    if (opt.Contains("KTPCnsig25")) nSigmaTPC_K = 2.5;
71    if (opt.Contains("KTPCnsig30")) nSigmaTPC_K = 3.0;
72
73    if (opt.Contains("PTOFnsig10")) nSigmaTOF_P = 1.0;
74    if (opt.Contains("PTOFnsig15")) nSigmaTOF_P = 1.5;
75    if (opt.Contains("PTOFnsig20")) nSigmaTOF_P = 2.0;
76    if (opt.Contains("PTOFnsig25")) nSigmaTOF_P = 2.5;
77    if (opt.Contains("PTOFnsig30")) nSigmaTOF_P = 3.0;
78
79    if (opt.Contains("KTOFnsig10")) nSigmaTOF_K = 1.0;
80    if (opt.Contains("KTOFnsig15")) nSigmaTOF_K = 1.5;
81    if (opt.Contains("KTOFnsig20")) nSigmaTOF_K = 2.0;
82    if (opt.Contains("KTOFnsig25")) nSigmaTOF_K = 2.5;
83    if (opt.Contains("KTOFnsig30")) nSigmaTOF_K = 3.0;
84
85
86    Bool_t usePDG=kFALSE;
87    if (opt.Contains("pdg")) {
88       Printf("Using PDG");
89       usePDG = kTRUE;
90    }
91
92    Bool_t useEta = kFALSE;
93    if (opt.Contains("eta")) {
94       Printf("Using ETA range (%.2f,%.2f)",-etaRange,etaRange);
95       useEta = kTRUE;
96    }
97
98    // PROTON SETTINGS ===========================================
99
100    TString scheme="";
101    TString cutname = "p_Lambda";
102    if (!opt.IsNull()) cutname += Form("_%s",opt.Data());
103    AliRsnCutSet *cutsP = new AliRsnCutSet(cutname.Data(), AliRsnTarget::kDaughter);
104
105    AliRsnCutTrackQuality *qualityCutP = new AliRsnCutTrackQuality("cutQuatityP");
106    if (useCommonQualityCut>=0) {
107       qualityCutP->SetAODTestFilterBit(useCommonQualityCut);
108    } else {
109       qualityCutP->SetDefaults2010();
110    }
111    cutsP->AddCut(qualityCutP);
112    if (!scheme.IsNull()) scheme += "&";
113    scheme += qualityCutP->GetName();
114
115    if (useTPC_P) {
116       AliRsnCutPIDNSigma *cutPTPC = new AliRsnCutPIDNSigma("cutNSigmaTPCP",AliPID::kProton,AliRsnCutPIDNSigma::kTPC);
117       cutPTPC->SinglePIDRange(nSigmaTPC_P);
118       cutsP->AddCut(cutPTPC);
119       if (!scheme.IsNull()) scheme += "&";
120       scheme += cutPTPC->GetName();
121    }
122
123    if (useTOF_P) {
124       AliRsnCutPIDNSigma *cutPTOF = new AliRsnCutPIDNSigma("cutNSigmaTOFP",AliPID::kProton,AliRsnCutPIDNSigma::kTOF);
125       cutPTOF->SinglePIDRange(nSigmaTOF_P);
126       cutsP->AddCut(cutPTOF);
127       if (!scheme.IsNull()) scheme += "&";
128       scheme += cutPTOF->GetName();
129    }
130
131    if (useEta) {
132       AliRsnValueDaughter *valEtaP = new AliRsnValueDaughter(Form("val%sETA%s",AliPID::ParticleName(type1),opt.Data()),AliRsnValueDaughter::kEta);
133       AliRsnCutValue *cutEtaP = new AliRsnCutValue(Form("cut%sETA%s",AliPID::ParticleName(type1),opt.Data()),-etaRange,etaRange);
134       cutEtaP->SetTargetType(AliRsnTarget::kDaughter);
135       cutEtaP->SetValueObj(valEtaP);
136       cutsP->AddCut(cutEtaP);
137       if (!scheme.IsNull()) scheme += "&";
138       scheme += cutEtaP->GetName();
139    }
140    if (usePDG) {
141       AliRsnCutPID *cutPDGP = new AliRsnCutPID(Form("cut%sPDG%s",AliPID::ParticleName(type1),opt.Data()),type1,0.0,kTRUE);
142       cutsP->AddCut(cutPDGP);
143       if (!scheme.IsNull()) scheme += "&";
144       scheme += cutPDGP->GetName();
145    }
146
147    Printf ("CUT Scheme for PROTON is '%s'",scheme.Data());
148    cutsP->SetCutScheme(scheme.Data());
149
150    // END PROTON =======================================
151
152    // KAON SETTINGS =======================================
153    scheme="";
154    cutname = "K_Lambda";
155    if (!opt.IsNull()) cutname += Form("_%s",opt.Data());
156    AliRsnCutSet *cutsK = new AliRsnCutSet(cutname.Data(), AliRsnTarget::kDaughter);
157
158    AliRsnCutTrackQuality *qualityCutK = new AliRsnCutTrackQuality("cutQuatityK");
159    if (useCommonQualityCut>=0) {
160       qualityCutK->SetAODTestFilterBit(useCommonQualityCut);
161    } else {
162       qualityCutK->SetDefaults2010();
163    }
164    cutsK->AddCut(qualityCutK);
165    if (!scheme.IsNull()) scheme += "&";
166    scheme += qualityCutK->GetName();
167
168
169    if (useTPC_K) {
170       AliRsnCutPIDNSigma *cutKTPC = new AliRsnCutPIDNSigma("cutNSigmaTPCK",AliPID::kKaon,AliRsnCutPIDNSigma::kTPC);
171       cutKTPC->SinglePIDRange(nSigmaTPC_K);
172       cutsK->AddCut(cutKTPC);
173       if (!scheme.IsNull()) scheme += "&";
174       scheme += cutKTPC->GetName();
175    }
176
177    if (useTOF_K) {
178       AliRsnCutPIDNSigma *cutKTOF = new AliRsnCutPIDNSigma("cutNSigmaTOFK",AliPID::kKaon,AliRsnCutPIDNSigma::kTOF);
179       cutKTOF->SinglePIDRange(nSigmaTOF_K);
180       cutsK->AddCut(cutKTOF);
181       if (!scheme.IsNull()) scheme += "&";
182       scheme += cutKTOF->GetName();
183    }
184    
185    if (useEta) {
186       AliRsnValueDaughter *valEtaK = new AliRsnValueDaughter(Form("val%sETA%s",AliPID::ParticleName(type2),opt.Data()),AliRsnValueDaughter::kEta);
187       AliRsnCutValue *cutEtaK = new AliRsnCutValue(Form("cut%sETA%s",AliPID::ParticleName(type2),opt.Data()),-etaRange,etaRange);
188       cutEtaK->SetTargetType(AliRsnTarget::kDaughter);
189       cutEtaK->SetValueObj(valEtaK);
190       cutsK->AddCut(cutEtaK);
191       if (!scheme.IsNull()) scheme += "&";
192       scheme += cutEtaK->GetName();
193    }
194    if (usePDG) {
195       AliRsnCutPID *cutPDGK = new AliRsnCutPID(Form("cut%sPDG%s",AliPID::ParticleName(type2),opt.Data()),type2,0.0,kTRUE);
196       cutsK->AddCut(cutPDGK);
197       if (!scheme.IsNull()) scheme += "&";
198       scheme += cutPDGK->GetName();
199    }
200
201    Printf ("CUT Scheme for KAON is '%s'",scheme.Data());
202    cutsK->SetCutScheme(scheme.Data());
203
204    // END KAON =======================================
205
206    if (opt.Contains("mon")) {
207       AddMonitorOutput(cutsP->GetMonitorOutput(),opt);
208       AddMonitorOutput(cutsK->GetMonitorOutput(),opt);
209    }
210    if (isRsnMini) {
211       AliRsnMiniAnalysisTask *taskRsnMini = dynamic_cast<AliRsnMiniAnalysisTask *>(task);
212       if (taskRsnMini) {
213          taskRsnMini->AddTrackCuts(cutsP);
214          taskRsnMini->AddTrackCuts(cutsK);
215       }
216    } else {
217       AliRsnDaughterSelector *sel = rsnIH->GetSelector();
218 //       sel->SetLabelCheck(kFALSE);
219       sel->Add(cutsP, kTRUE);
220       sel->Add(cutsK, kTRUE);
221    }
222    return numberOfCuts;
223
224 }