]>
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 | ||
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 | |
50 | ClassImp(AliAnalysisTaskSEMuonsHF) | |
51 | ||
52 | //_____________________________________________________________________________ | |
53 | AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF() : | |
54 | AliAnalysisTaskSE(), | |
55 | fAnaMode(0), | |
56 | fIsOutputTree(kFALSE), | |
1195bb6f | 57 | fIsMC(kFALSE), |
4292b3b6 | 58 | fHeader(0), |
fd1d0cb9 | 59 | fMuonClArr(0), |
60 | fDimuClArr(0), | |
1195bb6f | 61 | fListOutput(0) |
4292b3b6 | 62 | { |
63 | // | |
64 | // Default constructor | |
65 | // | |
4292b3b6 | 66 | } |
67 | ||
68 | //_____________________________________________________________________________ | |
69 | AliAnalysisTaskSEMuonsHF::AliAnalysisTaskSEMuonsHF(const char *name) : | |
70 | AliAnalysisTaskSE(name), | |
71 | fAnaMode(0), | |
72 | fIsOutputTree(kFALSE), | |
1195bb6f | 73 | fIsMC(kFALSE), |
4292b3b6 | 74 | fHeader(0), |
fd1d0cb9 | 75 | fMuonClArr(0), |
76 | fDimuClArr(0), | |
1195bb6f | 77 | fListOutput(0) |
4292b3b6 | 78 | { |
79 | // | |
80 | // Constructor | |
81 | // | |
1195bb6f | 82 | DefineOutput(1, TList::Class()); |
4292b3b6 | 83 | } |
84 | ||
85 | //_____________________________________________________________________________ | |
86 | AliAnalysisTaskSEMuonsHF::~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 | 98 | void 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 | //_____________________________________________________________________________ | |
134 | void 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 | //_____________________________________________________________________________ | |
151 | void 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 | //_____________________________________________________________________________ | |
260 | void AliAnalysisTaskSEMuonsHF::Terminate(Option_t *) | |
261 | { | |
fd1d0cb9 | 262 | // Terminate analysis |
4292b3b6 | 263 | |
1195bb6f | 264 | // add the correction matrix |
4292b3b6 | 265 | |
4292b3b6 | 266 | return; |
267 | } |