]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG3/vertexingHF/AliAnalysisTaskSEVertexingHF.cxx
Updates for proper treatment of fQuality flag in centrality selection and for usage...
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliAnalysisTaskSEVertexingHF.cxx
CommitLineData
699a38d6 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
27de2dfb 16/* $Id$ */
17
699a38d6 18/////////////////////////////////////////////////////////////
19//
20// AliAnalysisTaskSE for the reconstruction of heavy flavor
21// decays, using the class AliAnalysisVertexingHF.
22//
23// Author: A.Dainese, andrea.dainese@lnl.infn.it
24/////////////////////////////////////////////////////////////
25
26#include <TROOT.h>
27#include <TSystem.h>
28#include <TClonesArray.h>
a9b75906 29#include <TList.h>
30#include <TString.h>
699a38d6 31
dcb444c9 32#include "AliVEvent.h"
699a38d6 33#include "AliAODEvent.h"
34#include "AliESDEvent.h"
35#include "AliAnalysisVertexingHF.h"
36#include "AliAnalysisTaskSE.h"
6ed0d659 37#include "AliAnalysisManager.h"
699a38d6 38#include "AliAnalysisTaskSEVertexingHF.h"
39
4569a83a 40#include "AliESDUtils.h"
41#include "AliAODHFUtil.h"
42
43
699a38d6 44ClassImp(AliAnalysisTaskSEVertexingHF)
45
46
47//________________________________________________________________________
48AliAnalysisTaskSEVertexingHF::AliAnalysisTaskSEVertexingHF():
49AliAnalysisTaskSE(),
50fVHF(0),
a9b75906 51fListOfCuts(0),
52fDeltaAODFileName("AliAOD.VertexingHF.root"),
699a38d6 53fVerticesHFTClArr(0),
54fD0toKpiTClArr(0),
55fJPSItoEleTClArr(0),
56fCharm3ProngTClArr(0),
2ff20727 57fCharm4ProngTClArr(0),
dc963de9 58fDstarTClArr(0),
a07ad8e0 59fCascadesTClArr(0),
423fb9ae 60fLikeSign2ProngTClArr(0),
4569a83a 61fLikeSign3ProngTClArr(0),
62fHFUtilInfo(0)
699a38d6 63{
64 // Default constructor
65}
66
67//________________________________________________________________________
68AliAnalysisTaskSEVertexingHF::AliAnalysisTaskSEVertexingHF(const char *name):
69AliAnalysisTaskSE(name),
70fVHF(0),
a9b75906 71fListOfCuts(0),
72fDeltaAODFileName("AliAOD.VertexingHF.root"),
699a38d6 73fVerticesHFTClArr(0),
74fD0toKpiTClArr(0),
75fJPSItoEleTClArr(0),
76fCharm3ProngTClArr(0),
2ff20727 77fCharm4ProngTClArr(0),
dc963de9 78fDstarTClArr(0),
a07ad8e0 79fCascadesTClArr(0),
423fb9ae 80fLikeSign2ProngTClArr(0),
4569a83a 81fLikeSign3ProngTClArr(0),
82fHFUtilInfo(0)
699a38d6 83{
a9b75906 84 // Standard constructor
85
86 DefineOutput(1,TList::Class()); // analysis cuts
699a38d6 87}
88
89//________________________________________________________________________
90AliAnalysisTaskSEVertexingHF::~AliAnalysisTaskSEVertexingHF()
91{
92 // Destructor
a9b75906 93
94 if(fListOfCuts) {
95 delete fListOfCuts;
96 fListOfCuts=NULL;
97 }
98
699a38d6 99}
100
101//________________________________________________________________________
102void AliAnalysisTaskSEVertexingHF::Init()
103{
104 // Initialization
105 // Instanciates vHF and loads its parameters
106
107 if(fDebug > 1) printf("AnalysisTaskSEVertexingHF::Init() \n");
108
423fb9ae 109 if(gROOT->LoadMacro("ConfigVertexingHF.C")) {
110 printf("AnalysisTaskSEVertexingHF::Init() \n Using $ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C\n");
111 gROOT->LoadMacro("$ALICE_ROOT/PWG3/vertexingHF/ConfigVertexingHF.C");
112 }
699a38d6 113
114 fVHF = (AliAnalysisVertexingHF*)gROOT->ProcessLine("ConfigVertexingHF()");
115 fVHF->PrintStatus();
a9b75906 116
117
118 // write the objects AliRDHFCuts to a list to store in the output
119
120 fListOfCuts = fVHF->FillListOfCuts();
121
122 PostData(1,fListOfCuts);
123
124 AliAnalysisManager::GetAnalysisManager()->RegisterExtraFile(fDeltaAODFileName.Data());
699a38d6 125
126 return;
127}
128
129//________________________________________________________________________
130void AliAnalysisTaskSEVertexingHF::UserCreateOutputObjects()
131{
132 // Create the output container
133 //
134 if(fDebug > 1) printf("AnalysisTaskSEVertexingHF::UserCreateOutPutData() \n");
0392e556 135 // Support both the case when the AOD + deltaAOD are produced in an ESD
136 // analysis or if the deltaAOD is produced on an analysis on AOD's. (A.G. 27/04/09)
5a0b85ff 137 if(!AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()) {
138 Fatal("UserCreateOutputObjects", "This task needs an AOD handler");
139 return;
0392e556 140 }
a9b75906 141 TString filename = fDeltaAODFileName;
5a0b85ff 142 // When running on standard AOD to produce deltas, IsStandardAOD is never set,
143 // If AODEvent is NULL, new branches have to be added to the new file(s) (A.G. 15/01/10)
144 if(!IsStandardAOD() && AODEvent()) filename = "";
699a38d6 145 if(!fVHF) {
146 printf("AnalysisTaskSEVertexingHF::UserCreateOutPutData() \n ERROR! no fvHF!\n");
147 return;
148 }
149
150 fVerticesHFTClArr = new TClonesArray("AliAODVertex", 0);
151 fVerticesHFTClArr->SetName("VerticesHF");
0392e556 152 AddAODBranch("TClonesArray", &fVerticesHFTClArr, filename);
699a38d6 153
dc963de9 154 if(fVHF->GetD0toKpi()) {
699a38d6 155 fD0toKpiTClArr = new TClonesArray("AliAODRecoDecayHF2Prong", 0);
156 fD0toKpiTClArr->SetName("D0toKpi");
0392e556 157 AddAODBranch("TClonesArray", &fD0toKpiTClArr, filename);
699a38d6 158 }
159
160 if(fVHF->GetJPSItoEle()) {
161 fJPSItoEleTClArr = new TClonesArray("AliAODRecoDecayHF2Prong", 0);
162 fJPSItoEleTClArr->SetName("JPSItoEle");
0392e556 163 AddAODBranch("TClonesArray", &fJPSItoEleTClArr, filename);
699a38d6 164 }
165
166 if(fVHF->Get3Prong()) {
167 fCharm3ProngTClArr = new TClonesArray("AliAODRecoDecayHF3Prong", 0);
168 fCharm3ProngTClArr->SetName("Charm3Prong");
0392e556 169 AddAODBranch("TClonesArray", &fCharm3ProngTClArr, filename);
699a38d6 170 }
171
172 if(fVHF->Get4Prong()) {
173 fCharm4ProngTClArr = new TClonesArray("AliAODRecoDecayHF4Prong", 0);
174 fCharm4ProngTClArr->SetName("Charm4Prong");
0392e556 175 AddAODBranch("TClonesArray", &fCharm4ProngTClArr, filename);
699a38d6 176 }
177
2ff20727 178 if(fVHF->GetDstar()) {
179 fDstarTClArr = new TClonesArray("AliAODRecoCascadeHF", 0);
180 fDstarTClArr->SetName("Dstar");
0392e556 181 AddAODBranch("TClonesArray", &fDstarTClArr, filename);
2ff20727 182 }
183
a07ad8e0 184 if(fVHF->GetCascades()){
185 fCascadesTClArr = new TClonesArray("AliAODRecoCascadeHF", 0);
186 fCascadesTClArr->SetName("CascadesHF");
187 AddAODBranch("TClonesArray", &fCascadesTClArr, filename);
188 }
189
dc963de9 190 if(fVHF->GetLikeSign()) {
423fb9ae 191 fLikeSign2ProngTClArr = new TClonesArray("AliAODRecoDecayHF2Prong", 0);
192 fLikeSign2ProngTClArr->SetName("LikeSign2Prong");
0392e556 193 AddAODBranch("TClonesArray", &fLikeSign2ProngTClArr, filename);
423fb9ae 194 }
195
196 if(fVHF->GetLikeSign() && fVHF->Get3Prong()) {
197 fLikeSign3ProngTClArr = new TClonesArray("AliAODRecoDecayHF3Prong", 0);
198 fLikeSign3ProngTClArr->SetName("LikeSign3Prong");
0392e556 199 AddAODBranch("TClonesArray", &fLikeSign3ProngTClArr, filename);
dc963de9 200 }
201
4569a83a 202 //---Way to pass information temporarily not available in AOD---
203 // no if() {
204 fHFUtilInfo = new AliAODHFUtil("fHFUtilInfoC");
205 fHFUtilInfo->SetName("fHFUtilInfo");
206 AddAODBranch( "AliAODHFUtil", &fHFUtilInfo, filename);
207 // }
208 //--------------------------------------------------------------
209
699a38d6 210 return;
211}
212
213//________________________________________________________________________
214void AliAnalysisTaskSEVertexingHF::UserExec(Option_t */*option*/)
215{
216 // Execute analysis for current event:
217 // heavy flavor vertexing
218
dcb444c9 219 AliVEvent *event = dynamic_cast<AliVEvent*> (InputEvent());
0392e556 220 // In case there is an AOD handler writing a standard AOD, use the AOD
221 // event in memory rather than the input (ESD) event. (A.G. 27/04/09)
222 if (AODEvent() && IsStandardAOD()) event = dynamic_cast<AliVEvent*> (AODEvent());
699a38d6 223
224 // heavy flavor vertexing
dcb444c9 225 fVHF->FindCandidates(event,
226 fVerticesHFTClArr,
227 fD0toKpiTClArr,
228 fJPSItoEleTClArr,
229 fCharm3ProngTClArr,
2ff20727 230 fCharm4ProngTClArr,
dc963de9 231 fDstarTClArr,
a07ad8e0 232 fCascadesTClArr,
423fb9ae 233 fLikeSign2ProngTClArr,
234 fLikeSign3ProngTClArr);
699a38d6 235
4569a83a 236 //---Way to pass information temporarily not available in AOD---
237 AliESDEvent *eventE = dynamic_cast<AliESDEvent*> (InputEvent());
238 if(eventE) {
239 Float_t *vChCorr = new Float_t[64];
240 Float_t dummy;
56bf3066 241 AliESDUtils::GetCorrV0(eventE,dummy,NULL,vChCorr);
4569a83a 242 fHFUtilInfo->SetVZERO( vChCorr );
fd20854c 243 delete [] vChCorr;
4569a83a 244 }
245 //--------------------------------------------------------------
246
699a38d6 247 return;
248}
249
250//________________________________________________________________________
251void AliAnalysisTaskSEVertexingHF::Terminate(Option_t */*option*/)
252{
253 // Terminate analysis
254 //
255 if(fDebug > 1) printf("AnalysisTaskSEVertexingHF: Terminate() \n");
256}