]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/RESONANCES/macros/lego_train/AddRsnDaughterCutsPhiNsigma.C
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / RESONANCES / macros / lego_train / AddRsnDaughterCutsPhiNsigma.C
CommitLineData
c683985a 1#ifndef __CINT__
2#include <AliRsnCutTrackQuality.h>
3#endif
4Int_t AddRsnDaughterCutsPhiNsigma(AliPID::EParticleType type1,AliPID::EParticleType type2,TString opt,AliRsnInputHandler *rsnIH=0,AliAnalysisTaskSE *task=0)
5{
6
7 if (!rsnIH) return 0;
8
9 Bool_t valid = kTRUE;
10 // Int_t collisionType = AliRsnTrainManager::GetGlobalInt("IsCollisionType",valid);
11 Int_t useCommonQualityCut = AliRsnTrainManager::GetGlobalInt("RsnCommonQualityCut",valid);
12 TString rsnQualityCut = AliRsnTrainManager::GetGlobalStr("RsnQualityCut",valid);
13 Int_t isMC = AliRsnTrainManager::GetGlobalInt("IsMC",valid);
14 Int_t isRsnMini = AliRsnTrainManager::GetGlobalInt("IsRsnMini",valid);
15 Int_t isMixing = AliRsnTrainManager::GetGlobalInt("IsMixing",valid);
16
17 // experts only (don't touch)
18 Int_t isRsnDev = AliAnalysisManager::GetGlobalInt("rsnUseRSNParDev",valid);
19
20 // === USER HAS TO SET CORRECT NUMBER OF CUTS SETS =====
21 Int_t numberOfCuts = 1;
22
23 //---------------------------------------------
24 // Define single cuts
25 //---------------------------------------------
26
27 Printf("AliRsnCutPIDNSigma Option : %s",opt.Data());
28
29 Double_t nSigmaTPC=3.0;
30 Double_t nSigmaTOF=3.0;
31 Double_t etaMin=-0.8;
32 Double_t etaMax=0.8;
33 Double_t trackPtMin=0.;
34 Double_t trackPtMax=1.e10;
35 Int_t NclTPC=70;
36 Char_t DCAxyFormula[100]="0.0182+0.035/pt^1.01";
37
38 Bool_t useTPC_K=kFALSE;
39 Bool_t useTOF_K=kFALSE;
40 Bool_t rejectUnmatchedTOF_K=kTRUE;
41 Bool_t useTrackPtCut=kFALSE;
42
43 if (opt.Contains("qualityonly")) {
44 useTPC_K=kFALSE;
45 useTOF_K=kFALSE;
46 }
47
48 if (opt.Contains("KTPCnsig")) useTPC_K=kTRUE;
49 if (opt.Contains("KTOFnsig")) useTOF_K=kTRUE;
3b2f3caf 50 if (opt.Contains("KTOFacceptUnmatched")) rejectUnmatchedTOF_K=kFALSE;
c683985a 51
52 if (opt.Contains("KTPCnsig05")) nSigmaTPC = 0.5;
53 if (opt.Contains("KTPCnsig08")) nSigmaTPC = 0.8;
54 if (opt.Contains("KTPCnsig10")) nSigmaTPC = 1.0;
55 if (opt.Contains("KTPCnsig15")) nSigmaTPC = 1.5;
56 if (opt.Contains("KTPCnsig20")) nSigmaTPC = 2.0;
57 if (opt.Contains("KTPCnsig25")) nSigmaTPC = 2.5;
58 if (opt.Contains("KTPCnsig30")) nSigmaTPC = 3.0;
59 if (opt.Contains("KTPCnsig40")) nSigmaTPC = 4.0;
60 if (opt.Contains("KTPCnsig50")) nSigmaTPC = 5.0;
61 if (opt.Contains("KTPCnsig1000")) nSigmaTPC = 100.0;
62
63 if (opt.Contains("KTOFnsig10")) nSigmaTOF = 1.0;
64 if (opt.Contains("KTOFnsig15")) nSigmaTOF = 1.5;
65 if (opt.Contains("KTOFnsig20")) nSigmaTOF = 2.0;
66 if (opt.Contains("KTOFnsig25")) nSigmaTOF = 2.5;
67 if (opt.Contains("KTOFnsig30")) nSigmaTOF = 3.0;
68 if (opt.Contains("KTOFnsig40")) nSigmaTOF = 4.0;
69 if (opt.Contains("KTOFnsig50")) nSigmaTOF = 5.0;
70 if (opt.Contains("KTOFnsig1000")) nSigmaTOF = 100.0;
71
72 if (opt.Contains("trackPt")) {
73 useTrackPtCut = kTRUE;
74 if (opt.Contains("trackPtMin015")) trackPtMin = 0.15;
75 if (opt.Contains("trackPtMin02")) trackPtMin = 0.2;
76 if (opt.Contains("trackPtMin05")) trackPtMin = 0.5;
77 if (opt.Contains("trackPtMin06")) trackPtMin = 0.6;
78
79 if (opt.Contains("trackPtMax18")) trackPtMax = 1.8;
80 if (opt.Contains("trackPtMax20")) trackPtMax = 2.0;
81 if (opt.Contains("trackPtMax25")) trackPtMax = 2.5;
82 }
83
84 Bool_t usePDG=kFALSE;
85 if (opt.Contains("pdg")) {
86 Printf("Using PDG");
87 usePDG = kTRUE;
88 }
89
90 Bool_t useEta = kFALSE;
91 if (opt.Contains("eta")) {
92 for(int j=1;j<=9;j++) if(opt.Contains(Form("eta0%i",j))){etaMin=-0.1*j; etaMax=0.1*j;}
93
94 for(int j=1;j<=9;j++) if(opt.Contains(Form("etaMinMinus0%i",j))) etaMin=-0.1*j;
95 if(opt.Contains("etaMin00")) etaMin=0.;
96 for(int j=1;j<=9;j++) if(opt.Contains(Form("etaMinPlus0%i",j))) etaMin=0.1*j;
97
98 for(int j=1;j<=9;j++) if(opt.Contains(Form("etaMaxMinus0%i",j))) etaMax=-0.1*j;
99 if(opt.Contains("etaMax00")) etaMax=0.;
100 for(int j=1;j<=9;j++) if(opt.Contains(Form("etaMaxPlus0%i",j))) etaMax=0.1*j;
101
102 Printf("Using ETA range (%.2f,%.2f)",etaMin,etaMax);
103 useEta = kTRUE;
104 }
105
106 Bool_t useNclTPC = kFALSE;
107 if (opt.Contains("NclTPC")) {
108 if (opt.Contains("NclTPC70")) NclTPC=70;
109 if (opt.Contains("NclTPC75")) NclTPC=75;
110 if (opt.Contains("NclTPC80")) NclTPC=80;
111 if (opt.Contains("NclTPC85")) NclTPC=85;
112 if (opt.Contains("NclTPC90")) NclTPC=90;
113 useNclTPC = kTRUE;
114 }
115
116 Bool_t useDCAxy = kFALSE;
117 if (opt.Contains("DCAxy")) {
118 if (opt.Contains("DCAxyFormula7s")) sprintf(DCAxyFormula,"0.0182+0.035/pt^1.01");
119 if (opt.Contains("DCAxyFormula6s")) sprintf(DCAxyFormula,"0.0156+0.03/pt^1.01");
120 if (opt.Contains("DCAxyFormula5s")) sprintf(DCAxyFormula,"0.013+0.025/pt^1.01");
121 useDCAxy = kTRUE;
122 }
123
124 //---------------------------------------------
125 // Combine cuts
126 //---------------------------------------------
127
128 TString cutname = "K_Phi";
129 if (!opt.IsNull()) cutname += Form("_%s",opt.Data());
130 AliRsnCutSet *cuts = new AliRsnCutSet(cutname.Data(), AliRsnTarget::kDaughter);
131
132 TString scheme="";
133 AliRsnCutTrackQuality *qualityCut = new AliRsnCutTrackQuality("cutQualityK");
134 if (!rsnQualityCut.IsNull()) {
135 AliESDtrackCuts *esdTK = RsnQualityCut(rsnQualityCut.Data());
136 if(useDCAxy) esdTK->SetMaxDCAToVertexXYPtDep(DCAxyFormula);
137 qualityCut->SetESDtrackCuts(esdTK);
138 } else {
139 if (useCommonQualityCut>=0) {
140 qualityCut->SetAODTestFilterBit(useCommonQualityCut);
141 if(useDCAxy) {qualityCut->SetCheckOnlyFilterBit(kFALSE); qualityCut->SetDCARPtFormula(DCAxyFormula);}
142 } else {
143 qualityCut->SetDefaults2010();
144 if(useDCAxy) qualityCut->SetDCARPtFormula(DCAxyFormula);
145 }
146 }
147
148 cuts->AddCut(qualityCut);
149 if (!scheme.IsNull()) scheme += "&";
150 scheme += qualityCut->GetName();
151
152
153 if (useTPC_K) {
154 AliRsnCutPIDNSigma *cutKTPC = new AliRsnCutPIDNSigma("cutPIDNSigmaTPCK",AliPID::kKaon,AliRsnCutPIDNSigma::kTPC);
155 cutKTPC->SinglePIDRange(nSigmaTPC);
156 cuts->AddCut(cutKTPC);
157 if (!scheme.IsNull()) scheme += "&";
158 scheme += cutKTPC->GetName();
159 }
160
161 if (useTOF_K) {
162 AliRsnCutPIDNSigma *cutKTOF = new AliRsnCutPIDNSigma("cutPIDNSigmaTOFK",AliPID::kKaon,AliRsnCutPIDNSigma::kTOF);
163 cutKTOF->SinglePIDRange(nSigmaTOF);
3b2f3caf 164 cuts->AddCut(cutKTOF);
c683985a 165 if(rejectUnmatchedTOF_K){
c683985a 166 if (!scheme.IsNull()) scheme += "&";
167 scheme += cutKTOF->GetName();
168 }else{
3b2f3caf 169 AliRsnCutTOFMatch *cutKTOFMatch = new AliRsnCutTOFMatch("cutKTOFMatch");
170 cuts->AddCut(cutKTOFMatch);
c683985a 171 if (!scheme.IsNull()) scheme += "&";
3b2f3caf 172 scheme += Form("(%s|(!%s))",cutKTOF->GetName(),cutKTOFMatch->GetName());
c683985a 173 }
174 }
175
176 if (useEta) {
177 Printf("Adding ETA ...");
178 AliRsnValueDaughter *valEta = new AliRsnValueDaughter(Form("val%sETA%s",AliPID::ParticleName(type1),opt.Data()),AliRsnValueDaughter::kEta);
179 AliRsnCutValue *cutEta = new AliRsnCutValue(Form("cut%sETA%s",AliPID::ParticleName(type1),opt.Data()),etaMin,etaMax);
180 cutEta->SetTargetType(AliRsnTarget::kDaughter);
181 cutEta->SetValueObj(valEta);
182 cuts->AddCut(cutEta);
183 if (!scheme.IsNull()) scheme += "&";
184 scheme += cutEta->GetName();
185 }
186
187 if (useTrackPtCut) {
188 Printf("Adding Pt min=%.3f max=%.3f ...",trackPtMin,trackPtMax);
189 AliRsnValueDaughter *valTrackPt = new AliRsnValueDaughter(Form("val%sTrackPt%s",AliPID::ParticleName(type1),opt.Data()),AliRsnValueDaughter::kPt);
190
191 AliRsnCutValue *cutTrackPt = new AliRsnCutValue(Form("cut%sTrackPt%s",AliPID::ParticleName(type1),opt.Data()),trackPtMin,trackPtMax);
192 cutTrackPt->SetTargetType(AliRsnTarget::kDaughter);
193 cutTrackPt->SetValueObj(valTrackPt);
194 cuts->AddCut(cutTrackPt);
195 if (!scheme.IsNull()) scheme += "&";
196 scheme += cutTrackPt->GetName();
197 }
198
199 if (useNclTPC) {
200 Printf("Adding NclTPC >= %i",NclTPC);
201 AliRsnValueDaughter *valNclTPC = new AliRsnValueDaughter(Form("val%sNclTPC%s",AliPID::ParticleName(type1),opt.Data()),AliRsnValueDaughter::kNTPCclusters);
202 AliRsnCutValue *cutNclTPC = new AliRsnCutValue(Form("cut%sNclTPC%s",AliPID::ParticleName(type1),opt.Data()),NclTPC-0.1,1000.);
203 cutNclTPC->SetTargetType(AliRsnTarget::kDaughter);
204 cutNclTPC->SetValueObj(valNclTPC);
205 cuts->AddCut(cutNclTPC);
206 if (!scheme.IsNull()) scheme += "&";
207 scheme += cutNclTPC->GetName();
208 }
209
210 if (usePDG) {
211 Printf("Adding PDG ...");
212 AliRsnCutPID *cutPDG = new AliRsnCutPID(Form("cut%sPDG%s",AliPID::ParticleName(type1),opt.Data()),type1,0.0,kTRUE);
213 cuts->AddCut(cutPDG);
214 if (!scheme.IsNull()) scheme += "&";
215 scheme += cutPDG->GetName();
216 }
217
218 Printf ("CUT Scheme is '%s'",scheme.Data());
219 cuts->SetCutScheme(scheme.Data());
220
221 if (opt.Contains("mon")) {
222 AddMonitorOutput(cuts->GetMonitorOutput(),opt);
223 }
224 if (isRsnMini) {
225 AliRsnMiniAnalysisTask *taskRsnMini = (AliRsnMiniAnalysisTask *)task;
226 if (taskRsnMini) {
227 taskRsnMini->AddTrackCuts(cuts);
228 }
229 } else {
230 AliRsnDaughterSelector *sel = rsnIH->GetSelector();
231 // sel->SetLabelCheck(kFALSE);
232 sel->Add(cuts, kTRUE);
233 if (isRsnDev>=0 && opt.Contains("pairPID")) {
234 AliRsnActPostDaughterSelection *pairPID = new AliRsnActPostDaughterSelection();
235 pairPID->SetID(0);
236
237 const char *fn="rsnRange.txt";
238 if (!gSystem->AccessPathName(fn)) {
239 TString minStr = gSystem->GetFromPipe(TString::Format("head -n 1 %s").Data());
240 TString maxStr = gSystem->GetFromPipe(TString::Format("tail -n 1 %s").Data());
241 pairPID->SetMass(minStr.Atof(),maxStr.Atof());
242 } else {
243 // pairPID->SetMass(1.01,1.03);
244 pairPID->SetMass(1.015,1.025);
245 pairPID->SetMass(1.019,1.021);
246 pairPID->SetMass(1.0195,1.0205);
247 pairPID->SetMass(1.1000,1.1005);
248 // pairPID->SetMass(1.1005,1.1010);
249 }
250 sel->AddAction(pairPID);
251 }
252
253 }
254 return numberOfCuts;
255
256}