]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/vertexingHF/AliRDHFCutsDStartoKpipi.cxx
Updates in Lc->V0bachelor analysis (Annalisa)
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliRDHFCutsDStartoKpipi.cxx
CommitLineData
45bc9115 1/**************************************************************************
2 * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
27de2dfb 16/* $Id$ */
17
45bc9115 18/////////////////////////////////////////////////////////////
19//
20// Class for cuts on AOD reconstructed DStar->Kpipi
21//
22// Author: A.Grelli, alessandro.grelli@uu.nl
7562813c 23//
24// PID method implemented by Y.Wang, yifei@physi.uni-heidelberg.de
25//
45bc9115 26/////////////////////////////////////////////////////////////
27
28#include <TDatabasePDG.h>
29#include <Riostream.h>
30
31#include "AliAODRecoDecayHF2Prong.h"
32#include "AliAODRecoCascadeHF.h"
33#include "AliRDHFCutsD0toKpi.h"
34#include "AliRDHFCutsDStartoKpipi.h"
35#include "AliAODTrack.h"
36#include "AliESDtrack.h"
28e927b1 37#include "AliAODPid.h"
38#include "AliTPCPIDResponse.h"
da6fefc3 39#include "AliAODVertex.h"
40#include "AliESDVertex.h"
45bc9115 41
c64cb1f6 42using std::cout;
43using std::endl;
44
45bc9115 45ClassImp(AliRDHFCutsDStartoKpipi)
46
47//--------------------------------------------------------------------------
da6fefc3 48AliRDHFCutsDStartoKpipi::AliRDHFCutsDStartoKpipi(const char* name) :
28e927b1 49 AliRDHFCuts(name),
a8d9f55a 50 fTrackCutsSoftPi(0),
035523fb 51 fMaxPtPid(9999.),
52 fTPCflag(999.)
45bc9115 53{
54 //
55 // Default Constructor
56 //
7562813c 57
c8cd526d 58 Int_t nvars=16;
45bc9115 59 SetNVars(nvars);
c8cd526d 60 TString varNames[16]={
45bc9115 61 "inv. mass [GeV]",
62 "dca [cm]",
63 "cosThetaStar",
64 "pTK [GeV/c]",
65 "pTPi [GeV/c]",
66 "d0K [cm]",
67 "d0Pi [cm]",
68 "d0d0 [cm^2]",
69 "cosThetaPoint",
70 "inv. mass half width of D* [GeV]",
71 "half width of (M_Kpipi-M_D0) [GeV]",
72 "PtMin of pi_s [GeV/c]",
73 "PtMax of pi_s [GeV/c]",
c8cd526d 74 "theta, angle between the pi_s and decay plane of the D0 [rad]",
75 "|cosThetaPointXY|",
76 "NormDecayLenghtXY"};
77 Bool_t isUpperCut[16]={
45bc9115 78 kTRUE,
79 kTRUE,
80 kTRUE,
81 kFALSE,
82 kFALSE,
83 kTRUE,
84 kTRUE,
85 kTRUE,
86 kFALSE,
87 kTRUE,
88 kTRUE,
89 kTRUE,
90 kTRUE,
c8cd526d 91 kFALSE,
92 kFALSE,
45bc9115 93 kFALSE};
94 SetVarNames(nvars,varNames,isUpperCut);
c8cd526d 95 Bool_t forOpt[16]={
45bc9115 96 kFALSE,
97 kTRUE,
98 kTRUE,
99 kFALSE,
100 kFALSE,
101 kFALSE,
102 kFALSE,
103 kTRUE,
104 kTRUE,
105 kFALSE,
106 kTRUE,
107 kFALSE,
108 kFALSE,
c8cd526d 109 kFALSE,
110 kFALSE,
45bc9115 111 kFALSE};
112 SetVarsForOpt(5,forOpt);
113 Float_t limits[2]={0,999999999.};
114 SetPtBins(2,limits);
115}
116//--------------------------------------------------------------------------
117AliRDHFCutsDStartoKpipi::AliRDHFCutsDStartoKpipi(const AliRDHFCutsDStartoKpipi &source) :
da6fefc3 118 AliRDHFCuts(source),
a8d9f55a 119 fTrackCutsSoftPi(0),
035523fb 120 fMaxPtPid(9999.),
121 fTPCflag(999.)
45bc9115 122{
123 //
124 // Copy constructor
125 //
ee1128c6 126
da6fefc3 127 if(source.GetTrackCutsSoftPi()) AddTrackCutsSoftPi(source.GetTrackCutsSoftPi());
ee1128c6 128
45bc9115 129}
130//--------------------------------------------------------------------------
131AliRDHFCutsDStartoKpipi &AliRDHFCutsDStartoKpipi::operator=(const AliRDHFCutsDStartoKpipi &source)
132{
133 //
134 // assignment operator
135 //
136 if(&source == this) return *this;
137
138 AliRDHFCuts::operator=(source);
813b1e3b 139 if(source.GetTrackCutsSoftPi()) {
140 delete fTrackCutsSoftPi;
141 fTrackCutsSoftPi = new AliESDtrackCuts(*(source.GetTrackCutsSoftPi()));
142 }
28e927b1 143
45bc9115 144 return *this;
145}
146
147
148//---------------------------------------------------------------------------
149void AliRDHFCutsDStartoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
150 //
151 // Fills in vars the values of the variables
152 //
153 if(nvars!=fnVarsForOpt) {
154 printf("AliRDHFCutsDStartoKpipi::GetCutsVarsForOpt: wrong number of variables\n");
155 return;
156 }
157
158
159 AliAODRecoCascadeHF* dstarD0pi = (AliAODRecoCascadeHF*)d;
160
161 AliAODTrack *softPi = (AliAODTrack*)dstarD0pi->GetBachelor();
162
163 AliAODRecoDecayHF2Prong* dd = (AliAODRecoDecayHF2Prong*)dstarD0pi->Get2Prong();
164
165 Int_t iter=-1;
166 if(fVarsForOpt[0]){
167 iter++;
168 if(TMath::Abs(pdgdaughters[0])==211) {
169 vars[iter]=dd->InvMassD0();
170 } else {
171 vars[iter]=dd->InvMassD0bar();
172 }
173 }
174 if(fVarsForOpt[1]){
175 iter++;
176 vars[iter]=dd->GetDCA();
177 }
178 if(fVarsForOpt[2]){
179 iter++;
180 if(TMath::Abs(pdgdaughters[0])==211) {
181 vars[iter] = dd->CosThetaStarD0();
182 } else {
183 vars[iter] = dd->CosThetaStarD0bar();
184 }
185 }
186 if(fVarsForOpt[3]){
187 iter++;
188 if(TMath::Abs(pdgdaughters[0])==321) {
189 vars[iter]=dd->PtProng(0);
190 }
191 else{
192 vars[iter]=dd->PtProng(1);
193 }
194 }
195 if(fVarsForOpt[4]){
196 iter++;
197 if(TMath::Abs(pdgdaughters[0])==211) {
198 vars[iter]=dd->PtProng(0);
199 }
200 else{
201 vars[iter]=dd->PtProng(1);
202 }
203 }
204 if(fVarsForOpt[5]){
205 iter++;
206 if(TMath::Abs(pdgdaughters[0])==321) {
207 vars[iter]=dd->Getd0Prong(0);
208 }
209 else{
210 vars[iter]=dd->Getd0Prong(1);
211 }
212 }
213 if(fVarsForOpt[6]){
214 iter++;
215 if(TMath::Abs(pdgdaughters[0])==211) {
216 vars[iter]=dd->Getd0Prong(0);
217 }
218 else{
219 vars[iter]=dd->Getd0Prong(1);
220 }
221 }
222 if(fVarsForOpt[7]){
223 iter++;
224 vars[iter]= dd->Prodd0d0();
225 }
226 if(fVarsForOpt[8]){
227 iter++;
228 vars[iter]=dd->CosPointingAngle();
229 }
230 if(fVarsForOpt[9]){
231 iter++;
232 vars[iter]=dstarD0pi->InvMassDstarKpipi();
233 }
234 if(fVarsForOpt[10]){
235 iter++;
236 vars[iter]=dstarD0pi->DeltaInvMass();
237 }
238 if(fVarsForOpt[11]){
239 iter++;
240 vars[iter] = softPi->Pt();
241 }
242 if(fVarsForOpt[12]){
243 iter++;
244 vars[iter] = softPi->Pt();
245 }
246 if(fVarsForOpt[13]){
247 iter++;
248 vars[iter] =dstarD0pi->AngleD0dkpPisoft();
249 }
c8cd526d 250 if(fVarsForOpt[14]){
251 iter++;
252 vars[iter]=TMath::Abs(dd->CosPointingAngleXY());
253 }
254 if(fVarsForOpt[15]){
255 iter++;
256 vars[iter]=(dd->NormalizedDecayLengthXY()*(dd->P()/dd->Pt()));
257 }
45bc9115 258
259 return;
260}
261//---------------------------------------------------------------------------
262Int_t AliRDHFCutsDStartoKpipi::IsSelected(TObject* obj,Int_t selectionLevel) {
263 //
264 // Apply selection for D*.
265 //
306dd1c1 266
267 fIsSelectedCuts=0;
268 fIsSelectedPID=0;
269
45bc9115 270 if(!fCutsRD){
271 cout<<"Cut matrice not inizialized. Exit..."<<endl;
272 return 0;
273 }
274
275 AliAODRecoCascadeHF* d = (AliAODRecoCascadeHF*)obj;
276 if(!d){
277 cout<<"AliAODRecoCascadeHF null"<<endl;
278 return 0;
279 }
280
939850df 281 Double_t ptD=d->Pt();
282 if(ptD<fMinPtCand) return 0;
283 if(ptD>fMaxPtCand) return 0;
ba27eecd 284
939850df 285
45bc9115 286 AliAODRecoDecayHF2Prong* dd = (AliAODRecoDecayHF2Prong*)d->Get2Prong();
287 if(!dd){
288 cout<<"AliAODRecoDecayHF2Prong null"<<endl;
289 return 0;
290 }
291
3e075b37 292 if(fUseTrackSelectionWithFilterBits && dd->HasBadDaughters()) return 0;
ba27eecd 293
45bc9115 294 AliAODTrack *b = (AliAODTrack*)d->GetBachelor();
c0d01d9d 295 if(fTrackCutsSoftPi && fTrackCutsSoftPi->GetRequireTPCRefit()){
8f85c649 296 if(!(b->TestFilterMask(BIT(4)))) return 0;
297 }
45bc9115 298
e4f1bb0a 299 Int_t returnvalue=1;
28e927b1 300 Int_t returnvaluePID=3;
301
28e927b1 302
45bc9115 303 // selection on candidate
304 if(selectionLevel==AliRDHFCuts::kAll ||
305 selectionLevel==AliRDHFCuts::kCandidate) {
306
307 Double_t pt=d->Pt();
308 Int_t ptbin=PtBin(pt);
28e927b1 309
45bc9115 310 // DStarMass and D0mass
311 Double_t mDSPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
312 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
313 // delta mass PDG
314 Double_t deltaPDG = mDSPDG-mD0PDG;
45bc9115 315
45bc9115 316 // Half width DStar mass
ee1128c6 317 if(TMath::Abs(mDSPDG - (d->InvMassDstarKpipi()))>fCutsRD[GetGlobalIndex(9,ptbin)]) return 0;
45bc9115 318 // Half width Delta mass
319
ee1128c6 320 if(TMath::Abs(deltaPDG-(d->DeltaInvMass())) > fCutsRD[GetGlobalIndex(10,ptbin)]) return 0;
45bc9115 321
322 // cut on soft pion pt
323 if(b->Pt() < fCutsRD[GetGlobalIndex(11,ptbin)] || b->Pt() > fCutsRD[GetGlobalIndex(12,ptbin)]) return 0;
324 // cut on the angle between D0 decay plane and soft pion
325 if(d->AngleD0dkpPisoft() > fCutsRD[GetGlobalIndex(13,ptbin)]) return 0;
326
dcc2ade0 327 // select D0 that passes D* cuts
328 returnvalue = IsD0FromDStarSelected(pt,dd,selectionLevel);
329 if((b->Charge()==+1 && returnvalue==2) || (b->Charge()==-1 && returnvalue==1)) return 0;
330
331 }
332
306dd1c1 333 fIsSelectedCuts = returnvalue;
334
dcc2ade0 335 // selection on PID
336 if(selectionLevel==AliRDHFCuts::kAll ||
337 selectionLevel==AliRDHFCuts::kCandidate ||
338 selectionLevel==AliRDHFCuts::kPID) {
339 returnvaluePID = IsSelectedPID(d);
306dd1c1 340 fIsSelectedPID = returnvaluePID;
45bc9115 341 }
7562813c 342 if(returnvaluePID!=3) returnvalue =0;
dcc2ade0 343
344
345 // selection on daughter tracks
346 if(selectionLevel==AliRDHFCuts::kAll ||
347 selectionLevel==AliRDHFCuts::kTracks) {
348 if(!AreDaughtersSelected(dd)) return 0;
349 if(fTrackCutsSoftPi) {
350 AliAODVertex *vAOD = d->GetPrimaryVtx();
351 Double_t pos[3],cov[6];
352 vAOD->GetXYZ(pos);
353 vAOD->GetCovarianceMatrix(cov);
354 const AliESDVertex vESD(pos,cov,100.,100);
355 if(!IsDaughterSelected(b,&vESD,fTrackCutsSoftPi)) return 0;
356 }
357 }
358
45bc9115 359 return returnvalue;
7562813c 360
45bc9115 361}
362//_________________________________________________________________________________________________
da6fefc3 363Int_t AliRDHFCutsDStartoKpipi::IsD0FromDStarSelected(Double_t pt, TObject* obj,Int_t selectionLevel) const {
45bc9115 364 //
365 // Apply selection for D0 from D*. The selection in on D0 prongs
366 //
367
368 if(!fCutsRD){
369 cout<<"Cut matrice not inizialized. Exit..."<<endl;
370 return 0;
371 }
372
373 AliAODRecoDecayHF2Prong* dd = (AliAODRecoDecayHF2Prong*)obj;
374
375 if(!dd){
376 cout<<"AliAODRecoDecayHF2Prong null"<<endl;
377 return 0;
378 }
379
da6fefc3 380 // selection on daughter tracks is done in IsSelected()
45bc9115 381
382 Int_t returnvalue=1;
383
384 // selection on candidate
385 if(selectionLevel==AliRDHFCuts::kAll ||
386 selectionLevel==AliRDHFCuts::kCandidate) {
387
388 // D0 mass
389 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
390 // delta mass PDG
391
392 Int_t ptbin=PtBin(pt);
393
394 Double_t mD0,mD0bar,ctsD0,ctsD0bar;
395
396 Int_t okD0 =0;
397 Int_t okD0bar =0;
398 okD0=1; okD0bar=1;
399
400 if(dd->PtProng(1) < fCutsRD[GetGlobalIndex(3,ptbin)] || dd->PtProng(0) < fCutsRD[GetGlobalIndex(4,ptbin)]) okD0 = 0;
401 if(dd->PtProng(0) < fCutsRD[GetGlobalIndex(3,ptbin)] || dd->PtProng(1) < fCutsRD[GetGlobalIndex(4,ptbin)]) okD0bar = 0;
402
403 if(!okD0 && !okD0bar) return 0;
404
405 if(TMath::Abs(dd->Getd0Prong(1)) > fCutsRD[GetGlobalIndex(5,ptbin)] ||
406 TMath::Abs(dd->Getd0Prong(0)) > fCutsRD[GetGlobalIndex(6,ptbin)]) okD0 = 0;
407 if(TMath::Abs(dd->Getd0Prong(0)) > fCutsRD[GetGlobalIndex(6,ptbin)] ||
408 TMath::Abs(dd->Getd0Prong(1)) > fCutsRD[GetGlobalIndex(5,ptbin)]) okD0bar = 0;
409 if(!okD0 && !okD0bar) return 0;
410
411 if(dd->GetDCA() > fCutsRD[GetGlobalIndex(1,ptbin)]) return 0;
412
413 dd->InvMassD0(mD0,mD0bar);
414 if(TMath::Abs(mD0-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)]) okD0 = 0;
415 if(TMath::Abs(mD0bar-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)]) okD0bar = 0;
416 if(!okD0 && !okD0bar) return 0;
417
418 dd->CosThetaStarD0(ctsD0,ctsD0bar);
419 if(TMath::Abs(ctsD0) > fCutsRD[GetGlobalIndex(2,ptbin)]) okD0 = 0;
420 if(TMath::Abs(ctsD0bar) > fCutsRD[GetGlobalIndex(2,ptbin)]) okD0bar = 0;
421 if(!okD0 && !okD0bar) return 0;
422
423 if(dd->Prodd0d0() > fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
424
425 if(dd->CosPointingAngle() < fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
426
c8cd526d 427 if(TMath::Abs(dd->CosPointingAngleXY()) < fCutsRD[GetGlobalIndex(14,ptbin)]) return 0;
428
429 Double_t normalDecayLengXY=(dd->NormalizedDecayLengthXY()*(dd->P()/dd->Pt()));
430 if (normalDecayLengXY < fCutsRD[GetGlobalIndex(15, ptbin)]) return 0;
431
45bc9115 432 if (okD0) returnvalue=1; //cuts passed as D0
433 if (okD0bar) returnvalue=2; //cuts passed as D0bar
434 if (okD0 && okD0bar) returnvalue=3; //both
435 }
28e927b1 436
45bc9115 437 return returnvalue;
438}
96462a8c 439//----------------------------------------------------------------------------------
440Bool_t AliRDHFCutsDStartoKpipi::IsInFiducialAcceptance(Double_t pt, Double_t y) const
441{
442 //
443 // D* fiducial acceptance region
444 //
45bc9115 445
af5d687e 446 if(fMaxRapidityCand>-998.){
447 if(TMath::Abs(y) > fMaxRapidityCand) return kFALSE;
448 else return kTRUE;
449 }
450
96462a8c 451 if(pt > 5.) {
452 // applying cut for pt > 5 GeV
453 AliDebug(4,Form("pt of D* = %f (> 5), cutting at |y| < 0.8\n",pt));
454 if (TMath::Abs(y) > 0.8){
455 return kFALSE;
456 }
7562813c 457 } else {
96462a8c 458 // appliying smooth cut for pt < 5 GeV
28e927b1 459 Double_t maxFiducialY = -0.2/15*pt*pt+1.9/15*pt+0.5;
460 Double_t minFiducialY = 0.2/15*pt*pt-1.9/15*pt-0.5;
461 AliDebug(2,Form("pt of D* = %f (< 5), cutting according to the fiducial zone [%f, %f]\n",pt,minFiducialY,maxFiducialY));
96462a8c 462 if (y < minFiducialY || y > maxFiducialY){
463 return kFALSE;
464 }
465 }
7562813c 466
467 return kTRUE;
468}
469
470//_______________________________________________________________________________-
471Int_t AliRDHFCutsDStartoKpipi::IsSelectedPID(AliAODRecoDecayHF* obj)
472{
473 //
474 // PID method, n signa approach default
475 //
476
7562813c 477 AliAODRecoCascadeHF* dstar = (AliAODRecoCascadeHF*)obj;
478 if(!dstar){
479 cout<<"AliAODRecoCascadeHF null"<<endl;
480 return 0;
a8d9f55a 481 }
482
483 if(!fUsePID || dstar->Pt() > fMaxPtPid) return 3;
484
7562813c 485 AliAODRecoDecayHF2Prong* d0 = (AliAODRecoDecayHF2Prong*)dstar->Get2Prong();
486 if(!d0){
487 cout<<"AliAODRecoDecayHF2Prong null"<<endl;
488 return 0;
489 }
490
491 // here the PID
492 AliAODTrack *pos = (AliAODTrack*)dstar->Get2Prong()->GetDaughter(0);
493 AliAODTrack *neg = (AliAODTrack*)dstar->Get2Prong()->GetDaughter(1);
45bc9115 494
7562813c 495 if (dstar->Charge()>0){
496 if(!SelectPID(pos,2)) return 0;//pion+
497 if(!SelectPID(neg,3)) return 0;//kaon-
498 }else{
499 if(!SelectPID(pos,3)) return 0;//kaon+
500 if(!SelectPID(neg,2)) return 0;//pion-
501 }
28e927b1 502
7562813c 503 return 3;
96462a8c 504}
7562813c 505
28e927b1 506//_______________________________________________________________________________-
7562813c 507Int_t AliRDHFCutsDStartoKpipi::SelectPID(AliAODTrack *track, Int_t type)
28e927b1 508{
509 //
510 // here the PID
7562813c 511
512 Bool_t isParticle=kTRUE;
513
514 if(fPidHF->GetMatch()==1){//n-sigma
515 Bool_t TPCon=TMath::Abs(2)>1e-4?kTRUE:kFALSE;
516 Bool_t TOFon=TMath::Abs(3)>1e-4?kTRUE:kFALSE;
517
518 Bool_t isTPC=kTRUE;
519 Bool_t isTOF=kTRUE;
520
521 if (TPCon){//TPC
522 if(fPidHF->CheckStatus(track,"TPC")){
523 if(type==2) isTPC=fPidHF->IsPionRaw(track,"TPC");
524 if(type==3) isTPC=fPidHF->IsKaonRaw(track,"TPC");
525 }
526 }
527 if (TOFon){//TOF
528 if(fPidHF->CheckStatus(track,"TOF")){
529 if(type==2) isTOF=fPidHF->IsPionRaw(track,"TOF");
530 if(type==3) isTOF=fPidHF->IsKaonRaw(track,"TOF");
531 }
532 }
035523fb 533
534 //--------------------------------
535 // cut on high momentum in the TPC
536 //--------------------------------
537 Double_t pPIDcut = track->P();
538 if(pPIDcut>fTPCflag) isTPC=1;
539
7562813c 540 isParticle = isTPC&&isTOF;
541 }
542
543 if(fPidHF->GetMatch()==2){//bayesian
544 //Double_t priors[5]={0.01,0.001,0.3,0.3,0.3};
545 Double_t prob[5]={1.,1.,1.,1.,1.};
546
547 //fPidHF->SetPriors(priors);
a585a726 548 // fPidHF->BayesianProbability(track,prob);
7562813c 549
550 Double_t max=0.;
551 Int_t k=-1;
552 for (Int_t i=0; i<5; i++) {
553 if (prob[i]>max) {k=i; max=prob[i];}
554 }
555 isParticle = Bool_t(k==type);
556 }
557
035523fb 558
7562813c 559 return isParticle;
560
561}
562//__________________________________________________________________________________-
563void AliRDHFCutsDStartoKpipi::SetStandardCutsPP2010() {
564 //
565 //STANDARD CUTS USED FOR 2010 pp analysis
566 //
567 // Need to be updated for the final cut version
568 //
569
570 SetName("DStartoD0piCutsStandard");
571 SetTitle("Standard Cuts for D* analysis");
572
573 // PILE UP REJECTION
574 SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
575
576 // EVENT CUTS
577 SetMinVtxContr(1);
578
579 // CUTS ON SINGLE TRACKS
580 AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
581 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
582 esdTrackCuts->SetRequireTPCRefit(kTRUE);
583 esdTrackCuts->SetRequireITSRefit(kTRUE);
584 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
585 esdTrackCuts->SetMinDCAToVertexXY(0.);
586 esdTrackCuts->SetEtaRange(-0.8,0.8);
587 esdTrackCuts->SetPtRange(0.3,1.e10);
588
589 // CUTS on SOFT PION
590 AliESDtrackCuts* esdSoftPicuts=new AliESDtrackCuts();
591 esdSoftPicuts->SetRequireSigmaToVertex(kFALSE);
592 esdSoftPicuts->SetRequireTPCRefit(kFALSE);
593 esdSoftPicuts->SetRequireITSRefit(kFALSE);
594 esdSoftPicuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
595 AliESDtrackCuts::kAny);
596 esdSoftPicuts->SetPtRange(0.0,1.e10);
597
598 AddTrackCuts(esdTrackCuts);
599 AddTrackCutsSoftPi(esdSoftPicuts);
600
601 const Int_t nptbins =13;
602 const Double_t ptmax = 9999.;
c8cd526d 603 const Int_t nvars=16;
7562813c 604 Float_t ptbins[nptbins+1];
605 ptbins[0]=0.;
606 ptbins[1]=0.5;
607 ptbins[2]=1.;
608 ptbins[3]=2.;
609 ptbins[4]=3.;
610 ptbins[5]=4.;
611 ptbins[6]=5.;
612 ptbins[7]=6.;
c8cd526d 613 ptbins[8]=7.;
614 ptbins[9]=8.;
615 ptbins[10]=12.;
616 ptbins[11]=16.;
7562813c 617 ptbins[12]=24.;
618 ptbins[13]=ptmax;
619
620 SetGlobalIndex(nvars,nptbins);
621 SetPtBins(nptbins+1,ptbins);
622
c8cd526d 623 Float_t cutsMatrixD0toKpiStand[nptbins][nvars]={{0.7,220.*1E-4,0.7,0.21,0.21,500.*1E-4,500.*1E-4,-2000.*1E-8,0.85,0.3,0.1,0.05,100,0.5,-1.,0.},/* pt<0.5*/
624 {0.7,220.*1E-4,0.7,0.21,0.21,500.*1E-4,500.*1E-4,-16000.*1E-8,0.85,0.3,0.1,0.05,100,0.5,-1.,0.},/* 0.5<pt<1*/
625 {0.7,400.*1E-4,0.8,0.7,0.7,400.*1E-4,400.*1E-4,-36000.*1E-8,0.82,0.3,0.1,0.05,100,0.5,-1.,0.},/* 1<pt<2 */
626 {0.7,200.*1E-4,0.8,0.7,0.7,800.*1E-4,800.*1E-4,-16000.*1E-8,0.9,0.3,0.1,0.05,100,0.5,-1.,0.},/* 2<pt<3 */
627 {0.7,500.*1E-4,0.8,1.0,1.0,420.*1E-4,560.*1E-4,-6500.*1E-8,0.9,0.3,0.1,0.05,100,0.5,-1.,0.},/* 3<pt<4 */
628 {0.7,800.*1E-4,0.9,1.2,1.2,700.*1E-4,700.*1E-4,1000.*1E-8,0.9,0.3,0.1,0.05,100,0.5,-1.,0.},/* 4<pt<5 */
629 {0.7,1000.*1E-4,1.0,1.0,1.0,800.*1E-4,800.*1E-4,50000.*1E-8,0.8,0.3,0.1,0.05,100,0.5,-1.,0.},/* 5<pt<6 */
630 {0.7,1000.*1E-4,1.0,1.0,1.0,1000.*1E-4,1000.*1E-4,100000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 6<pt<7 */
631 {0.7,1000.*1E-4,1.0,1.0,1.0,1000.*1E-4,1000.*1E-4,100000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 7<pt<8 */
632 {0.7,1000.*1E-4,1.0,1.0,1.0,1000.*1E-4,1000.*1E-4,600000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 8<pt<12 */
633 {0.7,1000.*1E-4,1.0,1.0,1.0,1500.*1E-4,1500.*1E-4,1000000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 12<pt<16 */
634 {0.7,1000.*1E-4,1.0,1.0,1.0,1500.*1E-4,1500.*1E-4,1000000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 16<pt<20 */
635 {0.7,1000.*1E-4,1.0,1.0,1.0,1500.*1E-4,1500.*1E-4,1000000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.}};/* pt>24 */
7562813c 636
637
638 //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
639 Float_t **cutsMatrixTransposeStand=new Float_t*[nvars];
640 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=new Float_t[nptbins];
641
642 for (Int_t ibin=0;ibin<nptbins;ibin++){
643 for (Int_t ivar = 0; ivar<nvars; ivar++){
644 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
645 }
646 }
647
648 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
e11ae259 649
650 for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
651 delete [] cutsMatrixTransposeStand;
652 cutsMatrixTransposeStand=NULL;
653
7562813c 654 // PID SETTINGS FOR D* analysis
655 AliAODPidHF* pidObj=new AliAODPidHF();
656 //pidObj->SetName("pid4DSatr");
657 Int_t mode=1;
658 Double_t priors[5]={0.01,0.001,0.3,0.3,0.3};
659 pidObj->SetPriors(priors);
660 pidObj->SetMatch(mode);
661 pidObj->SetSigma(0,2); // TPC
662 pidObj->SetSigma(3,3); // TOF
663 pidObj->SetTPC(kTRUE);
664 pidObj->SetTOF(kTRUE);
665
666 SetPidHF(pidObj);
667 SetUsePID(kTRUE);
668
669 PrintAll();
670
e11ae259 671 delete pidObj;
672 pidObj=NULL;
673
7562813c 674 return;
675}
676//_____________________________________________________________________________-
677void AliRDHFCutsDStartoKpipi::SetStandardCutsPbPb2010(){
678 //
679 // TEMPORARY, WORK IN PROGRESS ... BUT WORKING!
680 //
681 // Lead Lead
682 //
683
684 SetName("DStartoD0piCutsStandard");
685 SetTitle("Standard Cuts for D* analysis in PbPb 2010");
686
687 // EVENT CUTS
688 SetMinVtxContr(1);
689
690 // CUTS ON SINGLE TRACKS
691 AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts","default");
692 esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
693 esdTrackCuts->SetRequireTPCRefit(kTRUE);
694 esdTrackCuts->SetRequireITSRefit(kTRUE);
695 esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
696 esdTrackCuts->SetMinDCAToVertexXY(0.);
697 esdTrackCuts->SetEtaRange(-0.8,0.8);
698 esdTrackCuts->SetPtRange(0.3,1.e10);
699
700 // CUTS on SOFT PION
701 AliESDtrackCuts* esdSoftPicuts=new AliESDtrackCuts();
702 esdSoftPicuts->SetRequireSigmaToVertex(kFALSE);
703 esdSoftPicuts->SetRequireTPCRefit(kTRUE);
704 esdSoftPicuts->SetRequireITSRefit(kTRUE);
705 esdSoftPicuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
706 AliESDtrackCuts::kAny); //test d0 asimmetry
707 esdSoftPicuts->SetPtRange(0.25,5);
708
709 AddTrackCuts(esdTrackCuts);
710 AddTrackCutsSoftPi(esdSoftPicuts);
711
712 const Int_t nptbins =13;
713 const Double_t ptmax = 9999.;
c8cd526d 714 const Int_t nvars=16;
7562813c 715 Float_t ptbins[nptbins+1];
716 ptbins[0]=0.;
717 ptbins[1]=0.5;
718 ptbins[2]=1.;
719 ptbins[3]=2.;
720 ptbins[4]=3.;
721 ptbins[5]=4.;
722 ptbins[6]=5.;
723 ptbins[7]=6.;
c8cd526d 724 ptbins[8]=7.;
725 ptbins[9]=8.;
726 ptbins[10]=12.;
727 ptbins[11]=16.;
7562813c 728 ptbins[12]=24.;
729 ptbins[13]=ptmax;
730
731 SetGlobalIndex(nvars,nptbins);
732 SetPtBins(nptbins+1,ptbins);
733
c8cd526d 734 Float_t cutsMatrixD0toKpiStand[nptbins][nvars]={{0.7,220.*1E-4,0.7,0.21,0.21,500.*1E-4,500.*1E-4,-2000.*1E-8,0.85,0.3,0.1,0.05,100,0.5,-1.,0.},/* pt<0.5*/
735 {0.7,220.*1E-4,0.7,0.21,0.21,500.*1E-4,500.*1E-4,-16000.*1E-8,0.85,0.3,0.1,0.05,100,0.5,-1.,0.},/* 0.5<pt<1*/
736 {0.7,400.*1E-4,0.8,0.7,0.7,800.*1E-4,800.*1E-4,-36000.*1E-8,0.82,0.3,0.1,0.05,100,0.5,-1.,0.},/* 1<pt<2 */
737 {0.7,200.*1E-4,0.8,0.7,0.7,800.*1E-4,800.*1E-4,-16000.*1E-8,0.9,0.3,0.1,0.05,100,0.5,-1.,0.},/* 2<pt<3 */
738 {0.7,500.*1E-4,0.8,1.0,1.0,420.*1E-4,560.*1E-4,-6500.*1E-8,0.9,0.3,0.1,0.05,100,0.5,-1.,0.},/* 3<pt<4 */
739 {0.7,800.*1E-4,0.9,1.2,1.2,700.*1E-4,700.*1E-4,1000.*1E-8,0.9,0.3,0.1,0.05,100,0.5,-1.,0.},/* 4<pt<5 */
740 {0.7,1000.*1E-4,1.0,1.0,1.0,800.*1E-4,800.*1E-4,50000.*1E-8,0.8,0.3,0.1,0.05,100,0.5,-1.,0.},/* 5<pt<6 */
741 {0.7,1000.*1E-4,1.0,1.0,1.0,1000.*1E-4,1000.*1E-4,100000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 6<pt<7 */
742 {0.7,1000.*1E-4,1.0,1.0,1.0,1000.*1E-4,1000.*1E-4,100000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 7<pt<8 */
743 {0.7,1000.*1E-4,1.0,1.0,1.0,1000.*1E-4,1000.*1E-4,600000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 8<pt<12 */
744 {0.7,1000.*1E-4,1.0,1.0,1.0,1500.*1E-4,1500.*1E-4,1000000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 12<pt<16 */
745 {0.7,1000.*1E-4,1.0,1.0,1.0,1500.*1E-4,1500.*1E-4,1000000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.},/* 16<pt<24 */
746 {0.7,1000.*1E-4,1.0,1.0,1.0,1500.*1E-4,1500.*1E-4,1000000.*1E-8,0.7,0.3,0.1,0.05,100,0.5,-1.,0.}};/* pt>24 */
7562813c 747
748
749 //CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
750 Float_t **cutsMatrixTransposeStand=new Float_t*[nvars];
751 for(Int_t iv=0;iv<nvars;iv++)cutsMatrixTransposeStand[iv]=new Float_t[nptbins];
752
753 for (Int_t ibin=0;ibin<nptbins;ibin++){
754 for (Int_t ivar = 0; ivar<nvars; ivar++){
755 cutsMatrixTransposeStand[ivar][ibin]=cutsMatrixD0toKpiStand[ibin][ivar];
756 }
757 }
758
759 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
e11ae259 760
761 for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
762 delete [] cutsMatrixTransposeStand;
763 cutsMatrixTransposeStand=NULL;
7562813c 764
765 // PID SETTINGS
766 AliAODPidHF* pidObj=new AliAODPidHF();
767 // pidObj->SetName("pid4DSatr");
768 Int_t mode=1;
769 Double_t priors[5]={0.01,0.001,0.3,0.3,0.3};
770 pidObj->SetPriors(priors);
771 pidObj->SetMatch(mode);
772 pidObj->SetSigma(0,2); // TPC
773 pidObj->SetSigma(3,3); // TOF
774 pidObj->SetTPC(kTRUE);
775 pidObj->SetTOF(kTRUE);
776
777 SetPidHF(pidObj);
778 SetUsePID(kTRUE);
28e927b1 779
7562813c 780 PrintAll();
781
e11ae259 782 delete pidObj;
783 pidObj=NULL;
784
7562813c 785 return;
28e927b1 786
28e927b1 787}
0c22e2ac 788
789//_____________________________________________________________________________
790void AliRDHFCutsDStartoKpipi::SetStandardCutsPbPb2011(){
791
792 // Default 2010 PbPb cut object
793 SetStandardCutsPbPb2010();
794
795 // Enable all 2011 PbPb run triggers
796 //
797 SetTriggerClass("");
798 ResetMaskAndEnableMBTrigger();
799 EnableCentralTrigger();
800 EnableSemiCentralTrigger();
801
802}