]>
Commit | Line | Data |
---|---|---|
863e74f5 | 1 | /************************************************************************** |
bce9493b | 2 | * Copyright(c) 1998-1999, 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 | ||
863e74f5 | 16 | //------------------------------------------------------------------------// |
bce9493b | 17 | // Fill histograms with basic QA information for EMCAL offline trigger // |
e395081d | 18 | // Author: Nicolas Arbor (LPSC-Grenoble), Rachid Guernane (LPSC-Grenoble)// |
bce9493b | 19 | // Gustavo Conesa Balbastre (LPSC-Grenoble) // |
20 | // // | |
863e74f5 | 21 | // $Id$ // |
bce9493b | 22 | //------------------------------------------------------------------------// |
23 | ||
bce9493b | 24 | #include <TList.h> |
bce9493b | 25 | #include <TH2F.h> |
26 | #include <TF1.h> | |
863e74f5 | 27 | #include <TProfile2D.h> |
3200214a | 28 | #include <TStreamerInfo.h> |
29 | #include <TFile.h> | |
bce9493b | 30 | |
31 | #include "AliLog.h" | |
32 | #include "AliVCluster.h" | |
33 | #include "AliVCaloCells.h" | |
34 | #include "AliVEvent.h" | |
ec77a234 | 35 | #include "AliCentrality.h" |
36 | ||
997b261e | 37 | #include "AliVEvent.h" |
38 | //#include "AliVVZERO.h" | |
39 | #include "AliVCaloTrigger.h" | |
40 | ||
41 | //#include "AliESDEvent.h" | |
bce9493b | 42 | #include "AliESDVZERO.h" |
997b261e | 43 | //#include "AliESDCaloTrigger.h" |
44 | ||
bce9493b | 45 | #include "AliEMCALGeometry.h" |
6bfd1538 | 46 | #include "AliEMCALRecoUtils.h" |
2b4e1cc5 | 47 | #include "AliOADBContainer.h" |
31a3f95a | 48 | #include "AliAnalysisManager.h" |
bce9493b | 49 | |
50 | #include "AliAnalysisTaskEMCALTriggerQA.h" | |
51 | ||
52 | ClassImp(AliAnalysisTaskEMCALTriggerQA) | |
53 | ||
85196c29 | 54 | //______________________________________________________________ |
863e74f5 | 55 | AliAnalysisTaskEMCALTriggerQA::AliAnalysisTaskEMCALTriggerQA() : |
56 | AliAnalysisTaskSE(), | |
ec77a234 | 57 | fOutputList(0), fRecoUtils(0x0), |
863e74f5 | 58 | fGeoSet(0), fGeometry(0), fGeoName(""), |
31a3f95a | 59 | fOADBSet(kFALSE), fAccessOADB(kTRUE), fOADBFilePath(""), |
60 | fBitEGA(0), fBitEJE(0), | |
61 | fEtaPhiEnMin(10.), | |
46fec84c | 62 | fSTUTotal(0), fTRUTotal(0), |
63 | fV0Trigger(0), fV0A(0), fV0C(0), | |
64 | fEventMB (0), fEventL0 (0), | |
65 | fEventL1G (0), fEventL1G2 (0), | |
66 | fEventL1J (0), fEventL1J2 (0), | |
67 | fEventCen (0), fEventSem (0), | |
31a3f95a | 68 | //Histograms |
ec77a234 | 69 | fhNEvents(0), fhFORAmp(0), |
46fec84c | 70 | fhFORAmpL1G(0), fhFORAmpL1G2(0), |
71 | fhFORAmpL1J(0), fhFORAmpL1J2(0), | |
863e74f5 | 72 | fhL0Amp(0), fhL0AmpL1G(0), fhL0AmpL1J(0), |
73 | fhL1Amp(0), fhL1GAmp(0), fhL1G2Amp(0), | |
74 | fhL1JAmp(0), fhL1J2Amp(0), fhL1FOREnergy(0), | |
75 | fhL0Patch(0), fhL1GPatch(0), fhL1G2Patch(0), | |
76 | fhL1GPatchNotFake(0), fhL1GPatchFake(0), fhL1GPatchNotAllFake(0), | |
77 | fhL1GPatchAllFake(0), fhL1GPatchNotAllFakeMax(0), | |
78 | fhL1GPatchAllFakeMax(0), fhL1GPatchNotAllFakeMaxE(0), | |
79 | fhL1GPatchAllFakeMaxE(0), fhL1GPatchNotAllFakeE(0), | |
80 | fhL1GPatchAllFakeE(0), fhL1GPatchFakeE(0), | |
46fec84c | 81 | fhL1GPatchNotFakeE(0), fhNPatchFake(0), fhNPatchNotFake(0), |
6be2314f | 82 | fhL1JPatch(0), fhL1J2Patch(0), |
ec77a234 | 83 | fhFEESTU(0), fhTRUSTU(0), fhV0STU(0), |
84 | fhGPMaxVV0TT(0), fhJPMaxVV0TT(0), | |
85 | fhFORMeanAmp(0), fhL0MeanAmp(0), fhL1MeanAmp(0), | |
46fec84c | 86 | fhL1GPatchMax(0), fhL1G2PatchMax(0), |
87 | fhL1JPatchMax(0), fhL1J2PatchMax(0), | |
ec77a234 | 88 | //Histogram settings |
89 | fNBinsSTUSignal (2000), fMaxSTUSignal (200000), | |
90 | fNBinsTRUSignal (2000), fMaxTRUSignal (200000), | |
91 | fNBinsV0Signal (5000), fMaxV0Signal (100000), | |
92 | fNBinsSTUFEERatio(1000), fMaxSTUFEERatio(100), | |
93 | fNBinsSTUTRURatio(1000), fMaxSTUTRURatio(100), | |
46fec84c | 94 | fNBinsClusterE (500), fMaxClusterE (200), |
95 | fMapCell (), | |
96 | fMapCellL1G (), fMapCellL1G2 (), | |
97 | fMapCellL1J (), fMapCellL1J2 (), | |
98 | fMapTrigL0 (), fMapTrigL1 (), | |
99 | fMapTrigL0L1G(), fMapTrigL0L1J(), | |
100 | fMapTrigL1G (), fMapTrigL1G2 (), | |
101 | fMapTrigL1J (), fMapTrigL1J2 () | |
bce9493b | 102 | { |
103 | // Constructor | |
863e74f5 | 104 | |
31a3f95a | 105 | InitHistogramArrays(); |
106 | ||
ec77a234 | 107 | DefineOutput(1, TList::Class()); |
108 | ||
863e74f5 | 109 | } |
bce9493b | 110 | |
85196c29 | 111 | //______________________________________________________________________________ |
863e74f5 | 112 | AliAnalysisTaskEMCALTriggerQA::AliAnalysisTaskEMCALTriggerQA(const char *name) : |
113 | AliAnalysisTaskSE(name), | |
ec77a234 | 114 | fOutputList(0), fRecoUtils(0x0), |
863e74f5 | 115 | fGeoSet(0), fGeometry(0), fGeoName(""), |
31a3f95a | 116 | fOADBSet(kFALSE), fAccessOADB(kTRUE), fOADBFilePath(""), |
117 | fBitEGA(0), fBitEJE(0), | |
118 | fEtaPhiEnMin(10.), | |
46fec84c | 119 | fSTUTotal(0), fTRUTotal(0), |
120 | fV0Trigger(0), fV0A(0), fV0C(0), | |
121 | fEventMB (0), fEventL0 (0), | |
122 | fEventL1G (0), fEventL1G2 (0), | |
123 | fEventL1J (0), fEventL1J2 (0), | |
124 | fEventCen (0), fEventSem (0), | |
31a3f95a | 125 | //Histograms |
ec77a234 | 126 | fhNEvents(0), fhFORAmp(0), |
46fec84c | 127 | fhFORAmpL1G(0), fhFORAmpL1G2(0), |
128 | fhFORAmpL1J(0), fhFORAmpL1J2(0), | |
863e74f5 | 129 | fhL0Amp(0), fhL0AmpL1G(0), fhL0AmpL1J(0), |
130 | fhL1Amp(0), fhL1GAmp(0), fhL1G2Amp(0), | |
131 | fhL1JAmp(0), fhL1J2Amp(0), fhL1FOREnergy(0), | |
132 | fhL0Patch(0), fhL1GPatch(0), fhL1G2Patch(0), | |
133 | fhL1GPatchNotFake(0), fhL1GPatchFake(0), fhL1GPatchNotAllFake(0), | |
134 | fhL1GPatchAllFake(0), fhL1GPatchNotAllFakeMax(0), | |
135 | fhL1GPatchAllFakeMax(0), fhL1GPatchNotAllFakeMaxE(0), | |
136 | fhL1GPatchAllFakeMaxE(0), fhL1GPatchNotAllFakeE(0), | |
137 | fhL1GPatchAllFakeE(0), fhL1GPatchFakeE(0), | |
46fec84c | 138 | fhL1GPatchNotFakeE(0), fhNPatchFake(0), fhNPatchNotFake(0), |
6be2314f | 139 | fhL1JPatch(0), fhL1J2Patch(0), |
ec77a234 | 140 | fhFEESTU(0), fhTRUSTU(0), fhV0STU(0), |
141 | fhGPMaxVV0TT(0), fhJPMaxVV0TT(0), | |
142 | fhFORMeanAmp(0), fhL0MeanAmp(0), fhL1MeanAmp(0), | |
46fec84c | 143 | fhL1GPatchMax(0), fhL1G2PatchMax(0), |
144 | fhL1JPatchMax(0), fhL1J2PatchMax(0), | |
ec77a234 | 145 | //Histogram settings |
146 | fNBinsSTUSignal (2000), fMaxSTUSignal (200000), | |
147 | fNBinsTRUSignal (2000), fMaxTRUSignal (200000), | |
148 | fNBinsV0Signal (5000), fMaxV0Signal (100000), | |
149 | fNBinsSTUFEERatio(1000), fMaxSTUFEERatio(100), | |
150 | fNBinsSTUTRURatio(1000), fMaxSTUTRURatio(100), | |
46fec84c | 151 | fNBinsClusterE (500), fMaxClusterE (200), |
152 | fMapCell (), | |
153 | fMapCellL1G (), fMapCellL1G2 (), | |
154 | fMapCellL1J (), fMapCellL1J2 (), | |
155 | fMapTrigL0 (), fMapTrigL1 (), | |
156 | fMapTrigL0L1G(), fMapTrigL0L1J(), | |
157 | fMapTrigL1G (), fMapTrigL1G2 (), | |
158 | fMapTrigL1J (), fMapTrigL1J2 () | |
bce9493b | 159 | { |
160 | // Constructor | |
863e74f5 | 161 | |
31a3f95a | 162 | InitHistogramArrays(); |
863e74f5 | 163 | |
2b4e1cc5 | 164 | DefineOutput(1, TList::Class()); |
bce9493b | 165 | |
2b4e1cc5 | 166 | } |
167 | ||
2b4e1cc5 | 168 | //______________________________________________ |
169 | void AliAnalysisTaskEMCALTriggerQA::AccessOADB() | |
170 | { | |
171 | // Set the AODB bad channels at least once | |
ec77a234 | 172 | |
2b4e1cc5 | 173 | //Set it only once |
863e74f5 | 174 | if(fOADBSet) return ; |
31a3f95a | 175 | |
863e74f5 | 176 | if(fOADBFilePath == "") fOADBFilePath = "$ALICE_ROOT/OADB/EMCAL" ; |
2b4e1cc5 | 177 | |
178 | Int_t runnumber = InputEvent()->GetRunNumber() ; | |
179 | ||
180 | if(DebugLevel() > 0) | |
181 | printf("AliAnalysisTaskEMCALClusterize::SetOADBParameters() - Get AODB parameters from EMCAL in %s for run %d\n",fOADBFilePath.Data(),runnumber); | |
182 | ||
183 | Int_t nSM = fGeometry->GetNumberOfSuperModules(); | |
184 | ||
185 | // Bad map | |
186 | if(fRecoUtils->IsBadChannelsRemovalSwitchedOn()) | |
187 | { | |
188 | AliOADBContainer *contBC=new AliOADBContainer(""); | |
863e74f5 | 189 | contBC->InitFromFile(Form("%s/EMCALBadChannels.root",fOADBFilePath.Data()),"AliEMCALBadChannels"); |
2b4e1cc5 | 190 | |
191 | TObjArray *arrayBC=(TObjArray*)contBC->GetObject(runnumber); | |
192 | ||
193 | if(arrayBC) | |
863e74f5 | 194 | { |
2b4e1cc5 | 195 | if(DebugLevel() > 0) |
196 | printf("AliAnalysisTaskEMCALClusterize::SetOADBParameters() - Remove EMCAL bad cells \n"); | |
197 | ||
863e74f5 | 198 | for (Int_t i=0; i<nSM; ++i) |
2b4e1cc5 | 199 | { |
200 | TH2I *hbm = fRecoUtils->GetEMCALChannelStatusMap(i); | |
201 | ||
202 | if (hbm) | |
203 | delete hbm; | |
204 | ||
205 | hbm=(TH2I*)arrayBC->FindObject(Form("EMCALBadChannelMap_Mod%d",i)); | |
206 | ||
863e74f5 | 207 | if (!hbm) |
2b4e1cc5 | 208 | { |
209 | AliError(Form("Can not get EMCALBadChannelMap_Mod%d",i)); | |
210 | continue; | |
211 | } | |
212 | ||
213 | hbm->SetDirectory(0); | |
214 | fRecoUtils->SetEMCALChannelStatusMap(i,hbm); | |
215 | ||
216 | } // loop | |
217 | } else if(DebugLevel() > 0) | |
218 | printf("AliAnalysisTaskEMCALClusterize::SetOADBParameters() - Do NOT remove EMCAL bad channels\n"); // run array | |
219 | } // Remove bad | |
66bdaa44 | 220 | |
221 | fOADBSet = kTRUE; | |
222 | ||
863e74f5 | 223 | } |
2b4e1cc5 | 224 | |
46fec84c | 225 | //________________________________________________ |
226 | void AliAnalysisTaskEMCALTriggerQA::FillCellMaps() | |
227 | { | |
228 | // Cells analysis | |
229 | // Fill FEE energy per channel array | |
230 | Int_t posX = -1, posY = -1; | |
231 | Int_t nSupMod = -1, ieta = -1, iphi = -1, nModule = -1, nIphi = -1, nIeta = -1; | |
232 | Short_t absId = -1; | |
233 | Int_t nCells = 0; | |
234 | ||
235 | AliVCaloCells& cells= *(InputEvent()->GetEMCALCells()); | |
236 | ||
237 | if(cells.IsEMCAL()) | |
238 | { | |
239 | for (Int_t icell = 0; icell < cells.GetNumberOfCells(); icell++) | |
240 | { | |
241 | nCells ++; | |
242 | ||
243 | Double_t amp =0., time = 0., efrac = 0; | |
244 | Int_t mclabel = -1; | |
245 | ||
246 | cells.GetCell(icell, absId, amp, time,mclabel,efrac); | |
247 | ||
248 | fGeometry->GetCellIndex(absId, nSupMod, nModule, nIphi, nIeta); | |
249 | fGeometry->GetCellPhiEtaIndexInSModule(nSupMod, nModule, nIphi, nIeta, iphi, ieta); | |
250 | ||
251 | posX = (nSupMod % 2) ? ieta + AliEMCALGeoParams::fgkEMCALCols : ieta; | |
252 | posY = iphi + AliEMCALGeoParams::fgkEMCALRows * int(nSupMod / 2); | |
253 | ||
73c5a035 | 254 | Int_t indexX = Int_t(posX/2); |
255 | Int_t indexY = Int_t(posY/2); | |
256 | ||
257 | if(indexX > fgkFALTROCols || indexY > fgkFALTRORows ) | |
46fec84c | 258 | { |
259 | if(DebugLevel() > 0) printf("AliAnalysisTaskEMCALTriggerQA::UserExec() - Wrong Position (x,y) = (%d,%d)\n",posX,posY); | |
260 | continue; | |
261 | } | |
262 | ||
263 | // here it is the amplitude for each cell | |
73c5a035 | 264 | fMapCell[indexY][indexX] += amp; |
46fec84c | 265 | |
266 | if(fEventL1G) | |
267 | { | |
73c5a035 | 268 | fMapCellL1G[indexY][indexX] += amp; |
269 | //printf("L1G cell[%i,%i] amp=%f\n",indexY,indexX,fMapCellL1G[indexY][indexX]); | |
46fec84c | 270 | } |
271 | ||
272 | if(fEventL1G2) | |
273 | { | |
73c5a035 | 274 | fMapCellL1G2[indexY][indexX] += amp; |
275 | //printf("L1G2 cell[%i,%i] amp=%f\n",indexY,indexX,fMapCellL1G2[indexY][indexX]); | |
46fec84c | 276 | } |
277 | ||
73c5a035 | 278 | if(fEventL1J) fMapCellL1J [indexY][indexX] += amp; |
279 | if(fEventL1J2) fMapCellL1J2[indexY][indexX] += amp; | |
46fec84c | 280 | |
73c5a035 | 281 | //printf("cell[%i,%i] amp=%f\n",indexY,indexX,fMapCell[indexY][indexX]); |
46fec84c | 282 | |
283 | } | |
284 | } | |
285 | ||
286 | } | |
287 | ||
288 | //______________________________________________________________________________ | |
289 | void AliAnalysisTaskEMCALTriggerQA::FillTriggerPatchMaps(TString triggerclasses) | |
290 | { | |
291 | // Trigger analysis, fill L0, L1 arrays | |
292 | ||
293 | AliVCaloTrigger& trg= * (InputEvent()->GetCaloTrigger("EMCAL")); | |
294 | ||
295 | fV0Trigger = trg.GetL1V0(0)+trg.GetL1V0(1); // used elsewhere | |
296 | ||
297 | Int_t posX = -1, posY = -1; | |
298 | ||
299 | Int_t nL0Patch = 0 ; | |
300 | //Int_t nL1Patch = 0 ; | |
301 | fSTUTotal = 0; | |
302 | fTRUTotal = 0; | |
303 | ||
304 | trg.Reset(); | |
305 | // loop on FASTOR | |
306 | ||
307 | while (trg.Next()) | |
308 | { | |
309 | trg.GetPosition(posX,posY); | |
310 | ||
311 | if (posX > -1 && posY > -1) | |
312 | { | |
313 | //L0 analysis | |
314 | Int_t nTimes = 0; | |
315 | trg.GetNL0Times(nTimes); | |
316 | Int_t l0Times[10]; | |
317 | trg.GetL0Times(l0Times); | |
318 | ||
319 | Float_t ampL0 = 0.; | |
320 | trg.GetAmplitude(ampL0); | |
321 | if (ampL0 > 0) fMapTrigL0[posY][posX] = ampL0; | |
322 | ||
323 | if(triggerclasses.Contains("CEMC7EGA-B-NOPF-CENTNOTRD") || triggerclasses.Contains("CPBI2EGA") || triggerclasses.Contains("CPBI2EG1")) fMapTrigL0L1G[posY][posX] += ampL0; | |
324 | if(triggerclasses.Contains("CEMC7EJE-B-NOPF-CENTNOTRD") || triggerclasses.Contains("CPBI2EJE") || triggerclasses.Contains("CPBI2EJ1")) fMapTrigL0L1J[posY][posX] += ampL0; | |
325 | fTRUTotal += ampL0; | |
326 | ||
327 | int l0fired = 0; | |
328 | for (int itime = 0; itime < nTimes; itime++) | |
329 | { | |
330 | if (l0Times[itime] > 7 && l0Times[itime] < 10) l0fired = 1; | |
331 | // time bin too open? restrict to time bin 8-9? | |
332 | } | |
333 | ||
334 | if (l0fired) | |
335 | { | |
336 | nL0Patch += nTimes; | |
337 | fhL0Patch->Fill(posX,posY); | |
338 | } | |
339 | ||
340 | //L1 analysis | |
341 | Int_t bit = 0; | |
342 | trg.GetTriggerBits(bit); | |
343 | ||
344 | Int_t ts = 0; | |
345 | trg.GetL1TimeSum(ts); | |
346 | if (ts > 0) fMapTrigL1[posY][posX] = ts; | |
347 | fSTUTotal += ts; | |
348 | // cout << "ts =" <<ts<<endl; | |
349 | ||
350 | //L1 | |
28da9717 | 351 | Bool_t isEGA1 = ((bit >> fBitEGA ) & 0x1) && fEventL1G ; |
352 | Bool_t isEGA2 = ((bit >> (fBitEGA+1)) & 0x1) && fEventL1G2 ; | |
353 | Bool_t isEJE1 = ((bit >> fBitEJE ) & 0x1) && fEventL1J ; | |
354 | Bool_t isEJE2 = ((bit >> (fBitEJE+1)) & 0x1) && fEventL1J2 ; | |
46fec84c | 355 | |
356 | //if(isEGA1 || isEGA2 || isEJE1 || isEJE2) nL1Patch++; | |
357 | //if(isEJE1 || isEJE2) printf("Jet STU patch %d, time sum %d, posX %d , posY %d\n",nL1Patch,ts,posX, posY); | |
358 | ||
359 | // L1-Gamma | |
360 | ||
361 | if (isEGA1) | |
362 | { | |
363 | fhL1GPatch ->Fill(posX,posY); | |
364 | if (ts > 0) fMapTrigL1G [posY][posX] = ts; | |
365 | } | |
366 | ||
367 | if (isEGA2) | |
368 | { | |
369 | fhL1G2Patch->Fill(posX,posY); | |
370 | if (ts > 0) fMapTrigL1G2[posY][posX] = ts; | |
371 | } | |
372 | ||
373 | // L1-Jet | |
374 | if (isEJE1) | |
375 | { | |
376 | fhL1JPatch ->Fill(posX,posY); | |
377 | if (ts > 0) fMapTrigL1J [posY][posX] = ts; | |
378 | ||
379 | } | |
380 | ||
381 | if (isEJE2) | |
382 | { | |
383 | fhL1J2Patch->Fill(posX,posY); | |
384 | if (ts > 0) fMapTrigL1J2[posY][posX] = ts; | |
385 | } | |
386 | ||
387 | } | |
388 | } | |
389 | ||
390 | if (!nL0Patch) | |
391 | { | |
392 | fEventL0 = kFALSE; | |
393 | if (!triggerclasses.Contains("CPBI2")) fEventL1G = fEventL1G2 = fEventL1J = fEventL1J2 = kFALSE; // pp running | |
394 | } | |
395 | ||
396 | if(fTRUTotal > fMaxTRUSignal && DebugLevel() > 0) printf("AliAnalysisTaskEMCALTriggerQA::FillTriggerPatchMaps() - Large fTRUTotal %f\n",fTRUTotal); | |
397 | if(fSTUTotal > fMaxSTUSignal && DebugLevel() > 0) printf("AliAnalysisTaskEMCALTriggerQA::FillTriggerPatchMaps() - Large fSTUTotal %d\n",fSTUTotal); | |
398 | ||
399 | } | |
400 | ||
401 | //___________________________________________________ | |
402 | void AliAnalysisTaskEMCALTriggerQA::ClusterAnalysis() | |
403 | { | |
404 | // Loop on clusters and fill corresponding histograms | |
405 | ||
406 | //Get Vertex | |
407 | Double_t v[3] = {0,0,0}; | |
408 | InputEvent()->GetPrimaryVertex()->GetXYZ(v); | |
409 | ||
410 | //clusters distribution | |
411 | TRefArray* caloClus = new TRefArray(); | |
412 | InputEvent()->GetEMCALClusters(caloClus); | |
413 | ||
414 | Int_t nCaloClusters = caloClus->GetEntriesFast(); | |
415 | ||
416 | Float_t emax = 0; | |
417 | Float_t etamax = 0; | |
418 | Float_t phimax = 0; | |
419 | Float_t ietamax=-1; | |
420 | Float_t iphimax=-1; | |
421 | ||
422 | Float_t e = 0; | |
423 | Float_t eta = 0; | |
424 | Float_t phi = 0; | |
425 | ||
426 | Int_t nSupMod = -1, ieta = -1, iphi = -1; | |
427 | ||
428 | TLorentzVector mom; | |
429 | ||
430 | //Get vertex for momentum calculation | |
431 | Double_t vertex[] = {0.0,0.0,0.0}; | |
432 | //InputEvent()->GetPrimaryVertex()->GetXYZ(vertex); | |
433 | ||
434 | Float_t centrality = -1; | |
435 | if(InputEvent()->GetCentrality()) centrality = InputEvent()->GetCentrality()->GetCentralityPercentile("V0M"); | |
436 | ||
437 | for(Int_t icalo = 0; icalo < nCaloClusters; icalo++) | |
438 | { | |
439 | AliVCluster *clus = (AliVCluster*) (caloClus->At(icalo)); | |
440 | ||
441 | if(!clus->IsEMCAL()) continue; | |
442 | ||
443 | if(!fRecoUtils->IsGoodCluster(clus,fGeometry,InputEvent()->GetEMCALCells(),InputEvent()->GetBunchCrossNumber())) | |
444 | continue; | |
445 | ||
446 | if(clus->GetNCells() < 2) continue ; // Avoid 1 cell clusters, noisy, exotic. | |
447 | ||
448 | clus->GetMomentum(mom, vertex); | |
449 | ||
450 | Bool_t shared = kFALSE; | |
451 | Int_t idAbs = -1, iphi0 = -1, ieta0 = -1; | |
452 | fRecoUtils->GetMaxEnergyCell(fGeometry, InputEvent()->GetEMCALCells(),clus, | |
453 | idAbs,nSupMod,ieta0,iphi0,shared); | |
454 | //Change index to be continuous over SM | |
455 | ieta = (nSupMod % 2) ? ieta0 + AliEMCALGeoParams::fgkEMCALCols : ieta0; | |
456 | iphi = iphi0 + AliEMCALGeoParams::fgkEMCALRows * int(nSupMod / 2); | |
457 | ieta/=2; | |
458 | iphi/=2; | |
459 | ||
460 | if(ieta > fgkFALTROCols || iphi > fgkFALTRORows ) | |
461 | printf("AliAnalysisTaskEMCALTriggerQA::UserExec() - Wrong Position (x,y) = (%d,%d)\n",ieta,iphi); | |
462 | ||
463 | e = clus->E(); | |
464 | eta = mom.Eta(); | |
465 | phi = mom.Phi(); | |
466 | ||
467 | if(e > emax) | |
468 | { | |
469 | emax = e; | |
470 | etamax = eta; | |
471 | phimax = phi; | |
472 | ietamax = ieta; | |
473 | iphimax = iphi; | |
474 | } | |
475 | ||
476 | // Fill cluster histograms depending on the event trigger selection | |
477 | if( fEventMB ) FillClusterHistograms(kMBTrig ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
478 | if( fEventCen ) FillClusterHistograms(kCentralTrig ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
479 | if( fEventSem ) FillClusterHistograms(kSemiCentralTrig,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
480 | ||
481 | if( fEventL0 ) FillClusterHistograms(kL0Trig ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
482 | if( fEventL1G ) FillClusterHistograms(kL1GammaTrig ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
483 | if( fEventL1G2) FillClusterHistograms(kL1GammaTrig2 ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
484 | if( fEventL1J ) FillClusterHistograms(kL1JetTrig ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
485 | if( fEventL1J2) FillClusterHistograms(kL1JetTrig2 ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
4c0129b7 | 486 | |
487 | if( fEventL1G2 && !fEventL1G) FillClusterHistograms(kL1Gamma2OnlyGammaTrig,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
488 | if( fEventL1J2 && !fEventL1J) FillClusterHistograms(kL1Jet2OnlyJetTrig ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
489 | ||
46fec84c | 490 | if( fEventL1G && !fEventL1J ) |
491 | FillClusterHistograms (kL1GammaOnlyTrig,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
492 | if( fEventL1J && !fEventL1G ) | |
493 | FillClusterHistograms (kL1JetOnlyTrig ,kFALSE,e,eta,phi,ieta,iphi,centrality,fV0A+fV0C); | |
494 | ||
495 | if( fEventMB && !fEventL1G && !fEventL1J && !fEventL0 ) fhClusMBPure[0] ->Fill(e); | |
496 | if( fEventCen && !fEventL1G && !fEventL1J && !fEventL0 ) fhClusMBPure[1] ->Fill(e); | |
497 | if( fEventSem && !fEventL1G && !fEventL1J && !fEventL0 ) fhClusMBPure[2] ->Fill(e); | |
498 | ||
499 | } | |
500 | ||
501 | // Maximum energy cluster per event histograms | |
502 | ||
503 | if( fEventMB ) FillClusterHistograms(kMBTrig ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
504 | if( fEventCen ) FillClusterHistograms(kCentralTrig ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
505 | if( fEventSem ) FillClusterHistograms(kSemiCentralTrig,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
506 | ||
507 | if( fEventL0 ) FillClusterHistograms(kL0Trig ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
508 | if( fEventL1G ) FillClusterHistograms(kL1GammaTrig ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
509 | if( fEventL1G2) FillClusterHistograms(kL1GammaTrig2 ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
510 | if( fEventL1J ) FillClusterHistograms(kL1JetTrig ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
511 | if( fEventL1J2) FillClusterHistograms(kL1JetTrig2 ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
4c0129b7 | 512 | |
513 | if( fEventL1G2 && !fEventL1G) FillClusterHistograms(kL1Gamma2OnlyGammaTrig,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
514 | if( fEventL1J2 && !fEventL1J) FillClusterHistograms(kL1Jet2OnlyJetTrig ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
515 | ||
46fec84c | 516 | if( fEventL1G && !fEventL1J ) |
517 | FillClusterHistograms (kL1GammaOnlyTrig,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
518 | if( fEventL1J && !fEventL1G ) | |
519 | FillClusterHistograms (kL1JetOnlyTrig ,kTRUE,emax,etamax,phimax,ietamax,iphimax,centrality,fV0A+fV0C); | |
520 | ||
521 | if( fEventMB && !fEventL1G && !fEventL1J && !fEventL0 ) fhClusMaxMBPure[0] ->Fill(emax); | |
522 | if( fEventCen && !fEventL1G && !fEventL1J && !fEventL0 ) fhClusMaxMBPure[1] ->Fill(emax); | |
523 | if( fEventSem && !fEventL1G && !fEventL1J && !fEventL0 ) fhClusMaxMBPure[2] ->Fill(emax); | |
524 | ||
525 | } | |
526 | ||
527 | //______________________________________________________________________________________________ | |
69aa892c | 528 | void AliAnalysisTaskEMCALTriggerQA::FillClusterHistograms(Int_t triggerNumber, Bool_t max, |
529 | Float_t e, Float_t eta, Float_t phi, | |
530 | Float_t ieta, Float_t iphi, | |
46fec84c | 531 | Float_t centrality, Float_t fV0AC) |
31a3f95a | 532 | { |
cf170170 | 533 | //Fill normal cluster related histograms depending on the trigger type selection |
534 | // (10 options, MB, L0, L1 Gamma ... defined in enum triggerType) | |
863e74f5 | 535 | |
31a3f95a | 536 | if(!max) |
537 | { | |
cf170170 | 538 | fhClus [triggerNumber]->Fill(e); |
539 | fhClusCen[triggerNumber]->Fill(e,centrality); | |
46fec84c | 540 | fhClusV0 [triggerNumber]->Fill(e,fV0AC); |
cf170170 | 541 | fhClusEta[triggerNumber]->Fill(e,eta); |
542 | fhClusPhi[triggerNumber]->Fill(e,phi); | |
863e74f5 | 543 | |
544 | if(e > fEtaPhiEnMin) | |
31a3f95a | 545 | { |
cf170170 | 546 | fhClusEtaPhiHigh [triggerNumber]->Fill( eta, phi); |
547 | fhClusEtaPhiHighCellMax[triggerNumber]->Fill(ieta,iphi); | |
31a3f95a | 548 | } |
863e74f5 | 549 | else |
550 | { | |
cf170170 | 551 | fhClusEtaPhiLow [triggerNumber]->Fill( eta, phi); |
552 | fhClusEtaPhiLowCellMax[triggerNumber]->Fill(ieta,iphi); | |
31a3f95a | 553 | } |
554 | } | |
555 | else | |
556 | { | |
cf170170 | 557 | fhClusMax [triggerNumber]->Fill(e); |
558 | fhClusCenMax[triggerNumber]->Fill(e,centrality); | |
46fec84c | 559 | fhClusV0Max [triggerNumber]->Fill(e,fV0AC); |
cf170170 | 560 | fhClusEtaMax[triggerNumber]->Fill(e,eta); |
561 | fhClusPhiMax[triggerNumber]->Fill(e,phi); | |
863e74f5 | 562 | |
563 | if(e > fEtaPhiEnMin) | |
31a3f95a | 564 | { |
cf170170 | 565 | fhClusEtaPhiHighCluMax [triggerNumber]->Fill( eta, phi); |
566 | fhClusEtaPhiHighCellMaxCluMax[triggerNumber]->Fill(ieta,iphi); | |
31a3f95a | 567 | } |
863e74f5 | 568 | else |
569 | { | |
cf170170 | 570 | fhClusEtaPhiLowCluMax [triggerNumber]->Fill( eta, phi); |
571 | fhClusEtaPhiLowCellMaxCluMax[triggerNumber]->Fill(ieta,iphi); | |
31a3f95a | 572 | } |
573 | } | |
574 | } | |
575 | ||
46fec84c | 576 | //_____________________________________________________________ |
577 | void AliAnalysisTaskEMCALTriggerQA::FillCorrelationHistograms() | |
2b4e1cc5 | 578 | { |
46fec84c | 579 | //FEE-TRU-STU correlation checks |
580 | ||
581 | Double_t ampFOR[30] = {0.}, ampL0[30] = {0.}, ampL1[30] = {0.}; | |
582 | for (Int_t i = 0; i < fgkFALTRORows; i++) | |
583 | { | |
584 | for (Int_t j = 0; j < fgkFALTROCols; j++) | |
585 | { | |
586 | //method to get TRU number | |
587 | Int_t idFOR = -1; | |
588 | fGeometry->GetAbsFastORIndexFromPositionInEMCAL(j,i,idFOR); | |
589 | Int_t iTRU = -1; | |
590 | Int_t iADC = -1; | |
591 | fGeometry->GetTRUFromAbsFastORIndex(idFOR,iTRU,iADC); | |
592 | ||
593 | //printf("i %d, j %d, iTRU %d, iADC %d, idFOR %d; cell %f, L0 %f, L1 %f\n", | |
594 | // i,j,iTRU,iADC,idFOR, fMapCell [i][j],fMapTrigL0[i][j],fMapTrigL1[i][j]); | |
595 | ||
596 | if (iTRU >= 0) | |
597 | { | |
598 | ampFOR[iTRU] += fMapCell [i][j]; | |
599 | ampL0[iTRU] += fMapTrigL0[i][j]; | |
600 | ampL1[iTRU] += fMapTrigL1[i][j]; | |
601 | } | |
602 | } | |
603 | } | |
863e74f5 | 604 | |
46fec84c | 605 | // FEE vs STU and TRU vs STU ratios |
606 | for (Int_t i = 0; i < 30; i++) | |
2b4e1cc5 | 607 | { |
46fec84c | 608 | if (ampFOR[i] != 0 && ampL1[i] != 0) |
609 | { | |
610 | fhFEESTU->Fill(ampL1[i]/ampFOR[i],i); | |
611 | if(ampL1[i]/ampFOR[i] > fMaxSTUFEERatio && DebugLevel() > 0 ) printf("AliAnalysisTaskEMCALTriggerQA::FillCorrelationHistograms() - Large STU/FEE ratio %f\n",ampL1[i]/ampFOR[i]); | |
612 | } | |
613 | ||
614 | if (ampL0[i] != 0 && ampL1[i] != 0) | |
615 | { | |
616 | fhTRUSTU->Fill(ampL1[i]/ampL0[i] ,i); | |
617 | if(ampL1[i]/ampL0[i] > fMaxSTUTRURatio && DebugLevel() > 0 ) printf("AliAnalysisTaskEMCALTriggerQA::FillCorrelationHistograms() - Large STU/TRU ratio %f\n",ampL1[i]/ampL0[i]); | |
618 | } | |
2b4e1cc5 | 619 | } |
863e74f5 | 620 | } |
2b4e1cc5 | 621 | |
46fec84c | 622 | //_____________________________________________________________ |
623 | void AliAnalysisTaskEMCALTriggerQA::FillEventCounterHistogram() | |
2b4e1cc5 | 624 | { |
46fec84c | 625 | // Fill a TH1 histogram, each bin corresponds to a even trigger type |
626 | ||
627 | fhNEvents->Fill(0.5); // All physics events | |
628 | ||
629 | if( fEventMB ) | |
630 | { | |
631 | fhNEvents->Fill(1.5); | |
632 | if( !fEventL1G && !fEventL1J && !fEventL1G2 && !fEventL1J2 && !fEventL0 ) fhNEvents->Fill(12.5); | |
633 | } | |
634 | else | |
635 | { | |
636 | if( fEventL0 ) fhNEvents->Fill(13.5); | |
637 | if( fEventL1G ) fhNEvents->Fill(14.5); | |
638 | if( fEventL1J ) fhNEvents->Fill(15.5); | |
639 | } | |
640 | ||
641 | if( fEventCen) fhNEvents->Fill(2.5); | |
642 | if( fEventSem) fhNEvents->Fill(3.5); | |
643 | ||
644 | if( fEventL0 ) | |
645 | { | |
646 | fhNEvents->Fill(4.5); | |
647 | } | |
648 | ||
649 | if( fEventL1G ) | |
650 | { | |
651 | fhNEvents->Fill(5.5); | |
652 | if(!fEventL1J) fhNEvents->Fill(9.5); | |
653 | if(fEventCen || fEventSem) fhNEvents->Fill(16.5); | |
654 | } | |
655 | ||
4c0129b7 | 656 | if( fEventL1G2 ) |
657 | { | |
658 | fhNEvents->Fill(6.5); | |
659 | if( !fEventL1G ) fhNEvents->Fill(18.5); | |
660 | ||
661 | } | |
46fec84c | 662 | |
663 | if( fEventL1J ) | |
664 | { | |
665 | fhNEvents->Fill(7.5); | |
666 | if(!fEventL1G) fhNEvents->Fill(10.5); | |
667 | if(fEventCen || fEventSem) fhNEvents->Fill(17.5); | |
668 | } | |
669 | ||
4c0129b7 | 670 | if( fEventL1J2 ) |
671 | { | |
672 | fhNEvents->Fill(8.5); | |
673 | if( !fEventL1J ) fhNEvents->Fill(19.5); | |
674 | } | |
675 | ||
46fec84c | 676 | if(fEventL1J && fEventL1G) fhNEvents->Fill(11.5); |
677 | ||
678 | } | |
679 | ||
680 | //______________________________________________________________ | |
681 | void AliAnalysisTaskEMCALTriggerQA::FillL1GammaPatchHistograms() | |
682 | { | |
683 | // L1 Gamma | |
684 | ||
685 | // Study fakes - Make it more understandable!!! | |
686 | ||
73c5a035 | 687 | Int_t areAllFakes = 2; |
688 | Int_t numberpatchNotFake = 0; | |
689 | Int_t numberpatchFake = 0; | |
46fec84c | 690 | |
73c5a035 | 691 | Int_t threshold = 10;// 10 GeV !it's not GeV it's ADC !! |
692 | Bool_t enoughE = kFALSE; | |
693 | Double_t patchMax = 0; | |
694 | Int_t colMax = -1; | |
695 | Int_t rowMax = -1; | |
696 | Int_t shiftCol = -1; | |
697 | Int_t shiftRow = -1; | |
46fec84c | 698 | |
699 | // loop on patchs | |
73c5a035 | 700 | for (Int_t posx = 0; posx < fgkFALTROCols; posx++) |
46fec84c | 701 | { |
73c5a035 | 702 | for (Int_t posy = 0; posy < fgkFALTRORows; posy++) |
46fec84c | 703 | { |
73c5a035 | 704 | Double_t patchEnergy = 0; |
46fec84c | 705 | |
73c5a035 | 706 | if(fMapTrigL1G[posy][posx] > 0) |
46fec84c | 707 | { |
73c5a035 | 708 | for(Int_t irow = 0; irow < 2; irow++) |
46fec84c | 709 | { |
73c5a035 | 710 | for(Int_t icol = 0; icol < 2; icol++) |
711 | { | |
712 | // loop on cells | |
713 | shiftCol = posx+icol; | |
714 | shiftRow = posy+irow; | |
715 | ||
716 | // printf("cell[%i,%i]=%f\n",posy+icol,posx+irow, fMapCellL1G[posy+icol][posx+irow]); | |
717 | if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols) | |
718 | patchEnergy += fMapCellL1G[shiftRow][shiftCol] ; | |
719 | ||
720 | if( fMapCellL1G[shiftRow][shiftCol] >threshold/2) enoughE = kTRUE; | |
721 | } | |
46fec84c | 722 | } |
723 | ||
724 | if (patchEnergy > patchMax) | |
725 | { | |
726 | patchMax = patchEnergy; | |
727 | colMax = posx; | |
728 | rowMax = posy; | |
729 | } | |
730 | ||
731 | if(patchEnergy>threshold || (patchEnergy>threshold-3 && enoughE)) | |
732 | { | |
733 | numberpatchNotFake++; | |
734 | fhL1GPatchNotFake ->Fill(posx,posy); | |
735 | fhL1GPatchNotFakeE->Fill(patchEnergy); | |
73c5a035 | 736 | areAllFakes = 1; |
46fec84c | 737 | } |
738 | else | |
739 | { | |
740 | numberpatchFake++; | |
73c5a035 | 741 | areAllFakes = 0; |
742 | fhL1GPatchFake ->Fill(posx,posy); | |
46fec84c | 743 | fhL1GPatchFakeE->Fill(patchEnergy); |
744 | } | |
745 | } | |
746 | } | |
747 | } | |
748 | ||
749 | fhNPatchNotFake->Fill(areAllFakes,numberpatchNotFake); | |
750 | fhNPatchFake ->Fill(areAllFakes,numberpatchFake); | |
751 | ||
73c5a035 | 752 | if(areAllFakes == 0) |
46fec84c | 753 | { |
754 | // loop on patchs | |
73c5a035 | 755 | for (Int_t col = 0; col < fgkFALTROCols; col++) |
46fec84c | 756 | { |
73c5a035 | 757 | for (Int_t row = 0; row < fgkFALTRORows; row++) |
46fec84c | 758 | { |
73c5a035 | 759 | if(fMapTrigL1G[row][col] > 0) |
46fec84c | 760 | { |
761 | // cout <<"checking fMapTrigL1G[row][col]"<<fMapTrigL1G[row][col]<<endl; | |
762 | fhL1GPatchAllFake->Fill(col,row); | |
763 | ||
73c5a035 | 764 | Double_t patchEnergy=0; |
765 | for(Int_t irow = 0; irow < 2; irow++) | |
766 | { | |
767 | for(Int_t icol = 0; icol < 2; icol++) | |
768 | { | |
769 | shiftCol = col+icol; | |
770 | shiftRow = row+irow; | |
771 | ||
772 | if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols) | |
773 | patchEnergy += fMapCellL1G[shiftRow][shiftCol] ; | |
774 | ||
775 | } | |
776 | } | |
46fec84c | 777 | fhL1GPatchAllFakeE->Fill(patchEnergy); |
778 | } | |
779 | } | |
780 | } | |
781 | // cout << "row max"<<rowMax<<" colmax"<<colMax<< " fMapTrigL1G[rowMax][colMax]"<< fMapTrigL1G[rowMax][colMax]<<endl; | |
782 | ||
73c5a035 | 783 | if(fMapTrigL1G[rowMax][colMax] > 0) |
46fec84c | 784 | { |
785 | // printf("\npatch max [%i,%i] = %f\n",rowMax,colMax,patchMax); | |
786 | fhL1GPatchAllFakeMax ->Fill(colMax,rowMax); | |
787 | fhL1GPatchAllFakeMaxE->Fill(patchMax); | |
788 | } | |
789 | } | |
790 | else | |
791 | { | |
792 | // loop on patches | |
73c5a035 | 793 | for (Int_t col = 0; col < fgkFALTROCols; col++) |
46fec84c | 794 | { |
73c5a035 | 795 | for (Int_t row = 0; row < fgkFALTRORows; row++) |
46fec84c | 796 | { |
73c5a035 | 797 | if(fMapTrigL1G[row][col] > 0) |
46fec84c | 798 | { |
73c5a035 | 799 | fhL1GPatchNotAllFake->Fill(col,row); |
800 | ||
801 | Double_t patchEnergy = 0; | |
802 | for(Int_t irow = 0; irow < 2; irow++) | |
803 | { | |
804 | for(Int_t icol = 0; icol < 2; icol++) | |
805 | { | |
806 | shiftCol = col+icol; | |
807 | shiftRow = row+irow; | |
808 | ||
809 | if(shiftRow < fgkFALTRORows && shiftCol < fgkFALTROCols) | |
810 | patchEnergy += fMapCellL1G[shiftRow][shiftCol] ; | |
811 | } | |
812 | } | |
813 | ||
814 | fhL1GPatchNotAllFakeE->Fill(patchEnergy); | |
815 | ||
46fec84c | 816 | } |
46fec84c | 817 | } |
818 | } | |
819 | ||
73c5a035 | 820 | if(fMapTrigL1G[rowMax][colMax] > 0 ) |
46fec84c | 821 | { |
822 | fhL1GPatchNotAllFakeMax ->Fill(colMax,rowMax); | |
823 | fhL1GPatchNotAllFakeMaxE->Fill(patchMax); | |
824 | } | |
825 | } | |
826 | ||
827 | fhGPMaxVV0TT->Fill(fV0Trigger, patchMax); | |
73c5a035 | 828 | if( fEventL1G ) fhL1GPatchMax ->Fill(colMax,rowMax); |
829 | if( fEventL1G2 ) fhL1G2PatchMax->Fill(colMax,rowMax); | |
46fec84c | 830 | |
831 | } | |
832 | ||
833 | //____________________________________________________________ | |
834 | void AliAnalysisTaskEMCALTriggerQA::FillL1JetPatchHistograms() | |
835 | { | |
836 | // L1 Jet | |
837 | ||
73c5a035 | 838 | Double_t patchMax = 0; |
839 | Int_t colMax = -1; | |
840 | Int_t rowMax = -1; | |
841 | Int_t col, row = 0; | |
842 | ||
46fec84c | 843 | for (Int_t i = 0; i < 9; i++) |
844 | { | |
845 | for (Int_t j = 0; j < 12; j++) | |
846 | { | |
847 | Int_t patchJ = 0; | |
848 | col = i; | |
849 | row = j; | |
850 | ||
851 | for (Int_t k = 0; k < 16; k++) | |
852 | { | |
853 | for (Int_t l = 0; l < 16; l++) | |
854 | { | |
855 | patchJ += Int_t(fMapTrigL1[4*j + l][4*i + k]); | |
856 | } | |
857 | } | |
858 | ||
859 | if (patchJ > patchMax) | |
860 | { | |
861 | patchMax = patchJ; | |
862 | colMax = 4*col; | |
863 | rowMax = 4*row; | |
864 | } | |
865 | } | |
866 | } | |
867 | ||
868 | fhJPMaxVV0TT->Fill(fV0Trigger, patchMax); | |
73c5a035 | 869 | if( fEventL1J ) fhL1JPatchMax ->Fill(colMax,rowMax); |
870 | if( fEventL1J2 ) fhL1J2PatchMax->Fill(colMax,rowMax); | |
46fec84c | 871 | |
872 | } | |
873 | ||
874 | //______________________________________________________ | |
875 | void AliAnalysisTaskEMCALTriggerQA::FillMapHistograms() | |
876 | { | |
877 | //Matrix with signal per channel | |
878 | ||
879 | for (Int_t i = 0; i < fgkFALTRORows; i++) | |
880 | { | |
881 | for (Int_t j = 0; j < fgkFALTROCols; j++) //check x,y direction for reading FOR ((0,0) = top left); | |
882 | { | |
883 | fhFORAmp ->Fill( j, i, fMapCell [i][j]); | |
884 | fhFORAmpL1G ->Fill( j, i, fMapCellL1G [i][j]); | |
885 | fhFORAmpL1G2->Fill( j, i, fMapCellL1G2 [i][j]); | |
886 | fhFORAmpL1J ->Fill( j, i, fMapCellL1J [i][j]); | |
887 | fhFORAmpL1J2->Fill( j, i, fMapCellL1J2 [i][j]); | |
888 | fhL0Amp ->Fill( j, i, fMapTrigL0 [i][j]); | |
889 | fhL0AmpL1G ->Fill( j, i, fMapTrigL0L1G[i][j]); | |
890 | fhL0AmpL1J ->Fill( j, i, fMapTrigL0L1J[i][j]); | |
891 | fhL1Amp ->Fill( j, i, fMapTrigL1 [i][j]); | |
892 | ||
893 | fhL1FOREnergy->Fill(i+fgkFALTRORows*j, fMapTrigL1 [i][j]); | |
894 | fhL1GAmp ->Fill( j, i, fMapTrigL1G [i][j]); | |
895 | fhL1G2Amp ->Fill( j, i, fMapTrigL1G2 [i][j]); | |
896 | fhL1JAmp ->Fill( j, i, fMapTrigL1J [i][j]); | |
897 | fhL1J2Amp ->Fill( j, i, fMapTrigL1J2 [i][j]); | |
898 | fhFORMeanAmp->Fill( j, i, fMapCell [i][j]); | |
899 | fhL0MeanAmp ->Fill( j, i, fMapTrigL0 [i][j]); | |
900 | fhL1MeanAmp ->Fill( j, i, fMapTrigL1 [i][j]); | |
901 | } | |
902 | } | |
903 | } | |
904 | ||
905 | //____________________________________________________ | |
906 | void AliAnalysisTaskEMCALTriggerQA::FillV0Histograms() | |
907 | { | |
908 | //V0 analysis, only for ESDs | |
909 | ||
910 | AliESDVZERO* eventV0 = dynamic_cast<AliESDVZERO*> (InputEvent()->GetVZEROData()); | |
911 | ||
912 | if(eventV0) | |
913 | { | |
914 | for (Int_t i = 0; i < 32; i++) | |
915 | { | |
916 | fV0C += eventV0->GetAdcV0C(i); | |
917 | fV0A += eventV0->GetAdcV0A(i); | |
918 | } | |
919 | ||
920 | if (fSTUTotal != 0) | |
921 | { | |
922 | fhV0STU->Fill(fV0A+fV0C,fSTUTotal); | |
923 | if( fV0A+fV0C > fMaxV0Signal && DebugLevel() > 0) printf("AliAnalysisTaskEMCALTriggerQA::UserExec() - Large fV0A+fV0C %f\n",fV0A+fV0C); | |
924 | } | |
925 | ||
926 | if( fEventL1G ) fhV0[kL1GammaTrig] ->Fill(fV0A+fV0C); | |
927 | if( fEventL1G2 ) fhV0[kL1GammaTrig2] ->Fill(fV0A+fV0C); | |
928 | if( fEventL1J ) fhV0[kL1JetTrig] ->Fill(fV0A+fV0C); | |
929 | if( fEventL1J2 ) fhV0[kL1JetTrig2] ->Fill(fV0A+fV0C); | |
930 | if( fEventMB ) fhV0[kMBTrig] ->Fill(fV0A+fV0C); | |
931 | if( fEventL0 ) fhV0[kL0Trig] ->Fill(fV0A+fV0C); | |
932 | if( fEventCen ) fhV0[kCentralTrig] ->Fill(fV0A+fV0C); | |
933 | if( fEventSem ) fhV0[kSemiCentralTrig]->Fill(fV0A+fV0C); | |
4c0129b7 | 934 | if( fEventL1G && !fEventL1J) fhV0[kL1GammaOnlyTrig] ->Fill(fV0A+fV0C); |
935 | if( fEventL1J && !fEventL1G) fhV0[kL1JetOnlyTrig] ->Fill(fV0A+fV0C); | |
936 | if( fEventL1G2 && !fEventL1G) fhV0[kL1Gamma2OnlyGammaTrig]->Fill(fV0A+fV0C); | |
937 | if( fEventL1J2 && !fEventL1J) fhV0[kL1Jet2OnlyJetTrig] ->Fill(fV0A+fV0C); | |
46fec84c | 938 | //if(nL0Patch!=0 || nL1Patch!=0) printf("total TRU %f, total STU %f, V0C+V0A %f; nL0 %d, nL1 %d \n", |
939 | // fTRUTotal,fSTUTotal,fV0A+fV0C,nL0Patch,nL1Patch); | |
940 | } | |
941 | } | |
942 | ||
943 | //________________________________________ | |
944 | void AliAnalysisTaskEMCALTriggerQA::Init() | |
945 | { | |
946 | //Init analysis parameters not set before | |
947 | ||
948 | if(!fRecoUtils) | |
949 | { | |
950 | fRecoUtils = new AliEMCALRecoUtils ; | |
951 | fRecoUtils->SwitchOnBadChannelsRemoval(); | |
952 | } | |
953 | ||
954 | } | |
955 | ||
956 | //_____________________________________________________ | |
957 | void AliAnalysisTaskEMCALTriggerQA::InitCellPatchMaps() | |
958 | { | |
959 | //Init to 0 and per event different cell/patch maps, depending on trigger type | |
960 | ||
961 | for (Int_t i = 0; i < fgkFALTRORows; i++) | |
962 | { | |
963 | for (Int_t j = 0; j < fgkFALTROCols; j++) | |
964 | { | |
965 | fMapTrigL0 [i][j] = 0.; | |
966 | fMapTrigL0L1G[i][j] = 0.; | |
967 | fMapTrigL0L1J[i][j] = 0.; | |
968 | fMapTrigL1G [i][j] = 0.; | |
969 | fMapTrigL1G2 [i][j] = 0.; | |
970 | fMapTrigL1J [i][j] = 0.; | |
971 | fMapTrigL1J2 [i][j] = 0.; | |
972 | fMapTrigL1 [i][j] = 0.; | |
973 | fMapCell [i][j] = 0.; | |
974 | fMapCellL1G [i][j] = 0.; | |
975 | fMapCellL1G2 [i][j] = 0.; | |
976 | fMapCellL1J [i][j] = 0.; | |
977 | fMapCellL1J2 [i][j] = 0.; | |
978 | } | |
979 | } | |
980 | } | |
981 | ||
982 | //________________________________________________ | |
983 | void AliAnalysisTaskEMCALTriggerQA::InitGeometry() | |
984 | { | |
985 | // Init geometry and set the geometry matrix, for the first event, skip the rest | |
986 | // Also set once the run dependent calibrations | |
2b4e1cc5 | 987 | |
988 | if(fGeoSet) return; | |
989 | ||
31a3f95a | 990 | // Init the trigger bit once, correct depending on version |
863e74f5 | 991 | fBitEGA = 4; |
992 | fBitEJE = 5; | |
31a3f95a | 993 | |
994 | TFile* file = AliAnalysisManager::GetAnalysisManager()->GetTree()->GetCurrentFile(); | |
863e74f5 | 995 | |
31a3f95a | 996 | const TList *clist = file->GetStreamerInfoCache(); |
997 | ||
998 | if(clist) | |
863e74f5 | 999 | { |
31a3f95a | 1000 | TStreamerInfo *cinfo = (TStreamerInfo*)clist->FindObject("AliESDCaloTrigger"); |
cf170170 | 1001 | Int_t verid = 5; // newer ESD header version |
1002 | if(!cinfo) | |
1003 | { | |
1004 | cinfo = (TStreamerInfo*)clist->FindObject("AliAODCaloTrigger"); | |
1005 | verid = 2; // newer AOD header version | |
1006 | } | |
863e74f5 | 1007 | if(cinfo) |
31a3f95a | 1008 | { |
1009 | Int_t classversionid = cinfo->GetClassVersion(); | |
cf170170 | 1010 | //printf("********* Header class version %d *********** \n",classversionid); |
31a3f95a | 1011 | |
cf170170 | 1012 | if (classversionid >= verid) |
31a3f95a | 1013 | { |
1014 | fBitEGA = 6; | |
1015 | fBitEJE = 8; | |
1016 | } | |
1017 | } else printf("AliAnalysisTaskEMCALTriggerQA - Streamer info for trigger class not available, bit not changed\n"); | |
1018 | } else printf("AliAnalysisTaskEMCALTriggerQA - Streamer list not available!, bit not changed\n"); | |
1019 | ||
2b4e1cc5 | 1020 | Int_t runnumber = InputEvent()->GetRunNumber() ; |
1021 | ||
1022 | if (!fGeometry) | |
1023 | { | |
1024 | if(fGeoName=="") | |
1025 | { | |
1026 | if (runnumber < 140000) fGeoName = "EMCAL_FIRSTYEARV1"; | |
1027 | else if(runnumber < 171000) fGeoName = "EMCAL_COMPLETEV1"; | |
863e74f5 | 1028 | else fGeoName = "EMCAL_COMPLETE12SMV1"; |
2b4e1cc5 | 1029 | if(DebugLevel() > 0) |
1030 | printf("AliAnalysisTaskEMCALTriggerQA::InitGeometry() - Set EMCAL geometry name to <%s> for run %d\n",fGeoName.Data(),runnumber); | |
1031 | } | |
1032 | ||
863e74f5 | 1033 | fGeometry = AliEMCALGeometry::GetInstance(fGeoName); |
1034 | } | |
bce9493b | 1035 | |
66bdaa44 | 1036 | fGeoSet = kTRUE; |
863e74f5 | 1037 | |
bce9493b | 1038 | } |
1039 | ||
31a3f95a | 1040 | //_______________________________________________________ |
1041 | void AliAnalysisTaskEMCALTriggerQA::InitHistogramArrays() | |
1042 | { | |
31a3f95a | 1043 | //Histograms array initialization |
1044 | ||
4c0129b7 | 1045 | for (Int_t i = 0; i < fgkTriggerCombi; i++) |
863e74f5 | 1046 | { |
cf170170 | 1047 | fhV0 [i] = 0; |
1048 | fhClus [i] = 0; fhClusMax [i] = 0; | |
1049 | fhClusCen[i] = 0; fhClusCenMax[i] = 0; | |
1050 | fhClusV0 [i] = 0; fhClusV0Max [i] = 0; | |
1051 | fhClusEta[i] = 0; fhClusEtaMax[i] = 0; | |
1052 | fhClusPhi[i] = 0; fhClusPhiMax[i] = 0; | |
1053 | ||
1054 | fhClusEtaPhiHigh [i] = 0; fhClusEtaPhiHighCluMax [i] = 0; | |
1055 | fhClusEtaPhiHighCellMax[i] = 0; fhClusEtaPhiHighCellMaxCluMax[i] = 0; | |
1056 | fhClusEtaPhiLow [i] = 0; fhClusEtaPhiLowCluMax [i] = 0; | |
1057 | fhClusEtaPhiLowCellMax [i] = 0; fhClusEtaPhiLowCellMaxCluMax [i] = 0; | |
1058 | ||
1059 | if(i<3){ fhClusMBPure[i] = 0; fhClusMaxMBPure[i] = 0; } | |
31a3f95a | 1060 | } |
31a3f95a | 1061 | } |
1062 | ||
46fec84c | 1063 | //_____________________________________________________________________________ |
1064 | void AliAnalysisTaskEMCALTriggerQA::SetTriggerEventBit( TString triggerclasses) | |
1065 | { | |
1066 | // Check what trigger is the event, set the corresponding bit | |
1067 | ||
1068 | // Init trigger event bit | |
1069 | fEventMB = kFALSE; | |
1070 | fEventL0 = kFALSE; | |
1071 | fEventL1G = kFALSE; | |
1072 | fEventL1G2 = kFALSE; | |
1073 | fEventL1J = kFALSE; | |
1074 | fEventL1J2 = kFALSE; | |
1075 | fEventCen = kFALSE; | |
1076 | fEventSem = kFALSE; | |
1077 | ||
1078 | //Min bias event trigger? | |
1079 | if((triggerclasses.Contains("CINT") || triggerclasses.Contains("CPBI2_B1") ) && | |
1080 | (triggerclasses.Contains("-B-") || triggerclasses.Contains("-I-")) && | |
1081 | triggerclasses.Contains("-NOPF-ALLNOTRD") ) fEventMB = kTRUE; | |
1082 | ||
1083 | // EMC triggered event? Which type? | |
1084 | if( triggerclasses.Contains("-B-") || triggerclasses.Contains("-S-") || triggerclasses.Contains("-I-") ) | |
1085 | { | |
1086 | if( triggerclasses.Contains("CEMC") && | |
1087 | !triggerclasses.Contains("EGA" ) && | |
1088 | !triggerclasses.Contains("EJE" ) && | |
1089 | !triggerclasses.Contains("EG1" ) && | |
1090 | !triggerclasses.Contains("EJ1" ) && | |
1091 | !triggerclasses.Contains("EG2" ) && | |
1092 | !triggerclasses.Contains("EJ2" ) ) fEventL0 = kTRUE; | |
1093 | ||
1094 | if( triggerclasses.Contains("EGA" ) || triggerclasses.Contains("EG1" ) ) fEventL1G = kTRUE; | |
1095 | if( triggerclasses.Contains("EG2" ) ) fEventL1G2 = kTRUE; | |
1096 | ||
1097 | if( triggerclasses.Contains("EJE" ) || triggerclasses.Contains("EJ1" ) ) fEventL1J = kTRUE; | |
1098 | if( triggerclasses.Contains("EJ2" ) ) fEventL1J2 = kTRUE; | |
1099 | } | |
1100 | ||
1101 | // Semi/Central PbPb trigger | |
1102 | if (triggerclasses.Contains("CCENT_R2-B-NOPF-ALLNOTRD")) fEventCen = kTRUE; | |
1103 | else if(triggerclasses.Contains("CSEMI_R1-B-NOPF-ALLNOTRD")) fEventSem = kTRUE; | |
1104 | ||
1105 | // printf("MB : %d; L0 : %d; L1-Gam : %d; L1-Jet : %d; Central : %d; SemiCentral : %d; Trigger Names : %s \n ", | |
1106 | // fEventMB,fEventL0,fEventL1G,fEventL1J,fEventCen,fEventSem,triggerclasses.Data()); | |
1107 | ||
1108 | } | |
1109 | ||
85196c29 | 1110 | //___________________________________________________________ |
863e74f5 | 1111 | void AliAnalysisTaskEMCALTriggerQA::UserCreateOutputObjects() |
bce9493b | 1112 | { |
863e74f5 | 1113 | // Init histograms and geometry |
31a3f95a | 1114 | |
85196c29 | 1115 | fOutputList = new TList; |
1116 | fOutputList ->SetOwner(kTRUE); | |
bce9493b | 1117 | |
4c0129b7 | 1118 | fhNEvents = new TH1F("hNEvents","Number of selected events",20,0,20); |
85196c29 | 1119 | fhNEvents ->SetYTitle("N events"); |
77626b4a | 1120 | fhNEvents ->GetXaxis()->SetBinLabel(1 ,"All"); |
0d896539 | 1121 | fhNEvents ->GetXaxis()->SetBinLabel(2 ,"MB"); |
31a3f95a | 1122 | fhNEvents ->GetXaxis()->SetBinLabel(3 ,"Central Pb"); |
1123 | fhNEvents ->GetXaxis()->SetBinLabel(4 ,"SemiCentral Pb"); | |
1124 | fhNEvents ->GetXaxis()->SetBinLabel(5 ,"L0"); | |
4c0129b7 | 1125 | fhNEvents ->GetXaxis()->SetBinLabel(6 ,"L1-G1"); |
6be2314f | 1126 | fhNEvents ->GetXaxis()->SetBinLabel(7 ,"L1-G2"); |
4c0129b7 | 1127 | fhNEvents ->GetXaxis()->SetBinLabel(8 ,"L1-J1"); |
6be2314f | 1128 | fhNEvents ->GetXaxis()->SetBinLabel(9 ,"L1-J2"); |
4c0129b7 | 1129 | fhNEvents ->GetXaxis()->SetBinLabel(10 ,"L1-G1 & !L1-J1"); |
1130 | fhNEvents ->GetXaxis()->SetBinLabel(11 ,"L1-J1 & !L1-G1"); | |
1131 | fhNEvents ->GetXaxis()->SetBinLabel(12 ,"L1-J1 & L1-G1"); | |
6be2314f | 1132 | fhNEvents ->GetXaxis()->SetBinLabel(13 ,"MB & !L1 & !L0"); |
1133 | fhNEvents ->GetXaxis()->SetBinLabel(14,"L0 & !MB"); | |
4c0129b7 | 1134 | fhNEvents ->GetXaxis()->SetBinLabel(15,"L1-G1 & !MB"); |
1135 | fhNEvents ->GetXaxis()->SetBinLabel(16,"L1-J1 & !MB"); | |
1136 | fhNEvents ->GetXaxis()->SetBinLabel(17,"L1-G1 & (Cen | Semi)"); | |
1137 | fhNEvents ->GetXaxis()->SetBinLabel(18,"L1-J1 & (Cen | Semi)"); | |
1138 | fhNEvents ->GetXaxis()->SetBinLabel(19,"L1-G2 & !L1-G1"); | |
1139 | fhNEvents ->GetXaxis()->SetBinLabel(20,"L1-J2 & !L1-J1"); | |
1140 | ||
75e10d6a | 1141 | fhFORAmp = new TH2F("hFORAmp", "FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column", |
1142 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1143 | fhFORAmp ->SetXTitle("Index #eta (columnns)"); | |
e022364d | 1144 | fhFORAmp ->SetYTitle("Index #phi (rows)"); |
1145 | fhFORAmp ->SetZTitle("Amplitude"); | |
e395081d | 1146 | |
75e10d6a | 1147 | fhFORAmpL1G = new TH2F("hFORAmpL1G", "FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1G trigger condition", |
1148 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1149 | fhFORAmpL1G ->SetXTitle("Index #eta (columnns)"); | |
a40222c8 | 1150 | fhFORAmpL1G ->SetYTitle("Index #phi (rows)"); |
1151 | fhFORAmpL1G ->SetZTitle("Amplitude"); | |
863e74f5 | 1152 | |
6be2314f | 1153 | fhFORAmpL1G2 = new TH2F("hFORAmpL1G2", "FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1G2 trigger condition", |
cf170170 | 1154 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1155 | fhFORAmpL1G2 ->SetXTitle("Index #eta (columnns)"); |
1156 | fhFORAmpL1G2 ->SetYTitle("Index #phi (rows)"); | |
1157 | fhFORAmpL1G2 ->SetZTitle("Amplitude"); | |
e395081d | 1158 | |
75e10d6a | 1159 | fhFORAmpL1J = new TH2F("hFORAmpL1J", "FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1J trigger condition", |
1160 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1161 | fhFORAmpL1J ->SetXTitle("Index #eta (columnns)"); | |
a40222c8 | 1162 | fhFORAmpL1J ->SetYTitle("Index #phi (rows)"); |
1163 | fhFORAmpL1J ->SetZTitle("Amplitude"); | |
863e74f5 | 1164 | |
6be2314f | 1165 | fhFORAmpL1J2 = new TH2F("hFORAmpL1J2", "FEE cells deposited energy, grouped like FastOR 2x2 per Row and Column, with L1J2 trigger condition", |
cf170170 | 1166 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1167 | fhFORAmpL1J2 ->SetXTitle("Index #eta (columnns)"); |
1168 | fhFORAmpL1J2 ->SetYTitle("Index #phi (rows)"); | |
1169 | fhFORAmpL1J2 ->SetZTitle("Amplitude"); | |
cf170170 | 1170 | |
aff917ac | 1171 | |
75e10d6a | 1172 | fhL0Amp = new TH2F("hL0Amp","FALTRO signal per Row and Column", |
1173 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1174 | fhL0Amp ->SetXTitle("Index #eta (columnns)"); | |
e022364d | 1175 | fhL0Amp ->SetYTitle("Index #phi (rows)"); |
1176 | fhL0Amp ->SetZTitle("Amplitude"); | |
e395081d | 1177 | |
75e10d6a | 1178 | fhL0AmpL1G = new TH2F("hL0AmpL1G","FALTRO signal per Row and Column, with L1G trigger condition", |
1179 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1180 | fhL0AmpL1G ->SetXTitle("Index #eta (columnns)"); | |
a40222c8 | 1181 | fhL0AmpL1G ->SetYTitle("Index #phi (rows)"); |
1182 | fhL0AmpL1G ->SetZTitle("Amplitude"); | |
863e74f5 | 1183 | |
e395081d | 1184 | |
75e10d6a | 1185 | fhL0AmpL1J = new TH2F("hL0AmpL1J","FALTRO signal per Row and Column, with L1j trigger condition", |
1186 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1187 | fhL0AmpL1J ->SetXTitle("Index #eta (columnns)"); | |
a40222c8 | 1188 | fhL0AmpL1J ->SetYTitle("Index #phi (rows)"); |
1189 | fhL0AmpL1J ->SetZTitle("Amplitude"); | |
863e74f5 | 1190 | |
aff917ac | 1191 | |
75e10d6a | 1192 | fhL1Amp = new TH2F("hL1Amp","STU signal per Row and Column", |
1193 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1194 | fhL1Amp ->SetXTitle("Index #eta (columnns)"); | |
aff917ac | 1195 | fhL1Amp ->SetYTitle("Index #phi (rows)"); |
1196 | fhL1Amp ->SetZTitle("Amplitude"); | |
1197 | ||
75e10d6a | 1198 | fhL1GAmp = new TH2F("hL1GAmp","STU signal per Row and Column for L1 Gamma", |
1199 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1200 | fhL1GAmp ->SetXTitle("Index #eta (columnns)"); | |
e022364d | 1201 | fhL1GAmp ->SetYTitle("Index #phi (rows)"); |
1202 | fhL1GAmp ->SetZTitle("Amplitude"); | |
863e74f5 | 1203 | |
6be2314f | 1204 | fhL1G2Amp = new TH2F("hL1G2Amp","STU signal per Row and Column for L1 Gamma2", |
cf170170 | 1205 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1206 | fhL1G2Amp ->SetXTitle("Index #eta (columnns)"); |
1207 | fhL1G2Amp ->SetYTitle("Index #phi (rows)"); | |
1208 | fhL1G2Amp ->SetZTitle("Amplitude"); | |
aff917ac | 1209 | |
75e10d6a | 1210 | fhL1JAmp = new TH2F("hL1JAmp","STU signal per Row and Column for L1 Jet", |
77626b4a | 1211 | fgkFALTROCols/4,0,fgkFALTROCols,fgkFALTRORows/4,0,fgkFALTRORows); |
75e10d6a | 1212 | fhL1JAmp ->SetXTitle("Index #eta (columnns)"); |
e022364d | 1213 | fhL1JAmp ->SetYTitle("Index #phi (rows)"); |
1214 | fhL1JAmp ->SetZTitle("Amplitude"); | |
863e74f5 | 1215 | |
6be2314f | 1216 | fhL1J2Amp = new TH2F("hL1J2Amp","STU signal per Row and Column for L1 Jet2", |
cf170170 | 1217 | fgkFALTROCols/4,0,fgkFALTROCols,fgkFALTRORows/4,0,fgkFALTRORows); |
6be2314f | 1218 | fhL1J2Amp ->SetXTitle("Index #eta (columnns)"); |
1219 | fhL1J2Amp ->SetYTitle("Index #phi (rows)"); | |
1220 | fhL1J2Amp ->SetZTitle("Amplitude"); | |
863e74f5 | 1221 | |
6be2314f | 1222 | fhL1FOREnergy = new TH2F("hL1FOREnergy","FOR index vs FOR energy", |
cf170170 | 1223 | fgkFALTROCols*fgkFALTRORows,0,fgkFALTROCols*fgkFALTRORows,200,0,200); |
6be2314f | 1224 | fhL1FOREnergy ->SetXTitle("Index FOR"); |
1225 | fhL1FOREnergy ->SetYTitle("Energy (ADC)"); | |
aff917ac | 1226 | |
75e10d6a | 1227 | fhL0Patch = new TH2F("hL0Patch","FOR with associated L0 Patch", |
1228 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1229 | fhL0Patch ->SetXTitle("Index #eta (columnns)"); | |
85196c29 | 1230 | fhL0Patch ->SetYTitle("Index #phi (rows)"); |
e022364d | 1231 | fhL0Patch ->SetZTitle("counts"); |
aff917ac | 1232 | |
75e10d6a | 1233 | fhL1GPatch = new TH2F("hL1GPatch","FOR with associated L1 Gamma Patch", |
1234 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1235 | fhL1GPatch ->SetXTitle("Index #eta (columnns)"); | |
85196c29 | 1236 | fhL1GPatch ->SetYTitle("Index #phi (rows)"); |
e022364d | 1237 | fhL1GPatch ->SetZTitle("counts"); |
863e74f5 | 1238 | |
6be2314f | 1239 | fhL1G2Patch = new TH2F("hL1G2Patch","FOR with associated L1 Gamma2 Patch", |
cf170170 | 1240 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1241 | fhL1G2Patch ->SetXTitle("Index #eta (columnns)"); |
1242 | fhL1G2Patch ->SetYTitle("Index #phi (rows)"); | |
1243 | fhL1G2Patch ->SetZTitle("counts"); | |
1244 | ||
1245 | fhL1GPatchNotFake = new TH2F("hL1GPatchNotFake","FOR with L1 Gamma Patch associated to energetic cells", | |
cf170170 | 1246 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1247 | fhL1GPatchNotFake ->SetXTitle("Index #eta (columnns)"); |
1248 | fhL1GPatchNotFake ->SetYTitle("Index #phi (rows)"); | |
1249 | fhL1GPatchNotFake ->SetZTitle("counts"); | |
863e74f5 | 1250 | |
6be2314f | 1251 | fhL1GPatchFake = new TH2F("hL1GPatchFake","FOR without L1 Gamma Patch associated to energetic cells", |
cf170170 | 1252 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1253 | fhL1GPatchFake ->SetXTitle("Index #eta (columnns)"); |
1254 | fhL1GPatchFake ->SetYTitle("Index #phi (rows)"); | |
1255 | fhL1GPatchFake ->SetZTitle("counts"); | |
863e74f5 | 1256 | |
1257 | ||
6be2314f | 1258 | fhL1GPatchNotAllFake = new TH2F("hL1GPatchNotAllFake","FOR with one L1 Gamma Patch associated to an energetic cell", |
cf170170 | 1259 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1260 | fhL1GPatchNotAllFake ->SetXTitle("Index #eta (columnns)"); |
1261 | fhL1GPatchNotAllFake ->SetYTitle("Index #phi (rows)"); | |
1262 | fhL1GPatchNotAllFake ->SetZTitle("counts"); | |
863e74f5 | 1263 | |
6be2314f | 1264 | fhL1GPatchAllFake = new TH2F("hL1GPatchAllFake","FOR without any L1 Gamma Patch associated to an energetic cell", |
cf170170 | 1265 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1266 | fhL1GPatchAllFake ->SetXTitle("Index #eta (columnns)"); |
1267 | fhL1GPatchAllFake ->SetYTitle("Index #phi (rows)"); | |
1268 | fhL1GPatchAllFake ->SetZTitle("counts"); | |
863e74f5 | 1269 | |
6be2314f | 1270 | fhL1GPatchAllFakeMax = new TH2F("hL1GPatchAllFakeMax","FOR with L1 Gamma Patch Max not associated to an energetic cell", |
cf170170 | 1271 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1272 | fhL1GPatchAllFakeMax ->SetXTitle("Index #eta (columnns)"); |
1273 | fhL1GPatchAllFakeMax ->SetYTitle("Index #phi (rows)"); | |
1274 | fhL1GPatchAllFakeMax ->SetZTitle("counts"); | |
863e74f5 | 1275 | |
6be2314f | 1276 | fhL1GPatchNotAllFakeMax = new TH2F("hL1GPatchNotAllFakeMax","FOR with one L1 Gamma Patch Max associated to an energetic cell", |
cf170170 | 1277 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1278 | fhL1GPatchNotAllFakeMax ->SetXTitle("Index #eta (columnns)"); |
1279 | fhL1GPatchNotAllFakeMax ->SetYTitle("Index #phi (rows)"); | |
1280 | fhL1GPatchNotAllFakeMax ->SetZTitle("counts"); | |
863e74f5 | 1281 | |
1282 | fhL1GPatchNotAllFakeMaxE = new TH1F("hL1GPatchNotAllFakeMaxE","Energy distribution of FOR in events with L1 Gamma Patch Max associated to an energetic cell", | |
cf170170 | 1283 | fNBinsClusterE,0,fMaxClusterE); |
863e74f5 | 1284 | fhL1GPatchNotAllFakeMaxE ->SetXTitle("Energy (GeV)"); |
aff917ac | 1285 | |
863e74f5 | 1286 | |
6be2314f | 1287 | fhL1GPatchAllFakeMaxE = new TH1F("hL1GPatchAllFakeMaxE","Energy distribution of FOR in events with L1 Gamma Patch Max not associated to an energetic cell", |
cf170170 | 1288 | fNBinsClusterE,0,fMaxClusterE); |
863e74f5 | 1289 | fhL1GPatchAllFakeMaxE ->SetXTitle("Energy (GeV)"); |
6be2314f | 1290 | |
1291 | fhL1GPatchNotAllFakeE = new TH1F("hL1GPatchNotAllFakeE","Energy distribution of FOR in events with L1 Gamma Patch not associated to an energetic cell", | |
cf170170 | 1292 | fNBinsClusterE,0,fMaxClusterE); |
863e74f5 | 1293 | fhL1GPatchNotAllFakeE ->SetXTitle("Energy (GeV)"); |
1294 | ||
6be2314f | 1295 | fhL1GPatchAllFakeE = new TH1F("hL1GPatchAllFakeE","Energy distribution of FOR in events with L1 Gamma Patch associated to an energetic cell", |
cf170170 | 1296 | fNBinsClusterE,0,fMaxClusterE); |
863e74f5 | 1297 | fhL1GPatchAllFakeE ->SetXTitle("Energy (GeV)"); |
1298 | ||
1299 | ||
6be2314f | 1300 | fhL1GPatchFakeE = new TH1F("hL1GPatchFakeE","Energy distribution of FOR with L1 Gamma Patch not associated to an energetic cell", |
cf170170 | 1301 | fNBinsClusterE,0,fMaxClusterE); |
863e74f5 | 1302 | fhL1GPatchFakeE ->SetXTitle("Energy (GeV)"); |
1303 | ||
6be2314f | 1304 | fhL1GPatchNotFakeE = new TH1F("hL1GPatchNotFakeE","Energy distribution of FOR with L1 Gamma Patch associated to an energetic cell", |
cf170170 | 1305 | fNBinsClusterE,0,fMaxClusterE); |
863e74f5 | 1306 | fhL1GPatchNotFakeE ->SetXTitle("Energy (GeV)"); |
1307 | ||
73c5a035 | 1308 | fhNPatchFake = new TH2F("hNPatchFake","number of fake patchs vs. all patchs are fake", |
cf170170 | 1309 | 3,0,3, 2880,0,2880); |
46fec84c | 1310 | fhNPatchFake ->SetYTitle("number of fake patchs"); |
1311 | fhNPatchFake ->SetXTitle("all fake event"); | |
1312 | fhNPatchFake ->SetZTitle("counts"); | |
863e74f5 | 1313 | |
1314 | ||
73c5a035 | 1315 | fhNPatchNotFake = new TH2F("hNPatchNotFake","number of Not fake patchs vs. all patchs are fake", |
cf170170 | 1316 | 3, 0, 3, 2000,0,2000); |
46fec84c | 1317 | fhNPatchNotFake ->SetYTitle("number of Not fake patchs"); |
1318 | fhNPatchNotFake ->SetXTitle("all fake event"); | |
1319 | fhNPatchNotFake ->SetZTitle("counts"); | |
863e74f5 | 1320 | |
1321 | ||
75e10d6a | 1322 | fhL1JPatch = new TH2F("hL1JPatch","FOR with associated L1 Jet Patch", |
77626b4a | 1323 | fgkFALTROCols/4,0,fgkFALTROCols,fgkFALTRORows/4,0,fgkFALTRORows); |
75e10d6a | 1324 | fhL1JPatch ->SetXTitle("Index #eta (columnns)"); |
85196c29 | 1325 | fhL1JPatch ->SetYTitle("Index #phi (rows)"); |
e022364d | 1326 | fhL1JPatch ->SetZTitle("counts"); |
863e74f5 | 1327 | |
6be2314f | 1328 | fhL1J2Patch = new TH2F("hL1J2Patch","FOR with associated L1 Jet2 Patch", |
cf170170 | 1329 | fgkFALTROCols/4,0,fgkFALTROCols,fgkFALTRORows/4,0,fgkFALTRORows); |
6be2314f | 1330 | fhL1J2Patch ->SetXTitle("Index #eta (columnns)"); |
1331 | fhL1J2Patch ->SetYTitle("Index #phi (rows)"); | |
1332 | fhL1J2Patch ->SetZTitle("counts"); | |
aff917ac | 1333 | |
75e10d6a | 1334 | fhV0STU = new TH2I("hV0STU","Total signal STU vs V0C+V0S", |
1335 | fNBinsV0Signal,0,fMaxV0Signal,fNBinsSTUSignal,0,fMaxSTUSignal); | |
85196c29 | 1336 | fhV0STU ->SetXTitle("Signal V0C+V0A"); |
1337 | fhV0STU ->SetYTitle("Total signal STU"); | |
e022364d | 1338 | fhV0STU ->SetZTitle("counts"); |
aff917ac | 1339 | |
480b9db0 | 1340 | |
85196c29 | 1341 | fhFEESTU = new TH2F("hFEESTU","STU / FEE vs channel", fNBinsSTUFEERatio,0,fMaxSTUFEERatio,30,0,30); |
1342 | fhFEESTU ->SetXTitle("STU/FEE signal"); | |
1343 | fhFEESTU ->SetYTitle("channel"); | |
e022364d | 1344 | fhFEESTU ->SetZTitle("counts"); |
aff917ac | 1345 | |
85196c29 | 1346 | fhTRUSTU = new TH2F("hTRUSTU","STU / TRU vs channel", fNBinsSTUTRURatio,0,fMaxSTUTRURatio,30,0,30); |
1347 | fhTRUSTU ->SetXTitle("STU/TRU signal"); | |
1348 | fhTRUSTU ->SetYTitle("channel"); | |
e022364d | 1349 | fhTRUSTU ->SetZTitle("counts"); |
aff917ac | 1350 | |
0d896539 | 1351 | fhGPMaxVV0TT = new TH2F("hGPMaxVV0TT","Maximum patch of L1-Gamma vs V0 signal in STU",fNBinsV0Signal,0,fMaxV0Signal,1000,0,1000); |
1352 | fhGPMaxVV0TT ->SetXTitle("V0 from STU"); | |
faa45c63 | 1353 | fhGPMaxVV0TT ->SetYTitle("Patch Max"); |
4ee53435 | 1354 | |
0d896539 | 1355 | fhJPMaxVV0TT = new TH2F("hJPMaxVV0TT","Maximum patch of L1-Jet vs V0 signal in STU",fNBinsV0Signal,0,fMaxV0Signal,1000,0,1000); |
1356 | fhJPMaxVV0TT ->SetXTitle("V0 from STU"); | |
faa45c63 | 1357 | fhJPMaxVV0TT ->SetYTitle("Patch Max"); |
ec77a234 | 1358 | |
0d896539 | 1359 | fhFORMeanAmp = new TProfile2D("hFORMeanAmp", "Mean FastOR(FEE) signal per Row and Column", fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
1360 | fhFORMeanAmp->SetXTitle("Index #eta"); | |
1361 | fhFORMeanAmp->SetYTitle("Index #phi"); | |
1362 | ||
1363 | fhL0MeanAmp = new TProfile2D("hL0MeanAmp", "Mean FastOR(TRU) signal per Row and Column", fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1364 | fhL0MeanAmp->SetXTitle("Index #eta"); | |
1365 | fhL0MeanAmp->SetYTitle("Index #phi"); | |
4ee53435 | 1366 | |
0d896539 | 1367 | fhL1MeanAmp = new TProfile2D("hL1MeanAmp", "Mean FastOR(STU) signal per Row and Column", fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
1368 | fhL1MeanAmp->SetXTitle("Index #eta"); | |
1369 | fhL1MeanAmp->SetYTitle("Index #phi"); | |
ec77a234 | 1370 | |
0d896539 | 1371 | fhL1GPatchMax = new TH2F("hL1GPatchMax","FOR of max amplitude patch with associated L1 Gamma Patch", |
ec77a234 | 1372 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
0d896539 | 1373 | fhL1GPatchMax ->SetXTitle("Index #eta (columnns)"); |
1374 | fhL1GPatchMax ->SetYTitle("Index #phi (rows)"); | |
1375 | fhL1GPatchMax ->SetZTitle("counts"); | |
863e74f5 | 1376 | |
6be2314f | 1377 | fhL1G2PatchMax = new TH2F("hL1G2PatchMax","FOR of max amplitude patch with associated L1 Gamma2 Patch", |
cf170170 | 1378 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); |
6be2314f | 1379 | fhL1G2PatchMax ->SetXTitle("Index #eta (columnns)"); |
1380 | fhL1G2PatchMax ->SetYTitle("Index #phi (rows)"); | |
1381 | fhL1G2PatchMax ->SetZTitle("counts"); | |
0d896539 | 1382 | |
1383 | fhL1JPatchMax = new TH2F("hL1JPatchMax","FOR of max amplitude patch with associated L1 Jet Patch", | |
ec77a234 | 1384 | fgkFALTROCols/4,0,fgkFALTROCols,fgkFALTRORows/4,0,fgkFALTRORows); |
0d896539 | 1385 | fhL1JPatchMax ->SetXTitle("Index #eta (columnns)"); |
1386 | fhL1JPatchMax ->SetYTitle("Index #phi (rows)"); | |
1387 | fhL1JPatchMax ->SetZTitle("counts"); | |
863e74f5 | 1388 | |
6be2314f | 1389 | fhL1J2PatchMax = new TH2F("hL1JPatchMax","FOR of max amplitude patch with associated L1 Jet2 Patch", |
cf170170 | 1390 | fgkFALTROCols/4,0,fgkFALTROCols,fgkFALTRORows/4,0,fgkFALTRORows); |
6be2314f | 1391 | fhL1J2PatchMax ->SetXTitle("Index #eta (columnns)"); |
1392 | fhL1J2PatchMax ->SetYTitle("Index #phi (rows)"); | |
1393 | fhL1J2PatchMax ->SetZTitle("counts"); | |
0d896539 | 1394 | |
bce9493b | 1395 | fOutputList->Add(fhNEvents); |
1396 | fOutputList->Add(fhV0STU); | |
e022364d | 1397 | fOutputList->Add(fhFORAmp); |
a40222c8 | 1398 | fOutputList->Add(fhFORAmpL1G); |
6be2314f | 1399 | fOutputList->Add(fhFORAmpL1G2); |
a40222c8 | 1400 | fOutputList->Add(fhFORAmpL1J); |
6be2314f | 1401 | fOutputList->Add(fhFORAmpL1J2); |
e022364d | 1402 | fOutputList->Add(fhL0Amp); |
a40222c8 | 1403 | fOutputList->Add(fhL0AmpL1G); |
1404 | fOutputList->Add(fhL0AmpL1J); | |
aff917ac | 1405 | fOutputList->Add(fhL1Amp); |
e022364d | 1406 | fOutputList->Add(fhL1GAmp); |
6be2314f | 1407 | fOutputList->Add(fhL1G2Amp); |
e022364d | 1408 | fOutputList->Add(fhL1JAmp); |
6be2314f | 1409 | fOutputList->Add(fhL1J2Amp); |
1410 | fOutputList->Add(fhL1FOREnergy); | |
bce9493b | 1411 | fOutputList->Add(fhL0Patch); |
1412 | fOutputList->Add(fhL1GPatch); | |
6be2314f | 1413 | fOutputList->Add(fhL1G2Patch); |
1414 | fOutputList->Add(fhL1GPatchNotFake); | |
1415 | fOutputList->Add(fhL1GPatchFake); | |
1416 | fOutputList->Add(fhL1GPatchAllFake); | |
1417 | fOutputList->Add(fhL1GPatchNotAllFake); | |
1418 | fOutputList->Add(fhL1GPatchNotAllFakeMax); | |
1419 | fOutputList->Add(fhL1GPatchAllFakeMax); | |
863e74f5 | 1420 | fOutputList->Add(fhL1GPatchNotAllFakeMaxE); |
6be2314f | 1421 | fOutputList->Add(fhL1GPatchAllFakeMaxE); |
863e74f5 | 1422 | fOutputList->Add(fhL1GPatchNotAllFakeE); |
6be2314f | 1423 | fOutputList->Add(fhL1GPatchAllFakeE); |
863e74f5 | 1424 | fOutputList->Add(fhL1GPatchFakeE); |
6be2314f | 1425 | fOutputList->Add(fhL1GPatchNotFakeE); |
46fec84c | 1426 | fOutputList->Add(fhNPatchFake); |
1427 | fOutputList->Add(fhNPatchNotFake); | |
863e74f5 | 1428 | |
bce9493b | 1429 | fOutputList->Add(fhL1JPatch); |
6be2314f | 1430 | fOutputList->Add(fhL1J2Patch); |
ec77a234 | 1431 | fOutputList->Add(fhFEESTU); |
1432 | fOutputList->Add(fhTRUSTU); | |
1433 | ||
1434 | fOutputList->Add(fhGPMaxVV0TT); | |
1435 | fOutputList->Add(fhJPMaxVV0TT); | |
1436 | ||
1437 | fOutputList->Add(fhFORMeanAmp); | |
1438 | fOutputList->Add(fhL0MeanAmp); | |
1439 | fOutputList->Add(fhL1MeanAmp); | |
863e74f5 | 1440 | |
ec77a234 | 1441 | fOutputList->Add(fhL1GPatchMax); |
6be2314f | 1442 | fOutputList->Add(fhL1G2PatchMax); |
ec77a234 | 1443 | fOutputList->Add(fhL1JPatchMax); |
6be2314f | 1444 | fOutputList->Add(fhL1J2PatchMax); |
ec77a234 | 1445 | |
1446 | // Cluster histograms, E | |
4c0129b7 | 1447 | TString hName [] = {"MB","L0","L1G1","L1G2","L1J1","L1J2","L1G1NoL1J1","L1J1NoLG1","L1G2NoL1G1","L1J2NoL1J1","Central","SemiCentral"}; |
1448 | TString hTitle [] = {"MB trigger","L0 trigger","L1 Gamma1 trigger","L1 Gamma2 trigger","L1 Jet1 trigger","L1 Jet2 trigger", | |
1449 | "L1 Gamma1 trigger and not L1 Jet1" ,"L1 Jet1 trigger and not L1 Gamma1", | |
1450 | "L1 Gamma2 trigger and not L1 Gamma1","L1 Jet2 trigger and not L1 Jet1", | |
1451 | "Central trigger","SemiCentral trigger"}; | |
863e74f5 | 1452 | |
31a3f95a | 1453 | for(Int_t i=0; i < 3; i++) |
1454 | { | |
1455 | Int_t j = i+5; | |
1456 | if(i==0)j=0; | |
1457 | ||
1458 | fhClusMBPure[i] = new TH1F(Form("hClus%sPure",hName[j].Data()), | |
1459 | Form("clusters E distribution for %s, no other EMCAL trigger on",hTitle[j].Data()), | |
1460 | fNBinsClusterE,0,fMaxClusterE); | |
1461 | fhClusMBPure[i] ->SetXTitle("Energy (GeV)"); | |
1462 | fOutputList->Add(fhClusMBPure[i]); | |
863e74f5 | 1463 | |
31a3f95a | 1464 | fhClusMaxMBPure[i] = new TH1F(Form("hClusMax%sPure",hName[j].Data()), |
1465 | Form("maximum energy cluster per event for %s, no other EMCAL trigger on",hTitle[j].Data()), | |
cf170170 | 1466 | fNBinsClusterE,0,fMaxClusterE); |
31a3f95a | 1467 | fhClusMaxMBPure[i] ->SetXTitle("Energy (GeV)"); |
863e74f5 | 1468 | fOutputList->Add(fhClusMaxMBPure[i]); |
31a3f95a | 1469 | } |
bce9493b | 1470 | |
4c0129b7 | 1471 | for(Int_t i=0; i < fgkTriggerCombi; i++) |
31a3f95a | 1472 | { |
1473 | fhV0[i] = new TH1F(Form("hV0%s",hName[i].Data()), | |
cf170170 | 1474 | Form("V0 distribution for %s",hTitle[i].Data()), |
1475 | fNBinsV0Signal,0,fMaxV0Signal); | |
31a3f95a | 1476 | fhV0[i]->SetXTitle("V0"); |
1477 | fOutputList->Add(fhV0[i] ); | |
863e74f5 | 1478 | |
31a3f95a | 1479 | fhClus[i] = new TH1F(Form("hClus%s",hName[i].Data()), |
1480 | Form("clusters E distribution for %s",hTitle[i].Data()), | |
1481 | fNBinsClusterE,0,fMaxClusterE); | |
1482 | fhClus[i] ->SetXTitle("Energy (GeV)"); | |
1483 | fOutputList->Add(fhClus[i]); | |
1484 | ||
1485 | fhClusMax[i] = new TH1F(Form("hClusMax%s",hName[i].Data()), | |
1486 | Form("maximum energy cluster per event for %s",hTitle[i].Data()), | |
1487 | fNBinsClusterE,0,fMaxClusterE); | |
1488 | fhClusMax[i]->SetXTitle("Energy (GeV)"); | |
1489 | fOutputList->Add(fhClusMax[i]); | |
1490 | ||
1491 | // Cluster histograms, E vs Cen | |
1492 | ||
1493 | fhClusCen[i] = new TH2F(Form("hClusCen%s",hName[i].Data()), | |
1494 | Form("clusters E distribution vs centrality for %s",hTitle[i].Data()), | |
1495 | fNBinsClusterE,0,fMaxClusterE,100, 0, 100); | |
1496 | fhClusCen[i] ->SetXTitle("Energy (GeV)"); | |
1497 | fhClusCen[i] ->SetYTitle("Centrality"); | |
863e74f5 | 1498 | fOutputList->Add(fhClusCen[i]); |
31a3f95a | 1499 | |
1500 | fhClusCenMax[i] = new TH2F(Form("hClusCenMax%s",hName[i].Data()), | |
1501 | Form("maximum energy cluster per event vs centrality for %s",hTitle[i].Data()), | |
1502 | fNBinsClusterE,0,fMaxClusterE,100, 0, 100); | |
1503 | fhClusCenMax[i]->SetXTitle("Energy (GeV)"); | |
1504 | fhClusCenMax[i]->SetYTitle("Centrality"); | |
1505 | fOutputList->Add(fhClusCenMax[i]); | |
1506 | ||
1507 | // Cluster histograms, E vs V0 | |
1508 | ||
1509 | fhClusV0[i] = new TH2F(Form("hClusV0%s",hName[i].Data()), | |
1510 | Form("clusters E distribution vs V0 for %s",hTitle[i].Data()), | |
1511 | fNBinsClusterE,0,fMaxClusterE,fNBinsV0Signal,0,fMaxV0Signal); | |
1512 | fhClusV0[i] ->SetXTitle("Energy (GeV)"); | |
863e74f5 | 1513 | fhClusV0[i] ->SetYTitle("V0"); |
31a3f95a | 1514 | fOutputList->Add(fhClusV0[i]); |
1515 | ||
1516 | fhClusV0Max[i] = new TH2F(Form("hClusV0Max%s",hName[i].Data()), | |
1517 | Form("maximum energy cluster per event vs V0 for %s",hTitle[i].Data()), | |
1518 | fNBinsClusterE,0,fMaxClusterE,fNBinsV0Signal,0,fMaxV0Signal); | |
1519 | fhClusV0Max[i]->SetXTitle("Energy (GeV)"); | |
1520 | fhClusV0Max[i]->SetYTitle("V0"); | |
1521 | fOutputList->Add(fhClusV0Max[i]); | |
1522 | ||
1523 | // Cluster histograms, E vs Pseudorapidity | |
1524 | Float_t etamin =-0.8; | |
1525 | Float_t etamax = 0.8; | |
1526 | Int_t neta = 160; | |
1527 | fhClusEta[i] = new TH2F(Form("hClusEta%s",hName[i].Data()), | |
1528 | Form("clusters distribution vs #eta for %s",hTitle[i].Data()), | |
1529 | fNBinsClusterE,0,fMaxClusterE,neta, etamin, etamax); | |
1530 | fhClusEta[i] ->SetXTitle("Energy (GeV)"); | |
1531 | fhClusEta[i] ->SetYTitle("#eta"); | |
863e74f5 | 1532 | fOutputList->Add(fhClusEta[i]); |
31a3f95a | 1533 | |
1534 | fhClusEtaMax[i] = new TH2F(Form("hClusEtaMax%s",hName[i].Data()), | |
1535 | Form("maximum energy cluster per event vs #eta for %s",hTitle[i].Data()), | |
1536 | fNBinsClusterE,0,fMaxClusterE,neta, etamin, etamax); | |
1537 | fhClusEtaMax[i]->SetXTitle("Energy (GeV)"); | |
1538 | fhClusEtaMax[i]->SetYTitle("#eta"); | |
1539 | fOutputList->Add(fhClusEtaMax[i]); | |
1540 | ||
1541 | // Cluster histograms, E vs Azimuthal angle | |
1542 | Float_t phimin = 80. *TMath::DegToRad(); | |
1543 | Float_t phimax = 190.*TMath::DegToRad(); | |
1544 | Int_t nphi = 110; | |
1545 | ||
1546 | fhClusPhi[i] = new TH2F(Form("hClusPhi%s",hName[i].Data()), | |
1547 | Form("clusters distribution vs #phi for %s",hTitle[i].Data()), | |
1548 | fNBinsClusterE,0,fMaxClusterE,nphi, phimin, phimax); | |
1549 | fhClusPhi[i] ->SetXTitle("Energy (GeV)"); | |
1550 | fhClusPhi[i] ->SetYTitle("#phi (rad)"); | |
863e74f5 | 1551 | fOutputList->Add(fhClusPhi[i]); |
31a3f95a | 1552 | |
1553 | fhClusPhiMax[i] = new TH2F(Form("hClusPhiMax%s",hName[i].Data()), | |
1554 | Form("maximum energy cluster per event vs #phi for %s",hTitle[i].Data()), | |
1555 | fNBinsClusterE,0,fMaxClusterE,nphi, phimin, phimax); | |
1556 | fhClusPhiMax[i]->SetXTitle("Energy (GeV)"); | |
863e74f5 | 1557 | fhClusPhiMax[i]->SetYTitle("#phi (rad)"); |
31a3f95a | 1558 | fOutputList->Add(fhClusPhiMax[i]); |
1559 | ||
1560 | // Cluster histograms, Pseudorapidity vs Azimuthal angle | |
1561 | ||
1562 | fhClusEtaPhiHigh[i] = new TH2F(Form("hClusEtaPhiHigh%s",hName[i].Data()), | |
1563 | Form("clusters distribution #eta vs #phi for %s, E > 10 GeV",hTitle[i].Data()), | |
1564 | neta, etamin, etamax,nphi, phimin, phimax); | |
1565 | fhClusEtaPhiHigh[i] ->SetXTitle("#eta"); | |
1566 | fhClusEtaPhiHigh[i] ->SetYTitle("#phi (rad)"); | |
863e74f5 | 1567 | fOutputList->Add(fhClusEtaPhiHigh[i]); |
31a3f95a | 1568 | |
1569 | fhClusEtaPhiHighCluMax[i] = new TH2F(Form("hClusEtaPhiHighCluMax%s",hName[i].Data()), | |
1570 | Form("maximum energy cluster per event #eta vs #phi for %s, E > 10 GeV",hTitle[i].Data()), | |
1571 | neta, etamin, etamax,nphi, phimin, phimax); | |
1572 | fhClusEtaPhiHighCluMax[i]->SetXTitle("#eta"); | |
1573 | fhClusEtaPhiHighCluMax[i]->SetYTitle("#phi (rad)"); | |
1574 | fOutputList->Add(fhClusEtaPhiHighCluMax[i]); | |
1575 | ||
1576 | fhClusEtaPhiLow[i] = new TH2F(Form("hClusEtaPhiLow%s",hName[i].Data()), | |
1577 | Form("clusters distribution #eta vs #phi for %s, E < 10 GeV",hTitle[i].Data()), | |
1578 | neta, etamin, etamax,nphi, phimin, phimax); | |
1579 | fhClusEtaPhiLow[i] ->SetXTitle("#eta"); | |
1580 | fhClusEtaPhiLow[i] ->SetYTitle("#phi (rad)"); | |
1581 | fOutputList->Add(fhClusEtaPhiLow[i]); | |
1582 | ||
1583 | fhClusEtaPhiLowCluMax[i] = new TH2F(Form("hClusEtaPhiLowCluMax%s",hName[i].Data()), | |
1584 | Form("maximum energy cluster per event #eta vs #phi for %s, E < 10 GeV",hTitle[i].Data()), | |
1585 | neta, etamin, etamax,nphi, phimin, phimax); | |
1586 | fhClusEtaPhiLowCluMax[i]->SetXTitle("#eta"); | |
1587 | fhClusEtaPhiLowCluMax[i]->SetYTitle("#phi (rad)"); | |
1588 | fOutputList->Add(fhClusEtaPhiLowCluMax[i]); | |
1589 | ||
1590 | fhClusEtaPhiHighCellMax[i] = new TH2F(Form("hClusEtaPhiHighCellMax%s",hName[i].Data()), | |
1591 | Form("Cluster hit map in calorimeter (max cell), column vs row for %s, E > 10 GeV",hTitle[i].Data()), | |
1592 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1593 | fhClusEtaPhiHighCellMax[i] ->SetXTitle("Index #eta (columnns)"); | |
1594 | fhClusEtaPhiHighCellMax[i] ->SetYTitle("Index #phi (rows)"); | |
1595 | fOutputList->Add(fhClusEtaPhiHighCellMax[i]); | |
1596 | ||
1597 | fhClusEtaPhiHighCellMaxCluMax[i] = new TH2F(Form("hClusEtaPhiHighCellMaxCluMax%s",hName[i].Data()), | |
1598 | Form("Max E cluster hit map in calorimeter (max cell), column vs row for %s, E > 10 GeV", | |
1599 | hTitle[i].Data()),fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1600 | fhClusEtaPhiHighCellMaxCluMax[i]->SetXTitle("Index #eta (columnns)"); | |
1601 | fhClusEtaPhiHighCellMaxCluMax[i]->SetYTitle("Index #phi (rows)"); | |
1602 | fOutputList->Add(fhClusEtaPhiHighCellMaxCluMax[i]); | |
1603 | ||
1604 | fhClusEtaPhiLowCellMax[i] = new TH2F(Form("hClusEtaPhiLowCellMax%s",hName[i].Data()), | |
1605 | Form("Cluster hit map in calorimeter (max cell), column vs row for %s, E < 10 GeV",hTitle[i].Data()), | |
1606 | fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1607 | fhClusEtaPhiLowCellMax[i] ->SetXTitle("Index #eta (columnns)"); | |
1608 | fhClusEtaPhiLowCellMax[i] ->SetYTitle("#phi (rad)"); | |
1609 | fOutputList->Add(fhClusEtaPhiLowCellMax[i]); | |
1610 | ||
1611 | fhClusEtaPhiLowCellMaxCluMax[i] = new TH2F(Form("hClusEtaPhiLowCellMaxCluMax%s",hName[i].Data()), | |
1612 | Form("Max E cluster hit map in calorimeter (max cell), column vs row for %s, E < 10 GeV", | |
1613 | hTitle[i].Data()),fgkFALTROCols,0,fgkFALTROCols,fgkFALTRORows,0,fgkFALTRORows); | |
1614 | fhClusEtaPhiLowCellMaxCluMax[i]->SetXTitle("Index #eta (columnns)"); | |
863e74f5 | 1615 | fhClusEtaPhiLowCellMaxCluMax[i]->SetYTitle("#phi (rad)"); |
31a3f95a | 1616 | fOutputList->Add(fhClusEtaPhiLowCellMaxCluMax[i]); |
1617 | } | |
ec77a234 | 1618 | |
863e74f5 | 1619 | PostData(1, fOutputList); |
bce9493b | 1620 | } |
cf170170 | 1621 | |
85196c29 | 1622 | //______________________________________________________ |
863e74f5 | 1623 | void AliAnalysisTaskEMCALTriggerQA::UserExec(Option_t *) |
bce9493b | 1624 | { |
1625 | // Main loop | |
863e74f5 | 1626 | |
bce9493b | 1627 | AliVEvent* event = InputEvent(); |
1628 | ||
997b261e | 1629 | if (!event) |
bce9493b | 1630 | { |
997b261e | 1631 | AliError("No Event, exit"); |
bce9493b | 1632 | return; |
1633 | } | |
1634 | ||
2b4e1cc5 | 1635 | InitGeometry(); // only once, must be done before OADB, geo OADB accessed here |
1636 | ||
1637 | if(fAccessOADB) AccessOADB(); // only once | |
1638 | ||
46fec84c | 1639 | InitCellPatchMaps(); //init to 0 map for cells and patches |
1640 | ||
a40222c8 | 1641 | //trigger configuration |
997b261e | 1642 | TString triggerclasses = event->GetFiredTriggerClasses(); |
77626b4a | 1643 | |
997b261e | 1644 | Int_t eventType = ((AliVHeader*)event->GetHeader())->GetEventType(); |
46fec84c | 1645 | //std::cout << "trigger = " << triggerclasses << std::endl; |
1646 | ||
6b4638cc | 1647 | // physics events eventType=7, select only those |
6b4638cc | 1648 | if(triggerclasses=="" || eventType != 7) return; |
0d896539 | 1649 | |
46fec84c | 1650 | SetTriggerEventBit(triggerclasses); |
997b261e | 1651 | |
46fec84c | 1652 | FillEventCounterHistogram(); |
0d896539 | 1653 | |
46fec84c | 1654 | FillCellMaps(); |
0d896539 | 1655 | |
46fec84c | 1656 | FillTriggerPatchMaps(triggerclasses); |
bce9493b | 1657 | |
46fec84c | 1658 | FillMapHistograms(); |
bce9493b | 1659 | |
46fec84c | 1660 | FillV0Histograms(); |
bce9493b | 1661 | |
46fec84c | 1662 | FillL1GammaPatchHistograms(); |
bce9493b | 1663 | |
46fec84c | 1664 | FillL1JetPatchHistograms(); |
6be2314f | 1665 | |
46fec84c | 1666 | // FEE vs STU vs TRU |
1667 | FillCorrelationHistograms(); | |
863e74f5 | 1668 | |
46fec84c | 1669 | ClusterAnalysis(); |
0d896539 | 1670 | |
863e74f5 | 1671 | PostData(1, fOutputList); |
85196c29 | 1672 | |
1673 | } |