ATLAS Offline Software
Loading...
Searching...
No Matches
MDTRawDataUtilsRun3.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
6// Utils for the main MdtRawDataMonAlg.cxx
7// Part of MdtRawDataMonAlg.h
8// Authors
9// see MdtRawDataMonAlg.cxx
11
12#include <TLine.h>
13#include <TList.h>
14#include <TString.h>
15
16#include <string>
17
18#include "MdtRawDataMonAlg.h"
21
22using std::string;
23
24StatusCode MdtRawDataMonAlg::binMdtGlobal(TH2* h, char ecap) {
25 // Set x-axis labels
26 int LowerEta = 0;
27 int UpperEta = 0;
28 if (ecap == 'B') {
29 LowerEta = -8;
30 UpperEta = 8;
31 } else {
32 LowerEta = -6;
33 UpperEta = 6;
34 }
35 TString eta_s;
36 for (int ieta = LowerEta; ieta != UpperEta + 1; ++ieta) {
37 if (ieta == 0 && ecap == 'E') continue;
38 eta_s = ecap;
39 (ieta < 0) ? eta_s += "C" : ((ieta > 0) ? eta_s += "A" : eta_s += "B");
40 eta_s += std::to_string(std::abs(ieta));
41 h->Fill(eta_s, 1, 0);
42 }
43
44 // Set y-axis labels
45 TString phi_s;
46 for (int iphi = 1; iphi <= 16; iphi++) {
47 if (iphi < 10)
48 phi_s = "0" + std::to_string(iphi);
49 else
50 phi_s = std::to_string(iphi);
51 if (ecap == 'B' && (iphi == 11 || iphi == 15)) {
52 h->Fill(eta_s, "I," + phi_s + ",R", 0);
53 h->Fill(eta_s, "I," + phi_s + ",M", 0);
54 h->Fill(eta_s, "M," + phi_s, 0);
55 h->Fill(eta_s, "O," + phi_s, 0);
56 } else {
57 h->Fill(eta_s, "I," + phi_s, 0);
58 h->Fill(eta_s, "M," + phi_s, 0);
59 h->Fill(eta_s, "O," + phi_s, 0);
60 if (iphi % 2 == 0 && ecap == 'B')
61 h->Fill(eta_s, "E," + phi_s, 0);
62 else if (ecap == 'E')
63 h->Fill(eta_s, "E," + phi_s, 0);
64 }
65 }
66
67 h->LabelsDeflate("X");
68 h->LabelsDeflate("Y");
69 h->LabelsOption("a", "Y");
70 h->Reset();
71
72 return StatusCode::SUCCESS;
73}
74
75StatusCode MdtRawDataMonAlg::binMdtRegional(TH2* h, std::string_view xAxis) {
77 int LowerEta = -0;
78 int UpperEta = 0;
79 if (xAxis.substr(0, 2) == "BO" || xAxis.substr(0, 2) == "BI") { // Barrel Hit Mutltiplicities
80 LowerEta = -8;
81 UpperEta = 8;
82 } else if (xAxis.substr(0, 2) == "BM" || xAxis.substr(0, 2) == "EO") {
83 LowerEta = -6;
84 UpperEta = 6;
85 } else if (xAxis.substr(0, 2) == "EM" || xAxis.substr(0, 2) == "EI") {
86 LowerEta = -5;
87 UpperEta = 5;
88 } else {
89 LowerEta = -2;
90 UpperEta = 2;
91 }
92
93 // Set x-axis labels
94 TString eta_s;
95 for (int ieta = LowerEta; ieta != UpperEta + 1; ++ieta) {
96 if (xAxis.substr(2, 1) == "A" && ieta < 0) continue; // A side goes from 1-...
97 if (xAxis.substr(2, 1) == "C" && ieta == 0) break; // C side goes from ...-1
98 if (ieta == 0 && xAxis.substr(0, 2) == "BO")
99 eta_s = "BOB";
100 else if (ieta == 0)
101 continue;
102 else
103 eta_s = xAxis.substr(0, 3);
104 eta_s += std::to_string(std::abs(ieta));
105 h->Fill(eta_s, 1, 0);
106 }
107
108 bool barrelExtra = (xAxis == "BEA" || xAxis == "BEC");
109 // Set y-axis labels
110 TString phi_s;
111 for (int iphi = 1; iphi <= 16; iphi++) {
112 if (iphi < 10)
113 phi_s = "0" + std::to_string(iphi);
114 else
115 phi_s = std::to_string(iphi);
116 if (!barrelExtra) {
117 // Also uncomment lines in MdtRawDataValAlg.cxx in fillMDTSummaryHistograms() that actually fill these values
118 if (xAxis.substr(0, 2) == "BI" && (iphi == 11 || iphi == 15)) {
119 h->Fill(eta_s, phi_s + ",1,R", 0);
120 h->Fill(eta_s, phi_s + ",2,R", 0);
121 h->Fill(eta_s, phi_s + ",1,M", 0);
122 h->Fill(eta_s, phi_s + ",2,M", 0);
123 } else {
124 h->Fill(eta_s, phi_s + ",1", 0);
125 h->Fill(eta_s, phi_s + ",2", 0);
126 }
127 } else if (iphi % 2 == 0)
128 h->Fill(eta_s, phi_s + ",1", 0);
129 } // loop over phi
130
131 h->LabelsDeflate("X");
132 h->LabelsDeflate("Y");
133 h->Reset();
134
135 return StatusCode::SUCCESS;
136}
137
138StatusCode MdtRawDataMonAlg::binMdtGlobal_byLayer(TH2* nHits_In, TH2* nHits_Mid, TH2* nHits_Out) {
139 for (int iPhi = 1; iPhi != 17; ++iPhi) {
140 TString phiString = "";
141 if (iPhi < 10)
142 phiString = "0" + std::to_string(iPhi);
143 else
144 phiString = std::to_string(iPhi);
145 TString phiString_ml1 = phiString + ",1";
146 TString phiString_ml2 = phiString + ",2";
147 if (iPhi == 11 || iPhi == 15) {
148 TString phiString_ml1_BIR = phiString + ",1,R";
149 TString phiString_ml2_BIR = phiString + ",2,R";
150 nHits_In->Fill("EIC5", phiString_ml1_BIR, 0.);
151 nHits_In->Fill("EIC5", phiString_ml2_BIR, 0.);
152 TString phiString_ml1_BIM = phiString + ",1,M";
153 TString phiString_ml2_BIM = phiString + ",2,M";
154 nHits_In->Fill("EIC5", phiString_ml1_BIM, 0.);
155 nHits_In->Fill("EIC5", phiString_ml2_BIM, 0.);
156 } else {
157 nHits_In->Fill("EIC5", phiString_ml1, 0.);
158 nHits_In->Fill("EIC5", phiString_ml2, 0.);
159 }
160 nHits_Mid->Fill("EMC5", phiString_ml1, 0.);
161 nHits_Mid->Fill("EMC5", phiString_ml2, 0.);
162 nHits_Out->Fill("EOC6", phiString_ml1, 0.);
163 nHits_Out->Fill("EOC6", phiString_ml2, 0.);
164 }
165 for (int iEta = 6; iEta != -2; --iEta) {
166 TString etaIn = "EIC" + std::to_string(iEta);
167 TString etaMid = "EMC" + std::to_string(iEta);
168 TString etaOut = "EOC" + std::to_string(iEta);
169 if (iEta > 0) {
170 if (iEta < 6) {
171 nHits_In->Fill(etaIn, "01,1", 0);
172 nHits_Mid->Fill(etaMid, "01,1", 0);
173 }
174 nHits_Out->Fill(etaOut, "01,1", 0);
175 } else {
176 nHits_In->Fill("", "01,1", 0);
177 nHits_Mid->Fill("", "01,1", 0);
178 nHits_Out->Fill("", "01,1", 0);
179 }
180 }
181 // Add BIR11/15 separately at a higher eta station
182
183 // BEE, EE chambers on inner plots
184 for (int iEta = -4; iEta != 1; ++iEta) {
185 TString etaIn = "";
186 if (iEta < -2) {
187 etaIn = "EEC" + std::to_string(std::abs(iEta + 2));
188 nHits_In->Fill(etaIn, "01,1", 0);
189 } else if (iEta < 0) {
190 etaIn = "BEC" + std::to_string(std::abs(iEta));
191 nHits_In->Fill(etaIn, "01,1", 0);
192 } else
193 nHits_In->Fill(" ", "01,1", 0);
194 }
195
196 for (int iEta = -8; iEta != 11; ++iEta) {
197 TString etaIn = "";
198 TString etaMid = "";
199 TString etaOut = "";
200 if (iEta < 0) {
201 etaIn = "BIC" + std::to_string(std::abs(iEta));
202 etaOut = "BOC" + std::to_string(std::abs(iEta));
203 if (iEta > -7) { etaMid = "BMC" + std::to_string(std::abs(iEta)); }
204 } else if (iEta == 0) {
205 etaOut = "BOB" + std::to_string(iEta);
206 } else if (iEta < 9) {
207 etaIn = "BIA" + std::to_string(iEta);
208 etaOut = "BOA" + std::to_string(iEta);
209 if (iEta < 7) { etaMid = "BMA" + std::to_string(iEta); }
210 }
211 if (iEta < 9) {
212 nHits_In->Fill(etaIn, "01,1", 0);
213 nHits_Mid->Fill(etaMid, "01,1", 0);
214 nHits_Out->Fill(etaOut, "01,1", 0);
215 } else {
216 nHits_In->Fill(" ", "01,1", 0);
217 nHits_Mid->Fill(" ", "01,1", 0);
218 nHits_Out->Fill(" ", "01,1", 0);
219 }
220 }
221
222 // BEE, EE chambers on inner plots
223 for (int iEta = 1; iEta != 6; ++iEta) {
224 TString etaIn = "";
225 if (iEta < 3) {
226 etaIn = "BEA" + std::to_string(std::abs(iEta));
227 nHits_In->Fill(etaIn, "01,1", 0);
228 } else if (iEta < 5) {
229 etaIn = "EEA" + std::to_string(std::abs(iEta - 2));
230 nHits_In->Fill(etaIn, "01,1", 0);
231 } else
232 nHits_In->Fill(" ", "01,1", 0);
233 }
234
235 for (int iEta = 1; iEta != 7; ++iEta) {
236 TString etaIn = "EIA" + std::to_string(iEta);
237 TString etaMid = "EMA" + std::to_string(iEta);
238 TString etaOut = "EOA" + std::to_string(iEta);
239 if (iEta < 6) {
240 nHits_In->Fill(etaIn, "01,1", 0);
241 nHits_Mid->Fill(etaMid, "01,1", 0);
242 }
243 nHits_Out->Fill(etaOut, "01,1", 0);
244 }
245
246 nHits_In->LabelsDeflate("X");
247 nHits_In->LabelsDeflate("Y");
248 nHits_In->LabelsOption("v", "x");
249 nHits_In->Reset();
250 nHits_Mid->LabelsDeflate("X");
251 nHits_Mid->LabelsDeflate("Y");
252 nHits_Mid->LabelsOption("v", "x");
253 nHits_Mid->Reset();
254 nHits_Out->LabelsDeflate("X");
255 nHits_Out->LabelsDeflate("Y");
256 nHits_Out->LabelsOption("v", "x");
257 nHits_Out->Reset();
258
259 return StatusCode::SUCCESS;
260}
261
262// Correct for CutOuts
263void MdtRawDataMonAlg::ChamberTubeNumberCorrection(int& tubeNum, std::string_view hardware_name, int tubePos, int numLayers) {
264 // numLayers should be mdt_layer-1 so numLayers = 0 implies layer 1 ML 1 or mdt_layer==1
265 if (hardware_name.substr(0, 4) == "BMS4" || hardware_name.substr(0, 4) == "BMS6") { // layer 1-4 tubeId 41-48 cut out
266 if (numLayers <= 2) tubeNum = tubePos + numLayers * 48;
267 }
268 if (hardware_name.substr(0, 3) == "BIR" && numLayers <= 3) {
269 if (hardware_name.substr(5, 2) == "11" || hardware_name.substr(5, 2) == "15") {
270 if (hardware_name.substr(3, 1) == "1") tubeNum = tubePos + 6 + numLayers * 30; // layer 1-4 tube id 1-6 cut out
271 if (hardware_name.substr(3, 1) == "2") tubeNum = tubePos + numLayers * 30; // layer 1-4 tube id 28-30 cut out
272 if (hardware_name.substr(3, 1) == "4") tubeNum = tubePos + 3 + numLayers * 30; // layer 1-4 tube id 1-3 cut out
273 if (hardware_name.substr(3, 1) == "5") tubeNum = tubePos + numLayers * 24; // layer 1-4 tube id 22-24 cut out
274 }
275 }
276 if (hardware_name.substr(0, 3) == "BIR" && hardware_name.substr(3, 1) == "3") tubeNum = tubePos + numLayers * 36; // cut out on both ML
277 if (hardware_name == "EEL1A05" || hardware_name == "EEL1C05")
278 tubeNum = tubePos + numLayers * 48; // mdtIdHelper gives wrong #tubes/layer (incidentally also wrong #layers)
279}
280
281// Correct for F@#!ing mdtIdHelper
282void MdtRawDataMonAlg::CorrectTubeMax(const std::string& hardware_name, int& numTubes) {
283 if (hardware_name == "EEL1A05" || hardware_name == "EEL1C05") numTubes = 48;
284}
285
286// Correct for F@#!ing mdtIdHelper
287void MdtRawDataMonAlg::CorrectLayerMax(const std::string& hardware_name, int& numLayers) {
288 if (hardware_name == "EEL1A05" || hardware_name == "EEL1C05") numLayers = 3;
289}
290
291// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
292// Private function to select mdt chambersId of the spectrometer
293
295 ATH_MSG_DEBUG("in MDT ChambersIDvector");
296
297 std::vector<Identifier>::const_iterator idfirst = m_idHelperSvc->mdtIdHelper().module_begin();
298 std::vector<Identifier>::const_iterator idlast = m_idHelperSvc->mdtIdHelper().module_end();
299
300 IdContext mdtModuleContext = m_idHelperSvc->mdtIdHelper().module_context();
301 Identifier Id;
302 IdentifierHash Idhash;
303 for (std::vector<Identifier>::const_iterator i = idfirst; i != idlast; ++i) {
304 Id = *i;
305 int gethash_code = m_idHelperSvc->mdtIdHelper().get_hash(Id, Idhash, &mdtModuleContext);
306 m_chambersId.push_back(Id);
307 m_chambersIdHash.push_back(Idhash);
308
309 std::string extid = m_idHelperSvc->mdtIdHelper().show_to_string(Id);
310 ATH_MSG_DEBUG("Adding the chamber Identifier: " << extid);
311 if (gethash_code == 0) {
312 ATH_MSG_VERBOSE(" its hash Id is " << Idhash);
313 } else {
314 ATH_MSG_VERBOSE(" hash Id NOT computed " << Idhash);
315 }
316 }
317 m_hist_hash_list.resize(m_chambersIdHash.size());
318}
319
320// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
321int MdtRawDataMonAlg::mezzmdt(const Identifier& digcoll_id) const {
322 int TotmezzTubes = 8;
323 if (cachedTubeLayerMax(digcoll_id) == 4) TotmezzTubes = 6;
324 int Imezz = (int)((m_idHelperSvc->mdtIdHelper().tube(digcoll_id) - 1) / TotmezzTubes) +
325 (int)((m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id) - 1) * ((cachedTubeMax(digcoll_id)) / TotmezzTubes));
326
327 return Imezz;
328}
329
330// Get the Maximum # of tubes in the chamber
331// the 'if' statements are for chambers with ML1 != ML2
332// except for BIS8 -- mdtIdHelper gets the # layers wrong in this instance
333int MdtRawDataMonAlg::GetTubeMax(const Identifier& digcoll_id, std::string_view hardware_name) {
334 int tubeMax(0);
335 if (hardware_name.substr(0, 4) == "BIS8") { // Why does mdtIdHelper get this one wrong?
336 tubeMax = 16 * 3;
337 } else if (hardware_name.substr(0, 4) == "BIR5") {
338 // tubeMax = 21*4 + 24*4;
339 tubeMax = 24 * 4 + 24 * 4;
340 } else if (hardware_name.substr(0, 4) == "BIR2" || hardware_name.substr(0, 4) == "BIR4") {
341 // tubeMax = 27*4 + 30*4;
342 tubeMax = 30 * 4 + 30 * 4;
343 } else if (hardware_name.substr(0, 4) == "BIR3") {
344 tubeMax = 36 * 4 + 36 * 4;
345 } else if (hardware_name.substr(0, 4) == "BIR1") {
346 // tubeMax = 24*4 + 30*4;
347 tubeMax = 30 * 4 + 30 * 4;
348 } else if (hardware_name.substr(0, 4) == "BMS4" || hardware_name.substr(0, 4) == "BMS6") {
349 // tubeMax = 40*3 + 48*3;
350 tubeMax = 48 * 3 + 48 * 3;
351 } else if (hardware_name == "EEL1A05" || hardware_name == "EEL1C05") {
352 tubeMax = 48 * 3 + 48 * 3;
353 } else if (hardware_name.substr(0, 3) == "BME") {
354 tubeMax = 546;
355 } else {
356 int numtubes = m_idHelperSvc->mdtIdHelper().tubeMax(digcoll_id);
357 int numlayers = m_idHelperSvc->mdtIdHelper().tubeLayerMax(digcoll_id);
358 int numML = m_idHelperSvc->mdtIdHelper().numberOfMultilayers(digcoll_id);
359 tubeMax = numtubes * numlayers * numML;
360 }
361 return tubeMax;
362}
363
364bool MdtRawDataMonAlg::AinB(int A, std::vector<int>& B) {
365 for (int i : B) {
366 if (i == A) return true;
367 }
368 return false;
369}
370
371// StatusCode MdtRawDataMonAlg::GetTimingInfo() {
372// m_time = -1;
373
374// SG::ReadHandle<xAOD::EventInfo> evt(m_eventInfo);
375// m_time = (1000000000L*(uint64_t)evt->timeStamp()+evt->timeStampNSOffset()) * 0.000000001;
376
377// // protection against simulated cosmics when the trigger_info() of the event_info is not filled and returns a null pointer.
378// //trigtype = eventInfo->level1TriggerType();
379
381 bool filterresult(true);
382 if (!m_DQFilterTools.empty()) {
383 ToolHandleArray<IDQFilterTool>::const_iterator ifilter(m_DQFilterTools.begin()), filterend(m_DQFilterTools.end());
384 for (; filterresult && (ifilter != filterend); ++ifilter) { filterresult = (filterresult && (*ifilter)->accept()); }
385 }
386 m_atlas_ready = filterresult;
387}
388
389std::string MdtRawDataMonAlg::getChamberName(const Muon::MdtPrepData* hit) const { return getChamberName(hit->identify()); }
390
391std::string MdtRawDataMonAlg::getChamberName(const Identifier& id) const {
392 IdentifierHash idHash{0};
393 const MdtIdHelper& id_helper = m_idHelperSvc->mdtIdHelper();
394 id_helper.get_module_hash(id, idHash);
395 MDTChamber* chamber{nullptr};
396 if (getChamber(idHash, chamber).isSuccess()) return chamber->getName();
397 return convertChamberName(id_helper.stationName(id), id_helper.stationEta(id), id_helper.stationPhi(id), "MDT");
398}
399
400StatusCode MdtRawDataMonAlg::getChamber(const IdentifierHash& id, MDTChamber*& chamber) const {
401 if (id >= m_hist_hash_list.size()) return StatusCode::FAILURE;
402 chamber = m_hist_hash_list[id].get();
403 if (!chamber) return StatusCode::FAILURE;
404
405 return StatusCode::SUCCESS;
406}
407
408int MdtRawDataMonAlg::get_bin_for_LB_hist(int region, int layer, int phi, int eta, bool isBIM) const {
409 if (region == 0 || region == 1) { // Barrel
410
411 if (layer == 0) { // Inner
412 if (eta < 6) {
413 if (phi < 11 && !isBIM)
414 return 18 * (eta - 1) + phi;
415 else if ((phi == 10 && isBIM) || (phi < 15 && !isBIM))
416 return 18 * (eta - 1) + phi + 1;
417 else
418 return 18 * (eta - 1) + phi + 2;
419 } else if (eta == 6)
420 return 90 + phi;
421 else if (eta == 7)
422 return 106 + (phi / 2);
423 else if (eta == 8)
424 return 114 + (phi / 2);
425 }
426
427 else if (layer == 1) { // Middle
428 // 95 = 1 + 16 + 16 + 16 + 16 + 16 + 14 total number of phi sectors (+1)
429 // in the last eta-sector (6) there is no phi-sector 13; ie there are no chambers BML6A13 and BML6C13, so there are only 14 phi
430 // sectos we move the bin of phi=14 directly above phi=12 so there is no white line in the histogram
431 if (eta == 6 && phi > 11)
432 return 16 * (eta - 1) + phi - 1;
433 else
434 return 16 * (eta - 1) + phi;
435
436 } else if (layer == 2 && region == 0) { // Outer, side A (must be separated due to presence of eta=0 chambers)
437 if (eta == 0 && phi == 11)
438 return 0;
439 else if (eta == 0 && phi == 13)
440 return 1;
441 else if (eta < 7)
442 return 16 * (eta - 1) + phi + 2;
443 else if (eta == 7 && phi == 11)
444 return 98;
445 else if (eta == 7 && phi == 13)
446 return 99;
447 else if (eta == 8 && phi == 11)
448 return 100;
449 else if (eta == 8 && phi == 13)
450 return 101;
451 } else if (layer == 3 && region == 0) { // Extra: put with outer
452 return 102 + 8 * (eta - 1) + (phi - 1) / 2;
453 } else if (layer == 2 && region == 1) { // Outer, side C
454 if (eta < 7)
455 return 16 * (eta - 1) + phi;
456 else if (eta == 7 && phi == 11)
457 return 96;
458 else if (eta == 7 && phi == 13)
459 return 97;
460 else if (eta == 8 && phi == 11)
461 return 98;
462 else if (eta == 8 && phi == 13)
463 return 99;
464 } else if (layer == 3 && region == 1) { // Extra: put with outer
465 return 100 + 8 * (eta - 1) + (phi - 1) / 2;
466 }
467
468 }
469
470 else { // Endcap
471 if (layer == 0) { // Inner
472 int run3_offset = 0;
473 if (m_do_run3Geometry) run3_offset = 40;
474 if (eta < 3)
475 return 16 * (eta - 1) + phi - run3_offset;
476 else if (eta == 3)
477 return 32 + phi / 2 - run3_offset;
478 else if (eta == 4)
479 return 40 + phi / 2 - run3_offset;
480 else if (eta == 5)
481 return 48 + phi / 8 - run3_offset;
482
483 } else if (layer == 1) { // Middle
484 return 16 * (eta - 1) + phi;
485 } else if (layer == 2) { // Outer
486 return 16 * (eta - 1) + phi;
487 } else if (layer == 3 && region == 2) { // Extra A: put with outer. Asymmetry between A and C
488 if (eta == 1 && phi == 2) return 96;
489 if (eta == 1 && phi == 4) return 97;
490 if (eta == 1 && phi == 10) return 98;
491 if (eta == 1 && phi == 12) return 99;
492 if (eta == 2 && phi == 2) return 100;
493 if (eta == 2 && phi == 10) return 101;
494 if (eta == 2 && phi == 12) return 102;
495 } else if (layer == 3 && region == 3) { // Extra C: put with outer.
496 if (eta == 1 || phi < 5)
497 return 80 + 16 * eta + phi;
498 else
499 return 79 + 16 * eta + phi; //(missing eta = 2, phi = 5)
500 }
501 }
502
503 return -1;
504}
505
506StatusCode MdtRawDataMonAlg::binMdtOccVsLB(TH2*& h, int region, int layer) {
507 if (region == 0 || region == 1) { // Barrel
508 if (layer == 0) { // Inner
509 // Add Labels
510 h->SetBins(834, 1, 2502, 122, 0, 122);
511 h->GetYaxis()->SetBinLabel(1, "BI1");
512 h->GetYaxis()->SetBinLabel(19, "BI2");
513 h->GetYaxis()->SetBinLabel(37, "BI3");
514 h->GetYaxis()->SetBinLabel(55, "BI4");
515 h->GetYaxis()->SetBinLabel(73, "BI5");
516 h->GetYaxis()->SetBinLabel(91, "BI6");
517 h->GetYaxis()->SetBinLabel(107, "BI7");
518 h->GetYaxis()->SetBinLabel(115, "BI8");
519 // Add lines
520 h->GetYaxis()->SetTickLength(0);
521 for (int i = 0; i < 6; i++) {
522 TLine* l = new TLine(1, 18 * i, 50, 18 * i);
523 h->GetListOfFunctions()->Add(l);
524 }
525 TLine* l2 = new TLine(1, 106, 50, 106);
526 h->GetListOfFunctions()->Add(l2);
527 TLine* l3 = new TLine(1, 114, 50, 114);
528 h->GetListOfFunctions()->Add(l3);
529 for (int i = 1; i < 122; i++) {
530 if (i < 90 && (i % 18 == 11 || i % 18 == 16)) {
531 TLine* l = new TLine(1, i, 10, i);
532 h->GetListOfFunctions()->Add(l);
533 } else {
534 TLine* l = new TLine(1, i, 20, i);
535 h->GetListOfFunctions()->Add(l);
536 }
537 }
538 }
539
540 else if (layer == 1) { // Middle
541 h->SetBins(834, 1, 2502, 95, 0, 95); // 95 = 1 + 16 + 16 + 16 + 16 + 16 + 14 total number of phi sectors (+1)
542 // in the last eta-sector (6) there is no phi-sector 13; ie there arent chambers BML6A13
543 // and BML6C13 so there are only 14 phi sectors
544 // Add Labels
545 h->GetYaxis()->SetBinLabel(1, "BM1");
546 h->GetYaxis()->SetBinLabel(17, "BM2");
547 h->GetYaxis()->SetBinLabel(33, "BM3");
548 h->GetYaxis()->SetBinLabel(49, "BM4");
549 h->GetYaxis()->SetBinLabel(65, "BM5");
550 h->GetYaxis()->SetBinLabel(81, "BM6");
551 // Add lines
552 h->GetYaxis()->SetTickLength(0);
553 for (int i = 1; i < 95; i++) {
554 TLine* l = new TLine(1, i, 20, i);
555 h->GetListOfFunctions()->Add(l);
556 }
557 TLine* l1 = new TLine(1, 16, 50, 16);
558 h->GetListOfFunctions()->Add(l1);
559 TLine* l2 = new TLine(1, 32, 50, 32);
560 h->GetListOfFunctions()->Add(l2);
561 TLine* l3 = new TLine(1, 48, 50, 48);
562 h->GetListOfFunctions()->Add(l3);
563 TLine* l4 = new TLine(1, 64, 50, 64);
564 h->GetListOfFunctions()->Add(l4);
565 TLine* l5 = new TLine(1, 80, 50, 80);
566 h->GetListOfFunctions()->Add(l5);
567 }
568
569 else if (layer == 2 && region == 0) { // Outer, side A
570 h->SetBins(834, 1, 2502, 118, 0, 118);
571 // Add labels
572 h->GetYaxis()->SetBinLabel(1, "BO0");
573 h->GetYaxis()->SetBinLabel(4, "BO1");
574 h->GetYaxis()->SetBinLabel(19, "BO2");
575 h->GetYaxis()->SetBinLabel(35, "BO3");
576 h->GetYaxis()->SetBinLabel(51, "BO4");
577 h->GetYaxis()->SetBinLabel(67, "BO5");
578 h->GetYaxis()->SetBinLabel(83, "BO6");
579 h->GetYaxis()->SetBinLabel(99, "BO7,8");
580 // h->GetYaxis()->SetBinLabel(101,"BO8");
581 h->GetYaxis()->SetBinLabel(103, "BE1");
582 h->GetYaxis()->SetBinLabel(111, "BE2");
583 // Add lines
584 h->GetYaxis()->SetTickLength(0);
585 for (int i = 1; i < 118; i++) {
586 TLine* l = new TLine(1, i, 20, i);
587 h->GetListOfFunctions()->Add(l);
588 }
589 TLine* l1 = new TLine(1, 2, 50, 2);
590 h->GetListOfFunctions()->Add(l1);
591 TLine* l2 = new TLine(1, 18, 50, 18);
592 h->GetListOfFunctions()->Add(l2);
593 TLine* l3 = new TLine(1, 34, 50, 34);
594 h->GetListOfFunctions()->Add(l3);
595 TLine* l4 = new TLine(1, 50, 50, 50);
596 h->GetListOfFunctions()->Add(l4);
597 TLine* l5 = new TLine(1, 66, 50, 66);
598 h->GetListOfFunctions()->Add(l5);
599 TLine* l6 = new TLine(1, 82, 50, 82);
600 h->GetListOfFunctions()->Add(l6);
601 TLine* l7 = new TLine(1, 98, 50, 98);
602 h->GetListOfFunctions()->Add(l7);
603 TLine* l8 = new TLine(1, 100, 50, 100);
604 h->GetListOfFunctions()->Add(l8);
605 TLine* l9 = new TLine(1, 102, 50, 102);
606 h->GetListOfFunctions()->Add(l9);
607 TLine* l10 = new TLine(1, 110, 50, 110);
608 h->GetListOfFunctions()->Add(l10);
609 }
610
611 else if (layer == 2 && region == 1) { // Outer, side C (no eta = 0)
612 h->SetBins(834, 1, 2502, 116, 0, 116);
613 // Add labels
614 h->GetYaxis()->SetBinLabel(1, "BO1");
615 h->GetYaxis()->SetBinLabel(17, "BO2");
616 h->GetYaxis()->SetBinLabel(33, "BO3");
617 h->GetYaxis()->SetBinLabel(49, "BO4");
618 h->GetYaxis()->SetBinLabel(65, "BO5");
619 h->GetYaxis()->SetBinLabel(81, "BO6");
620 h->GetYaxis()->SetBinLabel(97, "BO7,8");
621 // h->GetYaxis()->SetBinLabel(101,"BO8");
622 h->GetYaxis()->SetBinLabel(101, "BE1");
623 h->GetYaxis()->SetBinLabel(109, "BE2");
624 // Add lines
625 h->GetYaxis()->SetTickLength(0);
626 for (int i = 1; i < 116; i++) {
627 TLine* l = new TLine(1, i, 20, i);
628 h->GetListOfFunctions()->Add(l);
629 }
630 TLine* l1 = new TLine(1, 16, 50, 16);
631 h->GetListOfFunctions()->Add(l1);
632 TLine* l2 = new TLine(1, 32, 50, 32);
633 h->GetListOfFunctions()->Add(l2);
634 TLine* l3 = new TLine(1, 48, 50, 48);
635 h->GetListOfFunctions()->Add(l3);
636 TLine* l4 = new TLine(1, 64, 50, 64);
637 h->GetListOfFunctions()->Add(l4);
638 TLine* l5 = new TLine(1, 80, 50, 80);
639 h->GetListOfFunctions()->Add(l5);
640 TLine* l6 = new TLine(1, 96, 50, 96);
641 h->GetListOfFunctions()->Add(l6);
642 TLine* l7 = new TLine(1, 98, 50, 98);
643 h->GetListOfFunctions()->Add(l7);
644 TLine* l8 = new TLine(1, 100, 50, 100);
645 h->GetListOfFunctions()->Add(l8);
646 TLine* l9 = new TLine(1, 108, 50, 108);
647 h->GetListOfFunctions()->Add(l9);
648 }
649 }
650
651 else { // Endcap
652 if (layer == 0) { // Inner
653 h->SetBins(834, 1, 2502, 50, 0, 50);
654 // Add labels
655 h->GetYaxis()->SetBinLabel(1, "EI1");
656 h->GetYaxis()->SetBinLabel(17, "EI2");
657 h->GetYaxis()->SetBinLabel(33, "EI3");
658 h->GetYaxis()->SetBinLabel(41, "EI4");
659 h->GetYaxis()->SetBinLabel(49, "EI5");
660 // Add lines
661 h->GetYaxis()->SetTickLength(0);
662 for (int i = 1; i < 50; i++) {
663 TLine* l = new TLine(1, i, 20, i);
664 h->GetListOfFunctions()->Add(l);
665 }
666 TLine* l1 = new TLine(1, 16, 50, 16);
667 h->GetListOfFunctions()->Add(l1);
668 TLine* l2 = new TLine(1, 32, 50, 32);
669 h->GetListOfFunctions()->Add(l2);
670 TLine* l3 = new TLine(1, 40, 50, 40);
671 h->GetListOfFunctions()->Add(l3);
672 TLine* l4 = new TLine(1, 48, 50, 48);
673 h->GetListOfFunctions()->Add(l4);
674 }
675
676 else if (layer == 1) { // Middle
677 h->SetBins(834, 1, 2502, 80, 0, 80);
678 // Add labels
679 h->GetYaxis()->SetBinLabel(1, "EM1");
680 h->GetYaxis()->SetBinLabel(17, "EM2");
681 h->GetYaxis()->SetBinLabel(33, "EM3");
682 h->GetYaxis()->SetBinLabel(49, "EM4");
683 h->GetYaxis()->SetBinLabel(65, "EM5");
684 // Add lines
685 h->GetYaxis()->SetTickLength(0);
686 for (int i = 1; i < 80; i++) {
687 TLine* l = new TLine(1, i, 20, i);
688 h->GetListOfFunctions()->Add(l);
689 }
690 TLine* l1 = new TLine(1, 16, 50, 16);
691 h->GetListOfFunctions()->Add(l1);
692 TLine* l2 = new TLine(1, 32, 50, 32);
693 h->GetListOfFunctions()->Add(l2);
694 TLine* l3 = new TLine(1, 48, 50, 48);
695 h->GetListOfFunctions()->Add(l3);
696 TLine* l4 = new TLine(1, 64, 50, 64);
697 h->GetListOfFunctions()->Add(l4);
698 }
699
700 else if (layer == 2) { // Outer + extra
701
702 if (region == 2) { // side A
703 h->SetBins(834, 1, 2502, 103, 0, 103);
704 // Add labels
705 h->GetYaxis()->SetBinLabel(1, "EO1");
706 h->GetYaxis()->SetBinLabel(17, "EO2");
707 h->GetYaxis()->SetBinLabel(33, "EO3");
708 h->GetYaxis()->SetBinLabel(49, "EO4");
709 h->GetYaxis()->SetBinLabel(65, "EO5");
710 h->GetYaxis()->SetBinLabel(81, "EO6");
711 h->GetYaxis()->SetBinLabel(97, "EE1,2");
712 // Add lines
713 h->GetYaxis()->SetTickLength(0);
714 for (int i = 1; i < 103; i++) {
715 TLine* l = new TLine(1, i, 20, i);
716 h->GetListOfFunctions()->Add(l);
717 }
718 TLine* l1 = new TLine(1, 16, 50, 16);
719 h->GetListOfFunctions()->Add(l1);
720 TLine* l2 = new TLine(1, 32, 50, 32);
721 h->GetListOfFunctions()->Add(l2);
722 TLine* l3 = new TLine(1, 48, 50, 48);
723 h->GetListOfFunctions()->Add(l3);
724 TLine* l4 = new TLine(1, 64, 50, 64);
725 h->GetListOfFunctions()->Add(l4);
726 TLine* l5 = new TLine(1, 80, 50, 80);
727 h->GetListOfFunctions()->Add(l5);
728 TLine* l6 = new TLine(1, 96, 50, 96);
729 h->GetListOfFunctions()->Add(l6);
730 TLine* l7 = new TLine(1, 100, 50, 100);
731 h->GetListOfFunctions()->Add(l7);
732 } else if (region == 3) { // side C
733 h->SetBins(834, 1, 2502, 127, 0, 127);
734 // Add labels
735 h->GetYaxis()->SetBinLabel(1, "EO1");
736 h->GetYaxis()->SetBinLabel(17, "EO2");
737 h->GetYaxis()->SetBinLabel(33, "EO3");
738 h->GetYaxis()->SetBinLabel(49, "EO4");
739 h->GetYaxis()->SetBinLabel(65, "EO5");
740 h->GetYaxis()->SetBinLabel(81, "EO6");
741 h->GetYaxis()->SetBinLabel(97, "EE1");
742 h->GetYaxis()->SetBinLabel(113, "EE2");
743 // Add lines
744 h->GetYaxis()->SetTickLength(0);
745 for (int i = 1; i < 127; i++) {
746 TLine* l = new TLine(1, i, 20, i);
747 h->GetListOfFunctions()->Add(l);
748 }
749 TLine* l1 = new TLine(1, 16, 50, 16);
750 h->GetListOfFunctions()->Add(l1);
751 TLine* l2 = new TLine(1, 32, 50, 32);
752 h->GetListOfFunctions()->Add(l2);
753 TLine* l3 = new TLine(1, 48, 50, 48);
754 h->GetListOfFunctions()->Add(l3);
755 TLine* l4 = new TLine(1, 64, 50, 64);
756 h->GetListOfFunctions()->Add(l4);
757 TLine* l5 = new TLine(1, 80, 50, 80);
758 h->GetListOfFunctions()->Add(l5);
759 TLine* l6 = new TLine(1, 96, 50, 96);
760 h->GetListOfFunctions()->Add(l6);
761 TLine* l7 = new TLine(1, 112, 50, 112);
762 h->GetListOfFunctions()->Add(l7);
763 }
764 }
765 }
766
767 return StatusCode::SUCCESS;
768}
769
770StatusCode MdtRawDataMonAlg::binMdtOccVsLB_Crate(TH2*& h, int region, int crate) {
771 if (region == 0 || region == 1) { // Barrel
772 if (crate == 0) { // Crate BA01 or BC01
773 // Add Labels
774 h->SetBins(834, 1, 2502, 73, 0, 73);
775 h->GetYaxis()->SetBinLabel(1, "BIL");
776 h->GetYaxis()->SetBinLabel(13, "BIS");
777 h->GetYaxis()->SetBinLabel(25, "BME");
778 h->GetYaxis()->SetBinLabel(26, "BML");
779 h->GetYaxis()->SetBinLabel(38, "BMS");
780 h->GetYaxis()->SetBinLabel(50, "BOL");
781 h->GetYaxis()->SetBinLabel(62, "BOS");
782 // Add lines
783 h->GetYaxis()->SetTickLength(0);
784 for (int i = 0; i < 73; i++) {
785 TLine* l = new TLine(1, i, 20, i);
786 h->GetListOfFunctions()->Add(l);
787 }
788 TLine* l2 = new TLine(1, 0, 50, 0);
789 h->GetListOfFunctions()->Add(l2);
790 TLine* l3 = new TLine(1, 12, 50, 12);
791 h->GetListOfFunctions()->Add(l3);
792 TLine* l4 = new TLine(1, 24, 50, 24);
793 h->GetListOfFunctions()->Add(l4);
794 TLine* l5 = new TLine(1, 25, 50, 25);
795 h->GetListOfFunctions()->Add(l5);
796 TLine* l6 = new TLine(1, 37, 50, 37);
797 h->GetListOfFunctions()->Add(l6);
798 TLine* l8 = new TLine(1, 49, 50, 49);
799 h->GetListOfFunctions()->Add(l8);
800 TLine* l9 = new TLine(1, 61, 50, 61);
801 h->GetListOfFunctions()->Add(l9);
802 }
803
804 else if (crate == 1) { // BA02, BC02
805 h->SetBins(834, 1, 2502, 73, 0, 73);
806 // Add Labels
807 h->GetYaxis()->SetBinLabel(1, "BIL");
808 h->GetYaxis()->SetBinLabel(13, "BIS");
809 h->GetYaxis()->SetBinLabel(25, "BME");
810 h->GetYaxis()->SetBinLabel(37, "BMS");
811 h->GetYaxis()->SetBinLabel(49, "BOL");
812 h->GetYaxis()->SetBinLabel(61, "BOS");
813 // Add lines
814 h->GetYaxis()->SetTickLength(0);
815 for (int i = 1; i < 73; i++) {
816 TLine* l = new TLine(1, i, 20, i);
817 h->GetListOfFunctions()->Add(l);
818 }
819 TLine* l1 = new TLine(1, 12, 50, 12);
820 h->GetListOfFunctions()->Add(l1);
821 TLine* l2 = new TLine(1, 24, 50, 24);
822 h->GetListOfFunctions()->Add(l2);
823 TLine* l3 = new TLine(1, 36, 50, 36);
824 h->GetListOfFunctions()->Add(l3);
825 TLine* l4 = new TLine(1, 48, 50, 48);
826 h->GetListOfFunctions()->Add(l4);
827 TLine* l6 = new TLine(1, 60, 50, 60);
828 h->GetListOfFunctions()->Add(l6);
829
830 } else if (crate == 2) { // BA03, BC03
831 // Add Labels
832 h->SetBins(834, 1, 2502, 80, 0, 80);
833 h->GetYaxis()->SetBinLabel(1, "BIL");
834 h->GetYaxis()->SetBinLabel(7, "BIM");
835 h->GetYaxis()->SetBinLabel(12, "BIR");
836 h->GetYaxis()->SetBinLabel(18, "BIS");
837 h->GetYaxis()->SetBinLabel(30, "BMF");
838 h->GetYaxis()->SetBinLabel(33, "BMG");
839 h->GetYaxis()->SetBinLabel(36, "BML");
840 h->GetYaxis()->SetBinLabel(48, "BMS");
841 h->GetYaxis()->SetBinLabel(54, "BOF");
842 h->GetYaxis()->SetBinLabel(58, "BOG");
843 if (region == 0) {
844 h->GetYaxis()->SetBinLabel(63, "BOL");
845 h->GetYaxis()->SetBinLabel(75, "BOS");
846 } else if (region == 1) {
847 h->GetYaxis()->SetBinLabel(62, "BOL");
848 h->GetYaxis()->SetBinLabel(74, "BOS");
849 }
850 // Add lines
851 h->GetYaxis()->SetTickLength(0);
852 for (int i = 0; i < 80; i++) {
853 TLine* l = new TLine(1, i, 20, i);
854 h->GetListOfFunctions()->Add(l);
855 }
856 TLine* l2 = new TLine(1, 6, 50, 6);
857 h->GetListOfFunctions()->Add(l2);
858 TLine* l3 = new TLine(1, 11, 50, 11);
859 h->GetListOfFunctions()->Add(l3);
860 TLine* l3b = new TLine(1, 17, 50, 17);
861 h->GetListOfFunctions()->Add(l3b);
862 // TLine* l4 = new TLine(1,26,50,26); h->GetListOfFunctions()->Add(l4); //removed this line because it doesnt correspond to
863 // anything
864 TLine* l5 = new TLine(1, 29, 50, 29);
865 h->GetListOfFunctions()->Add(l5);
866 TLine* l6 = new TLine(1, 32, 50, 32);
867 h->GetListOfFunctions()->Add(l6);
868 TLine* l7 = new TLine(1, 35, 50, 35);
869 h->GetListOfFunctions()->Add(l7);
870 TLine* l8 = new TLine(1, 47, 50, 47);
871 h->GetListOfFunctions()->Add(l8);
872 TLine* l9 = new TLine(1, 53, 50, 53);
873 h->GetListOfFunctions()->Add(l9);
874 TLine* l9b = new TLine(1, 57, 50, 57);
875 h->GetListOfFunctions()->Add(l9b);
876 if (region == 0) {
877 TLine* l10 = new TLine(1, 62, 50, 62);
878 h->GetListOfFunctions()->Add(l10);
879 TLine* l11 = new TLine(1, 74, 50, 74);
880 h->GetListOfFunctions()->Add(l11);
881 } else if (region == 1) {
882 TLine* l10 = new TLine(1, 61, 50, 61);
883 h->GetListOfFunctions()->Add(l10);
884 TLine* l11 = new TLine(1, 73, 50, 73);
885 h->GetListOfFunctions()->Add(l11);
886 }
887 }
888
889 else if (crate == 3) { // BA04, BC04
890 // Add Labels
891 h->SetBins(834, 1, 2502, 79, 0, 79);
892 h->GetYaxis()->SetBinLabel(1, "BIL");
893 h->GetYaxis()->SetBinLabel(7, "BIM");
894 h->GetYaxis()->SetBinLabel(12, "BIR");
895 h->GetYaxis()->SetBinLabel(18, "BIS");
896 h->GetYaxis()->SetBinLabel(30, "BMF");
897 h->GetYaxis()->SetBinLabel(33, "BMG");
898 h->GetYaxis()->SetBinLabel(36, "BML");
899 h->GetYaxis()->SetBinLabel(47, "BMS");
900 h->GetYaxis()->SetBinLabel(53, "BOF");
901 h->GetYaxis()->SetBinLabel(57, "BOG");
902 if (region == 0) {
903 h->GetYaxis()->SetBinLabel(62, "BOL");
904 h->GetYaxis()->SetBinLabel(75, "BOS");
905 } else if (region == 1) {
906 h->GetYaxis()->SetBinLabel(61, "BOL");
907 h->GetYaxis()->SetBinLabel(74, "BOS");
908 }
909
910 // Add lines
911 h->GetYaxis()->SetTickLength(0);
912 for (int i = 0; i < 79; i++) {
913 TLine* l = new TLine(1, i, 20, i);
914 h->GetListOfFunctions()->Add(l);
915 }
916 TLine* l2 = new TLine(1, 6, 50, 6);
917 h->GetListOfFunctions()->Add(l2);
918 TLine* l3 = new TLine(1, 11, 50, 11);
919 h->GetListOfFunctions()->Add(l3);
920 TLine* l3b = new TLine(1, 17, 50, 17);
921 h->GetListOfFunctions()->Add(l3b);
922 // TLine* l4 = new TLine(1,26,50,26); h->GetListOfFunctions()->Add(l4);//removed this line because it doesnt correspond to
923 // anything
924 TLine* l5 = new TLine(1, 29, 50, 29);
925 h->GetListOfFunctions()->Add(l5);
926 TLine* l6 = new TLine(1, 32, 50, 32);
927 h->GetListOfFunctions()->Add(l6);
928 TLine* l7 = new TLine(1, 35, 50, 35);
929 h->GetListOfFunctions()->Add(l7);
930 TLine* l8 = new TLine(1, 46, 50, 46);
931 h->GetListOfFunctions()->Add(l8);
932 TLine* l9 = new TLine(1, 52, 50, 52);
933 h->GetListOfFunctions()->Add(l9);
934 TLine* l9b = new TLine(1, 56, 50, 56);
935 h->GetListOfFunctions()->Add(l9b);
936 if (region == 0) {
937 TLine* l10 = new TLine(1, 61, 50, 61);
938 h->GetListOfFunctions()->Add(l10);
939 TLine* l11 = new TLine(1, 74, 50, 74);
940 h->GetListOfFunctions()->Add(l11);
941 } else if (region == 1) {
942 TLine* l10 = new TLine(1, 60, 50, 60);
943 h->GetListOfFunctions()->Add(l10);
944 TLine* l11 = new TLine(1, 73, 50, 73);
945 h->GetListOfFunctions()->Add(l11);
946 }
947 }
948 }
949
950 else { // Endcap
951 if (crate == 0 || crate == 2) { // EA01, EC01 and EA03, EC03 are the same
952 h->SetBins(834, 1, 2502, 73, 0, 73);
953 // Add labels
954 h->GetYaxis()->SetBinLabel(1, "BEE");
955 h->GetYaxis()->SetBinLabel(5, "BIS");
956 h->GetYaxis()->SetBinLabel(9, "EEL");
957 h->GetYaxis()->SetBinLabel(13, "EES");
958 h->GetYaxis()->SetBinLabel(17, "EIL");
959 h->GetYaxis()->SetBinLabel(26, "EIS");
960 h->GetYaxis()->SetBinLabel(30, "EML");
961 h->GetYaxis()->SetBinLabel(40, "EMS");
962 h->GetYaxis()->SetBinLabel(50, "EOL");
963 h->GetYaxis()->SetBinLabel(62, "EOS");
964 // Add lines
965 h->GetYaxis()->SetTickLength(0);
966 for (int i = 1; i < 73; i++) {
967 TLine* l = new TLine(1, i, 20, i);
968 h->GetListOfFunctions()->Add(l);
969 }
970 TLine* l2 = new TLine(1, 4, 50, 4);
971 h->GetListOfFunctions()->Add(l2);
972 TLine* l3 = new TLine(1, 8, 50, 8);
973 h->GetListOfFunctions()->Add(l3);
974 TLine* l4 = new TLine(1, 12, 50, 12);
975 h->GetListOfFunctions()->Add(l4);
976 TLine* l5 = new TLine(1, 16, 50, 16);
977 h->GetListOfFunctions()->Add(l5);
978 TLine* l6 = new TLine(1, 25, 50, 25);
979 h->GetListOfFunctions()->Add(l6);
980 TLine* l7 = new TLine(1, 29, 50, 29);
981 h->GetListOfFunctions()->Add(l7);
982 TLine* l8 = new TLine(1, 39, 50, 39);
983 h->GetListOfFunctions()->Add(l8);
984 TLine* l9 = new TLine(1, 49, 50, 49);
985 h->GetListOfFunctions()->Add(l9);
986 TLine* l10 = new TLine(1, 61, 50, 61);
987 h->GetListOfFunctions()->Add(l10);
988 } else if (crate == 1) { // EA02, EC02
989 h->SetBins(834, 1, 2502, 71, 0, 71);
990 // Add labels
991 h->GetYaxis()->SetBinLabel(1, "BEE");
992 h->GetYaxis()->SetBinLabel(5, "BIS");
993 h->GetYaxis()->SetBinLabel(9, "EEL");
994 h->GetYaxis()->SetBinLabel(12, "EES");
995 h->GetYaxis()->SetBinLabel(16, "EIL");
996 h->GetYaxis()->SetBinLabel(24, "EIS");
997 h->GetYaxis()->SetBinLabel(28, "EML");
998 h->GetYaxis()->SetBinLabel(38, "EMS");
999 h->GetYaxis()->SetBinLabel(48, "EOL");
1000 h->GetYaxis()->SetBinLabel(60, "EOS");
1001 // Add lines
1002 h->GetYaxis()->SetTickLength(0);
1003 for (int i = 1; i < 71; i++) {
1004 TLine* l = new TLine(1, i, 20, i);
1005 h->GetListOfFunctions()->Add(l);
1006 }
1007 TLine* l2 = new TLine(1, 4, 50, 4);
1008 h->GetListOfFunctions()->Add(l2);
1009 TLine* l3 = new TLine(1, 8, 50, 8);
1010 h->GetListOfFunctions()->Add(l3);
1011 TLine* l4 = new TLine(1, 11, 50, 11);
1012 h->GetListOfFunctions()->Add(l4);
1013 TLine* l5 = new TLine(1, 15, 50, 15);
1014 h->GetListOfFunctions()->Add(l5);
1015 TLine* l6 = new TLine(1, 23, 50, 23);
1016 h->GetListOfFunctions()->Add(l6);
1017 TLine* l7 = new TLine(1, 27, 50, 27);
1018 h->GetListOfFunctions()->Add(l7);
1019 TLine* l8 = new TLine(1, 37, 50, 37);
1020 h->GetListOfFunctions()->Add(l8);
1021 TLine* l9 = new TLine(1, 47, 50, 47);
1022 h->GetListOfFunctions()->Add(l9);
1023 TLine* l10 = new TLine(1, 59, 50, 59);
1024 h->GetListOfFunctions()->Add(l10);
1025 } else if (crate == 3) { // EA04, EC04
1026 h->SetBins(834, 1, 2502, 72, 0, 72);
1027 // Add labels
1028 h->GetYaxis()->SetBinLabel(1, "BEE");
1029 h->GetYaxis()->SetBinLabel(5, "BIS");
1030 h->GetYaxis()->SetBinLabel(9, "EEL");
1031 h->GetYaxis()->SetBinLabel(13, "EES");
1032 h->GetYaxis()->SetBinLabel(17, "EIL");
1033 h->GetYaxis()->SetBinLabel(25, "EIS");
1034 h->GetYaxis()->SetBinLabel(29, "EML");
1035 h->GetYaxis()->SetBinLabel(39, "EMS");
1036 h->GetYaxis()->SetBinLabel(49, "EOL");
1037 h->GetYaxis()->SetBinLabel(61, "EOS");
1038 // Add lines
1039 h->GetYaxis()->SetTickLength(0);
1040 for (int i = 1; i < 72; i++) {
1041 TLine* l = new TLine(1, i, 20, i);
1042 h->GetListOfFunctions()->Add(l);
1043 }
1044 TLine* l2 = new TLine(1, 4, 50, 4);
1045 h->GetListOfFunctions()->Add(l2);
1046 TLine* l3 = new TLine(1, 8, 50, 8);
1047 h->GetListOfFunctions()->Add(l3);
1048 TLine* l4 = new TLine(1, 12, 50, 12);
1049 h->GetListOfFunctions()->Add(l4);
1050 TLine* l5 = new TLine(1, 16, 50, 16);
1051 h->GetListOfFunctions()->Add(l5);
1052 TLine* l6 = new TLine(1, 24, 50, 24);
1053 h->GetListOfFunctions()->Add(l6);
1054 TLine* l7 = new TLine(1, 28, 50, 28);
1055 h->GetListOfFunctions()->Add(l7);
1056 TLine* l8 = new TLine(1, 38, 50, 38);
1057 h->GetListOfFunctions()->Add(l8);
1058 TLine* l9 = new TLine(1, 48, 50, 48);
1059 h->GetListOfFunctions()->Add(l9);
1060 TLine* l10 = new TLine(1, 60, 50, 60);
1061 h->GetListOfFunctions()->Add(l10);
1062 }
1063 }
1064
1065 return StatusCode::SUCCESS;
1066}
1067
1068int MdtRawDataMonAlg::get_bin_for_LB_crate_hist(int region, int crate, int phi, int eta, std::string_view chamber) const {
1069 int binNum = 999;
1070 std::string_view stName = chamber.substr(0, 3);
1071 if (region == 0 || region == 1) { // Barrel
1072 if (crate == 1) { // BA01, BC01
1073 if (stName == "BIL")
1074 binNum = 2 * eta + (phi - 1) / 2 - 1;
1075 else if (stName == "BIS")
1076 binNum = 12 + 2 * eta + (phi - 2) / 2 - 1;
1077 else if (stName == "BME")
1078 binNum = 25;
1079 else if (stName == "BML")
1080 binNum = 25 + 2 * eta + (phi - 1) / 2 - 1;
1081 else if (stName == "BMS")
1082 binNum = 37 + 2 * eta + (phi - 2) / 2 - 1;
1083 else if (stName == "BOL")
1084 binNum = 49 + 2 * eta + (phi - 1) / 2 - 1;
1085 else if (stName == "BOS")
1086 binNum = 61 + 2 * eta + (phi - 2) / 2 - 1;
1087 else
1088 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Bx01");
1089 return binNum - 1;
1090 } else if (crate == 2) { // BA02, BC02
1091
1092 if (stName == "BIL")
1093 binNum = 2 * eta + (phi - 5) / 2 - 1;
1094 else if (stName == "BIS")
1095 binNum = 12 + 2 * eta + (phi - 6) / 2 - 1;
1096 else if (stName == "BML")
1097 binNum = 24 + 2 * eta + (phi - 5) / 2 - 1;
1098 else if (stName == "BMS")
1099 binNum = 36 + 2 * eta + (phi - 6) / 2 - 1;
1100 else if (stName == "BOL")
1101 binNum = 48 + 2 * eta + (phi - 5) / 2 - 1;
1102 else if (stName == "BOS")
1103 binNum = 60 + 2 * eta + (phi - 6) / 2 - 1;
1104 else
1105 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Bx02");
1106 return binNum - 1;
1107 } else if (crate == 3) { // BA03,BC03
1108 if (stName == "BIL")
1109 binNum = eta;
1110 else if (stName == "BIM")
1111 binNum = 6 + eta;
1112 else if (stName == "BIR")
1113 binNum = 11 + eta;
1114 else if (stName == "BIS")
1115 binNum = 17 + 2 * eta + (phi - 10) / 2 - 1;
1116 else if (stName == "BMF")
1117 binNum = 29 + (eta + 1) / 2;
1118 else if (stName == "BMG")
1119 binNum = 32 + eta / 2;
1120 else if (stName == "BML")
1121 binNum = 35 + 2 * eta + (phi - 9) / 2 - 1;
1122 else if (stName == "BMS")
1123 binNum = 47 + eta;
1124 else if (stName == "BOF")
1125 binNum = 53 + (eta + 1) / 2;
1126 else if (chamber.substr(0, 4) == "BOG0" && region == 0)
1127 binNum = 58;
1128 else if (stName == "BOG")
1129 binNum = 58 + eta / 2 - region;
1130 else if (stName == "BOL")
1131 binNum = 62 + 2 * eta + (phi - 9) / 2 - 1 - region;
1132 else if (stName == "BOS")
1133 binNum = 74 + eta - region;
1134 else
1135 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Bx03");
1136 return binNum - 1;
1137 } else if (crate == 4) { // BA04, BC04
1138
1139 if (stName == "BIL")
1140 binNum = eta;
1141 else if (stName == "BIM")
1142 binNum = 6 + eta;
1143 else if (stName == "BIR")
1144 binNum = 11 + eta;
1145 else if (stName == "BIS")
1146 binNum = 17 + 2 * eta + (phi - 14) / 2 - 1;
1147 else if (stName == "BMF")
1148 binNum = 29 + (eta + 1) / 2;
1149 else if (stName == "BMG")
1150 binNum = 32 + eta / 2;
1151 else if (stName == "BML" && eta < 6)
1152 binNum = 35 + 2 * eta + (phi - 13) / 2 - 1;
1153 else if (chamber.substr(0, 7) == "BML6A15" || chamber.substr(0, 7) == "BML6C15")
1154 binNum = 46;
1155 else if (stName == "BMS")
1156 binNum = 46 + eta;
1157 else if (stName == "BOF")
1158 binNum = 52 + (eta + 1) / 2;
1159 else if (chamber.substr(0, 4) == "BOG0" && region == 0)
1160 binNum = 57;
1161 else if (stName == "BOG")
1162 binNum = 57 + eta / 2 - region;
1163 else if (stName == "BOL")
1164 binNum = 61 + 2 * eta + (phi - 13) / 2 - 1 - region;
1165 else if (stName == "BOS")
1166 binNum = 74 + eta - region;
1167 else
1168 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Bx04");
1169 return binNum - 1;
1170 }
1171 } else if (region == 2 || region == 3) {
1172 if (crate == 1) { // EA01, EC01
1173 if (stName == "BEE")
1174 binNum = 2 * eta + (phi - 2) / 2 - 1;
1175 else if (stName == "BIS")
1176 binNum = 4 + 2 * (eta - 6) + (phi - 2) / 2 - 1;
1177 else if (stName == "EEL")
1178 binNum = 8 + 2 * eta + (phi - 1) / 2 - 1;
1179 else if (stName == "EES")
1180 binNum = 12 + 2 * eta + (phi - 2) / 2 - 1;
1181 else if (stName == "EIL" && eta < 5)
1182 binNum = 16 + 2 * eta + (phi - 1) / 2 - 1;
1183 else if (stName == "EIL" && eta == 5)
1184 binNum = 25;
1185 else if (stName == "EIS")
1186 binNum = 25 + 2 * eta + (phi - 2) / 2 - 1;
1187 else if (stName == "EML")
1188 binNum = 29 + 2 * eta + (phi - 1) / 2 - 1;
1189 else if (stName == "EMS")
1190 binNum = 39 + 2 * eta + (phi - 2) / 2 - 1;
1191 else if (stName == "EOL")
1192 binNum = 49 + 2 * eta + (phi - 1) / 2 - 1;
1193 else if (stName == "EOS")
1194 binNum = 61 + 2 * eta + (phi - 2) / 2 - 1;
1195 else
1196 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Ex01");
1197 if (m_do_run3Geometry) {
1198 if (region == 2) {
1199 if (binNum > 8 && binNum < 23)
1200 binNum = binNum - 2;
1201 else if (binNum > 22 && binNum < 30)
1202 binNum = binNum - 8;
1203 else if (binNum > 29)
1204 binNum = binNum - 12;
1205 } else if (region == 3) {
1206 if (binNum > 22 && binNum < 30)
1207 binNum = binNum - 6;
1208 else if (binNum > 29)
1209 binNum = binNum - 10;
1210 }
1211 }
1212 return binNum - 1;
1213 } else if (crate == 2) { // EA02, EC02
1214 if (stName == "BEE")
1215 binNum = 2 * eta + (phi - 6) / 2 - 1;
1216 else if (stName == "BIS")
1217 binNum = 4 + 2 * (eta - 6) + (phi - 6) / 2 - 1;
1218 else if (chamber.substr(0, 4) == "EEL1")
1219 binNum = 9 + (phi - 3) / 2 - 1;
1220 else if (chamber.substr(0, 4) == "EEL2")
1221 binNum = 11;
1222 else if (stName == "EES")
1223 binNum = 11 + 2 * eta + (phi - 6) / 2 - 1;
1224 else if (stName == "EIL")
1225 binNum = 15 + 2 * eta + (phi - 5) / 2 - 1;
1226 else if (stName == "EIS")
1227 binNum = 23 + 2 * eta + (phi - 6) / 2 - 1;
1228 else if (stName == "EML")
1229 binNum = 27 + 2 * eta + (phi - 5) / 2 - 1;
1230 else if (stName == "EMS")
1231 binNum = 37 + 2 * eta + (phi - 6) / 2 - 1;
1232 else if (stName == "EOL")
1233 binNum = 47 + 2 * eta + (phi - 5) / 2 - 1;
1234 else if (stName == "EOS")
1235 binNum = 59 + 2 * eta + (phi - 6) / 2 - 1;
1236 else
1237 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Ex02");
1238 if (m_do_run3Geometry) {
1239 if (region == 2) {
1240 if (binNum > 8 && binNum < 22)
1241 binNum = binNum - 2;
1242 else if (binNum > 21 && binNum < 28)
1243 binNum = binNum - 8;
1244 else if (binNum > 27)
1245 binNum = binNum - 12;
1246 } else if (region == 3) {
1247 if (binNum > 21 && binNum < 28)
1248 binNum = binNum - 6;
1249 else if (binNum > 27)
1250 binNum = binNum - 10;
1251 }
1252 }
1253 return binNum - 1;
1254 } else if (crate == 3) { // EA03, EC03
1255
1256 if (stName == "BEE")
1257 binNum = 2 * eta + (phi - 10) / 2 - 1;
1258 else if (stName == "BIS")
1259 binNum = 4 + 2 * (eta - 6) + (phi - 10) / 2 - 1;
1260 else if (stName == "EEL")
1261 binNum = 8 + 2 * eta + (phi - 9) / 2 - 1;
1262 else if (stName == "EES")
1263 binNum = 12 + 2 * eta + (phi - 10) / 2 - 1;
1264 else if (stName == "EIL" && eta < 5)
1265 binNum = 16 + 2 * eta + (phi - 9) / 2 - 1;
1266 else if (chamber.substr(0, 4) == "EIL5")
1267 binNum = 25;
1268 else if (stName == "EIS")
1269 binNum = 25 + 2 * eta + (phi - 10) / 2 - 1;
1270 else if (stName == "EML")
1271 binNum = 29 + 2 * eta + (phi - 9) / 2 - 1;
1272 else if (stName == "EMS")
1273 binNum = 39 + 2 * eta + (phi - 10) / 2 - 1;
1274 else if (stName == "EOL")
1275 binNum = 49 + 2 * eta + (phi - 9) / 2 - 1;
1276 else if (stName == "EOS")
1277 binNum = 61 + 2 * eta + (phi - 10) / 2 - 1;
1278 else
1279 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Ex03");
1280 if (m_do_run3Geometry) {
1281 if (region == 2) {
1282 if (binNum > 8 && binNum < 23)
1283 binNum = binNum - 2;
1284 else if (binNum > 22 && binNum < 30)
1285 binNum = binNum - 8;
1286 else if (binNum > 29)
1287 binNum = binNum - 12;
1288 }
1289 if (region == 3) {
1290 if (binNum > 22 && binNum < 30)
1291 binNum = binNum - 6;
1292 else if (binNum > 29)
1293 binNum = binNum - 10;
1294 }
1295 }
1296 return binNum - 1;
1297 } else if (crate == 4) { // EA04, EC04
1298 if (stName == "BEE")
1299 binNum = 2 * eta + (phi - 14) / 2 - 1;
1300 else if (stName == "BIS")
1301 binNum = 4 + 2 * (eta - 6) + (phi - 14) / 2 - 1;
1302 else if (stName == "EEL")
1303 binNum = 8 + 2 * eta + (phi - 13) / 2 - 1;
1304 else if (stName == "EES")
1305 binNum = 12 + 2 * eta + (phi - 14) / 2 - 1;
1306 else if (stName == "EIL")
1307 binNum = 16 + 2 * eta + (phi - 13) / 2 - 1;
1308 else if (stName == "EIS")
1309 binNum = 24 + 2 * eta + (phi - 14) / 2 - 1;
1310 else if (stName == "EML")
1311 binNum = 28 + 2 * eta + (phi - 13) / 2 - 1;
1312 else if (stName == "EMS")
1313 binNum = 38 + 2 * eta + (phi - 14) / 2 - 1;
1314 else if (stName == "EOL")
1315 binNum = 48 + 2 * eta + (phi - 13) / 2 - 1;
1316 else if (stName == "EOS")
1317 binNum = 60 + 2 * eta + (phi - 14) / 2 - 1;
1318 else
1319 ATH_MSG_INFO("chamber " << chamber << " didn't exist in crate Ex04");
1320 if (m_do_run3Geometry) {
1321 if (region == 2) {
1322 if (binNum > 8 && binNum < 23)
1323 binNum = binNum - 2;
1324 else if (binNum > 22 && binNum < 29)
1325 binNum = binNum - 8;
1326 else if (binNum > 28)
1327 binNum = binNum - 12;
1328 }
1329 if (region == 3) {
1330 if (binNum > 22 && binNum < 28)
1331 binNum = binNum - 6;
1332 else if (binNum > 28)
1333 binNum = binNum - 10;
1334 }
1335 }
1336
1337 return binNum - 1;
1338 }
1339 }
1340 return -1;
1341}
1343 const MuonGM::MdtReadoutElement* roe = m_detMgr->getMdtReadoutElement(id);
1344 return roe ? roe->getNtubesperlayer() : -1;
1345}
1347 const MuonGM::MdtReadoutElement* roe = m_detMgr->getMdtReadoutElement(id);
1348 return roe ? roe->getNLayers() : -1;
1349}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
double tubeMax
std::string convertChamberName(int, int, int, const std::string &)
Header file for AthHistogramAlgorithm.
ToolHandleArray< IDQFilterTool > m_DQFilterTools
Array of Data Quality filter tools.
This class saves the "context" of an expanded identifier (ExpandedIdentifier) for compact or hash ver...
Definition IdContext.h:26
This is a "hash" representation of an Identifier.
virtual int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
int get_bin_for_LB_hist(int region, int layer, int phi, int eta, bool isBIM) const
StatusCode getChamber(const IdentifierHash &id, MDTChamber *&chamber) const
virtual StatusCode binMdtRegional(TH2 *, std::string_view xAxis)
int GetTubeMax(const Identifier &digcoll_id, std::string_view hardware_name)
virtual StatusCode binMdtGlobal_byLayer(TH2 *, TH2 *, TH2 *)
std::string getChamberName(const Muon::MdtPrepData *) const
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
std::vector< std::unique_ptr< MDTChamber > > m_hist_hash_list
std::vector< Identifier > m_chambersId
static void CorrectLayerMax(const std::string &hardware_name, int &numLayers)
virtual StatusCode binMdtOccVsLB_Crate(TH2 *&h, int region, int crate)
Gaudi::Property< bool > m_do_run3Geometry
const MuonGM::MuonDetectorManager * m_detMgr
virtual StatusCode binMdtGlobal(TH2 *, char ecap)
int mezzmdt(const Identifier &id) const
int get_bin_for_LB_crate_hist(int region, int layer, int phi, int eta, std::string_view chamber) const
int cachedTubeLayerMax(const Identifier &id) const
std::vector< IdentifierHash > m_chambersIdHash
virtual StatusCode binMdtOccVsLB(TH2 *&h, int region, int layer)
int cachedTubeMax(const Identifier &id) const
static void ChamberTubeNumberCorrection(int &tubeNum, std::string_view hardware_name, int tubePos, int numLayers)
static bool AinB(int A, std::vector< int > &B)
static void CorrectTubeMax(const std::string &hardware_name, int &numTubes)
int getNLayers() const
Returns the number of tube layers inside the multilayer.
int getNtubesperlayer() const
Returns the number of tubes in each tube layer.
int stationEta(const Identifier &id) const
int stationPhi(const Identifier &id) const
int stationName(const Identifier &id) const
Class to represent measurements from the Monitored Drift Tubes.
Definition MdtPrepData.h:33
Identifier identify() const
return the identifier
hold the test vectors and ease the comparison