]>
Commit | Line | Data |
---|---|---|
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 | ||
43 | ClassImp(AliAnalysisTaskSEMuonsHF) | |
44 | ||
45 | //_____________________________________________________________________________ | |
46 | AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF() : | |
47 | AliAnalysisTaskSE(), | |
48 | fAnaMode(0), | |
49 | fIsOutputTree(kFALSE), | |
1195bb6f | 50 | fIsMC(kFALSE), |
4292b3b6 | 51 | fHeader(0), |
fd1d0cb9 | 52 | fMuonClArr(0), |
53 | fDimuClArr(0), | |
1195bb6f | 54 | fListOutput(0) |
4292b3b6 | 55 | { |
56 | // | |
57 | // Default constructor | |
58 | // | |
4292b3b6 | 59 | } |
60 | ||
61 | //_____________________________________________________________________________ | |
62 | AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name) : | |
63 | AliAnalysisTaskSE(name), | |
64 | fAnaMode(0), | |
65 | fIsOutputTree(kFALSE), | |
1195bb6f | 66 | fIsMC(kFALSE), |
4292b3b6 | 67 | fHeader(0), |
fd1d0cb9 | 68 | fMuonClArr(0), |
69 | fDimuClArr(0), | |
1195bb6f | 70 | fListOutput(0) |
4292b3b6 | 71 | { |
72 | // | |
73 | // Constructor | |
74 | // | |
1195bb6f | 75 | DefineOutput(1, TList::Class()); |
4292b3b6 | 76 | } |
77 | ||
78 | //_____________________________________________________________________________ | |
79 | AliAnalysisTaskSEMuonsHF::~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 | 91 | void 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 | //_____________________________________________________________________________ | |
127 | void 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 | //_____________________________________________________________________________ | |
144 | void 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 | //_____________________________________________________________________________ | |
247 | void AliAnalysisTaskSEMuonsHF::Terminate(Option_t *) | |
248 | { | |
fd1d0cb9 | 249 | // Terminate analysis |
4292b3b6 | 250 | |
1195bb6f | 251 | // add the correction matrix |
4292b3b6 | 252 | |
4292b3b6 | 253 | return; |
254 | } |