]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG/muon/AliAnalysisTaskSEMuonsHF.cxx
fixing the error message
[u/mrichter/AliRoot.git] / PWG / 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 /* $Id$ */
17
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>
32 #include <TClonesArray.h>
33
34 #include "AliESDEvent.h"
35 #include "AliAODEvent.h"
36 #include "AliESDHeader.h"
37 #include "AliAODHeader.h"
38 #include "AliESDMuonTrack.h"
39 #include "AliAODTrack.h"
40 #include "AliCentrality.h"
41 #include "AliMuonsHFHeader.h"
42 #include "AliMuonInfoStoreRD.h"
43 #include "AliMuonInfoStoreMC.h"
44 #include "AliDimuInfoStoreRD.h"
45 #include "AliDimuInfoStoreMC.h"
46 #include "AliAnalysisManager.h"
47 #include "AliInputEventHandler.h"
48 #include "AliAnalysisTaskSEMuonsHF.h"
49
50 ClassImp(AliAnalysisTaskSEMuonsHF)
51
52 //_____________________________________________________________________________
53 AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF() :
54 AliAnalysisTaskSE(),
55 fAnaMode(0),
56 fIsOutputTree(kFALSE),
57 fIsMC(kFALSE),
58 fHeader(0),
59 fMuonClArr(0),
60 fDimuClArr(0),
61 fListOutput(0)
62 {
63   //
64   // Default constructor
65   //
66 }
67
68 //_____________________________________________________________________________
69 AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name) :
70 AliAnalysisTaskSE(name),
71 fAnaMode(0),
72 fIsOutputTree(kFALSE),
73 fIsMC(kFALSE),
74 fHeader(0),
75 fMuonClArr(0),
76 fDimuClArr(0),
77 fListOutput(0)
78 {
79   //
80   // Constructor
81   //
82   DefineOutput(1, TList::Class());
83 }
84
85 //_____________________________________________________________________________
86 AliAnalysisTaskSEMuonsHF::~AliAnalysisTaskSEMuonsHF()
87 {
88   //
89   // Default destructor
90   //
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; }
95 }
96
97 //_____________________________________________________________________________
98 void AliAnalysisTaskSEMuonsHF::Init()
99 {
100   // Initialization
101   // Setting and initializing the running mode and status
102
103   AliMuonsHFHeader::SetAnaMode(fAnaMode);
104   AliMuonsHFHeader::SetIsMC(fIsMC);
105   if (!fHeader) {
106     fHeader = new AliMuonsHFHeader();
107     fHeader->SetName(AliMuonsHFHeader::StdBranchName());
108   }
109
110   if (!fMuonClArr) {
111     if (fIsMC) { 
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     }
118   }
119
120   if (fAnaMode!=1 && !fDimuClArr) {
121     if (fIsMC) {
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 //_____________________________________________________________________________
134 void AliAnalysisTaskSEMuonsHF::UserCreateOutputObjects()
135 {
136   // Create the output container
137
138   if (!fListOutput) fListOutput = new TList();
139   fHeader->CreateHistograms(fListOutput);
140
141   if (fIsOutputTree) {
142     AddAODBranch("AliMuonsHFHeader", &fHeader);
143     AddAODBranch("TClonesArray", &fMuonClArr);
144     if (fAnaMode!=1) AddAODBranch("TClonesArray", &fDimuClArr);
145   }
146
147   return;
148 }
149
150 //_____________________________________________________________________________
151 void AliAnalysisTaskSEMuonsHF::UserExec(Option_t *)
152 {
153   // Execute analysis for current event:
154   // muon event header & (di)muon info store
155
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
163   Int_t ntrks = 0;
164   AliAODEvent *aod = 0;
165   AliESDEvent *esd = 0;
166   if (((TString)InputEvent()->IsA()->GetName())=="AliAODEvent") {
167     aod = dynamic_cast<AliAODEvent*>(InputEvent());
168     if (!aod) { AliError("AOD event not found. Nothing done!"); return; }
169     if (!fIsMC && (aod->GetHeader()->GetEventType()!=7)) return;
170     ntrks = aod->GetNTracks();
171     fHeader->SetFiredTriggerClass(aod->GetFiredTriggerClasses());
172   } else {
173     esd = dynamic_cast<AliESDEvent*>(InputEvent());
174     if (!esd) { AliError("ESD event not found. Nothing done!"); return; }
175     if (!fIsMC && (esd->GetHeader()->GetEventType()!=7)) return;
176     ntrks = esd->GetNumberOfMuonTracks();
177     fHeader->SetFiredTriggerClass(esd->GetFiredTriggerClasses());
178     AliCentrality *cent = esd->GetCentrality();
179     fHeader->SetCentrality(cent->GetCentralityPercentile("V0M"));  // Just for ESD
180   }
181
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
187   fMuonClArr->Delete();
188   TClonesArray &muonRef = *fMuonClArr;
189   Int_t countN = fMuonClArr->GetEntriesFast();
190
191   AliAODTrack        *trkAOD = 0;
192   AliESDMuonTrack    *trkESD = 0;
193   AliMuonInfoStoreRD *muonRD = 0;
194   AliMuonInfoStoreMC *muonMC = 0;
195   for (Int_t itrk=0; itrk<ntrks; itrk++) {  // loop over all tracks
196     if (aod) {
197       trkAOD = (AliAODTrack*)aod->GetTrack(itrk);
198       if (!trkAOD->IsMuonTrack())        { trkAOD=0; continue; }
199       if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkAOD, MCEvent());
200       else muonRD = new AliMuonInfoStoreRD(trkAOD);
201       trkAOD = 0;
202     } else {
203       trkESD = (AliESDMuonTrack*)esd->GetMuonTrack(itrk);
204       if (!trkESD->ContainTrackerData()) { trkESD=0; continue; }
205       if (fIsMC) muonMC = new AliMuonInfoStoreMC(trkESD, MCEvent());
206       else muonRD = new AliMuonInfoStoreRD(trkESD);
207       trkESD = 0;
208     }
209
210     if (muonRD) {
211       new(muonRef[countN++]) AliMuonInfoStoreRD(*muonRD);
212       if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonRD);
213     }
214     if (muonMC) {
215       new(muonRef[countN++]) AliMuonInfoStoreMC(*muonMC);
216       if (fAnaMode!=2) fHeader->FillHistosMuon(fListOutput, muonMC, muonMC->Source());
217     }
218
219     if (muonRD) { delete muonRD; muonRD=0; }
220     if (muonMC) { delete muonMC; muonMC=0; }
221   }  // end loop of all tracks
222
223   aod = 0; esd = 0;
224   if (fAnaMode==1) { PostData(1,fListOutput); return; }
225
226   fDimuClArr->Delete();
227   countN = fDimuClArr->GetEntriesFast();
228   TClonesArray &dimuRef = *fDimuClArr;
229
230   AliDimuInfoStoreRD *dimuRD = 0;
231   AliDimuInfoStoreMC *dimuMC = 0;
232   ntrks = fMuonClArr->GetEntriesFast();
233   for (Int_t itrk=0; itrk<ntrks-1; itrk++) {  // 1st loop over muon tracks
234     for (Int_t jtrk=itrk+1; jtrk<ntrks; jtrk++) {  // 2nd loop ofver muon tracks
235       if (fIsMC)
236         dimuMC = new AliDimuInfoStoreMC((AliMuonInfoStoreMC*)fMuonClArr->At(itrk), (AliMuonInfoStoreMC*)fMuonClArr->At(jtrk));
237       else {
238         dimuRD = new AliDimuInfoStoreRD((AliMuonInfoStoreRD*)fMuonClArr->At(itrk), (AliMuonInfoStoreRD*)fMuonClArr->At(jtrk));
239       }
240
241       if (dimuRD) {
242         fHeader->FillHistosDimu(fListOutput, dimuRD);
243         if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreRD(*dimuRD);
244       }
245       if (dimuMC) {
246         fHeader->FillHistosDimu(fListOutput, dimuMC, dimuMC->Source());
247         if (fIsOutputTree) new(dimuRef[countN++]) AliDimuInfoStoreMC(*dimuMC);
248       }
249
250       if (dimuRD) { delete dimuRD; dimuRD=0; }
251       if (dimuMC) { delete dimuMC; dimuMC=0; }
252     }  // end 2nd loop of muon tracks
253   }  // end 1st loop of muon tracks
254
255   PostData(1, fListOutput);
256   return;
257 }
258
259 //_____________________________________________________________________________
260 void AliAnalysisTaskSEMuonsHF::Terminate(Option_t *)
261 {
262   // Terminate analysis
263
264   // add the correction matrix
265
266   return;
267 }