* provided "as is" without express or implied warranty. *
**************************************************************************/
+/* $Id$ */
+
/////////////////////////////////////////////////////////////
//
// Class for cuts on AOD reconstructed DStar->Kpipi
// Default Constructor
//
- Int_t nvars=14;
+ Int_t nvars=16;
SetNVars(nvars);
- TString varNames[14]={
+ TString varNames[16]={
"inv. mass [GeV]",
"dca [cm]",
"cosThetaStar",
"half width of (M_Kpipi-M_D0) [GeV]",
"PtMin of pi_s [GeV/c]",
"PtMax of pi_s [GeV/c]",
- "theta, angle between the pi_s and decay plane of the D0 [rad]"};
- Bool_t isUpperCut[14]={
+ "theta, angle between the pi_s and decay plane of the D0 [rad]",
+ "|cosThetaPointXY|",
+ "NormDecayLenghtXY"};
+ Bool_t isUpperCut[16]={
kTRUE,
kTRUE,
kTRUE,
kTRUE,
kTRUE,
kTRUE,
+ kFALSE,
+ kFALSE,
kFALSE};
SetVarNames(nvars,varNames,isUpperCut);
- Bool_t forOpt[14]={
+ Bool_t forOpt[16]={
kFALSE,
kTRUE,
kTRUE,
kTRUE,
kFALSE,
kFALSE,
+ kFALSE,
+ kFALSE,
kFALSE};
SetVarsForOpt(5,forOpt);
Float_t limits[2]={0,999999999.};
iter++;
vars[iter] =dstarD0pi->AngleD0dkpPisoft();
}
+ if(fVarsForOpt[14]){
+ iter++;
+ vars[iter]=TMath::Abs(dd->CosPointingAngleXY());
+ }
+ if(fVarsForOpt[15]){
+ iter++;
+ vars[iter]=(dd->NormalizedDecayLengthXY()*(dd->P()/dd->Pt()));
+ }
return;
}
return 0;
}
+ Double_t ptD=d->Pt();
+ if(ptD<fMinPtCand) return 0;
+ if(ptD>fMaxPtCand) return 0;
+
+
AliAODRecoDecayHF2Prong* dd = (AliAODRecoDecayHF2Prong*)d->Get2Prong();
if(!dd){
cout<<"AliAODRecoDecayHF2Prong null"<<endl;
return 0;
}
- AliAODTrack *b = (AliAODTrack*)d->GetBachelor();
+ if(dd->HasBadDaughters()) return 0;
- // selection on daughter tracks
- if(selectionLevel==AliRDHFCuts::kAll ||
- selectionLevel==AliRDHFCuts::kTracks) {
- if(!AreDaughtersSelected(dd)) return 0;
- if(fTrackCutsSoftPi) {
- AliAODVertex *vAOD = d->GetPrimaryVtx();
- Double_t pos[3],cov[6];
- vAOD->GetXYZ(pos);
- vAOD->GetCovarianceMatrix(cov);
- const AliESDVertex vESD(pos,cov,100.,100);
- if(!IsDaughterSelected(b,&vESD,fTrackCutsSoftPi)) return 0;
- }
+ AliAODTrack *b = (AliAODTrack*)d->GetBachelor();
+ if(fTrackCutsSoftPi && fTrackCutsSoftPi->GetRequireTPCRefit()){
+ if(!(b->TestFilterMask(BIT(4)))) return 0;
}
Int_t returnvalue=1;
Int_t returnvaluePID=3;
- // selection on PID
- if(selectionLevel==AliRDHFCuts::kAll ||
- selectionLevel==AliRDHFCuts::kCandidate ||
- selectionLevel==AliRDHFCuts::kPID) {
- returnvaluePID = IsSelectedPID(d);
- }
-
// selection on candidate
if(selectionLevel==AliRDHFCuts::kAll ||
Double_t pt=d->Pt();
Int_t ptbin=PtBin(pt);
- // select D0 that passes D* cuts
- returnvalue = IsD0FromDStarSelected(pt,dd,selectionLevel);
-
- if((b->Charge()==+1 && returnvalue==2) || (b->Charge()==-1 && returnvalue==1)) return 0;
-
// DStarMass and D0mass
Double_t mDSPDG = TDatabasePDG::Instance()->GetParticle(413)->Mass();
Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();
// cut on the angle between D0 decay plane and soft pion
if(d->AngleD0dkpPisoft() > fCutsRD[GetGlobalIndex(13,ptbin)]) return 0;
+ // select D0 that passes D* cuts
+ returnvalue = IsD0FromDStarSelected(pt,dd,selectionLevel);
+ if((b->Charge()==+1 && returnvalue==2) || (b->Charge()==-1 && returnvalue==1)) return 0;
+
+ }
+
+ // selection on PID
+ if(selectionLevel==AliRDHFCuts::kAll ||
+ selectionLevel==AliRDHFCuts::kCandidate ||
+ selectionLevel==AliRDHFCuts::kPID) {
+ returnvaluePID = IsSelectedPID(d);
}
-
if(returnvaluePID!=3) returnvalue =0;
+
+
+ // selection on daughter tracks
+ if(selectionLevel==AliRDHFCuts::kAll ||
+ selectionLevel==AliRDHFCuts::kTracks) {
+ if(!AreDaughtersSelected(dd)) return 0;
+ if(fTrackCutsSoftPi) {
+ AliAODVertex *vAOD = d->GetPrimaryVtx();
+ Double_t pos[3],cov[6];
+ vAOD->GetXYZ(pos);
+ vAOD->GetCovarianceMatrix(cov);
+ const AliESDVertex vESD(pos,cov,100.,100);
+ if(!IsDaughterSelected(b,&vESD,fTrackCutsSoftPi)) return 0;
+ }
+ }
+
return returnvalue;
}
if(dd->CosPointingAngle() < fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
+ if(TMath::Abs(dd->CosPointingAngleXY()) < fCutsRD[GetGlobalIndex(14,ptbin)]) return 0;
+
+ Double_t normalDecayLengXY=(dd->NormalizedDecayLengthXY()*(dd->P()/dd->Pt()));
+ if (normalDecayLengXY < fCutsRD[GetGlobalIndex(15, ptbin)]) return 0;
+
if (okD0) returnvalue=1; //cuts passed as D0
if (okD0bar) returnvalue=2; //cuts passed as D0bar
if (okD0 && okD0bar) returnvalue=3; //both
const Int_t nptbins =13;
const Double_t ptmax = 9999.;
- const Int_t nvars=14;
+ const Int_t nvars=16;
Float_t ptbins[nptbins+1];
ptbins[0]=0.;
ptbins[1]=0.5;
ptbins[5]=4.;
ptbins[6]=5.;
ptbins[7]=6.;
- ptbins[8]=8.;
- ptbins[9]=12.;
- ptbins[10]=16.;
- ptbins[11]=20.;
+ ptbins[8]=7.;
+ ptbins[9]=8.;
+ ptbins[10]=12.;
+ ptbins[11]=16.;
ptbins[12]=24.;
ptbins[13]=ptmax;
SetGlobalIndex(nvars,nptbins);
SetPtBins(nptbins+1,ptbins);
- 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},/* pt<0.5*/
- {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},/* 0.5<pt<1*/
- {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<pt<2 */
- {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},/* 2<pt<3 */
- {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},/* 3<pt<4 */
- {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},/* 4<pt<5 */
- {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},/* 5<pt<6 */
- {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},/* 6<pt<8 */
- {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},/* 8<pt<12 */
- {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},/* 12<pt<16 */
- {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},/* 16<pt<20 */
- {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},/* 20<pt<24 */
- {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}};/* pt>24 */
+ 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*/
+ {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*/
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
//CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
}
SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
-
+
+ for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
+ delete [] cutsMatrixTransposeStand;
+ cutsMatrixTransposeStand=NULL;
+
// PID SETTINGS FOR D* analysis
AliAODPidHF* pidObj=new AliAODPidHF();
//pidObj->SetName("pid4DSatr");
PrintAll();
+ delete pidObj;
+ pidObj=NULL;
+
return;
}
//_____________________________________________________________________________-
const Int_t nptbins =13;
const Double_t ptmax = 9999.;
- const Int_t nvars=14;
+ const Int_t nvars=16;
Float_t ptbins[nptbins+1];
ptbins[0]=0.;
ptbins[1]=0.5;
ptbins[5]=4.;
ptbins[6]=5.;
ptbins[7]=6.;
- ptbins[8]=8.;
- ptbins[9]=12.;
- ptbins[10]=16.;
- ptbins[11]=20.;
+ ptbins[8]=7.;
+ ptbins[9]=8.;
+ ptbins[10]=12.;
+ ptbins[11]=16.;
ptbins[12]=24.;
ptbins[13]=ptmax;
SetGlobalIndex(nvars,nptbins);
SetPtBins(nptbins+1,ptbins);
- 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},/* pt<0.5*/
- {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},/* 0.5<pt<1*/
- {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<pt<2 */
- {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},/* 2<pt<3 */
- {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},/* 3<pt<4 */
- {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},/* 4<pt<5 */
- {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},/* 5<pt<6 */
- {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},/* 6<pt<8 */
- {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},/* 8<pt<12 */
- {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},/* 12<pt<16 */
- {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},/* 16<pt<20 */
- {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},/* 20<pt<24 */
- {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}};/* pt>24 */
+ 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*/
+ {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*/
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
+ {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 */
//CREATE TRANSPOSE MATRIX...REVERSE INDICES as required by AliRDHFCuts
}
SetCuts(nvars,nptbins,cutsMatrixTransposeStand);
+
+ for(Int_t iv=0;iv<nvars;iv++) delete [] cutsMatrixTransposeStand[iv];
+ delete [] cutsMatrixTransposeStand;
+ cutsMatrixTransposeStand=NULL;
// PID SETTINGS
AliAODPidHF* pidObj=new AliAODPidHF();
PrintAll();
+ delete pidObj;
+ pidObj=NULL;
+
return;
}