2 #include <AliRsnCutTrackQuality.h>
\r
4 Int_t AddRsnDaughterCutsPhiNsigma(AliPID::EParticleType type1,AliPID::EParticleType type2,TString opt,AliRsnInputHandler *rsnIH=0,AliAnalysisTaskSE *task=0)
\r
7 if (!rsnIH) return 0;
\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
17 // experts only (don't touch)
\r
18 Int_t isRsnDev = AliAnalysisManager::GetGlobalInt("rsnUseRSNParDev",valid);
\r
20 // === USER HAS TO SET CORRECT NUMBER OF CUTS SETS =====
\r
21 Int_t numberOfCuts = 1;
\r
23 //---------------------------------------------
\r
24 // Define single cuts
\r
25 //---------------------------------------------
\r
27 Printf("AliRsnCutPIDNSigma Option : %s",opt.Data());
\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
36 Char_t DCAxyFormula[100]="0.0182+0.035/pt^1.01";
\r
38 Bool_t useTPC_K=kFALSE;
\r
39 Bool_t useTOF_K=kFALSE;
\r
40 Bool_t useTrackPtCut=kFALSE;
\r
42 if (opt.Contains("qualityonly")) {
\r
45 } else if (!opt.Contains("nsig")) {
\r
50 if (opt.Contains("KTPCnsig")) useTPC_K=kTRUE;
\r
51 if (opt.Contains("KTOFnsig")) useTOF_K=kTRUE;
\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
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
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
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
83 Bool_t usePDG=kFALSE;
\r
84 if (opt.Contains("pdg")) {
\r
85 Printf("Using PDG");
\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
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
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
101 Printf("Using ETA range (%.2f,%.2f)",etaMin,etaMax);
\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
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
123 //---------------------------------------------
\r
125 //---------------------------------------------
\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
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
138 if (useCommonQualityCut>=0) {
\r
139 qualityCut->SetAODTestFilterBit(useCommonQualityCut);
\r
140 if(useDCAxy) {qualityCut->SetCheckOnlyFilterBit(kFALSE); qualityCut->SetDCARPtFormula(DCAxyFormula);}
\r
142 qualityCut->SetDefaults2010();
\r
143 if(useDCAxy) qualityCut->SetDCARPtFormula(DCAxyFormula);
\r
147 cuts->AddCut(qualityCut);
\r
148 if (!scheme.IsNull()) scheme += "&";
\r
149 scheme += qualityCut->GetName();
\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
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
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
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
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
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
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
210 Printf ("CUT Scheme is '%s'",scheme.Data());
\r
211 cuts->SetCutScheme(scheme.Data());
\r
213 if (opt.Contains("mon")) {
\r
214 AddMonitorOutput(cuts->GetMonitorOutput(),opt);
\r
217 AliRsnMiniAnalysisTask *taskRsnMini = (AliRsnMiniAnalysisTask *)task;
\r
219 taskRsnMini->AddTrackCuts(cuts);
\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
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
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
242 sel->AddAction(pairPID);
\r
246 return numberOfCuts;
\r