]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/vertexingHF/AliAnalysisTaskSESelectHF.cxx
Update (Zaida)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSESelectHF.cxx
index d61189a91678e4f99f76e72500a80161b56346f5..053f9680b6c00793aaa6ea151e4013dcbc027929 100644 (file)
 
 #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"
 
@@ -37,26 +40,32 @@ ClassImp(AliAnalysisTaskSESelectHF)
 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;
+  }
+
 }  
 
 //________________________________________________________________________
@@ -66,6 +75,11 @@ void AliAnalysisTaskSESelectHF::Init()
 
   if(fDebug > 1) printf("AnalysisTaskSESelectHF::Init() \n");
 
+  gROOT->LoadMacro("ConfigVertexingHF.C");
+
+  fVHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");  
+  fVHF->PrintStatus();
+
   return;
 }
 
@@ -95,9 +109,27 @@ void AliAnalysisTaskSESelectHF::UserExec(Option_t */*option*/)
   
   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;
@@ -138,12 +170,14 @@ void AliAnalysisTaskSESelectHF::UserExec(Option_t */*option*/)
       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
@@ -151,13 +185,9 @@ void AliAnalysisTaskSESelectHF::UserExec(Option_t */*option*/)
       // 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);
     }
@@ -178,51 +208,3 @@ void AliAnalysisTaskSESelectHF::Terminate(Option_t */*option*/)
   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;
-}