#include <TClonesArray.h>
+#include "AliAnalysisManager.h"
+#include "AliAODHandler.h"
#include "AliAODEvent.h"
#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;
}
AliAODEvent *aodIn = dynamic_cast<AliAODEvent*> (InputEvent());
- // load D0->Kpi candidates
- TClonesArray *inputArrayD0toKpi =
- (TClonesArray*)aodIn->GetList()->FindObject("D0toKpi");
+ TClonesArray *inputArrayD0toKpi = 0;
+
+ if(!aodIn && AODEvent() && IsStandardAOD()) {
+ // In case there is an AOD handler writing a standard AOD, use the AOD
+ // event in memory rather than the input (ESD) event.
+ aodIn = dynamic_cast<AliAODEvent*> (AODEvent());
+ // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
+ // have to taken from the AOD event hold by the AliAODExtension
+ AliAODHandler* aodHandler = (AliAODHandler*)
+ ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
+ if(aodHandler->GetExtensions()) {
+ AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
+ AliAODEvent *aodFromExt = ext->GetAOD();
+ // load D0 candidates
+ inputArrayD0toKpi=(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
+ }
+ } else {
+ // load D0 candidates
+ inputArrayD0toKpi=(TClonesArray*)aodIn->GetList()->FindObject("D0toKpi");
+ }
+
if(!inputArrayD0toKpi) {
printf("AliAnalysisTaskSESelectHF::UserExec: D0toKpi branch not found!\n");
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=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(0)]);
- AliAODTrack *trk1=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(1)]);
- // this will be replaced by
- //AliAODTrack *trk0 = (AliAODTrack*)(dIn->GetSecondaryVtx()->GetDaughter(0));
+ AliAODTrack *trk0 = (AliAODTrack*)dIn->GetDaughter(0);
+ AliAODTrack *trk1 = (AliAODTrack*)dIn->GetDaughter(1);
+ if(!trk0 || !trk1) {
+ trk0=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(0)]);
+ trk1=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(1)]);
+ }
printf("pt of positive track: %f\n",trk0->Pt());
printf("pt of negative track: %f\n",trk1->Pt());
// HERE ONE COULD RECALCULATE THE VERTEX USING THE KF PACKAGE
// clone candidate for output AOD
AliAODVertex *v = new(verticesHFRef[iOutVerticesHF++])
AliAODVertex(*(dIn->GetSecondaryVtx()));
- Double_t px[2]={dIn->PxProng(0),dIn->PxProng(1)};
- Double_t py[2]={dIn->PyProng(0),dIn->PyProng(1)};
- Double_t pz[2]={dIn->PzProng(0),dIn->PzProng(1)};
- Double_t d0[2]={dIn->Getd0Prong(0),dIn->Getd0Prong(1)};
- Double_t d0err[2]={dIn->Getd0errProng(0),dIn->Getd0errProng(1)};
AliAODRecoDecayHF2Prong *dOut=new(aodD0toKpiRef[iOutD0toKpi++])
- AliAODRecoDecayHF2Prong(v,px,py,pz,d0,d0err,dIn->GetDCA());
+ AliAODRecoDecayHF2Prong(*dIn);
+ dOut->SetSecondaryVtx(v);
dOut->SetOwnPrimaryVtx((AliAODVertex*)((dIn->GetOwnPrimaryVtx())->Clone()));
v->SetParent(dOut);
}
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;
-}