]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliAnalysisTaskSESelectHF.cxx
Warning fixed
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSESelectHF.cxx
CommitLineData
0de9de87 1/**************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16/////////////////////////////////////////////////////////////
17//
18// AliAnalysisTaskSE for the selection of heavy flavor
19// decay candidates and creation a stand-alone AOD.
20//
21// Author: A.Dainese, andrea.dainese@lnl.infn.it
22/////////////////////////////////////////////////////////////
23
24#include <TClonesArray.h>
25
26#include "AliAODEvent.h"
27#include "AliAODVertex.h"
28#include "AliAODTrack.h"
29#include "AliAODRecoDecayHF2Prong.h"
12bfc069 30#include "AliAnalysisVertexingHF.h"
0de9de87 31#include "AliAnalysisTaskSE.h"
32#include "AliAnalysisTaskSESelectHF.h"
33
34ClassImp(AliAnalysisTaskSESelectHF)
35
36
37//________________________________________________________________________
38AliAnalysisTaskSESelectHF::AliAnalysisTaskSESelectHF():
39AliAnalysisTaskSE(),
40fVerticesHFTClArr(0),
12bfc069 41fD0toKpiTClArr(0),
42fVHF(0)
0de9de87 43{
44 // Default constructor
0de9de87 45}
46
47//________________________________________________________________________
48AliAnalysisTaskSESelectHF::AliAnalysisTaskSESelectHF(const char *name):
49AliAnalysisTaskSE(name),
50fVerticesHFTClArr(0),
12bfc069 51fD0toKpiTClArr(0),
52fVHF(0)
0de9de87 53{
54 // Default constructor
0de9de87 55}
56
57//________________________________________________________________________
58AliAnalysisTaskSESelectHF::~AliAnalysisTaskSESelectHF()
59{
60 // Destructor
12bfc069 61
62 if (fVHF) {
63 delete fVHF;
64 fVHF = 0;
65 }
66
0de9de87 67}
68
69//________________________________________________________________________
70void AliAnalysisTaskSESelectHF::Init()
71{
72 // Initialization
73
74 if(fDebug > 1) printf("AnalysisTaskSESelectHF::Init() \n");
75
12bfc069 76 gROOT->LoadMacro("ConfigVertexingHF.C");
77
78 fVHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
79 fVHF->PrintStatus();
80
0de9de87 81 return;
82}
83
84//________________________________________________________________________
85void AliAnalysisTaskSESelectHF::UserCreateOutputObjects()
86{
87 // Create the output container
88 //
89 if(fDebug > 1) printf("AnalysisTaskSESelectHF::UserCreateOutputObjects() \n");
90
91 fVerticesHFTClArr = new TClonesArray("AliAODVertex", 0);
92 fVerticesHFTClArr->SetName("VerticesHF");
080ac6fd 93 AddAODBranch("TClonesArray", &fVerticesHFTClArr);
0de9de87 94
95 fD0toKpiTClArr = new TClonesArray("AliAODRecoDecayHF2Prong", 0);
96 fD0toKpiTClArr->SetName("D0toKpi");
080ac6fd 97 AddAODBranch("TClonesArray", &fD0toKpiTClArr);
0de9de87 98
99 return;
100}
101
102//________________________________________________________________________
103void AliAnalysisTaskSESelectHF::UserExec(Option_t */*option*/)
104{
105 // Execute analysis for current event:
106 // heavy flavor candidates selection and histograms
107
108 AliAODEvent *aodIn = dynamic_cast<AliAODEvent*> (InputEvent());
109
110 // load D0->Kpi candidates
111 TClonesArray *inputArrayD0toKpi =
112 (TClonesArray*)aodIn->GetList()->FindObject("D0toKpi");
0bd2832b 113 if(!inputArrayD0toKpi) {
114 printf("AliAnalysisTaskSESelectHF::UserExec: D0toKpi branch not found!\n");
115 return;
116 }
0de9de87 117
118 //print event info
0bd2832b 119 //aodIn->GetHeader()->Print();
0de9de87 120
121 // primary vertex
122 AliAODVertex *vtx1 = (AliAODVertex*)aodIn->GetPrimaryVertex();
0bd2832b 123 //vtx1->Print();
0de9de87 124
125 // make trkIDtoEntry register (temporary)
126 Int_t trkIDtoEntry[100000];
127 for(Int_t it=0;it<aodIn->GetNumberOfTracks();it++) {
128 AliAODTrack *track = aodIn->GetTrack(it);
129 trkIDtoEntry[track->GetID()]=it;
130 }
131
132 Int_t iOutVerticesHF=0,iOutD0toKpi=0;
133 fVerticesHFTClArr->Delete();
134 iOutVerticesHF = fVerticesHFTClArr->GetEntriesFast();
135 TClonesArray &verticesHFRef = *fVerticesHFTClArr;
136 fD0toKpiTClArr->Delete();
137 iOutD0toKpi = fD0toKpiTClArr->GetEntriesFast();
138 TClonesArray &aodD0toKpiRef = *fD0toKpiTClArr;
139
140
141 // loop over D0->Kpi candidates
142 Int_t nInD0toKpi = inputArrayD0toKpi->GetEntriesFast();
143 printf("Number of D0->Kpi: %d\n",nInD0toKpi);
144
145 for (Int_t iD0toKpi = 0; iD0toKpi < nInD0toKpi; iD0toKpi++) {
146 AliAODRecoDecayHF2Prong *dIn = (AliAODRecoDecayHF2Prong*)inputArrayD0toKpi->UncheckedAt(iD0toKpi);
147 Bool_t unsetvtx=kFALSE;
148 if(!dIn->GetOwnPrimaryVtx()) {
149 dIn->SetOwnPrimaryVtx(vtx1); // needed to compute all variables
150 unsetvtx=kTRUE;
151 }
152 Int_t okD0=0,okD0bar=0;
12bfc069 153 if(dIn->SelectD0(fVHF->GetD0toKpiCuts(),okD0,okD0bar)) {
0de9de87 154 // get daughter AOD tracks
2a57ff58 155 AliAODTrack *trk0 = (AliAODTrack*)dIn->GetDaughter(0);
156 AliAODTrack *trk1 = (AliAODTrack*)dIn->GetDaughter(1);
157 if(!trk0 || !trk1) {
158 trk0=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(0)]);
159 trk1=aodIn->GetTrack(trkIDtoEntry[dIn->GetProngID(1)]);
160 }
0de9de87 161 printf("pt of positive track: %f\n",trk0->Pt());
162 printf("pt of negative track: %f\n",trk1->Pt());
0bd2832b 163 // HERE ONE COULD RECALCULATE THE VERTEX USING THE KF PACKAGE
0de9de87 164
165 // clone candidate for output AOD
166 AliAODVertex *v = new(verticesHFRef[iOutVerticesHF++])
167 AliAODVertex(*(dIn->GetSecondaryVtx()));
0de9de87 168 AliAODRecoDecayHF2Prong *dOut=new(aodD0toKpiRef[iOutD0toKpi++])
2a57ff58 169 AliAODRecoDecayHF2Prong(*dIn);
170 dOut->SetSecondaryVtx(v);
0bd2832b 171 dOut->SetOwnPrimaryVtx((AliAODVertex*)((dIn->GetOwnPrimaryVtx())->Clone()));
b0ebe389 172 v->SetParent(dOut);
0de9de87 173 }
174 if(unsetvtx) dIn->UnsetOwnPrimaryVtx();
175 } // end loop on D0->Kpi
176
0bd2832b 177 printf("Number of selected D0->Kpi: %d\n",iOutD0toKpi);
178
0de9de87 179
180 return;
181}
182
183//________________________________________________________________________
184void AliAnalysisTaskSESelectHF::Terminate(Option_t */*option*/)
185{
186 // Terminate analysis
187 //
188 if(fDebug > 1) printf("AnalysisTaskSESelectHF: Terminate() \n");
189}
190