]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
New classes for the cuts on charm candidates
authordainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 12 Apr 2010 20:51:15 +0000 (20:51 +0000)
committerdainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 12 Apr 2010 20:51:15 +0000 (20:51 +0000)
17 files changed:
PWG3/PWG3vertexingHFLinkDef.h
PWG3/libPWG3vertexingHF.pkg
PWG3/vertexingHF/AliAnalysisVertexingHF.cxx
PWG3/vertexingHF/AliAnalysisVertexingHF.h
PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.cxx [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.h [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.cxx [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.h [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsDstoKKpi.cxx [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsDstoKKpi.h [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsJpsitoee.cxx [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsJpsitoee.h [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsLctopKpi.cxx [new file with mode: 0644]
PWG3/vertexingHF/AliRDHFCutsLctopKpi.h [new file with mode: 0644]
PWG3/vertexingHF/ConfigVertexingHF.C
PWG3/vertexingHF/ConfigVertexingHF_highmult.C
PWG3/vertexingHF/ConfigVertexingHF_pp2009.C

index 297b30cb4884f0db95a32291be7e1a198925962b..08bf4041386c95bfe97fc9ce3b0b854201c50a67 100644 (file)
 #pragma link C++ class AliAODRecoCascadeHF+;
 #pragma link C++ class AliRDHFCuts+;
 #pragma link C++ class AliRDHFCutsD0toKpi+;
+#pragma link C++ class AliRDHFCutsJpsitoee+;
+#pragma link C++ class AliRDHFCutsDplustoKpipi+;
+#pragma link C++ class AliRDHFCutsDstoKKpi+;
+#pragma link C++ class AliRDHFCutsLctopKpi+;
+#pragma link C++ class AliRDHFCutsD0toKpipipi+;
 #pragma link C++ class AliAnalysisVertexingHF+;
 #pragma link C++ class AliAnalysisTaskSEVertexingHF+;
 #pragma link C++ class AliAnalysisTaskMEVertexingHF+;
index fc610eea52dba66877cb3137c49be36fc773c1e2..aa5b383d9e1d1bec3915c5093ffe706cc6fd6178 100644 (file)
@@ -6,6 +6,11 @@ SRCS:=   vertexingHF/AliAODRecoDecayHF.cxx \
        vertexingHF/AliAODRecoCascadeHF.cxx \
        vertexingHF/AliRDHFCuts.cxx \
        vertexingHF/AliRDHFCutsD0toKpi.cxx \
+       vertexingHF/AliRDHFCutsJpsitoee.cxx \
+       vertexingHF/AliRDHFCutsDplustoKpipi.cxx \
+       vertexingHF/AliRDHFCutsDstoKKpi.cxx \
+       vertexingHF/AliRDHFCutsLctopKpi.cxx \
+       vertexingHF/AliRDHFCutsD0toKpipipi.cxx \
        vertexingHF/AliAnalysisVertexingHF.cxx \
        vertexingHF/AliAnalysisTaskSEVertexingHF.cxx \
        vertexingHF/AliAnalysisTaskMEVertexingHF.cxx \
index ebbf5a9536a777e47c9305912bed378a64ad3554..790033dfc17ad77aa4d5246d75a261e1d6b75e8f 100644 (file)
 #include "AliAODRecoDecayHF4Prong.h"
 #include "AliAODRecoCascadeHF.h"
 #include "AliRDHFCutsD0toKpi.h"
+#include "AliRDHFCutsJpsitoee.h"
+#include "AliRDHFCutsDplustoKpipi.h"
+#include "AliRDHFCutsDstoKKpi.h"
+#include "AliRDHFCutsLctopKpi.h"
+#include "AliRDHFCutsD0toKpipipi.h"
 #include "AliAnalysisFilter.h"
 #include "AliAnalysisVertexingHF.h"
 #include "AliMixedEvent.h"
@@ -73,6 +78,12 @@ fMixEvent(kFALSE),
 fTrackFilter(0x0),
 fTrackFilterSoftPi(0x0),
 fCutsD0toKpi(0x0),
+fCutsJpsitoee(0x0),
+fCutsDplustoKpipi(0x0),
+fCutsDstoKKpi(0x0),
+fCutsLctopKpi(0x0),
+fCutsD0toKpipipi(0x0),
+fCutsD0fromDstar(0x0),
 fFindVertexForDstar(kTRUE)
 {
   // Default constructor
@@ -106,6 +117,12 @@ fMixEvent(source.fMixEvent),
 fTrackFilter(source.fTrackFilter),
 fTrackFilterSoftPi(source.fTrackFilterSoftPi),
 fCutsD0toKpi(source.fCutsD0toKpi),
+fCutsJpsitoee(source.fCutsJpsitoee),
+fCutsDplustoKpipi(source.fCutsDplustoKpipi),
+fCutsDstoKKpi(source.fCutsDstoKKpi),
+fCutsLctopKpi(source.fCutsLctopKpi),
+fCutsD0toKpipipi(source.fCutsD0toKpipipi),
+fCutsD0fromDstar(source.fCutsD0fromDstar),
 fFindVertexForDstar(source.fFindVertexForDstar)
 {
   //
@@ -143,6 +160,12 @@ AliAnalysisVertexingHF &AliAnalysisVertexingHF::operator=(const AliAnalysisVerte
   fTrackFilter = source.fTrackFilter;
   fTrackFilterSoftPi = source.fTrackFilterSoftPi;
   fCutsD0toKpi = source.fCutsD0toKpi;
+  fCutsJpsitoee = source.fCutsJpsitoee;
+  fCutsDplustoKpipi = source.fCutsDplustoKpipi;
+  fCutsDstoKKpi = source.fCutsDstoKKpi;
+  fCutsLctopKpi = source.fCutsLctopKpi;
+  fCutsD0toKpipipi = source.fCutsD0toKpipipi;
+  fCutsD0fromDstar = source.fCutsD0fromDstar;
   fFindVertexForDstar = source.fFindVertexForDstar;
 
   for(Int_t i=0; i<9; i++)  fD0toKpiCuts[i]=source.fD0toKpiCuts[i];
@@ -162,6 +185,12 @@ AliAnalysisVertexingHF::~AliAnalysisVertexingHF() {
   if(fTrackFilter) { delete fTrackFilter; fTrackFilter=0; }
   if(fTrackFilterSoftPi) { delete fTrackFilterSoftPi; fTrackFilterSoftPi=0; }
   if(fCutsD0toKpi) { delete fCutsD0toKpi; fCutsD0toKpi=0; }
+  if(fCutsJpsitoee) { delete fCutsJpsitoee; fCutsJpsitoee=0; }
+  if(fCutsDplustoKpipi) { delete fCutsDplustoKpipi; fCutsDplustoKpipi=0; }
+  if(fCutsDstoKKpi) { delete fCutsDstoKKpi; fCutsDstoKKpi=0; }
+  if(fCutsLctopKpi) { delete fCutsLctopKpi; fCutsLctopKpi=0; }
+  if(fCutsD0toKpipipi) { delete fCutsD0toKpipipi; fCutsD0toKpipipi=0; }
+  if(fCutsD0fromDstar) { delete fCutsD0fromDstar; fCutsD0fromDstar=0; }
   if(fAODMap) { delete fAODMap; fAODMap=0; }
 }
 //----------------------------------------------------------------------------
@@ -280,11 +309,18 @@ void AliAnalysisVertexingHF::FindCandidates(AliVEvent *event,
   AliESDtrack *negtrack1 = 0;
   AliESDtrack *negtrack2 = 0;
   AliESDtrack *trackPi   = 0;
-  //Double_t dcaMax = fCutsD0toKpi->GetDCACut();
   Double_t dcaMax = fD0toKpiCuts[1];
   if(dcaMax < fBtoJPSICuts[1]) dcaMax=fBtoJPSICuts[1];
   if(dcaMax < fDplusCuts[11])  dcaMax=fDplusCuts[11];
   if(dcaMax < fD0to4ProngsCuts[1])  dcaMax=fD0to4ProngsCuts[1];
+  /*
+  Double_t dcaMax = fCutsD0toKpi->GetDCACut();
+  if(fCutsJpsitoee) dcaMax=TMath::Max(dcaMax,fCutsJpsitoee->GetDCACut());
+  if(fCutsDplustoKpipi) dcaMax=TMath::Max(dcaMax,fCutsDplustoKpipi->GetDCACut());
+  if(fCutsDstoKKpi) dcaMax=TMath::Max(dcaMax,fCutsDstoKKpi->GetDCACut());
+  if(fCutsLctopKpi) dcaMax=TMath::Max(dcaMax,fCutsLctopKpi->GetDCACut());
+  if(fCutsD0toKpipipi) dcaMax=TMath::Max(dcaMax,fCutsD0toKpipipi->GetDCACut());
+  */
   AliDebug(2,Form(" dca cut set to %f cm",dcaMax));
 
 
@@ -993,9 +1029,11 @@ AliAODRecoDecayHF2Prong *AliAnalysisVertexingHF::Make2Prong(
     // select J/psi from B
     Int_t checkJPSI;
     if(fJPSItoEle) okJPSI        = the2Prong->SelectBtoJPSI(fBtoJPSICuts,checkJPSI);
+    //if(fJPSItpEle)   okJPSI = (Bool_t)fCutsJpsitoee->IsSelected(the2Prong,AliRDHFCuts::kCandidate);
     //if(fDebug && fJPSItoEle) printf("   %d\n",(Int_t)okJPSI);
     // select D0->Kpi from Dstar
     if(fDstar)     okD0fromDstar = the2Prong->SelectD0(fD0fromDstarCuts,checkD0,checkD0bar);
+    //if(fDstar)   okD0fromDstar = (Bool_t)fCutsD0fromDstar->IsSelected(the2Prong,AliRDHFCuts::kCandidate);
     //if(fDebug && fDstar) printf("   %d\n",(Int_t)okD0fromDstar);
   }
 
@@ -1098,6 +1136,11 @@ AliAODRecoDecayHF3Prong* AliAnalysisVertexingHF::Make3Prong(
     if(the3Prong->SelectDplus(fDplusCuts))   ok3Prong = kTRUE;
     if(the3Prong->SelectDs(fDsCuts,ok1,ok2,dum1,dum2)) ok3Prong = kTRUE;
     if(the3Prong->SelectLc(fLcCuts,ok1,ok2)) ok3Prong = kTRUE;
+    /*
+    if(fCutsDplustoKpipi->IsSelected(the3Prong,AliRDHFCuts::kCandidate)) ok3Prong = kTRUE;
+    if(fCutsDstoKKpi->IsSelected(the3Prong,AliRDHFCuts::kCandidate)) ok3Prong = kTRUE;
+    if(fCutsLctopKpi->IsSelected(the3Prong,AliRDHFCuts::kCandidate)) ok3Prong = kTRUE;
+    */
   }
   //if(fDebug) printf("ok3Prong: %d\n",(Int_t)ok3Prong);
 
@@ -1208,6 +1251,8 @@ AliAODRecoDecayHF4Prong* AliAnalysisVertexingHF::Make4Prong(
 
   Int_t checkD0,checkD0bar;
   ok4Prong=the4Prong->SelectD0(fD0to4ProngsCuts,checkD0,checkD0bar);
+  //ok4Prong=(Bool_t)fCutsD0toKpipipi->IsSelected(the4Prong,AliRDHFCuts::kCandidate);
+
 
   if(!fRecoPrimVtxSkippingTrks && !fRmTrksFromPrimVtx && !fMixEvent) {
     the4Prong->UnsetOwnPrimaryVtx();
@@ -1356,8 +1401,8 @@ void AliAnalysisVertexingHF::PrintStatus() const {
   if(fRecoPrimVtxSkippingTrks) printf("RecoPrimVtxSkippingTrks\n");
   if(fRmTrksFromPrimVtx) printf("RmTrksFromPrimVtx\n");
   if(fD0toKpi) {
-    if(fCutsD0toKpi) fCutsD0toKpi->PrintAll();
     printf("Reconstruct D0->Kpi candidates with cuts:\n");
+    if(fCutsD0toKpi) fCutsD0toKpi->PrintAll();
     printf("    |M-MD0| [GeV]    < %f\n",fD0toKpiCuts[0]);
     printf("    dca    [cm]  < %f\n",fD0toKpiCuts[1]);
     printf("    cosThetaStar     < %f\n",fD0toKpiCuts[2]);
@@ -1381,6 +1426,7 @@ void AliAnalysisVertexingHF::PrintStatus() const {
     printf("    Theta(pisoft,D0plane) < %f\n",fDstarCuts[4]);
     printf("Reconstruct D*->D0pi candidates with cuts:\n");
     printf("   D0 from D* cuts:\n");
+    if(fCutsD0fromDstar) fCutsD0fromDstar->PrintAll();
     printf("    |M-MD0| [GeV]    < %f\n",fD0fromDstarCuts[0]);
     printf("    dca    [cm]  < %f\n",fD0fromDstarCuts[1]);
     printf("    cosThetaStar     < %f\n",fD0fromDstarCuts[2]);
@@ -1393,6 +1439,7 @@ void AliAnalysisVertexingHF::PrintStatus() const {
   }
   if(fJPSItoEle) {
     printf("Reconstruct J/psi from B candidates with cuts:\n");
+    if(fCutsJpsitoee) fCutsJpsitoee->PrintAll();
     printf("    |M-MJPSI| [GeV]    < %f\n",fBtoJPSICuts[0]);
     printf("    dca    [cm]  < %f\n",fBtoJPSICuts[1]);
     printf("    cosThetaStar     < %f\n",fBtoJPSICuts[2]);
@@ -1406,6 +1453,7 @@ void AliAnalysisVertexingHF::PrintStatus() const {
   if(f3Prong) {
     printf("Reconstruct 3 prong candidates.\n");
     printf("  D+->Kpipi cuts:\n");
+    if(fCutsDplustoKpipi) fCutsDplustoKpipi->PrintAll();
     printf("    |M-MD+| [GeV]    < %f\n",fDplusCuts[0]);
     printf("    pTK     [GeV/c]    > %f\n",fDplusCuts[1]);
     printf("    pTPi    [GeV/c]    > %f\n",fDplusCuts[2]);
@@ -1419,6 +1467,7 @@ void AliAnalysisVertexingHF::PrintStatus() const {
     printf("    Sum d0^2 [cm^2]  > %f\n",fDplusCuts[10]);
     printf("    dca cut [cm]  < %f\n",fDplusCuts[11]);
     printf("  Ds->KKpi cuts:\n");
+    if(fCutsDstoKKpi) fCutsDstoKKpi->PrintAll();
     printf("    |M-MDs| [GeV]    < %f\n",fDsCuts[0]);
     printf("    pTK     [GeV/c]    > %f\n",fDsCuts[1]);
     printf("    pTPi    [GeV/c]    > %f\n",fDsCuts[2]);
@@ -1434,6 +1483,7 @@ void AliAnalysisVertexingHF::PrintStatus() const {
     printf("    Inv. Mass  phi [GeV]  < %f\n",fDsCuts[12]);
     printf("    Inv. Mass  K0* [GeV]  < %f\n",fDsCuts[13]);
     printf("  Lc->pKpi cuts:\n");
+    if(fCutsLctopKpi) fCutsLctopKpi->PrintAll();
     printf("    |M-MLc| [GeV]    < %f\n",fLcCuts[0]);
     printf("    pTP     [GeV/c]    > %f\n",fLcCuts[1]);
     printf("    pTPi and pTK [GeV/c]    > %f\n",fLcCuts[2]);
@@ -1447,6 +1497,11 @@ void AliAnalysisVertexingHF::PrintStatus() const {
     printf("    Sum d0^2 [cm^2]  > %f\n",fLcCuts[10]);
     printf("    dca cut [cm]  < %f\n",fLcCuts[11]);
   }
+  if(f4Prong) {
+    printf("Reconstruct 4 prong candidates.\n");
+    printf("  D0->Kpipipi cuts:\n");
+    if(fCutsD0toKpipipi) fCutsD0toKpipipi->PrintAll();
+  }
 
   return;
 }
@@ -1542,28 +1597,34 @@ Bool_t AliAnalysisVertexingHF::SelectInvMass(Int_t decay,
       mPDG=TDatabasePDG::Instance()->GetParticle(443)->Mass();
       minv = rd->InvMass(nprongs,pdg2);
       if(TMath::Abs(minv-mPDG)<fBtoJPSICuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsJpsitoee->GetMassCut()) retval=kTRUE;
       break;
     case 2:                  // D+->Kpipi
       pdg3[0]=211; pdg3[1]=321; pdg3[2]=211;
       mPDG=TDatabasePDG::Instance()->GetParticle(411)->Mass();
       minv = rd->InvMass(nprongs,pdg3);
       if(TMath::Abs(minv-mPDG)<fDplusCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsDplustoKpipi->GetMassCut()) retval=kTRUE;
                             // Ds+->KKpi
       pdg3[0]=321; pdg3[1]=321; pdg3[2]=211;
       mPDG=TDatabasePDG::Instance()->GetParticle(431)->Mass();
       minv = rd->InvMass(nprongs,pdg3);
       if(TMath::Abs(minv-mPDG)<fDsCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsDstoKKpi->GetMassCut()) retval=kTRUE;
       pdg3[0]=211; pdg3[1]=321; pdg3[2]=321;
       minv = rd->InvMass(nprongs,pdg3);
       if(TMath::Abs(minv-mPDG)<fDsCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsDstoKKpi->GetMassCut()) retval=kTRUE;
                             // Lc->pKpi
       pdg3[0]=2212; pdg3[1]=321; pdg3[2]=211;
       mPDG=TDatabasePDG::Instance()->GetParticle(4122)->Mass();
       minv = rd->InvMass(nprongs,pdg3);
       if(TMath::Abs(minv-mPDG)<fLcCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsLctopKpi->GetMassCut()) retval=kTRUE;
       pdg3[0]=211; pdg3[1]=321; pdg3[2]=2212;
       minv = rd->InvMass(nprongs,pdg3);
       if(TMath::Abs(minv-mPDG)<fLcCuts[0]) retval=kTRUE; 
+      //if(TMath::Abs(minv-mPDG)<fCutsLctopKpi->GetMassCut()) retval=kTRUE;
       break;
     case 3:                  // D*->D0pi
       pdg2[0]=211; pdg2[1]=421; // in twoTrackArrayCasc we put the pion first
@@ -1571,24 +1632,27 @@ Bool_t AliAnalysisVertexingHF::SelectInvMass(Int_t decay,
       minv = rd->InvMass(nprongs,pdg2);
       if(TMath::Abs(minv-mPDG)<fDstarCuts[0]) retval=kTRUE;
       break;
-    case 4:                 // D0->K3pi without PID
+    case 4:                 // D0->Kpipipi without PID
       pdg4[0]=321; pdg4[1]=211; pdg4[2]=211; pdg4[3]=211;
       mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
       minv = rd->InvMass(nprongs,pdg4);
-      if(TMath::Abs(minv-mPDG)<fD0to4ProngsCuts[0])
-       retval=kTRUE;
+      if(TMath::Abs(minv-mPDG)<fD0to4ProngsCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsD0toKpipipi->GetMassCut()) retval=kTRUE;
       pdg4[0]=211; pdg4[1]=321; pdg4[2]=211; pdg4[3]=211;
       mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
       minv = rd->InvMass(nprongs,pdg4);
       if(TMath::Abs(minv-mPDG)<fD0to4ProngsCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsD0toKpipipi->GetMassCut()) retval=kTRUE;
       pdg4[0]=211; pdg4[1]=211; pdg4[2]=321; pdg4[3]=211;
       mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
       minv = rd->InvMass(nprongs,pdg4);
       if(TMath::Abs(minv-mPDG)<fD0to4ProngsCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsD0toKpipipi->GetMassCut()) retval=kTRUE;
       pdg4[0]=211; pdg4[1]=211; pdg4[2]=211; pdg4[3]=321;
       mPDG=TDatabasePDG::Instance()->GetParticle(421)->Mass();
       minv = rd->InvMass(nprongs,pdg4);
       if(TMath::Abs(minv-mPDG)<fD0to4ProngsCuts[0]) retval=kTRUE;
+      //if(TMath::Abs(minv-mPDG)<fCutsD0toKpipipi->GetMassCut()) retval=kTRUE;
       break;
     default:
       printf("SelectInvMass(): wrong decay selection\n");
index 34fcf56d0055ecb0a3161e67e47d854c3e4e85a5..9dd4bd1abe7861700ee3edc9d6d5c961d34e3b83 100644 (file)
@@ -21,6 +21,11 @@ class AliAODRecoDecayHF4Prong;
 class AliAODRecoCascadeHF;
 class AliAnalysisFilter;
 class AliRDHFCutsD0toKpi;
+class AliRDHFCutsJpsitoee;
+class AliRDHFCutsDplustoKpipi;
+class AliRDHFCutsDstoKKpi;
+class AliRDHFCutsLctopKpi;
+class AliRDHFCutsD0toKpipipi;
 class AliESDtrack;
 class AliVEvent;
 class AliAODVertex;
@@ -84,6 +89,18 @@ class AliAnalysisVertexingHF : public TNamed {
   AliAnalysisFilter* GetTrackFilterSoftPi() const { return fTrackFilterSoftPi; }
   void SetCutsD0toKpi(AliRDHFCutsD0toKpi* cuts) { fCutsD0toKpi = cuts; }
   AliRDHFCutsD0toKpi* GetCutsD0toKpi() const { return fCutsD0toKpi; }
+  void SetCutsJpsitoee(AliRDHFCutsJpsitoee* cuts) { fCutsJpsitoee = cuts; }
+  AliRDHFCutsJpsitoee* GetCutsJpsitoee() const { return fCutsJpsitoee; }
+  void SetCutsDplustoKpipi(AliRDHFCutsDplustoKpipi* cuts) { fCutsDplustoKpipi = cuts; }
+  AliRDHFCutsDplustoKpipi* GetCutsDplustoKpipi() const { return fCutsDplustoKpipi; }
+  void SetCutsDstoKKpi(AliRDHFCutsDstoKKpi* cuts) { fCutsDstoKKpi = cuts; }
+  AliRDHFCutsDstoKKpi* GetCutsDstoKKpi() const { return fCutsDstoKKpi; }
+  void SetCutsLctopKpi(AliRDHFCutsLctopKpi* cuts) { fCutsLctopKpi = cuts; }
+  AliRDHFCutsLctopKpi* GetCutsLctopKpi() const { return fCutsLctopKpi; }
+  void SetCutsD0toKpipipi(AliRDHFCutsD0toKpipipi* cuts) { fCutsD0toKpipipi = cuts; }
+  AliRDHFCutsD0toKpipipi* GetCutsD0toKpipipi() const { return fCutsD0toKpipipi; }
+  void SetCutsD0fromDstar(AliRDHFCutsD0toKpi* cuts) { fCutsD0fromDstar = cuts; }
+  AliRDHFCutsD0toKpi* GetCutsD0fromDstar() const { return fCutsD0fromDstar; }
   void SetD0toKpiCuts(Double_t cut0=1000.,Double_t cut1=100000.,
                      Double_t cut2=1.1,Double_t cut3=0.,Double_t cut4=0.,
                      Double_t cut5=100000.,Double_t cut6=100000.,
@@ -145,7 +162,6 @@ class AliAnalysisVertexingHF : public TNamed {
   enum { kBitDispl = 0, kBitSoftPi = 1 };
 
   Bool_t fInputAOD; // input from AOD (kTRUE) or ESD (kFALSE) 
-
   Int_t fAODMapSize; // size of fAODMap 
   Int_t *fAODMap; //[fAODMapSize] map between index and ID for AOD tracks
 
@@ -174,6 +190,12 @@ class AliAnalysisVertexingHF : public TNamed {
   AliAnalysisFilter *fTrackFilterSoftPi; //  Track Filter for D* soft pion
   // candidates cuts
   AliRDHFCutsD0toKpi *fCutsD0toKpi; // D0->Kpi cuts
+  AliRDHFCutsJpsitoee *fCutsJpsitoee; // J/psi->ee cuts
+  AliRDHFCutsDplustoKpipi *fCutsDplustoKpipi; // D+->Kpipi cuts
+  AliRDHFCutsDstoKKpi *fCutsDstoKKpi; // Ds->KKpi cuts
+  AliRDHFCutsLctopKpi *fCutsLctopKpi; // Lc->pKpi cuts
+  AliRDHFCutsD0toKpipipi *fCutsD0toKpipipi; // D0->Kpipipi cuts
+  AliRDHFCutsD0toKpi *fCutsD0fromDstar; // D0 from Dstar cuts
 
   Double_t fD0toKpiCuts[9]; // cuts on D0->Kpi candidates
                   // (to be passed to AliAODRecoDecayHF2Prong::SelectD0())
@@ -308,7 +330,7 @@ class AliAnalysisVertexingHF : public TNamed {
                                   UChar_t *seleFlags,Int_t *evtNumber);
   Bool_t SingleTrkCuts(AliESDtrack *trk,Bool_t &okDisplaced,Bool_t &okSoftPi) const;
   //
-  ClassDef(AliAnalysisVertexingHF,14);  // Reconstruction of HF decay candidates
+  ClassDef(AliAnalysisVertexingHF,15);  // Reconstruction of HF decay candidates
 };
 
 
diff --git a/PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.cxx b/PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.cxx
new file mode 100644 (file)
index 0000000..9ba7da4
--- /dev/null
@@ -0,0 +1,151 @@
+/**************************************************************************
+ * 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;
+
+}
+//---------------------------------------------------------------------------
diff --git a/PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.h b/PWG3/vertexingHF/AliRDHFCutsD0toKpipipi.h
new file mode 100644 (file)
index 0000000..1c313b8
--- /dev/null
@@ -0,0 +1,39 @@
+#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
diff --git a/PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.cxx b/PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.cxx
new file mode 100644 (file)
index 0000000..b84fce5
--- /dev/null
@@ -0,0 +1,270 @@
+/**************************************************************************
+ * 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 D+->Kpipi
+//
+// Author: R. Bala, bala@to.infn.it
+//         G. Ortona, ortona@to.infn.it
+/////////////////////////////////////////////////////////////
+
+#include <TDatabasePDG.h>
+#include <Riostream.h>
+
+#include "AliRDHFCutsDplustoKpipi.h"
+#include "AliAODRecoDecayHF3Prong.h"
+#include "AliAODTrack.h"
+#include "AliESDtrack.h"
+
+ClassImp(AliRDHFCutsDplustoKpipi)
+
+//--------------------------------------------------------------------------
+AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi() : 
+  AliRDHFCuts()
+{
+  //
+  // Default Constructor
+  //
+  Int_t nvars=12;
+  SetNVars(nvars);
+  TString varNames[12]={"inv. mass [GeV]",
+                       "pTK [GeV/c]",
+                       "pTPi [GeV/c]",
+                       "d0K [cm]   lower limit!",
+                       "d0Pi [cm]  lower limit!",
+                       "dist12 (cm)",
+                       "sigmavert (cm)",
+                       "dist prim-sec (cm)",
+                       "pM=Max{pT1,pT2,pT3} (GeV/c)",
+                       "cosThetaPoint",
+                       "Sum d0^2 (cm^2)",
+                       "dca cut (cm)"};
+  Bool_t isUpperCut[12]={kTRUE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kTRUE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kTRUE};
+  SetVarNames(nvars,varNames,isUpperCut);
+  Bool_t forOpt[12]={kTRUE,
+                    kFALSE,
+                    kFALSE,
+                    kFALSE,
+                    kFALSE,
+                    kFALSE,
+                    kTRUE,
+                    kTRUE,
+                    kTRUE,
+                    kTRUE,
+                    kTRUE,
+                    kFALSE};
+  SetVarsForOpt(6,forOpt);
+  Float_t limits[2]={0,999999999.};
+  SetPtBins(2,limits);
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsDplustoKpipi::AliRDHFCutsDplustoKpipi(const AliRDHFCutsDplustoKpipi &source) :
+  AliRDHFCuts(source)
+{
+  //
+  // Copy constructor
+  //
+
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsDplustoKpipi &AliRDHFCutsDplustoKpipi::operator=(const AliRDHFCutsDplustoKpipi &source)
+{
+  //
+  // assignment operator
+  //
+  if(&source == this) return *this;
+
+  AliRDHFCuts::operator=(source);
+
+  return *this;
+}
+
+
+//---------------------------------------------------------------------------
+void AliRDHFCutsDplustoKpipi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
+  // 
+  // Fills in vars the values of the variables 
+  //
+
+
+  if(nvars!=fnVarsForOpt) {
+    printf("AliRDHFCutsDplustoKpipi::GetCutsVarsForOpt: wrong number of variables\n");
+    return;
+  }
+
+  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++;
+    vars[iter]=dd->InvMassDplus();
+  }
+  if(fVarsForOpt[1]){
+    iter++;
+    for(Int_t iprong=0;iprong<3;iprong++){
+      if(TMath::Abs(pdgdaughters[iprong])==321) {
+       vars[iter]=dd->PtProng(iprong);
+      }
+    }
+  }
+  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++;
+    for(Int_t iprong=0;iprong<3;iprong++){
+      if(TMath::Abs(pdgdaughters[iprong])==321) {
+       vars[iter]=dd->Getd0Prong(iprong);
+      }
+    }
+  }
+  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++;
+    vars[iter]=dd->GetDist12toPrim();
+  }
+  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++;
+    vars[iter]=dd->GetDCA();
+  }
+  return;
+}
+//---------------------------------------------------------------------------
+Int_t AliRDHFCutsDplustoKpipi::IsSelected(TObject* obj,Int_t selectionLevel) {
+  //
+  // Apply selection
+  //
+
+  if(!fCutsRD){
+    cout<<"Cut matrice not inizialized. Exit..."<<endl;
+    return 0;
+  }
+  //PrintAll();
+  AliAODRecoDecayHF3Prong* d=(AliAODRecoDecayHF3Prong*)obj; 
+
+  
+  if(!d){
+    cout<<"AliAODRecoDecayHF3Prong null"<<endl;
+    return 0;
+  }
+
+
+  // selection on daughter tracks 
+  if(selectionLevel==AliRDHFCuts::kAll || 
+     selectionLevel==AliRDHFCuts::kTracks) {
+    if(!AreDaughtersSelected(d)) return 0;
+  }
+
+  // selection on candidate
+  if(selectionLevel==AliRDHFCuts::kAll || 
+     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;
+    //    if(d->PtProng(1) < fCutsRD[GetGlobalIndex(3,ptbin)] || d->PtProng(0) < fCutsRD[GetGlobalIndex(4,ptbin)]) okD0 = 0;
+    if(TMath::Abs(d->PtProng(1)) < fCutsRD[GetGlobalIndex(1,ptbin)] || TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)])return 0;//Kaon
+    if(TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(4,ptbin)])return 0;//Pion1
+    if(TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(4,ptbin)])return 0;//Pion2
+
+    
+
+    //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;
+
+    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;
+}
+//---------------------------------------------------------------------------
diff --git a/PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.h b/PWG3/vertexingHF/AliRDHFCutsDplustoKpipi.h
new file mode 100644 (file)
index 0000000..43e7609
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef ALIRDHFCUTSDPLUSTOKPIPI_H
+#define ALIRDHFCUTSDPLUSTOKPIPI_H
+/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+
+/////////////////////////////////////////////////////////////
+//
+// Class for cuts on AOD reconstructed D+->Kpipi
+//
+// Author: R. Bala bala@to.infn.it
+//         G. Ortona ortona@to.infn.it
+/////////////////////////////////////////////////////////////
+
+
+#include "AliRDHFCuts.h"
+
+class AliRDHFCutsDplustoKpipi : public AliRDHFCuts 
+{
+ public:
+
+  AliRDHFCutsDplustoKpipi();
+  
+  virtual ~AliRDHFCutsDplustoKpipi(){}
+
+  AliRDHFCutsDplustoKpipi(const AliRDHFCutsDplustoKpipi& source);
+  AliRDHFCutsDplustoKpipi& operator=(const AliRDHFCutsDplustoKpipi& 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(11,iPtBin)] : 1.e6);}
+  
+ protected:
+  
+
+  ClassDef(AliRDHFCutsDplustoKpipi,1);  // class for cuts on AOD reconstructed D+->Kpipi
+};
+
+#endif
diff --git a/PWG3/vertexingHF/AliRDHFCutsDstoKKpi.cxx b/PWG3/vertexingHF/AliRDHFCutsDstoKKpi.cxx
new file mode 100644 (file)
index 0000000..3caa2a1
--- /dev/null
@@ -0,0 +1,151 @@
+/**************************************************************************
+ * 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 Ds->KKpi
+//
+// Author: A.Dainese, andrea.dainese@pd.infn.it
+/////////////////////////////////////////////////////////////
+
+#include <TDatabasePDG.h>
+#include <Riostream.h>
+
+#include "AliRDHFCutsDstoKKpi.h"
+#include "AliAODRecoDecayHF3Prong.h"
+#include "AliAODTrack.h"
+#include "AliESDtrack.h"
+
+ClassImp(AliRDHFCutsDstoKKpi)
+
+//--------------------------------------------------------------------------
+AliRDHFCutsDstoKKpi::AliRDHFCutsDstoKKpi() : 
+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);
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsDstoKKpi::AliRDHFCutsDstoKKpi(const AliRDHFCutsDstoKKpi &source) :
+  AliRDHFCuts(source)
+{
+  //
+  // Copy constructor
+  //
+
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsDstoKKpi &AliRDHFCutsDstoKKpi::operator=(const AliRDHFCutsDstoKKpi &source)
+{
+  //
+  // assignment operator
+  //
+  if(&source == this) return *this;
+
+  AliRDHFCuts::operator=(source);
+
+  return *this;
+}
+
+
+//---------------------------------------------------------------------------
+void AliRDHFCutsDstoKKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
+  // 
+  // Fills in vars the values of the variables 
+  //
+
+  if(nvars!=fnVarsForOpt) {
+    printf("AliRDHFCutsDstoKKpi::GetCutsVarsForOpt: wrong number of variables\n");
+    return;
+  }
+
+  AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
+  
+  return;
+}
+//---------------------------------------------------------------------------
+Int_t AliRDHFCutsDstoKKpi::IsSelected(TObject* obj,Int_t selectionLevel) {
+  //
+  // Apply selection
+  //
+
+  if(!fCutsRD){
+    cout<<"Cut matrice not inizialized. Exit..."<<endl;
+    return 0;
+  }
+  //PrintAll();
+  AliAODRecoDecayHF3Prong* d=(AliAODRecoDecayHF3Prong*)obj;
+
+  if(!d){
+    cout<<"AliAODRecoDecayHF3Prong 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;
+
+}
+//---------------------------------------------------------------------------
diff --git a/PWG3/vertexingHF/AliRDHFCutsDstoKKpi.h b/PWG3/vertexingHF/AliRDHFCutsDstoKKpi.h
new file mode 100644 (file)
index 0000000..14f929d
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef ALIRDHFCUTSDSTOKKPI_H
+#define ALIRDHFCUTSDSTOKKPI_H
+/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+//***********************************************************
+// Class AliRDHFCutsDstoKKpi
+// class for cuts on AOD reconstructed Ds->KKpi
+// Author: A.Dainese, andrea.dainese@pd.infn.it
+//***********************************************************
+
+#include "AliRDHFCuts.h"
+
+class AliRDHFCutsDstoKKpi : public AliRDHFCuts 
+{
+ public:
+
+  AliRDHFCutsDstoKKpi();
+  
+  virtual ~AliRDHFCutsDstoKKpi(){}
+
+  AliRDHFCutsDstoKKpi(const AliRDHFCutsDstoKKpi& source);
+  AliRDHFCutsDstoKKpi& operator=(const AliRDHFCutsDstoKKpi& 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(11,iPtBin)] : 1.e6);}
+
+ protected:
+
+
+  ClassDef(AliRDHFCutsDstoKKpi,1);  // class for cuts on AOD reconstructed Ds->KKpi
+};
+
+#endif
diff --git a/PWG3/vertexingHF/AliRDHFCutsJpsitoee.cxx b/PWG3/vertexingHF/AliRDHFCutsJpsitoee.cxx
new file mode 100644 (file)
index 0000000..a54403b
--- /dev/null
@@ -0,0 +1,222 @@
+/**************************************************************************
+ * 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 Jpsi->ee
+//
+// Author: A.Dainese, andrea.dainese@pd.infn.it
+/////////////////////////////////////////////////////////////
+
+#include <TDatabasePDG.h>
+#include <Riostream.h>
+
+#include "AliRDHFCutsJpsitoee.h"
+#include "AliAODRecoDecayHF2Prong.h"
+#include "AliAODTrack.h"
+#include "AliESDtrack.h"
+
+ClassImp(AliRDHFCutsJpsitoee)
+
+//--------------------------------------------------------------------------
+AliRDHFCutsJpsitoee::AliRDHFCutsJpsitoee() : 
+AliRDHFCuts()
+{
+  //
+  // Default Constructor
+  //
+  Int_t nvars=9;
+  SetNVars(nvars);
+  TString varNames[9]={"inv. mass [GeV]",   
+                      "dca [cm]",
+                      "cosThetaStar", // negative electron 
+                      "pTP [GeV/c]",
+                      "pTN [GeV/c]",
+                      "d0P [cm]",
+                      "d0N [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);
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsJpsitoee::AliRDHFCutsJpsitoee(const AliRDHFCutsJpsitoee &source) :
+  AliRDHFCuts(source)
+{
+  //
+  // Copy constructor
+  //
+
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsJpsitoee &AliRDHFCutsJpsitoee::operator=(const AliRDHFCutsJpsitoee &source)
+{
+  //
+  // assignment operator
+  //
+  if(&source == this) return *this;
+
+  AliRDHFCuts::operator=(source);
+
+  return *this;
+}
+
+
+//---------------------------------------------------------------------------
+void AliRDHFCutsJpsitoee::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
+  // 
+  // Fills in vars the values of the variables 
+  //
+
+  if(nvars!=fnVarsForOpt) {
+    printf("AliRDHFCutsJpsitoee::GetCutsVarsForOpt: wrong number of variables\n");
+    return;
+  }
+
+  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]){
+    iter++;
+    vars[iter]=dd->InvMassJPSIee();
+  }
+  if(fVarsForOpt[1]){
+    iter++;
+    vars[iter]=dd->GetDCA();
+  }
+  if(fVarsForOpt[2]){
+    iter++;
+    vars[iter] = dd->CosThetaStarJPSI();
+  }
+  if(fVarsForOpt[3]){
+    iter++;
+    vars[iter]=dd->PtProng(0);
+  }
+  if(fVarsForOpt[4]){
+    iter++;
+    vars[iter]=dd->PtProng(1);
+  }
+  if(fVarsForOpt[5]){
+    iter++;
+    vars[iter]=dd->Getd0Prong(0);
+  }
+  if(fVarsForOpt[6]){
+    iter++;
+    vars[iter]=dd->Getd0Prong(1);
+  }
+  if(fVarsForOpt[7]){
+    iter++;
+    vars[iter]= dd->Prodd0d0();
+  }
+  if(fVarsForOpt[8]){
+    iter++;
+    vars[iter]=dd->CosPointingAngle();
+  }
+  
+  return;
+}
+//---------------------------------------------------------------------------
+Int_t AliRDHFCutsJpsitoee::IsSelected(TObject* obj,Int_t selectionLevel) {
+  //
+  // Apply selection
+  //
+
+  if(!fCutsRD){
+    cout<<"Cut matrice not inizialized. Exit..."<<endl;
+    return 0;
+  }
+  //PrintAll();
+  AliAODRecoDecayHF2Prong* d=(AliAODRecoDecayHF2Prong*)obj;
+
+  if(!d){
+    cout<<"AliAODRecoDecayHF2Prong null"<<endl;
+    return 0;
+  }
+
+
+  // selection on daughter tracks 
+  if(selectionLevel==AliRDHFCuts::kAll || 
+     selectionLevel==AliRDHFCuts::kTracks) {
+    if(!AreDaughtersSelected(d)) return 0;
+  }
+
+
+  // selection on candidate
+  if(selectionLevel==AliRDHFCuts::kAll || 
+     selectionLevel==AliRDHFCuts::kCandidate) {
+    
+    Double_t pt=d->Pt();
+    Double_t mJPsi,ctsJPsi;
+
+    Double_t mJPSIPDG = TDatabasePDG::Instance()->GetParticle(443)->Mass();
+    
+    Int_t ptbin=PtBin(pt);
+
+    if(d->PtProng(1) < fCutsRD[GetGlobalIndex(3,ptbin)] || d->PtProng(0) < fCutsRD[GetGlobalIndex(4,ptbin)]) return 0;
+
+    if(TMath::Abs(d->Getd0Prong(1)) > fCutsRD[GetGlobalIndex(5,ptbin)] ||
+       TMath::Abs(d->Getd0Prong(0)) > fCutsRD[GetGlobalIndex(6,ptbin)]) return 0;
+
+  
+    if(d->GetDCA() > fCutsRD[GetGlobalIndex(1,ptbin)]) return 0;
+
+    mJPsi=d->InvMassJPSIee();
+    if(TMath::Abs(mJPsi-mJPSIPDG)    > fCutsRD[GetGlobalIndex(0,ptbin)]) return 0;
+
+    ctsJPsi=d->CosThetaStarJPSI();
+    if(TMath::Abs(ctsJPsi)    > fCutsRD[GetGlobalIndex(2,ptbin)]) return 0;
+
+    if(d->Prodd0d0() > fCutsRD[GetGlobalIndex(7,ptbin)]) return 0;
+    
+    if(d->CosPointingAngle()   < fCutsRD[GetGlobalIndex(8,ptbin)]) return 0;
+    
+  }
+
+
+  return 1;
+}
+//---------------------------------------------------------------------------
diff --git a/PWG3/vertexingHF/AliRDHFCutsJpsitoee.h b/PWG3/vertexingHF/AliRDHFCutsJpsitoee.h
new file mode 100644 (file)
index 0000000..4def265
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef ALIRDHFCUTSJPSITOEE_H
+#define ALIRDHFCUTSJPSITOEE_H
+/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+//***********************************************************
+// Class AliRDHFCutsJpsitoee
+// class for cuts on AOD reconstructed J/psi->ee (from B)
+// Author: A.Dainese, andrea.dainese@pd.infn.it
+//***********************************************************
+
+#include "AliRDHFCuts.h"
+
+class AliRDHFCutsJpsitoee : public AliRDHFCuts 
+{
+ public:
+
+  AliRDHFCutsJpsitoee();
+  
+  virtual ~AliRDHFCutsJpsitoee(){}
+
+  AliRDHFCutsJpsitoee(const AliRDHFCutsJpsitoee& source);
+  AliRDHFCutsJpsitoee& operator=(const AliRDHFCutsJpsitoee& 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(AliRDHFCutsJpsitoee,1);  // class for cuts on AOD reconstructed J/psi->ee
+};
+
+#endif
diff --git a/PWG3/vertexingHF/AliRDHFCutsLctopKpi.cxx b/PWG3/vertexingHF/AliRDHFCutsLctopKpi.cxx
new file mode 100644 (file)
index 0000000..91279c2
--- /dev/null
@@ -0,0 +1,271 @@
+/**************************************************************************
+ * 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 Lc->pKpi
+//
+// Author: A.Dainese, andrea.dainese@pd.infn.it
+/////////////////////////////////////////////////////////////
+
+#include <TDatabasePDG.h>
+#include <Riostream.h>
+
+#include "AliRDHFCutsLctopKpi.h"
+#include "AliAODRecoDecayHF3Prong.h"
+#include "AliAODTrack.h"
+#include "AliESDtrack.h"
+
+ClassImp(AliRDHFCutsLctopKpi)
+
+//--------------------------------------------------------------------------
+AliRDHFCutsLctopKpi::AliRDHFCutsLctopKpi() : 
+AliRDHFCuts()
+{
+  //
+  // Default Constructor
+  //
+  Int_t nvars=12;
+  SetNVars(nvars);
+  TString varNames[12]={"inv. mass [GeV]",
+                       "pTP [GeV/c]",
+                       "pTPi [GeV/c]",
+                       "d0P [cm]   lower limit!",
+                       "d0Pi [cm]  lower limit!",
+                       "dist12 (cm)",
+                       "sigmavert (cm)",
+                       "dist prim-sec (cm)",
+                       "pM=Max{pT1,pT2,pT3} (GeV/c)",
+                       "cosThetaPoint",
+                       "Sum d0^2 (cm^2)",
+                       "dca cut (cm)"};
+  Bool_t isUpperCut[12]={kTRUE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kTRUE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kFALSE,
+                        kTRUE};
+  SetVarNames(nvars,varNames,isUpperCut);
+  Bool_t forOpt[12]={kTRUE,
+                    kFALSE,
+                    kFALSE,
+                    kFALSE,
+                    kFALSE,
+                    kFALSE,
+                    kTRUE,
+                    kTRUE,
+                    kTRUE,
+                    kTRUE,
+                    kTRUE,
+                    kFALSE};
+  SetVarsForOpt(6,forOpt);
+  Float_t limits[2]={0,999999999.};
+  SetPtBins(2,limits);
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsLctopKpi::AliRDHFCutsLctopKpi(const AliRDHFCutsLctopKpi &source) :
+  AliRDHFCuts(source)
+{
+  //
+  // Copy constructor
+  //
+
+}
+//--------------------------------------------------------------------------
+AliRDHFCutsLctopKpi &AliRDHFCutsLctopKpi::operator=(const AliRDHFCutsLctopKpi &source)
+{
+  //
+  // assignment operator
+  //
+  if(&source == this) return *this;
+
+  AliRDHFCuts::operator=(source);
+
+  return *this;
+}
+
+
+//---------------------------------------------------------------------------
+void AliRDHFCutsLctopKpi::GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) {
+  // 
+  // Fills in vars the values of the variables 
+  //
+
+  if(nvars!=fnVarsForOpt) {
+    printf("AliRDHFCutsLctopKpi::GetCutsVarsForOpt: wrong number of variables\n");
+    return;
+  }
+
+  AliAODRecoDecayHF3Prong *dd = (AliAODRecoDecayHF3Prong*)d;
+
+    Int_t iter=-1;
+  if(fVarsForOpt[0]){
+    iter++;
+    vars[iter]=dd->InvMassLcpKpi();
+  }
+  if(fVarsForOpt[1]){
+    iter++;
+    for(Int_t iprong=0;iprong<3;iprong++){
+      if(TMath::Abs(pdgdaughters[iprong])==2212) {
+       vars[iter]=dd->PtProng(iprong);
+      }
+    }
+  }
+  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++;
+    for(Int_t iprong=0;iprong<3;iprong++){
+      if(TMath::Abs(pdgdaughters[iprong])==2212) {
+       vars[iter]=dd->Getd0Prong(iprong);
+      }
+    }
+  }
+  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++;
+    vars[iter]=dd->GetDist12toPrim();
+  }
+  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++;
+    vars[iter]=dd->GetDCA();
+  }
+
+  return;
+}
+//---------------------------------------------------------------------------
+Int_t AliRDHFCutsLctopKpi::IsSelected(TObject* obj,Int_t selectionLevel) {
+  //
+  // Apply selection
+  //
+
+  if(!fCutsRD){
+    cout<<"Cut matrice not inizialized. Exit..."<<endl;
+    return 0;
+  }
+  //PrintAll();
+  AliAODRecoDecayHF3Prong* d=(AliAODRecoDecayHF3Prong*)obj;
+
+  if(!d){
+    cout<<"AliAODRecoDecayHF3Prong 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) {
+
+    Double_t pt=d->Pt();
+    
+    Int_t ptbin=PtBin(pt);
+    
+    Double_t mLcpKpi,mLcpiKp;
+    Int_t okLcpKpi=1,okLcpiKp=1;
+
+    Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
+
+    mLcpKpi=d->InvMassLcpKpi();
+    mLcpiKp=d->InvMassLcpiKp();
+
+    if(TMath::Abs(mLcpKpi-mLcPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okLcpKpi = 0;
+    if(TMath::Abs(mLcpiKp-mLcPDG)>fCutsRD[GetGlobalIndex(0,ptbin)]) okLcpiKp = 0;
+    if(!okLcpKpi && !okLcpiKp) return 0;
+
+    if(TMath::Abs(d->PtProng(1)) < fCutsRD[GetGlobalIndex(1,ptbin)] || TMath::Abs(d->Getd0Prong(1))<fCutsRD[GetGlobalIndex(3,ptbin)]) return 0;//Kaon
+    if(TMath::Abs(d->PtProng(0)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(0))<fCutsRD[GetGlobalIndex(4,ptbin)]) return 0;//Proton
+    if(TMath::Abs(d->PtProng(2)) < fCutsRD[GetGlobalIndex(2,ptbin)] || TMath::Abs(d->Getd0Prong(2))<fCutsRD[GetGlobalIndex(4,ptbin)]) return 0;//Pion
+
+    
+
+    //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;
+
+    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;
+
+
+    if(okLcpKpi) returnvalue=1; //cuts passed as Lc->pKpi
+    if(okLcpiKp) returnvalue=2; //cuts passed as Lc->piKp
+    if(okLcpKpi && okLcpiKp) returnvalue=3; //cuts passed as both pKpi and piKp
+    
+  }
+
+  return returnvalue;
+}
+//---------------------------------------------------------------------------
diff --git a/PWG3/vertexingHF/AliRDHFCutsLctopKpi.h b/PWG3/vertexingHF/AliRDHFCutsLctopKpi.h
new file mode 100644 (file)
index 0000000..77020fb
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef ALIRDHFCUTSLCTOPKPI_H
+#define ALIRDHFCUTSLCTOPKPI_H
+/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
+ * See cxx source for full Copyright notice                               */
+
+//***********************************************************
+// Class AliRDHFCutsLctopKpi
+// class for cuts on AOD reconstructed Lc->pKpi
+// Author: A.Dainese, andrea.dainese@pd.infn.it
+//***********************************************************
+
+#include "AliRDHFCuts.h"
+
+class AliRDHFCutsLctopKpi : public AliRDHFCuts 
+{
+ public:
+
+  AliRDHFCutsLctopKpi();
+  
+  virtual ~AliRDHFCutsLctopKpi(){}
+
+  AliRDHFCutsLctopKpi(const AliRDHFCutsLctopKpi& source);
+  AliRDHFCutsLctopKpi& operator=(const AliRDHFCutsLctopKpi& 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(11,iPtBin)] : 1.e6);}
+
+ protected:
+
+
+  ClassDef(AliRDHFCutsLctopKpi,1);  // class for cuts on AOD reconstructed Lc->pKpi
+};
+
+#endif
index dd7d3dbe2d81043dba4f5f85720c31c11fe64c42..00c21ab1c6a1e6792821743f76ec1512630673c4 100644 (file)
@@ -34,11 +34,42 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   trkFilterSoftPi->AddCuts(esdTrackCutsSoftPi);
   vHF->SetTrackFilterSoftPi(trkFilterSoftPi);
   //--- set cuts for candidates selection
-  //AliRDHFCutsD0toKpi *cutsD0toKpi = new AliRDHFCutsD0toKpi();
-  //Float_t cutsArrayD0toKpi[9]={0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
-  //cutsD0toKpi->SetCuts(9,cutsArrayD0toKpi);
-  //cutsD0toKpi->AddTrackCuts(esdTrackCuts);
-  //vHF->SetCutsD0toKpi(cutsD0toKpi);
+  AliRDHFCutsD0toKpi *cutsD0toKpi = new AliRDHFCutsD0toKpi();
+  Float_t cutsArrayD0toKpi[9]={0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsD0toKpi->SetCuts(9,cutsArrayD0toKpi);
+  cutsD0toKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0toKpi(cutsD0toKpi);
+  AliRDHFCutsJpsitoee *cutsJpsitoee = new AliRDHFCutsJpsitoee();
+  Float_t cutsArrayJpsitoee[9]={0.35,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsJpsitoee->SetCuts(9,cutsArrayJpsitoee);
+  cutsJpsitoee->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsJpsitoee(cutsJpsitoee);
+  AliRDHFCutsDplustoKpipi *cutsDplustoKpipi = new AliRDHFCutsDplustoKpipi();
+  Float_t cutsArrayDplustoKpipi[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0,1e6};
+  cutsDplustoKpipi->SetCuts(12,cutsArrayDplustoKpipi);
+  cutsDplustoKpipi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsDplustoKpipi(cutsDplustoKpipi);
+  AliRDHFCutsDstoKKpi *cutsDstoKKpi = new AliRDHFCutsDstoKKpi();
+  Float_t cutsArrayDstoKKpi[14]={0.2,0.4,0.4,0.,0.,0.005,0.06,0.,0.,0.85,0.,0.1,0.1,0.1};
+  cutsDstoKKpi->SetCuts(14,cutsArrayDstoKKpi);
+  cutsDstoKKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsDstoKKpi(cutsDstoKKpi);
+  AliRDHFCutsLctopKpi *cutsLctopKpi = new AliRDHFCutsLctopKpi();
+  Float_t cutsArrayLctopKpi[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0,1e6};
+  cutsLctopKpi->SetCuts(12,cutsArrayLctopKpi);
+  cutsLctopKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsLctopKpi(cutsLctopKpi);
+  AliRDHFCutsD0toKpipipi *cutsD0toKpipipi = new AliRDHFCutsD0toKpipipi();
+  Float_t cutsArrayD0toKpipipi[9]={0.2,0.04,0.00,0.01,0.02,0.8,0.,0.1,0.};
+  cutsD0toKpipipi->SetCuts(9,cutsArrayD0toKpipipi);
+  cutsD0toKpipipi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0toKpipipi(cutsD0toKpipipi);
+  AliRDHFCutsD0toKpi *cutsD0fromDstar = new AliRDHFCutsD0toKpi();
+  Float_t cutsArrayD0fromDstar[9]={0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsD0fromDstar->SetCuts(9,cutsArrayD0fromDstar);
+  cutsD0fromDstar->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0fromDstar(cutsD0fromDstar);
+  // 
   vHF->SetD0toKpiCuts(0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.);
   vHF->SetBtoJPSICuts(0.350);
   vHF->SetDplusCuts(0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85);
index 2f49a7e476e51011ec398f0029a8333c4e4b687d..2415e18d70af62670076f24bada2a3cfcee78d04 100644 (file)
@@ -34,6 +34,42 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   trkFilterSoftPi->AddCuts(esdTrackCutsSoftPi);
   vHF->SetTrackFilterSoftPi(trkFilterSoftPi);
   //--- set cuts for candidates selection
+  AliRDHFCutsD0toKpi *cutsD0toKpi = new AliRDHFCutsD0toKpi();
+  Float_t cutsArrayD0toKpi[9]={0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsD0toKpi->SetCuts(9,cutsArrayD0toKpi);
+  cutsD0toKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0toKpi(cutsD0toKpi);
+  AliRDHFCutsJpsitoee *cutsJpsitoee = new AliRDHFCutsJpsitoee();
+  Float_t cutsArrayJpsitoee[9]={0.35,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsJpsitoee->SetCuts(9,cutsArrayJpsitoee);
+  cutsJpsitoee->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsJpsitoee(cutsJpsitoee);
+  AliRDHFCutsDplustoKpipi *cutsDplustoKpipi = new AliRDHFCutsDplustoKpipi();
+  Float_t cutsArrayDplustoKpipi[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0,1e6};
+  cutsDplustoKpipi->SetCuts(12,cutsArrayDplustoKpipi);
+  cutsDplustoKpipi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsDplustoKpipi(cutsDplustoKpipi);
+  AliRDHFCutsDstoKKpi *cutsDstoKKpi = new AliRDHFCutsDstoKKpi();
+  Float_t cutsArrayDstoKKpi[14]={0.2,0.4,0.4,0.,0.,0.005,0.06,0.,0.,0.85,0.,0.1,0.1,0.1};
+  cutsDstoKKpi->SetCuts(14,cutsArrayDstoKKpi);
+  cutsDstoKKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsDstoKKpi(cutsDstoKKpi);
+  AliRDHFCutsLctopKpi *cutsLctopKpi = new AliRDHFCutsLctopKpi();
+  Float_t cutsArrayLctopKpi[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0,1e6};
+  cutsLctopKpi->SetCuts(12,cutsArrayLctopKpi);
+  cutsLctopKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsLctopKpi(cutsLctopKpi);
+  AliRDHFCutsD0toKpipipi *cutsD0toKpipipi = new AliRDHFCutsD0toKpipipi();
+  Float_t cutsArrayD0toKpipipi[9]={0.2,0.04,0.00,0.01,0.02,0.8,0.,0.1,0.};
+  cutsD0toKpipipi->SetCuts(9,cutsArrayD0toKpipipi);
+  cutsD0toKpipipi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0toKpipipi(cutsD0toKpipipi);
+  AliRDHFCutsD0toKpi *cutsD0fromDstar = new AliRDHFCutsD0toKpi();
+  Float_t cutsArrayD0fromDstar[9]={0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsD0fromDstar->SetCuts(9,cutsArrayD0fromDstar);
+  cutsD0fromDstar->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0fromDstar(cutsD0fromDstar);
+  // 
   vHF->SetD0toKpiCuts(0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.);
   vHF->SetBtoJPSICuts(0.350);
   vHF->SetDplusCuts(0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85);
index de1b0b2faa47936f4026e20e7da61da9ad049b21..8909e7118f86c415754d2508347fe670ee74a602 100644 (file)
@@ -34,6 +34,42 @@ AliAnalysisVertexingHF* ConfigVertexingHF() {
   trkFilterSoftPi->AddCuts(esdTrackCutsSoftPi);
   vHF->SetTrackFilterSoftPi(trkFilterSoftPi);
   //--- set cuts for candidates selection
+  AliRDHFCutsD0toKpi *cutsD0toKpi = new AliRDHFCutsD0toKpi();
+  Float_t cutsArrayD0toKpi[9]={0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsD0toKpi->SetCuts(9,cutsArrayD0toKpi);
+  cutsD0toKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0toKpi(cutsD0toKpi);
+  AliRDHFCutsJpsitoee *cutsJpsitoee = new AliRDHFCutsJpsitoee();
+  Float_t cutsArrayJpsitoee[9]={0.35,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsJpsitoee->SetCuts(9,cutsArrayJpsitoee);
+  cutsJpsitoee->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsJpsitoee(cutsJpsitoee);
+  AliRDHFCutsDplustoKpipi *cutsDplustoKpipi = new AliRDHFCutsDplustoKpipi();
+  Float_t cutsArrayDplustoKpipi[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0,1e6};
+  cutsDplustoKpipi->SetCuts(12,cutsArrayDplustoKpipi);
+  cutsDplustoKpipi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsDplustoKpipi(cutsDplustoKpipi);
+  AliRDHFCutsDstoKKpi *cutsDstoKKpi = new AliRDHFCutsDstoKKpi();
+  Float_t cutsArrayDstoKKpi[14]={0.2,0.4,0.4,0.,0.,0.005,0.06,0.,0.,0.85,0.,0.1,0.1,0.1};
+  cutsDstoKKpi->SetCuts(14,cutsArrayDstoKKpi);
+  cutsDstoKKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsDstoKKpi(cutsDstoKKpi);
+  AliRDHFCutsLctopKpi *cutsLctopKpi = new AliRDHFCutsLctopKpi();
+  Float_t cutsArrayLctopKpi[12]={0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85,0,1e6};
+  cutsLctopKpi->SetCuts(12,cutsArrayLctopKpi);
+  cutsLctopKpi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsLctopKpi(cutsLctopKpi);
+  AliRDHFCutsD0toKpipipi *cutsD0toKpipipi = new AliRDHFCutsD0toKpipipi();
+  Float_t cutsArrayD0toKpipipi[9]={0.2,0.04,0.00,0.01,0.02,0.8,0.,0.1,0.};
+  cutsD0toKpipipi->SetCuts(9,cutsArrayD0toKpipipi);
+  cutsD0toKpipipi->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0toKpipipi(cutsD0toKpipipi);
+  AliRDHFCutsD0toKpi *cutsD0fromDstar = new AliRDHFCutsD0toKpi();
+  Float_t cutsArrayD0fromDstar[9]={0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.};
+  cutsD0fromDstar->SetCuts(9,cutsArrayD0fromDstar);
+  cutsD0fromDstar->AddTrackCuts(esdTrackCuts);
+  vHF->SetCutsD0fromDstar(cutsD0fromDstar);
+  // 
   vHF->SetD0toKpiCuts(0.3,999999.,1.1,0.,0.,999999.,999999.,999999.,0.);
   vHF->SetBtoJPSICuts(0.350);
   vHF->SetDplusCuts(0.2,0.4,0.4,0.,0.,0.01,0.06,0.02,0.,0.85);