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