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