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