1 /**************************************************************************
2 * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 /////////////////////////////////////////////////////////////
20 // Class for cuts on AOD reconstructed DStar->Kpipi
22 // Author: A.Grelli, alessandro.grelli@uu.nl
24 // PID method implemented by Y.Wang, yifei@physi.uni-heidelberg.de
26 /////////////////////////////////////////////////////////////
28 #include <TDatabasePDG.h>
29 #include <Riostream.h>
31 #include "AliAODRecoDecayHF2Prong.h"
32 #include "AliAODRecoCascadeHF.h"
33 #include "AliRDHFCutsD0toKpi.h"
34 #include "AliRDHFCutsDStartoKpipi.h"
35 #include "AliAODTrack.h"
36 #include "AliESDtrack.h"
37 #include "AliAODPid.h"
38 #include "AliTPCPIDResponse.h"
39 #include "AliAODVertex.h"
40 #include "AliESDVertex.h"
45 ClassImp(AliRDHFCutsDStartoKpipi)
47 //--------------------------------------------------------------------------
48 AliRDHFCutsDStartoKpipi::AliRDHFCutsDStartoKpipi(const char* name) :
55 // Default Constructor
60 TString varNames[16]={
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]",
74 "theta, angle between the pi_s and decay plane of the D0 [rad]",
77 Bool_t isUpperCut[16]={
94 SetVarNames(nvars,varNames,isUpperCut);
112 SetVarsForOpt(5,forOpt);
113 Float_t limits[2]={0,999999999.};
116 //--------------------------------------------------------------------------
117 AliRDHFCutsDStartoKpipi::AliRDHFCutsDStartoKpipi(const AliRDHFCutsDStartoKpipi &source) :
127 if(source.GetTrackCutsSoftPi()) AddTrackCutsSoftPi(source.GetTrackCutsSoftPi());
130 //--------------------------------------------------------------------------
131 AliRDHFCutsDStartoKpipi &AliRDHFCutsDStartoKpipi::operator=(const AliRDHFCutsDStartoKpipi &source)
134 // assignment operator
136 if(&source == this) return *this;
138 AliRDHFCuts::operator=(source);
139 if(source.GetTrackCutsSoftPi()) {
140 delete fTrackCutsSoftPi;
141 fTrackCutsSoftPi = new AliESDtrackCuts(*(source.GetTrackCutsSoftPi()));
148 //---------------------------------------------------------------------------
149 void AliRDHFCutsDStartoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
151 // Fills in vars the values of the variables
153 if(nvars!=fnVarsForOpt) {
154 printf("AliRDHFCutsDStartoKpipi::GetCutsVarsForOpt: wrong number of variables\n");
159 AliAODRecoCascadeHF* dstarD0pi = (AliAODRecoCascadeHF*)d;
161 AliAODTrack *softPi = (AliAODTrack*)dstarD0pi->GetBachelor();
163 AliAODRecoDecayHF2Prong* dd = (AliAODRecoDecayHF2Prong*)dstarD0pi->Get2Prong();
168 if(TMath::Abs(pdgdaughters[0])==211) {
169 vars[iter]=dd->InvMassD0();
171 vars[iter]=dd->InvMassD0bar();
176 vars[iter]=dd->GetDCA();
180 if(TMath::Abs(pdgdaughters[0])==211) {
181 vars[iter] = dd->CosThetaStarD0();
183 vars[iter] = dd->CosThetaStarD0bar();
188 if(TMath::Abs(pdgdaughters[0])==321) {
189 vars[iter]=dd->PtProng(0);
192 vars[iter]=dd->PtProng(1);
197 if(TMath::Abs(pdgdaughters[0])==211) {
198 vars[iter]=dd->PtProng(0);
201 vars[iter]=dd->PtProng(1);
206 if(TMath::Abs(pdgdaughters[0])==321) {
207 vars[iter]=dd->Getd0Prong(0);
210 vars[iter]=dd->Getd0Prong(1);
215 if(TMath::Abs(pdgdaughters[0])==211) {
216 vars[iter]=dd->Getd0Prong(0);
219 vars[iter]=dd->Getd0Prong(1);
224 vars[iter]= dd->Prodd0d0();
228 vars[iter]=dd->CosPointingAngle();
232 vars[iter]=dstarD0pi->InvMassDstarKpipi();
236 vars[iter]=dstarD0pi->DeltaInvMass();
240 vars[iter] = softPi->Pt();
244 vars[iter] = softPi->Pt();
248 vars[iter] =dstarD0pi->AngleD0dkpPisoft();
252 vars[iter]=TMath::Abs(dd->CosPointingAngleXY());
256 vars[iter]=(dd->NormalizedDecayLengthXY()*(dd->P()/dd->Pt()));
261 //---------------------------------------------------------------------------
262 Int_t AliRDHFCutsDStartoKpipi::IsSelected(TObject* obj,Int_t selectionLevel) {
264 // Apply selection for D*.
271 cout<<"Cut matrice not inizialized. Exit..."<<endl;
275 AliAODRecoCascadeHF* d = (AliAODRecoCascadeHF*)obj;
277 cout<<"AliAODRecoCascadeHF null"<<endl;
281 Double_t ptD=d->Pt();
282 if(ptD<fMinPtCand) return 0;
283 if(ptD>fMaxPtCand) return 0;
286 AliAODRecoDecayHF2Prong* dd = (AliAODRecoDecayHF2Prong*)d->Get2Prong();
288 cout<<"AliAODRecoDecayHF2Prong null"<<endl;
292 if(fUseTrackSelectionWithFilterBits && dd->HasBadDaughters()) return 0;
294 AliAODTrack *b = (AliAODTrack*)d->GetBachelor();
295 if(fTrackCutsSoftPi && fTrackCutsSoftPi->GetRequireTPCRefit()){
296 if(!(b->TestFilterMask(BIT(4)))) return 0;
300 Int_t returnvaluePID=3;
303 // selection on candidate
304 if(selectionLevel==AliRDHFCuts::kAll ||
305 selectionLevel==AliRDHFCuts::kCandidate) {
308 Int_t ptbin=PtBin(pt);
310 // DStarMass and D0mass
311 Double_t mDSPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
312 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
314 Double_t deltaPDG = mDSPDG-mD0PDG;
316 // Half width DStar mass
317 if(TMath::Abs(mDSPDG - (d->InvMassDstarKpipi()))>fCutsRD[GetGlobalIndex(9,ptbin)]) return 0;
318 // Half width Delta mass
320 if(TMath::Abs(deltaPDG-(d->DeltaInvMass())) > fCutsRD[GetGlobalIndex(10,ptbin)]) return 0;
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;
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;
333 fIsSelectedCuts = returnvalue;
336 if(selectionLevel==AliRDHFCuts::kAll ||
337 selectionLevel==AliRDHFCuts::kCandidate ||
338 selectionLevel==AliRDHFCuts::kPID) {
339 returnvaluePID = IsSelectedPID(d);
340 fIsSelectedPID = returnvaluePID;
342 if(returnvaluePID!=3) returnvalue =0;
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];
353 vAOD->GetCovarianceMatrix(cov);
354 const AliESDVertex vESD(pos,cov,100.,100);
355 if(!IsDaughterSelected(b,&vESD,fTrackCutsSoftPi)) return 0;
362 //_________________________________________________________________________________________________
363 Int_t AliRDHFCutsDStartoKpipi::IsD0FromDStarSelected(Double_t pt, TObject* obj,Int_t selectionLevel) const {
365 // Apply selection for D0 from D*. The selection in on D0 prongs
369 cout<<"Cut matrice not inizialized. Exit..."<<endl;
373 AliAODRecoDecayHF2Prong* dd = (AliAODRecoDecayHF2Prong*)obj;
376 cout<<"AliAODRecoDecayHF2Prong null"<<endl;
380 // selection on daughter tracks is done in IsSelected()
384 // selection on candidate
385 if(selectionLevel==AliRDHFCuts::kAll ||
386 selectionLevel==AliRDHFCuts::kCandidate) {
389 Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
392 Int_t ptbin=PtBin(pt);
394 Double_t mD0,mD0bar,ctsD0,ctsD0bar;
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;
403 if(!okD0 && !okD0bar) return 0;
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;
411 if(dd->GetDCA() > fCutsRD[GetGlobalIndex(1,ptbin)]) return 0;
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;
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;
423 if(dd->Prodd0d0() > fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
425 if(dd->CosPointingAngle() < fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
427 if(TMath::Abs(dd->CosPointingAngleXY()) < fCutsRD[GetGlobalIndex(14,ptbin)]) return 0;
429 Double_t normalDecayLengXY=(dd->NormalizedDecayLengthXY()*(dd->P()/dd->Pt()));
430 if (normalDecayLengXY < fCutsRD[GetGlobalIndex(15, ptbin)]) return 0;
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
439 //----------------------------------------------------------------------------------
440 Bool_t AliRDHFCutsDStartoKpipi::IsInFiducialAcceptance(Double_t pt, Double_t y) const
443 // D* fiducial acceptance region
446 if(fMaxRapidityCand>-998.){
447 if(TMath::Abs(y) > fMaxRapidityCand) return kFALSE;
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){
458 // appliying smooth cut for pt < 5 GeV
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));
462 if (y < minFiducialY || y > maxFiducialY){
470 //_______________________________________________________________________________-
471 Int_t AliRDHFCutsDStartoKpipi::IsSelectedPID(AliAODRecoDecayHF* obj)
474 // PID method, n signa approach default
477 AliAODRecoCascadeHF* dstar = (AliAODRecoCascadeHF*)obj;
479 cout<<"AliAODRecoCascadeHF null"<<endl;
483 if(!fUsePID || dstar->Pt() > fMaxPtPid) return 3;
485 AliAODRecoDecayHF2Prong* d0 = (AliAODRecoDecayHF2Prong*)dstar->Get2Prong();
487 cout<<"AliAODRecoDecayHF2Prong null"<<endl;
492 AliAODTrack *pos = (AliAODTrack*)dstar->Get2Prong()->GetDaughter(0);
493 AliAODTrack *neg = (AliAODTrack*)dstar->Get2Prong()->GetDaughter(1);
495 if (dstar->Charge()>0){
496 if(!SelectPID(pos,2)) return 0;//pion+
497 if(!SelectPID(neg,3)) return 0;//kaon-
499 if(!SelectPID(pos,3)) return 0;//kaon+
500 if(!SelectPID(neg,2)) return 0;//pion-
506 //_______________________________________________________________________________-
507 Int_t AliRDHFCutsDStartoKpipi::SelectPID(AliAODTrack *track, Int_t type)
512 Bool_t isParticle=kTRUE;
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;
522 if(fPidHF->CheckStatus(track,"TPC")){
523 if(type==2) isTPC=fPidHF->IsPionRaw(track,"TPC");
524 if(type==3) isTPC=fPidHF->IsKaonRaw(track,"TPC");
528 if(fPidHF->CheckStatus(track,"TOF")){
529 if(type==2) isTOF=fPidHF->IsPionRaw(track,"TOF");
530 if(type==3) isTOF=fPidHF->IsKaonRaw(track,"TOF");
534 //--------------------------------
535 // cut on high momentum in the TPC
536 //--------------------------------
537 Double_t pPIDcut = track->P();
538 if(pPIDcut>fTPCflag) isTPC=1;
540 isParticle = isTPC&&isTOF;
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.};
547 //fPidHF->SetPriors(priors);
548 // fPidHF->BayesianProbability(track,prob);
552 for (Int_t i=0; i<5; i++) {
553 if (prob[i]>max) {k=i; max=prob[i];}
555 isParticle = Bool_t(k==type);
562 //__________________________________________________________________________________-
563 void AliRDHFCutsDStartoKpipi::SetStandardCutsPP2010() {
565 //STANDARD CUTS USED FOR 2010 pp analysis
567 // Need to be updated for the final cut version
570 SetName("DStartoD0piCutsStandard");
571 SetTitle("Standard Cuts for D* analysis");
574 SetOptPileup(AliRDHFCuts::kRejectPileupEvent);
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);
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);
598 AddTrackCuts(esdTrackCuts);
599 AddTrackCutsSoftPi(esdSoftPicuts);
601 const Int_t nptbins =13;
602 const Double_t ptmax = 9999.;
603 const Int_t nvars=16;
604 Float_t ptbins[nptbins+1];
620 SetGlobalIndex(nvars,nptbins);
621 SetPtBins(nptbins+1,ptbins);
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 */
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];
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];
648 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
650 for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
651 delete [] cutsMatrixTransposeStand;
652 cutsMatrixTransposeStand=NULL;
654 // PID SETTINGS FOR D* analysis
655 AliAODPidHF* pidObj=new AliAODPidHF();
656 //pidObj->SetName("pid4DSatr");
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);
676 //_____________________________________________________________________________-
677 void AliRDHFCutsDStartoKpipi::SetStandardCutsPbPb2010(){
679 // TEMPORARY, WORK IN PROGRESS ... BUT WORKING!
684 SetName("DStartoD0piCutsStandard");
685 SetTitle("Standard Cuts for D* analysis in PbPb 2010");
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);
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);
709 AddTrackCuts(esdTrackCuts);
710 AddTrackCutsSoftPi(esdSoftPicuts);
712 const Int_t nptbins =13;
713 const Double_t ptmax = 9999.;
714 const Int_t nvars=16;
715 Float_t ptbins[nptbins+1];
731 SetGlobalIndex(nvars,nptbins);
732 SetPtBins(nptbins+1,ptbins);
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 */
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];
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];
759 SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
761 for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
762 delete [] cutsMatrixTransposeStand;
763 cutsMatrixTransposeStand=NULL;
766 AliAODPidHF* pidObj=new AliAODPidHF();
767 // pidObj->SetName("pid4DSatr");
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);
789 //_____________________________________________________________________________
790 void AliRDHFCutsDStartoKpipi::SetStandardCutsPbPb2011(){
792 // Default 2010 PbPb cut object
793 SetStandardCutsPbPb2010();
795 // Enable all 2011 PbPb run triggers
798 ResetMaskAndEnableMBTrigger();
799 EnableCentralTrigger();
800 EnableSemiCentralTrigger();