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