]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG/muon/AliAnalysisTaskSEMuonsHF.cxx
fixing the error message
[u/mrichter/AliRoot.git] / PWG / muon / AliAnalysisTaskSEMuonsHF.cxx
CommitLineData
fd1d0cb9 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
fd1d0cb9 18/////////////////////////////////////////////////////////////
19//
20// AliAnalysisTaskSE for the single muon and dimuon from HF analysis,
21// using the classes AliMuonsHFHeader,
22// AliMuonInfoStoreRD,
23// AliDimuInfoStoreRD,
24// AliMuonInfoStoreMC,
25// AliDimuInfoStoreMC.
26//
27// Author: X-M. Zhang, zhang@clermont.in2p3.fr
28// zhangxm@iopp.ccnu.edu.cn
29/////////////////////////////////////////////////////////////
30
31#include <TList.h>
4292b3b6 32#include <TClonesArray.h>
33
4292b3b6 34#include "AliESDEvent.h"
35#include "AliAODEvent.h"
9bcac085 36#include "AliESDHeader.h"
37#include "AliAODHeader.h"
4292b3b6 38#include "AliESDMuonTrack.h"
39#include "AliAODTrack.h"
9bcac085 40#include "AliCentrality.h"
4292b3b6 41#include "AliMuonsHFHeader.h"
fd1d0cb9 42#include "AliMuonInfoStoreRD.h"
43#include "AliMuonInfoStoreMC.h"
44#include "AliDimuInfoStoreRD.h"
45#include "AliDimuInfoStoreMC.h"
6709e09d 46#include "AliAnalysisManager.h"
9bcac085 47#include "AliInputEventHandler.h"
48#include "AliAnalysisTaskSEMuonsHF.h"
4292b3b6 49
50ClassImp(AliAnalysisTaskSEMuonsHF)
51
52//_____________________________________________________________________________
53AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF() :
54AliAnalysisTaskSE(),
55fAnaMode(0),
56fIsOutputTree(kFALSE),
1195bb6f 57fIsMC(kFALSE),
4292b3b6 58fHeader(0),
fd1d0cb9 59fMuonClArr(0),
60fDimuClArr(0),
1195bb6f 61fListOutput(0)
4292b3b6 62{
63 //
64 // Default constructor
65 //
4292b3b6 66}
67
68//_____________________________________________________________________________
69AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name) :
70AliAnalysisTaskSE(name),
71fAnaMode(0),
72fIsOutputTree(kFALSE),
1195bb6f 73fIsMC(kFALSE),
4292b3b6 74fHeader(0),
fd1d0cb9 75fMuonClArr(0),
76fDimuClArr(0),
1195bb6f 77fListOutput(0)
4292b3b6 78{
79 //
80 // Constructor
81 //
1195bb6f 82 DefineOutput(1, TList::Class());
4292b3b6 83}
84
85//_____________________________________________________________________________
86AliAnalysisTaskSEMuonsHF::~AliAnalysisTaskSEMuonsHF()
87{
88 //
89 // Default destructor
90 //
1195bb6f 91 if (fHeader) { delete fHeader; fHeader =NULL; }
92 if (fMuonClArr) { delete fMuonClArr; fMuonClArr =NULL; }
93 if (fDimuClArr) { delete fDimuClArr; fDimuClArr =NULL; }
94 if (fListOutput) { delete fListOutput; fListOutput=NULL; }
4292b3b6 95}
96
97//_____________________________________________________________________________
fd1d0cb9 98void AliAnalysisTaskSEMuonsHF::Init()
4292b3b6 99{
fd1d0cb9 100 // Initialization
101 // Setting and initializing the running mode and status
4292b3b6 102
fd1d0cb9 103 AliMuonsHFHeader::SetAnaMode(fAnaMode);
1195bb6f 104 AliMuonsHFHeader::SetIsMC(fIsMC);
4292b3b6 105 if (!fHeader) {
106 fHeader = new AliMuonsHFHeader();
fd1d0cb9 107 fHeader->SetName(AliMuonsHFHeader::StdBranchName());
4292b3b6 108 }
fd1d0cb9 109
110 if (!fMuonClArr) {
1195bb6f 111 if (fIsMC) {
fd1d0cb9 112 fMuonClArr = new TClonesArray("AliMuonInfoStoreMC", 0);
113 fMuonClArr->SetName(AliMuonInfoStoreMC::StdBranchName());
114 } else {
115 fMuonClArr = new TClonesArray("AliMuonInfoStoreRD", 0);
116 fMuonClArr->SetName(AliMuonInfoStoreRD::StdBranchName());
117 }
4292b3b6 118 }
119
fd1d0cb9 120 if (fAnaMode!=1 && !fDimuClArr) {
1195bb6f 121 if (fIsMC) {
fd1d0cb9 122 fDimuClArr = new TClonesArray("AliDimuInfoStoreMC", 0);
123 fDimuClArr->SetName(AliDimuInfoStoreMC::StdBranchName());
124 } else {
125 fDimuClArr = new TClonesArray("AliDimuInfoStoreRD", 0);
126 fDimuClArr->SetName(AliDimuInfoStoreRD::StdBranchName());
127 }
128 }
129
130 return;
131}
132
133//_____________________________________________________________________________
134void AliAnalysisTaskSEMuonsHF::UserCreateOutputObjects()
135{
136 // Create the output container
137
1195bb6f 138 if (!fListOutput) fListOutput = new TList();
139 fHeader->CreateHistograms(fListOutput);
4292b3b6 140
141 if (fIsOutputTree) {
142 AddAODBranch("AliMuonsHFHeader", &fHeader);
fd1d0cb9 143 AddAODBranch("TClonesArray", &fMuonClArr);
144 if (fAnaMode!=1) AddAODBranch("TClonesArray", &fDimuClArr);
4292b3b6 145 }
146
147 return;
148}
149
150//_____________________________________________________________________________
151void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
152{
fd1d0cb9 153 // Execute analysis for current event:
154 // muon event header & (di)muon info store
155
1195bb6f 156 if (fIsMC) {
157 if (MCEvent()) {
158 if (MCEvent()->GetNumberOfTracks()<=0)
159 { AliError("MC event not found. Nothing done!"); return; }
160 } else { AliError("MC event not found. Nothing done!"); return; }
161 }
162
4292b3b6 163 Int_t ntrks = 0;
164 AliAODEvent *aod = 0;
165 AliESDEvent *esd = 0;
1195bb6f 166 if (((TString)InputEvent()->IsA()->GetName())=="AliAODEvent") {
4292b3b6 167 aod = dynamic_cast<AliAODEvent*>(InputEvent());
fd1d0cb9 168 if (!aod) { AliError("AOD event not found. Nothing done!"); return; }
9bcac085 169 if (!fIsMC && (aod->GetHeader()->GetEventType()!=7)) return;
4292b3b6 170 ntrks = aod->GetNTracks();
1195bb6f 171 fHeader->SetFiredTriggerClass(aod->GetFiredTriggerClasses());
4292b3b6 172 } else {
173 esd = dynamic_cast<AliESDEvent*>(InputEvent());
fd1d0cb9 174 if (!esd) { AliError("ESD event not found. Nothing done!"); return; }
9bcac085 175 if (!fIsMC && (esd->GetHeader()->GetEventType()!=7)) return;
4292b3b6 176 ntrks = esd->GetNumberOfMuonTracks();
1195bb6f 177 fHeader->SetFiredTriggerClass(esd->GetFiredTriggerClasses());
9bcac085 178 AliCentrality *cent = esd->GetCentrality();
179 fHeader->SetCentrality(cent->GetCentralityPercentile("V0M")); // Just for ESD
4292b3b6 180 }
181
9bcac085 182 if (fIsOutputTree) AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler()->SetFillAOD(kTRUE);
183 if (fInputHandler && fInputHandler->GetEventSelection()) fHeader->SetSelectionMask(fInputHandler->IsEventSelected());
184 fHeader->SetVertex(((AliVVertex*)InputEvent()->GetPrimaryVertex()));
185 fHeader->FillHistosEvnH(fListOutput);
186
fd1d0cb9 187 fMuonClArr->Delete();
188 TClonesArray &muonRef = *fMuonClArr;
189 Int_t countN = fMuonClArr->GetEntriesFast();
4292b3b6 190
fd1d0cb9 191 AliAODTrack *trkAOD = 0;
192 AliESDMuonTrack *trkESD = 0;
1195bb6f 193 AliMuonInfoStoreRD *muonRD = 0;
194 AliMuonInfoStoreMC *muonMC = 0;
4292b3b6 195 for (Int_t itrk=0; itrk<ntrks; itrk++) { // loop over all tracks
1195bb6f 196 if (aod) {
4292b3b6 197 trkAOD = (AliAODTrack*)aod->GetTrack(itrk);
1195bb6f 198 if (!trkAOD->IsMuonTrack()) { trkAOD=0; continue; }
199 if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkAOD, MCEvent());
200 else muonRD = new AliMuonInfoStoreRD(trkAOD);
fd1d0cb9 201 trkAOD = 0;
4292b3b6 202 } else {
203 trkESD = (AliESDMuonTrack*)esd->GetMuonTrack(itrk);
1195bb6f 204 if (!trkESD->ContainTrackerData()) { trkESD=0; continue; }
205 if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkESD, MCEvent());
206 else muonRD = new AliMuonInfoStoreRD(trkESD);
fd1d0cb9 207 trkESD = 0;
4292b3b6 208 }
209
1195bb6f 210 if (muonRD) {
211 new(muonRef[countN++]) AliMuonInfoStoreRD(*muonRD);
212 if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonRD);
4292b3b6 213 }
1195bb6f 214 if (muonMC) {
215 new(muonRef[countN++]) AliMuonInfoStoreMC(*muonMC);
216 if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonMC, muonMC->Source());
4292b3b6 217 }
218
1195bb6f 219 if (muonRD) { delete muonRD; muonRD=0; }
220 if (muonMC) { delete muonMC; muonMC=0; }
4292b3b6 221 } // end loop of all tracks
fd1d0cb9 222
1195bb6f 223 aod = 0; esd = 0;
224 if (fAnaMode==1) { PostData(1,fListOutput); return; }
225
fd1d0cb9 226 fDimuClArr->Delete();
227 countN = fDimuClArr->GetEntriesFast();
228 TClonesArray &dimuRef = *fDimuClArr;
4292b3b6 229
fd1d0cb9 230 AliDimuInfoStoreRD *dimuRD = 0;
231 AliDimuInfoStoreMC *dimuMC = 0;
232 ntrks = fMuonClArr->GetEntriesFast();
4292b3b6 233 for (Int_t itrk=0; itrk<ntrks-1; itrk++) { // 1st loop over muon tracks
fd1d0cb9 234 for (Int_t jtrk=itrk+1; jtrk<ntrks; jtrk++) { // 2nd loop ofver muon tracks
1195bb6f 235 if (fIsMC)
fd1d0cb9 236 dimuMC = new AliDimuInfoStoreMC((AliMuonInfoStoreMC*)fMuonClArr->At(itrk), (AliMuonInfoStoreMC*)fMuonClArr->At(jtrk));
1195bb6f 237 else {
fd1d0cb9 238 dimuRD = new AliDimuInfoStoreRD((AliMuonInfoStoreRD*)fMuonClArr->At(itrk), (AliMuonInfoStoreRD*)fMuonClArr->At(jtrk));
1195bb6f 239 }
4292b3b6 240
fd1d0cb9 241 if (dimuRD) {
1195bb6f 242 fHeader->FillHistosDimu(fListOutput, dimuRD);
fd1d0cb9 243 if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreRD(*dimuRD);
244 }
245 if (dimuMC) {
1195bb6f 246 fHeader->FillHistosDimu(fListOutput, dimuMC, dimuMC->Source());
fd1d0cb9 247 if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreMC(*dimuMC);
4292b3b6 248 }
249
fd1d0cb9 250 if (dimuRD) { delete dimuRD; dimuRD=0; }
251 if (dimuMC) { delete dimuMC; dimuMC=0; }
252 } // end 2nd loop of muon tracks
4292b3b6 253 } // end 1st loop of muon tracks
4292b3b6 254
1195bb6f 255 PostData(1, fListOutput);
4292b3b6 256 return;
257}
258
259//_____________________________________________________________________________
260void AliAnalysisTaskSEMuonsHF::Terminate(Option_t *)
261{
fd1d0cb9 262 // Terminate analysis
4292b3b6 263
1195bb6f 264 // add the correction matrix
4292b3b6 265
4292b3b6 266 return;
267}