#include "AliAODMCHeader.h"
#include "AliAODMCParticle.h"
#include "AliAODRecoDecayHF2Prong.h"
+#include "AliAnalysisvertexingHF.h"
#include "AliAnalysisTaskSE.h"
#include "AliAnalysisTaskSECompareHF.h"
AliAnalysisTaskSE(),
fOutput(0),
fNtupleD0Cmp(0),
-fHistMass(0)
+fHistMass(0),
+fVHF(0)
{
// Default constructor
- SetD0toKpiCuts();
// Output slot #1 writes into a TList container
DefineOutput(1,TList::Class()); //My private output
AliAnalysisTaskSE(name),
fOutput(0),
fNtupleD0Cmp(0),
-fHistMass(0)
+fHistMass(0),
+fVHF(0)
{
// Default constructor
- SetD0toKpiCuts();
// Output slot #1 writes into a TList container
DefineOutput(1,TList::Class()); //My private output
delete fOutput;
fOutput = 0;
}
+ if (fVHF) {
+ delete fVHF;
+ fVHF = 0;
+ }
}
//________________________________________________________________________
if(fDebug > 1) printf("AnalysisTaskSECompareHF::Init() \n");
+ gROOT->LoadMacro("ConfigVertexingHF.C");
+
+ fVHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
+ fVHF->PrintStatus();
+
return;
}
unsetvtx=kTRUE;
}
Int_t okD0=0,okD0bar=0;
- if(d->SelectD0(fD0toKpiCuts,okD0,okD0bar)) {
+ if(d->SelectD0(fVHF->GetD0toKpiCuts(),okD0,okD0bar)) {
// get daughter AOD tracks
AliAODTrack *trk0 = (AliAODTrack*)d->GetDaughter(0);
AliAODTrack *trk1 = (AliAODTrack*)d->GetDaughter(1);
if(labD0daugh0>=0 && labD0daugh1>=0 && labD0daugh0==labD0daugh1) {
AliAODMCParticle *partD0 = (AliAODMCParticle*)mcArray->At(labD0daugh0);
- pdgD0 = partD0->GetPdgCode();
- Double_t invmass = (pdgD0==421 ? d->InvMassD0() : d->InvMassD0bar());
- fHistMass->Fill(invmass);
+ // check that the D0 decays in 2 prongs
+ if (TMath::Abs(partD0->GetDaughter(1)-partD0->GetDaughter(0))==1) {
+
+ pdgD0 = partD0->GetPdgCode();
+ Double_t invmass = (pdgD0==421 ? d->InvMassD0() : d->InvMassD0bar());
+ fHistMass->Fill(invmass);
- // Post the data already here
- PostData(1,fOutput);
+ // Post the data already here
+ PostData(1,fOutput);
- fNtupleD0Cmp->Fill(pdgD0,d->Xv(),partD0->Xv(),d->Pt(),partD0->Pt());
+ fNtupleD0Cmp->Fill(pdgD0,d->Xv(),partD0->Xv(),d->Pt(),partD0->Pt());
+ }
}
return;
}
-//________________________________________________________________________
-void AliAnalysisTaskSECompareHF::SetD0toKpiCuts(Double_t cut0,Double_t cut1,
- Double_t cut2,Double_t cut3,Double_t cut4,
- Double_t cut5,Double_t cut6,
- Double_t cut7,Double_t cut8)
-{
- // Set the cuts for D0 selection
- // cuts[0] = inv. mass half width [GeV]
- // cuts[1] = dca [cm]
- // cuts[2] = cosThetaStar
- // cuts[3] = pTK [GeV/c]
- // cuts[4] = pTPi [GeV/c]
- // cuts[5] = d0K [cm] upper limit!
- // cuts[6] = d0Pi [cm] upper limit!
- // cuts[7] = d0d0 [cm^2]
- // cuts[8] = cosThetaPoint
-
- fD0toKpiCuts[0] = cut0;
- fD0toKpiCuts[1] = cut1;
- fD0toKpiCuts[2] = cut2;
- fD0toKpiCuts[3] = cut3;
- fD0toKpiCuts[4] = cut4;
- fD0toKpiCuts[5] = cut5;
- fD0toKpiCuts[6] = cut6;
- fD0toKpiCuts[7] = cut7;
- fD0toKpiCuts[8] = cut8;
-
- return;
-}
-
-//________________________________________________________________________
-void AliAnalysisTaskSECompareHF::SetD0toKpiCuts(const Double_t cuts[9])
-{
- // Set the cuts for D0 selection
- // cuts[0] = inv. mass half width [GeV]
- // cuts[1] = dca [cm]
- // cuts[2] = cosThetaStar
- // cuts[3] = pTK [GeV/c]
- // cuts[4] = pTPi [GeV/c]
- // cuts[5] = d0K [cm] upper limit!
- // cuts[6] = d0Pi [cm] upper limit!
- // cuts[7] = d0d0 [cm^2]
- // cuts[8] = cosThetaPoint
-
- for(Int_t i=0; i<9; i++) fD0toKpiCuts[i] = cuts[i];
-
- return;
-}
// Class AliAnalysisTaskSECompareHF
// AliAnalysisTaskSE for the comparison of heavy-flavour decay candidates
// to MC truth (kinematics stored in the AOD)
-// Author: A.Dainese, andrea.dainese@lnl.infn.it
+// Author: A.Dainese, andrea.dainese@ln.infn.it
//*************************************************************************
+#include <TROOT.h>
+#include <TSystem.h>
#include <TNtuple.h>
#include <TH1F.h>
#include "AliAnalysisTaskSE.h"
+#include "AliAnalysisVertexingHF.h"
class AliAnalysisTaskSECompareHF : public AliAnalysisTaskSE
{
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *option);
- 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.,
- Double_t cut7=100000000.,Double_t cut8=-1.1);
- // cuts[0] = inv. mass half width [GeV]
- // cuts[1] = dca [cm]
- // cuts[2] = cosThetaStar
- // cuts[3] = pTK [GeV/c]
- // cuts[4] = pTPi [GeV/c]
- // cuts[5] = d0K [cm] upper limit!
- // cuts[6] = d0Pi [cm] upper limit!
- // cuts[7] = d0d0 [cm^2]
- // cuts[8] = cosThetaPoint
- void SetD0toKpiCuts(const Double_t cuts[9]);
private:
TList *fOutput; //! list send on output slot 0
TNtuple *fNtupleD0Cmp; // output ntuple
TH1F *fHistMass; // output histogram
- Double_t fD0toKpiCuts[9]; // cuts for D0->Kpi selection
+ AliAnalysisVertexingHF *fVHF; // Vertexer heavy flavour (used to pass the cuts)
- ClassDef(AliAnalysisTaskSECompareHF,1); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates
+ ClassDef(AliAnalysisTaskSECompareHF,2); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates
};
#endif
// Aanalysis task \r
AliAnalysisTaskSECompareHF *hfTask = new AliAnalysisTaskSECompareHF("CompareHFAnalysis");\r
hfTask->SetDebugLevel(2);\r
- Double_t cutsD0[9]=\r
- // cutsD0[0] = inv. mass half width [GeV]\r
- // cutsD0[1] = dca [cm]\r
- // cutsD0[2] = cosThetaStar\r
- // cutsD0[3] = pTK [GeV/c]\r
- // cutsD0[4] = pTPi [GeV/c]\r
- // cutsD0[5] = d0K [cm] upper limit!\r
- // cutsD0[6] = d0Pi [cm] upper limit!\r
- // cutsD0[7] = d0d0 [cm^2]\r
- // cutsD0[8] = cosThetaPoint\r
- {1,\r
- 100000.,\r
- 1.1,\r
- 0.,\r
- 0.,\r
- 100000.,\r
- 100000.,\r
- 100000000.,\r
- -0.9}; \r
- hfTask->SetD0toKpiCuts(cutsD0);\r
- \r
mgr->AddTask(hfTask);\r
\r
//\r
#include "AliAODVertex.h"
#include "AliAODTrack.h"
#include "AliAODRecoDecayHF2Prong.h"
+#include "AliAnalysisVertexingHF.h"
#include "AliAnalysisTaskSE.h"
#include "AliAnalysisTaskSESelectHF.h"
AliAnalysisTaskSESelectHF::AliAnalysisTaskSESelectHF():
AliAnalysisTaskSE(),
fVerticesHFTClArr(0),
-fD0toKpiTClArr(0)
+fD0toKpiTClArr(0),
+fVHF(0)
{
// Default constructor
- SetD0toKpiCuts();
}
//________________________________________________________________________
AliAnalysisTaskSESelectHF::AliAnalysisTaskSESelectHF(const char *name):
AliAnalysisTaskSE(name),
fVerticesHFTClArr(0),
-fD0toKpiTClArr(0)
+fD0toKpiTClArr(0),
+fVHF(0)
{
// Default constructor
- SetD0toKpiCuts();
}
//________________________________________________________________________
AliAnalysisTaskSESelectHF::~AliAnalysisTaskSESelectHF()
{
// Destructor
+
+ if (fVHF) {
+ delete fVHF;
+ fVHF = 0;
+ }
+
}
//________________________________________________________________________
if(fDebug > 1) printf("AnalysisTaskSESelectHF::Init() \n");
+ gROOT->LoadMacro("ConfigVertexingHF.C");
+
+ fVHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
+ fVHF->PrintStatus();
+
return;
}
unsetvtx=kTRUE;
}
Int_t okD0=0,okD0bar=0;
- if(dIn->SelectD0(fD0toKpiCuts,okD0,okD0bar)) {
+ if(dIn->SelectD0(fVHF->GetD0toKpiCuts(),okD0,okD0bar)) {
// get daughter AOD tracks
AliAODTrack *trk0 = (AliAODTrack*)dIn->GetDaughter(0);
AliAODTrack *trk1 = (AliAODTrack*)dIn->GetDaughter(1);
if(fDebug > 1) printf("AnalysisTaskSESelectHF: Terminate() \n");
}
-//________________________________________________________________________
-void AliAnalysisTaskSESelectHF::SetD0toKpiCuts(Double_t cut0,Double_t cut1,
- Double_t cut2,Double_t cut3,Double_t cut4,
- Double_t cut5,Double_t cut6,
- Double_t cut7,Double_t cut8)
-{
- // Set the cuts for D0 selection
- // cuts[0] = inv. mass half width [GeV]
- // cuts[1] = dca [cm]
- // cuts[2] = cosThetaStar
- // cuts[3] = pTK [GeV/c]
- // cuts[4] = pTPi [GeV/c]
- // cuts[5] = d0K [cm] upper limit!
- // cuts[6] = d0Pi [cm] upper limit!
- // cuts[7] = d0d0 [cm^2]
- // cuts[8] = cosThetaPoint
-
- fD0toKpiCuts[0] = cut0;
- fD0toKpiCuts[1] = cut1;
- fD0toKpiCuts[2] = cut2;
- fD0toKpiCuts[3] = cut3;
- fD0toKpiCuts[4] = cut4;
- fD0toKpiCuts[5] = cut5;
- fD0toKpiCuts[6] = cut6;
- fD0toKpiCuts[7] = cut7;
- fD0toKpiCuts[8] = cut8;
-
- return;
-}
-
-//________________________________________________________________________
-void AliAnalysisTaskSESelectHF::SetD0toKpiCuts(const Double_t cuts[9])
-{
- // Set the cuts for D0 selection
- // cuts[0] = inv. mass half width [GeV]
- // cuts[1] = dca [cm]
- // cuts[2] = cosThetaStar
- // cuts[3] = pTK [GeV/c]
- // cuts[4] = pTPi [GeV/c]
- // cuts[5] = d0K [cm] upper limit!
- // cuts[6] = d0Pi [cm] upper limit!
- // cuts[7] = d0d0 [cm^2]
- // cuts[8] = cosThetaPoint
-
- for(Int_t i=0; i<9; i++) fD0toKpiCuts[i] = cuts[i];
-
- return;
-}
// Author: A.Dainese, andrea.dainese@lnl.infn.it
//*************************************************************************
-
+#include <TROOT.h>
+#include <TSystem.h>
#include <TClonesArray.h>
#include "AliAnalysisTaskSE.h"
virtual void LocalInit() {Init();}
virtual void UserExec(Option_t *option);
virtual void Terminate(Option_t *option);
-
- 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.,
- Double_t cut7=100000000.,Double_t cut8=-1.1);
- // cuts[0] = inv. mass half width [GeV]
- // cuts[1] = dca [cm]
- // cuts[2] = cosThetaStar
- // cuts[3] = pTK [GeV/c]
- // cuts[4] = pTPi [GeV/c]
- // cuts[5] = d0K [cm] upper limit!
- // cuts[6] = d0Pi [cm] upper limit!
- // cuts[7] = d0d0 [cm^2]
- // cuts[8] = cosThetaPoint
- void SetD0toKpiCuts(const Double_t cuts[9]);
private:
AliAnalysisTaskSESelectHF& operator=(const AliAnalysisTaskSESelectHF& source);
TClonesArray *fVerticesHFTClArr; // Array of heavy-flavour vertices
TClonesArray *fD0toKpiTClArr; // Array of D0->Kpi
- Double_t fD0toKpiCuts[9]; // cuts for D0->Kpi selection
+ AliAnalysisVertexingHF *fVHF; // analysis (used to pass the cuts)
- ClassDef(AliAnalysisTaskSESelectHF,1); // AliAnalysisTaskSE for the reconstruction of heavy-flavour decay candidates
+ ClassDef(AliAnalysisTaskSESelectHF,2); // AliAnalysisTaskSE for the reconstruction of heavy-flavour decay candidates
};
#endif
// Aanalysis task \r
AliAnalysisTaskSESelectHF *hfTask = new AliAnalysisTaskSESelectHF("SelectHFAnalysis");\r
hfTask->SetDebugLevel(2);\r
- Double_t cutsD0[9]=\r
- // cutsD0[0] = inv. mass half width [GeV]\r
- // cutsD0[1] = dca [cm]\r
- // cutsD0[2] = cosThetaStar\r
- // cutsD0[3] = pTK [GeV/c]\r
- // cutsD0[4] = pTPi [GeV/c]\r
- // cutsD0[5] = d0K [cm] upper limit!\r
- // cutsD0[6] = d0Pi [cm] upper limit!\r
- // cutsD0[7] = d0d0 [cm^2]\r
- // cutsD0[8] = cosThetaPoint\r
- {1,\r
- 100000.,\r
- 1.1,\r
- 0.,\r
- 0.,\r
- 100000.,\r
- 100000.,\r
- 100000000.,\r
- -0.9}; \r
- hfTask->SetD0toKpiCuts(cutsD0);\r
- \r
mgr->AddTask(hfTask);\r
\r
//\r