}
AliAODRecoDecayHF2Prong *dd = (AliAODRecoDecayHF2Prong*)d;
- /*
- vars[0] = dd->GetDCA();
- if(TMath::Abs(pdgdaughters[0])==211) {
- vars[1] = dd->CosThetaStarD0();
- } else {
- vars[1] = dd->CosThetaStarD0bar();
- }
- vars[2] = dd->Prodd0d0();
- vars[3] = dd->CosPointingAngle();
-
- return;
-*/
Int_t iter=-1;
if(fVarsForOpt[0]){
if(d->PtProng(1) < fCutsRD[GetGlobalIndex(3,ptbin)] || d->PtProng(0) < fCutsRD[GetGlobalIndex(4,ptbin)]) okD0 = 0;
if(d->PtProng(0) < fCutsRD[GetGlobalIndex(3,ptbin)] || d->PtProng(1) < fCutsRD[GetGlobalIndex(4,ptbin)]) okD0bar = 0;
- if(!okD0 && !okD0bar) returnvalue=0;
+ if(!okD0 && !okD0bar) return 0;
if(TMath::Abs(d->Getd0Prong(1)) > fCutsRD[GetGlobalIndex(5,ptbin)] ||
TMath::Abs(d->Getd0Prong(0)) > fCutsRD[GetGlobalIndex(6,ptbin)]) okD0 = 0;
if(TMath::Abs(d->Getd0Prong(0)) > fCutsRD[GetGlobalIndex(6,ptbin)] ||
TMath::Abs(d->Getd0Prong(1)) > fCutsRD[GetGlobalIndex(5,ptbin)]) okD0bar = 0;
- if(!okD0 && !okD0bar) returnvalue=0;
+ if(!okD0 && !okD0bar) return 0;
- if(d->GetDCA() > fCutsRD[GetGlobalIndex(1,ptbin)]) { okD0 = okD0bar = 0; returnvalue=0;
- }
+ if(d->GetDCA() > fCutsRD[GetGlobalIndex(1,ptbin)]) return 0;
d->InvMassD0(mD0,mD0bar);
if(TMath::Abs(mD0-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)]) okD0 = 0;
if(TMath::Abs(mD0bar-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)]) okD0bar = 0;
- if(!okD0 && !okD0bar) returnvalue=0;
+ if(!okD0 && !okD0bar) return 0;
d->CosThetaStarD0(ctsD0,ctsD0bar);
if(TMath::Abs(ctsD0) > fCutsRD[GetGlobalIndex(2,ptbin)]) okD0 = 0;
if(TMath::Abs(ctsD0bar) > fCutsRD[GetGlobalIndex(2,ptbin)]) okD0bar = 0;
- if(!okD0 && !okD0bar) returnvalue=0;
-
- if(d->Prodd0d0() > fCutsRD[GetGlobalIndex(7,ptbin)]) { okD0 = okD0bar = 0; returnvalue=0; }
-
- if(d->CosPointingAngle() < fCutsRD[GetGlobalIndex(8,ptbin)]) { okD0 = okD0bar = 0; returnvalue=0; }
+ if(!okD0 && !okD0bar) return 0;
+ if(d->Prodd0d0() > fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
+ if(d->CosPointingAngle() < fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
if (okD0) returnvalue=1; //cuts passed as D0
if (okD0bar) returnvalue=2; //cuts passed as D0bar
if (okD0 && okD0bar) returnvalue=3; //cuts passed as D0 and D0bar
}
-
return returnvalue;
-
}
//---------------------------------------------------------------------------
-/**************************************************************************
- * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
- * *
- * Author: The ALICE Off-line Project. *
- * Contributors are mentioned in the code where appropriate. *
- * *
- * Permission to use, copy, modify and distribute this software and its *
- * documentation strictly for non-commercial purposes is hereby granted *
- * without fee, provided that the above copyright notice appears in all *
- * copies and that both the copyright notice and this permission notice *
- * appear in the supporting documentation. The authors make no claims *
- * about the suitability of this software for any purpose. It is *
- * provided "as is" without express or implied warranty. *
- **************************************************************************/
-
-/////////////////////////////////////////////////////////////
-//
-// Class for cuts on AOD reconstructed D0->Kpi
-//
-// Author: A.Dainese, andrea.dainese@pd.infn.it
-/////////////////////////////////////////////////////////////
-
-#include <TDatabasePDG.h>
-#include <Riostream.h>
-
-#include "AliRDHFCutsD0toKpipipi.h"
-#include "AliAODRecoDecayHF4Prong.h"
-#include "AliAODTrack.h"
-#include "AliESDtrack.h"
-
-ClassImp(AliRDHFCutsD0toKpipipi)
-
-//--------------------------------------------------------------------------
-AliRDHFCutsD0toKpipipi::AliRDHFCutsD0toKpipipi() :
-AliRDHFCuts()
-{
- //
- // Default Constructor
- //
- Int_t nvars=9;
- SetNVars(nvars);
- TString varNames[9]={"inv. mass [GeV]",
- "dca [cm]",
- "cosThetaStar",
- "pTK [GeV/c]",
- "pTPi [GeV/c]",
- "d0K [cm]",
- "d0Pi [cm]",
- "d0d0 [cm^2]",
- "cosThetaPoint"};
- Bool_t isUpperCut[9]={kTRUE,
- kTRUE,
- kTRUE,
- kFALSE,
- kFALSE,
- kTRUE,
- kTRUE,
- kTRUE,
- kFALSE};
- SetVarNames(nvars,varNames,isUpperCut);
- Bool_t forOpt[9]={kFALSE,
- kTRUE,
- kTRUE,
- kFALSE,
- kFALSE,
- kFALSE,
- kFALSE,
- kTRUE,
- kTRUE};
- SetVarsForOpt(4,forOpt);
- Float_t limits[2]={0,999999999.};
- SetPtBins(2,limits);
-}
-//--------------------------------------------------------------------------
-AliRDHFCutsD0toKpipipi::AliRDHFCutsD0toKpipipi(const AliRDHFCutsD0toKpipipi &source) :
- AliRDHFCuts(source)
-{
- //
- // Copy constructor
- //
-
-}
-//--------------------------------------------------------------------------
-AliRDHFCutsD0toKpipipi &AliRDHFCutsD0toKpipipi::operator=(const AliRDHFCutsD0toKpipipi &source)
-{
- //
- // assignment operator
- //
- if(&source == this) return *this;
-
- AliRDHFCuts::operator=(source);
-
- return *this;
-}
-
-
-//---------------------------------------------------------------------------
-void AliRDHFCutsD0toKpipipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
- //
- // Fills in vars the values of the variables
- //
-
- if(nvars!=fnVarsForOpt) {
- printf("AliRDHFCutsD0toKpipipi::GetCutsVarsForOpt: wrong number of variables\n");
- return;
- }
-
- AliAODRecoDecayHF4Prong *dd = (AliAODRecoDecayHF4Prong*)d;
-
-
- return;
-}
-//---------------------------------------------------------------------------
-Int_t AliRDHFCutsD0toKpipipi::IsSelected(TObject* obj,Int_t selectionLevel) {
- //
- // Apply selection
- //
-
- if(!fCutsRD){
- cout<<"Cut matrice not inizialized. Exit..."<<endl;
- return 0;
- }
- //PrintAll();
- AliAODRecoDecayHF4Prong* d=(AliAODRecoDecayHF4Prong*)obj;
-
- if(!d){
- cout<<"AliAODRecoDecayHF4Prong null"<<endl;
- return 0;
- }
-
-
- // selection on daughter tracks
- if(selectionLevel==AliRDHFCuts::kAll ||
- selectionLevel==AliRDHFCuts::kTracks) {
- if(!AreDaughtersSelected(d)) return 0;
- }
-
-
- Int_t returnvalue=1;
-
- // selection on candidate
- if(selectionLevel==AliRDHFCuts::kAll ||
- selectionLevel==AliRDHFCuts::kCandidate) {
-
- }
-
-
- return returnvalue;
-
-}
-//---------------------------------------------------------------------------
+/**************************************************************************\r
+ * Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *\r
+ * *\r
+ * Author: The ALICE Off-line Project. *\r
+ * Contributors are mentioned in the code where appropriate. *\r
+ * *\r
+ * Permission to use, copy, modify and distribute this software and its *\r
+ * documentation strictly for non-commercial purposes is hereby granted *\r
+ * without fee, provided that the above copyright notice appears in all *\r
+ * copies and that both the copyright notice and this permission notice *\r
+ * appear in the supporting documentation. The authors make no claims *\r
+ * about the suitability of this software for any purpose. It is *\r
+ * provided "as is" without express or implied warranty. *\r
+ **************************************************************************/\r
+\r
+/////////////////////////////////////////////////////////////\r
+//\r
+// Class for cuts on AOD reconstructed D0->Kpipipi\r
+//\r
+// Author: r.romita@gsi.de, andrea.dainese@pd.infn.it\r
+/////////////////////////////////////////////////////////////\r
+\r
+#include <TDatabasePDG.h>\r
+#include <Riostream.h>\r
+\r
+#include "AliRDHFCutsD0toKpipipi.h"\r
+#include "AliAODRecoDecayHF4Prong.h"\r
+#include "AliAODTrack.h"\r
+#include "AliESDtrack.h"\r
+\r
+ClassImp(AliRDHFCutsD0toKpipipi)\r
+\r
+//--------------------------------------------------------------------------\r
+AliRDHFCutsD0toKpipipi::AliRDHFCutsD0toKpipipi() : \r
+AliRDHFCuts()\r
+{\r
+ //\r
+ // Default Constructor\r
+ //\r
+ Int_t nvars=9;\r
+ SetNVars(nvars);\r
+ TString varNames[9]={"inv. mass [GeV]", \r
+ "dca [cm]",\r
+ "Dist 2-trk Vtx to PrimVtx [cm]",\r
+ "Dist 3-trk Vtx to PrimVtx [cm]",\r
+ "Dist 4-trk Vtx to PrimVtx [cm]",\r
+ "cosThetaPoint",\r
+ "pt [GeV/c]",\r
+ "rho mass [GeV]",\r
+ "PID cut"};\r
+ Bool_t isUpperCut[9]={kTRUE,\r
+ kTRUE,\r
+ kFALSE,\r
+ kFALSE,\r
+ kFALSE,\r
+ kFALSE,\r
+ kFALSE,\r
+ kTRUE,\r
+ kFALSE};\r
+ SetVarNames(nvars,varNames,isUpperCut);\r
+ Bool_t forOpt[9]={kFALSE,\r
+ kTRUE,\r
+ kTRUE,\r
+ kTRUE,\r
+ kTRUE,\r
+ kTRUE,\r
+ kFALSE,\r
+ kFALSE,\r
+ kFALSE};\r
+ SetVarsForOpt(5,forOpt);\r
+ Float_t limits[2]={0,999999999.};\r
+ SetPtBins(2,limits);\r
+}\r
+//--------------------------------------------------------------------------\r
+AliRDHFCutsD0toKpipipi::AliRDHFCutsD0toKpipipi(const AliRDHFCutsD0toKpipipi &source) :\r
+ AliRDHFCuts(source)\r
+{\r
+ //\r
+ // Copy constructor\r
+ //\r
+\r
+}\r
+//--------------------------------------------------------------------------\r
+AliRDHFCutsD0toKpipipi &AliRDHFCutsD0toKpipipi::operator=(const AliRDHFCutsD0toKpipipi &source)\r
+{\r
+ //\r
+ // assignment operator\r
+ //\r
+ if(&source == this) return *this;\r
+\r
+ AliRDHFCuts::operator=(source);\r
+\r
+ return *this;\r
+}\r
+\r
+\r
+//---------------------------------------------------------------------------\r
+void AliRDHFCutsD0toKpipipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {\r
+ // \r
+ // Fills in vars the values of the variables \r
+ //\r
+\r
+ if(nvars!=fnVarsForOpt) {\r
+ printf("AliRDHFCutsD0toKpipipi::GetCutsVarsForOpt: wrong number of variables\n");\r
+ return;\r
+ }\r
+\r
+ AliAODRecoDecayHF4Prong *dd = (AliAODRecoDecayHF4Prong*)d;\r
+\r
+ Int_t iter=-1;\r
+\r
+ if(fVarsForOpt[0]) {\r
+ iter++;\r
+ Double_t mD0[2],mD0bar[2];\r
+ if(TMath::Abs(pdgdaughters[1])==321 || TMath::Abs(pdgdaughters[3])==321) {\r
+ dd->InvMassD0(mD0);\r
+ if(TMath::Abs(pdgdaughters[1])==321) {\r
+ vars[iter]=mD0[0];\r
+ }else{\r
+ vars[iter]=mD0[1];\r
+ }\r
+ } else {\r
+ dd->InvMassD0bar(mD0bar);\r
+ if(TMath::Abs(pdgdaughters[0])==321) {\r
+ vars[iter]=mD0[0];\r
+ }else{\r
+ vars[iter]=mD0[1];\r
+ }\r
+ }\r
+ }\r
+\r
+ if(fVarsForOpt[1]){\r
+ iter++;\r
+ vars[iter]=dd->GetDCA();\r
+ }\r
+\r
+ if(fVarsForOpt[2]){\r
+ iter++;\r
+ vars[iter]=dd->GetDist12toPrim();\r
+ }\r
+ if(fVarsForOpt[3]){\r
+ iter++;\r
+ vars[iter]=dd->GetDist3toPrim();\r
+ }\r
+ if(fVarsForOpt[4]){\r
+ iter++;\r
+ vars[iter]=dd->GetDist4toPrim();\r
+ }\r
+ if(fVarsForOpt[5]){\r
+ iter++;\r
+ vars[iter]=dd->CosPointingAngle();\r
+ }\r
+ if(fVarsForOpt[6]){\r
+ iter++;\r
+ vars[iter]=dd->Pt();\r
+ }\r
+ if(fVarsForOpt[7]){\r
+ iter++;\r
+ vars[iter]=999999999.;\r
+ printf("ERROR: optmization for rho mass cut not implemented\n");\r
+ }\r
+ if(fVarsForOpt[8]){\r
+ iter++;\r
+ vars[iter]=999999999.;\r
+ printf("ERROR: optmization for PID cut not implemented\n");\r
+ }\r
+ \r
+ return;\r
+}\r
+//---------------------------------------------------------------------------\r
+Int_t AliRDHFCutsD0toKpipipi::IsSelected(TObject* obj,Int_t selectionLevel) {\r
+ //\r
+ // Apply selection\r
+ //\r
+\r
+ if(!fCutsRD){\r
+ cout<<"Cut matrix not inizialized. Exit..."<<endl;\r
+ return 0;\r
+ }\r
+ //PrintAll();\r
+ AliAODRecoDecayHF4Prong* d=(AliAODRecoDecayHF4Prong*)obj;\r
+\r
+ if(!d){\r
+ cout<<"AliAODRecoDecayHF4Prong null"<<endl;\r
+ return 0;\r
+ }\r
+\r
+\r
+ // selection on daughter tracks \r
+ if(selectionLevel==AliRDHFCuts::kAll || \r
+ selectionLevel==AliRDHFCuts::kTracks) {\r
+ if(!AreDaughtersSelected(d)) return 0;\r
+ }\r
+\r
+\r
+ Int_t returnvalue=1;\r
+\r
+ // selection on candidate\r
+ if(selectionLevel==AliRDHFCuts::kAll || \r
+ selectionLevel==AliRDHFCuts::kCandidate) {\r
+\r
+ Int_t ptbin=PtBin(d->Pt());\r
+ \r
+ Int_t okD0=1,okD0bar=1; \r
+ Double_t mD0[2],mD0bar[2];\r
+ Double_t mD0PDG = TDatabasePDG::Instance()->GetParticle(421)->Mass();\r
+\r
+ d->InvMassD0(mD0);\r
+ if(TMath::Abs(mD0[0]-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)] &&\r
+ TMath::Abs(mD0[1]-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)]) okD0 = 0;\r
+ d->InvMassD0bar(mD0bar);\r
+ if(TMath::Abs(mD0bar[0]-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)] &&\r
+ TMath::Abs(mD0bar[1]-mD0PDG) > fCutsRD[GetGlobalIndex(0,ptbin)]) okD0bar = 0;\r
+ if(!okD0 && !okD0bar) return 0;\r
+ \r
+ if(d->GetDCA() > fCutsRD[GetGlobalIndex(1,ptbin)]) return 0;\r
+ if(d->GetDist12toPrim() < fCutsRD[GetGlobalIndex(2,ptbin)]) return 0;\r
+ if(d->GetDist3toPrim() < fCutsRD[GetGlobalIndex(3,ptbin)]) return 0;\r
+ if(d->GetDist4toPrim() < fCutsRD[GetGlobalIndex(4,ptbin)]) return 0;\r
+ if(d->CosPointingAngle() < fCutsRD[GetGlobalIndex(5,ptbin)]) return 0;\r
+ if(d->Pt() < fCutsRD[GetGlobalIndex(6,ptbin)]) return 0;\r
+ if(!d->CutRhoMass(mD0,mD0bar,fCutsRD[GetGlobalIndex(0,ptbin)],fCutsRD[GetGlobalIndex(7,ptbin)])) return 0;\r
+\r
+ if (okD0) returnvalue=1; //cuts passed as D0\r
+ if (okD0bar) returnvalue=2; //cuts passed as D0bar\r
+ if (okD0 && okD0bar) returnvalue=3; //cuts passed as D0 and D0bar\r
+ }\r
+\r
+ return returnvalue;\r
+}\r
+//---------------------------------------------------------------------------\r
-#ifndef ALIRDHFCUTSD0TOKPIPIPI_H
-#define ALIRDHFCUTSD0TOKPIPIPI_H
-/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
- * See cxx source for full Copyright notice */
-
-//***********************************************************
-// Class AliRDHFCutsD0toKpipipi
-// class for cuts on AOD reconstructed D0->Kpipipi
-// Author: A.Dainese, andrea.dainese@pd.infn.it
-//***********************************************************
-
-#include "AliRDHFCuts.h"
-
-class AliRDHFCutsD0toKpipipi : public AliRDHFCuts
-{
- public:
-
- AliRDHFCutsD0toKpipipi();
-
- virtual ~AliRDHFCutsD0toKpipipi(){}
-
- AliRDHFCutsD0toKpipipi(const AliRDHFCutsD0toKpipipi& source);
- AliRDHFCutsD0toKpipipi& operator=(const AliRDHFCutsD0toKpipipi& source);
-
- virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);
-
- using AliRDHFCuts::IsSelected;
- virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel);
-
- Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);}
- Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);}
-
- protected:
-
-
- ClassDef(AliRDHFCutsD0toKpipipi,1); // class for cuts on AOD reconstructed D0->Kpipipi
-};
-
-#endif
+#ifndef ALIRDHFCUTSD0TOKPIPIPI_H\r
+#define ALIRDHFCUTSD0TOKPIPIPI_H\r
+/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *\r
+ * See cxx source for full Copyright notice */\r
+\r
+//***********************************************************\r
+// Class AliRDHFCutsD0toKpipipi\r
+// class for cuts on AOD reconstructed D0->Kpipipi\r
+// Author: A.Dainese, andrea.dainese@pd.infn.it\r
+//***********************************************************\r
+\r
+#include "AliRDHFCuts.h"\r
+\r
+class AliRDHFCutsD0toKpipipi : public AliRDHFCuts \r
+{\r
+ public:\r
+\r
+ AliRDHFCutsD0toKpipipi();\r
+ \r
+ virtual ~AliRDHFCutsD0toKpipipi(){}\r
+\r
+ AliRDHFCutsD0toKpipipi(const AliRDHFCutsD0toKpipipi& source);\r
+ AliRDHFCutsD0toKpipipi& operator=(const AliRDHFCutsD0toKpipipi& source); \r
+ \r
+ virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters);\r
+\r
+ using AliRDHFCuts::IsSelected;\r
+ virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel);\r
+ \r
+ Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);}\r
+ Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);}\r
+\r
+ protected:\r
+\r
+\r
+ ClassDef(AliRDHFCutsD0toKpipipi,1); // class for cuts on AOD reconstructed D0->Kpipipi\r
+};\r
+\r
+#endif\r
kFALSE,
kTRUE};
SetVarNames(nvars,varNames,isUpperCut);
- Bool_t forOpt[12]={kTRUE,
+ Bool_t forOpt[12]={kFALSE,
kFALSE,
kFALSE,
kFALSE,
kTRUE,
kTRUE,
kFALSE};
- SetVarsForOpt(6,forOpt);
+ SetVarsForOpt(5,forOpt);
Float_t limits[2]={0,999999999.};
SetPtBins(2,limits);
}
}
AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
- /*
- vars[0] = dd->GetDCA();
- if(TMath::Abs(pdgdaughters[0])==211) {
- vars[1] = dd->CosThetaStarD0();
- } else {
- vars[1] = dd->CosThetaStarD0bar();
- }
- vars[2] = dd->Prodd0d0();
- vars[3] = dd->CosPointingAngle();
- return;
-*/
-
- //possibile generalizzazione
Int_t iter=-1;
if(fVarsForOpt[0]){
iter++;
}
if(fVarsForOpt[2]){
iter++;
+ Float_t minPtDau=1000000.0;
for(Int_t iprong=0;iprong<3;iprong++){
if(TMath::Abs(pdgdaughters[iprong])==211) {
- vars[iter]=dd->PtProng(iprong);
+ if(dd->PtProng(iprong)<minPtDau){
+ minPtDau=dd->PtProng(iprong);
+ }
}
}
+ vars[iter]=minPtDau;
}
if(fVarsForOpt[3]){
iter++;
}
if(fVarsForOpt[4]){
iter++;
+ Float_t minImpParDau=1000000.0;
for(Int_t iprong=0;iprong<3;iprong++){
if(TMath::Abs(pdgdaughters[iprong])==211) {
- vars[iter]=dd->Getd0Prong(iprong);
+ if(dd->Getd0Prong(iprong)<minImpParDau){
+ minImpParDau=dd->Getd0Prong(iprong);
+ }
}
}
+ vars[iter]=minImpParDau;
}
if(fVarsForOpt[5]){
iter++;
- vars[iter]=dd->GetDist12toPrim();
+ Float_t dist12 = dd->GetDist12toPrim();
+ Float_t dist23 = dd->GetDist23toPrim();
+ if(dist12<dist23)vars[iter]=dist12;
+ else vars[iter]=dist23;
}
if(fVarsForOpt[6]){
iter++;
}
if(fVarsForOpt[11]){
iter++;
- vars[iter]=dd->GetDCA();
+ Float_t maxDCA=0;
+ for(Int_t iprong=0;iprong<3;iprong++){
+ if(dd->GetDCA(iprong)<maxDCA){
+ maxDCA=dd->GetDCA(iprong);
+ }
+ }
+ vars[iter]=maxDCA;
}
return;
}
//
if(!fCutsRD){
- cout<<"Cut matrice not inizialized. Exit..."<<endl;
+ cout<<"Cut matrix not inizialized. Exit..."<<endl;
return 0;
}
//PrintAll();
selectionLevel==AliRDHFCuts::kCandidate) {
Double_t pt=d->Pt();
-
+
Int_t ptbin=PtBin(pt);
-
+
Double_t mDplusPDG = TDatabasePDG::Instance()->GetParticle(411)->Mass();
Double_t mDplus=d->InvMassDplus();
if(TMath::Abs(mDplus-mDplusPDG)>fCutsRD[GetGlobalIndex(0,ptbin)])return 0;
- //2track cuts
- if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]|| d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)])return 0;
- if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.)return 0;
-
- //sec vert
- if(d->GetSigmaVert()>fCutsRD[GetGlobalIndex(6,ptbin)])return 0;
+ //2track cuts
+ if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]|| d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)])return 0;
+ if(d->Getd0Prong(0)*d->Getd0Prong(1)<0. && d->Getd0Prong(2)*d->Getd0Prong(1)<0.)return 0;
- if(d->DecayLength()<fCutsRD[GetGlobalIndex(7,ptbin)])return 0;
-
- if(TMath::Abs(d->PtProng(0))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(1))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(2))<fCutsRD[GetGlobalIndex(8,ptbin)])return 0;
- if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)])return 0;
- Double_t sum2=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
- if(sum2<fCutsRD[GetGlobalIndex(10,ptbin)])return 0;
-
- //DCA
- for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) return 0;
-
+ //sec vert
+ if(d->GetSigmaVert()>fCutsRD[GetGlobalIndex(6,ptbin)])return 0;
+
+ if(d->DecayLength()<fCutsRD[GetGlobalIndex(7,ptbin)])return 0;
+
+ if(TMath::Abs(d->PtProng(0))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(1))<fCutsRD[GetGlobalIndex(8,ptbin)] && TMath::Abs(d->PtProng(2))<fCutsRD[GetGlobalIndex(8,ptbin)])return 0;
+ if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)])return 0;
+ Double_t sum2=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
+ if(sum2<fCutsRD[GetGlobalIndex(10,ptbin)])return 0;
+
+ //DCA
+ for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) return 0;
+
+ return 1;
}
return 1;
}
virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel);
Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);}
- Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(11,iPtBin)] : 1.e6);}
+ Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);}
protected:
- ClassDef(AliRDHFCutsDplustoKpipi,1); // class for cuts on AOD reconstructed D+->Kpipi
+ ClassDef(AliRDHFCutsDplustoKpipi,1); // class for cuts on AOD reconstructed
+ // D+->Kpipi
};
#endif
//
// Default Constructor
//
- Int_t nvars=9;
+ const Int_t nvars=14;
SetNVars(nvars);
- TString varNames[9]={"inv. mass [GeV]",
- "dca [cm]",
- "cosThetaStar",
- "pTK [GeV/c]",
- "pTPi [GeV/c]",
- "d0K [cm]",
- "d0Pi [cm]",
- "d0d0 [cm^2]",
- "cosThetaPoint"};
- Bool_t isUpperCut[9]={kTRUE,
- kTRUE,
- kTRUE,
- kFALSE,
- kFALSE,
- kTRUE,
- kTRUE,
- kTRUE,
- kFALSE};
+ TString varNames[nvars]={"inv. mass [GeV]",
+ "pTK [GeV/c]",
+ "pTPi [GeV/c]",
+ "d0K [cm]",
+ "d0Pi [cm]",
+ "dist12 [cm]",
+ "sigmavert [cm]",
+ "decLen [cm]",
+ "ptMax [GeV/c]",
+ "cosThetaPoint",
+ "Sum d0^2 (cm^2)",
+ "dca [cm]",
+ "inv. mass (Mphi-MKK) [GeV]",
+ "inv. mass (MKo*-MKpi) [GeV]"
+};
+ Bool_t isUpperCut[nvars]={kTRUE,
+ kFALSE,
+ kFALSE,
+ kFALSE,
+ kFALSE,
+ kFALSE,
+ kTRUE,
+ kFALSE,
+ kFALSE,
+ kFALSE,
+ kFALSE,
+ kTRUE,
+ kTRUE,
+ kTRUE};
SetVarNames(nvars,varNames,isUpperCut);
- Bool_t forOpt[9]={kFALSE,
- kTRUE,
- kTRUE,
+ Bool_t forOpt[nvars]={kFALSE,
+ kFALSE,
kFALSE,
kFALSE,
kFALSE,
kFALSE,
kTRUE,
+ kTRUE,
+ kTRUE,
+ kTRUE,
+ kTRUE,
+ kFALSE,
+ kTRUE,
kTRUE};
- SetVarsForOpt(4,forOpt);
+ SetVarsForOpt(7,forOpt);
Float_t limits[2]={0,999999999.};
SetPtBins(2,limits);
}
AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
+ Int_t iter=-1;
+ if(fVarsForOpt[0]){
+ iter++;
+ if(TMath::Abs(pdgdaughters[0]==321)){
+ vars[iter]=dd->InvMassDsKKpi();
+ }else{
+ vars[iter]=dd->InvMassDspiKK();
+ }
+ }
+ if(fVarsForOpt[1]){
+ iter++;
+ Float_t minPtDau=99999.;
+ for(Int_t iprong=0;iprong<3;iprong++){
+ if(TMath::Abs(pdgdaughters[iprong])==321 &&
+ dd->PtProng(iprong)<minPtDau) minPtDau=dd->PtProng(iprong);
+ }
+ vars[iter]=minPtDau;
+ }
+ if(fVarsForOpt[2]){
+ iter++;
+ for(Int_t iprong=0;iprong<3;iprong++){
+ if(TMath::Abs(pdgdaughters[iprong])==211) {
+ vars[iter]=dd->PtProng(iprong);
+ }
+ }
+ }
+ if(fVarsForOpt[3]){
+ iter++;
+ Float_t minImpParDau=99999.;
+ for(Int_t iprong=0;iprong<3;iprong++){
+ if(TMath::Abs(pdgdaughters[iprong])==321 &&
+ dd->Getd0Prong(iprong)<minImpParDau) minImpParDau=dd->Getd0Prong(iprong);
+ }
+ vars[iter]=minImpParDau;
+ }
+ if(fVarsForOpt[4]){
+ iter++;
+ for(Int_t iprong=0;iprong<3;iprong++){
+ if(TMath::Abs(pdgdaughters[iprong])==211) {
+ vars[iter]=dd->Getd0Prong(iprong);
+ }
+ }
+ }
+ if(fVarsForOpt[5]){
+ iter++;
+ Float_t minDistPair=TMath::Min(dd->GetDist12toPrim(),dd->GetDist23toPrim());
+ vars[iter]=minDistPair;
+ }
+ if(fVarsForOpt[6]){
+ iter++;
+ vars[iter]=dd->GetSigmaVert();
+ }
+ if(fVarsForOpt[7]){
+ iter++;
+ vars[iter] = dd->DecayLength();
+ }
+ if(fVarsForOpt[8]){
+ iter++;
+ Float_t ptmax=0;
+ for(Int_t i=0;i<3;i++){
+ if(dd->PtProng(i)>ptmax)ptmax=dd->PtProng(i);
+ }
+ vars[iter]=ptmax;
+ }
+ if(fVarsForOpt[9]){
+ iter++;
+ vars[iter]=dd->CosPointingAngle();
+ }
+ if(fVarsForOpt[10]){
+ iter++;
+ vars[iter]=dd->Getd0Prong(0)*dd->Getd0Prong(0)+dd->Getd0Prong(1)*dd->Getd0Prong(1)+dd->Getd0Prong(2)*dd->Getd0Prong(2);
+ }
+ if(fVarsForOpt[11]){
+ iter++;
+ Float_t maxDCA=0.;
+ for(Int_t i=0;i<3;i++){
+ if(d->GetDCA(i)>maxDCA) maxDCA=d->GetDCA(i);
+ }
+ vars[iter]=maxDCA;
+ }
+ if(fVarsForOpt[12]){
+ iter++;
+ if(TMath::Abs(pdgdaughters[0]==321)){
+ vars[iter]=dd->InvMass2Prongs(0,1,321,321);
+ }else{
+ vars[iter]=dd->InvMass2Prongs(1,2,321,321);
+ }
+ }
+ if(fVarsForOpt[13]){
+ iter++;
+ if(TMath::Abs(pdgdaughters[0]==321)){
+ vars[iter]=dd->InvMass2Prongs(1,2,321,211);
+ }else{
+ vars[iter]=dd->InvMass2Prongs(0,1,211,321);
+ }
+ }
+
return;
}
}
- Int_t returnvalue=1;
+ Int_t returnvalue=1;
// selection on candidate
if(selectionLevel==AliRDHFCuts::kAll ||
selectionLevel==AliRDHFCuts::kCandidate) {
- }
+ Int_t okDsKKpi=1;
+ Int_t okDspiKK=1;
+ Int_t okMassPhi=0;
+ Int_t okMassK0star=0;
+ Double_t pt=d->Pt();
+ Int_t ptbin=PtBin(pt);
+
+ Double_t mDsPDG = TDatabasePDG::Instance()->GetParticle(431)->Mass();
+ Double_t mDsKKpi=d->InvMassDsKKpi();
+ Double_t mDspiKK=d->InvMassDspiKK();
+ if(TMath::Abs(mDsKKpi-mDsPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okDsKKpi = 0;
+ if(TMath::Abs(mDspiKK-mDsPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okDspiKK = 0;
+ if(!okDsKKpi && !okDspiKK) return 0;
+
+ //single track
+ if(TMath::Abs(d->PtProng(1)) < fCutsRD[GetGlobalIndex(1,ptbin)] ||
+ TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)]) return 0;
+ if(okDsKKpi){
+ if(TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(1,ptbin)] ||
+ TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(3,ptbin)]) okDsKKpi=0;
+ if(TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)] ||
+ TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(4,ptbin)]) okDsKKpi=0;
+ }
+ if(okDspiKK){
+ if(TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)] ||
+ TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(4,ptbin)]) okDspiKK=0;
+ if(TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(1,ptbin)] ||
+ TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(3,ptbin)]) okDspiKK=0;
+ }
+ if(!okDsKKpi && !okDspiKK) return 0;
+
+ // cuts on resonant decays (via Phi or K0*)
+ Double_t mPhiPDG = TDatabasePDG::Instance()->GetParticle(333)->Mass();
+ Double_t mK0starPDG = TDatabasePDG::Instance()->GetParticle(313)->Mass();
+ if(okDsKKpi){
+ Double_t mass01phi=d->InvMass2Prongs(0,1,321,321);
+ Double_t mass12K0s=d->InvMass2Prongs(1,2,321,211);
+ if(TMath::Abs(mass01phi-mPhiPDG)<fCutsRD[GetGlobalIndex(12,ptbin)]) okMassPhi=1;
+ if(TMath::Abs(mass12K0s-mK0starPDG)<fCutsRD[GetGlobalIndex(13,ptbin)]) okMassK0star = 1;
+ if(!okMassPhi && !okMassK0star) okDsKKpi=0;
+ }
+ if(okDspiKK){
+ Double_t mass01K0s=d->InvMass2Prongs(0,1,211,321);
+ Double_t mass12phi=d->InvMass2Prongs(1,2,321,321);
+ if(TMath::Abs(mass01K0s-mK0starPDG)<fCutsRD[GetGlobalIndex(13,ptbin)]) okMassK0star = 1;
+ if(TMath::Abs(mass12phi-mPhiPDG)<fCutsRD[GetGlobalIndex(12,ptbin)]) okMassPhi=1;
+ if(!okMassPhi && !okMassK0star) okDspiKK=0;
+ }
+ if(!okDsKKpi && !okDspiKK) return 0;
+
+ // Cuts on track pairs
+ for(Int_t i=0;i<3;i++) if(d->GetDCA(i)>fCutsRD[GetGlobalIndex(11,ptbin)]) return 0;
+ if(d->GetDist12toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)] ||
+ d->GetDist23toPrim()<fCutsRD[GetGlobalIndex(5,ptbin)]) return 0;
+
+
+ // Cuts on candidate triplet
+ if(d->GetSigmaVert()>fCutsRD[GetGlobalIndex(6,ptbin)]) return 0;
+ if(d->DecayLength()<fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
+ if(TMath::Abs(d->PtProng(0))<fCutsRD[GetGlobalIndex(8,ptbin)] &&
+ TMath::Abs(d->PtProng(1))<fCutsRD[GetGlobalIndex(8,ptbin)] &&
+ TMath::Abs(d->PtProng(2))<fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
+ if(d->CosPointingAngle()< fCutsRD[GetGlobalIndex(9,ptbin)])return 0;
+ Double_t sum2=d->Getd0Prong(0)*d->Getd0Prong(0)+d->Getd0Prong(1)*d->Getd0Prong(1)+d->Getd0Prong(2)*d->Getd0Prong(2);
+ if(sum2<fCutsRD[GetGlobalIndex(10,ptbin)])return 0;
+
+ returnvalue=0;
+ if(okDsKKpi) returnvalue+=1;
+ if(okDspiKK) returnvalue+=2;
+ if(okMassPhi) returnvalue+=4;
+ if(okMassK0star) returnvalue+=8;
+
+ }
return returnvalue;
}
}
AliAODRecoDecayHF2Prong *dd = (AliAODRecoDecayHF2Prong*)d;
- /*
- vars[0] = dd->GetDCA();
- if(TMath::Abs(pdgdaughters[0])==211) {
- vars[1] = dd->CosThetaStarD0();
- } else {
- vars[1] = dd->CosThetaStarD0bar();
- }
- vars[2] = dd->Prodd0d0();
- vars[3] = dd->CosPointingAngle();
-
- return;
-*/
Int_t iter=-1;
if(fVarsForOpt[0]){
}
if(fVarsForOpt[3]){
iter++;
- vars[iter]=dd->PtProng(0);
+ if(pdgdaughters[0]==11) vars[iter]=dd->PtProng(0);
}
if(fVarsForOpt[4]){
iter++;
- vars[iter]=dd->PtProng(1);
+ if(pdgdaughters[1]==11) vars[iter]=dd->PtProng(1);
}
if(fVarsForOpt[5]){
iter++;
//
if(!fCutsRD){
- cout<<"Cut matrice not inizialized. Exit..."<<endl;
+ cout<<"Cut matrix not inizialized. Exit..."<<endl;
return 0;
}
//PrintAll();
if(d->Prodd0d0() > fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
if(d->CosPointingAngle() < fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
-
}
-
return 1;
}
//---------------------------------------------------------------------------
kFALSE,
kTRUE};
SetVarNames(nvars,varNames,isUpperCut);
- Bool_t forOpt[12]={kTRUE,
+ Bool_t forOpt[12]={kFALSE,
kFALSE,
kFALSE,
kFALSE,
kTRUE,
kTRUE,
kFALSE};
- SetVarsForOpt(6,forOpt);
+ SetVarsForOpt(5,forOpt);
Float_t limits[2]={0,999999999.};
SetPtBins(2,limits);
}