ATLAS Offline Software
Loading...
Searching...
No Matches
MDTChamber.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3*/
4
5#include "MDTChamber.h"
6
7#include <cmath>
8#include <iostream>
9#include <sstream>
10
11#include "TH2F.h"
12
13MDTChamber::MDTChamber(std::string_view name) :
14 mdttdc(nullptr),
15 mdttdccut_ML1(nullptr),
16 mdttdccut_ML2(nullptr),
17 mdtadc_onSegm_ML1(nullptr),
18 mdtadc_onSegm_ML2(nullptr),
19 // mdttdccut_RPCtrig_ML1(0),
20 // mdttdccut_TGCtrig_ML1(0),
21 // mdttdccut_RPCtrig_ML2(0),
22 // mdttdccut_TGCtrig_ML2(0),
23 mdtadc(nullptr),
24 mdttdcadc(nullptr),
25 // mdtmultil(0),
26 mdtlayer(nullptr),
27 mdttube(nullptr),
28 // mdttube_bkgrd(0),
29 // mdttube_fornoise(0),
30 mdttube_masked(nullptr),
31 mdtmezz(nullptr),
32 // NEW
33 mdt_effEntries(nullptr),
34 mdt_effCounts(nullptr),
35 mdt_effPerTube(nullptr),
36 mdt_DRvsDT(nullptr),
37 mdt_DRvsDRerr(nullptr),
38 mdt_DRvsSegD(nullptr),
39 mdttubenoise(nullptr),
40 mdttdctube(nullptr),
46 m_crate(0),
47 m_crate_str("XXXX"),
58 m_binx(0),
59 m_biny_m1(0),
60 m_biny_m2(0)
61 {
62 if (name.size() >= 7) {
63 // BOS6A16
64 // 0123456
65 char Barrel = name.at(0);
66 char Side = name.at(4);
67
68 // set m_barrel_region
69 if (Barrel == 'B' && (Side == 'A' || Side == 'B'))
70 m_barrel_region = 0;
71 else if (Barrel == 'B' && Side == 'C')
72 m_barrel_region = 1;
73 else if (Barrel == 'E' && (Side == 'A' || Side == 'B'))
74 m_barrel_region = 2;
75 else if (Barrel == 'E' && Side == 'C')
76 m_barrel_region = 3;
77 else {
78 // ATH_MSG_DEBUG("hardware_name doesn't make sense!" );
79 }
80
81 std::stringstream ss;
82 // set m_layer_region
83 char layerName = m_hardware_name.at(1);
84 if (layerName == 'I')
86 else if (layerName == 'M')
88 else if (layerName == 'O')
90 else if (layerName == 'E')
92
93 // set m_station_eta
94 ss << name.at(3);
96 ss.clear();
97
98 // set m_station_phi
99 std::string_view statphi_s(name.substr(5, 2));
100 ss << statphi_s;
101 ss >> m_station_phi;
103 ss.clear();
104 std::string_view name_v(m_hardware_name);
105 // First there were only BMF1,2,3, then BMGs were added which are between the BMFs, so doing the eta-station assignment by hand.
106 if (name_v.substr(0, 4) == "BMF2") m_station_eta = 3;
107 if (name_v.substr(0, 4) == "BMF3") m_station_eta = 5;
108
109 // station_phi is used as an iterator, and is thus 1 less than its value (since it always starts at 01, not 00).
110
111 if ((Barrel == 'B' && name.substr(0, 3) != "BEE" && name.substr(0, 3) != "BIS") ||
112 (name.substr(0, 3) == "BIS" && m_station_eta < 6)) {
113 if (m_station_phi < 4 || name.substr(0, 3) == "BME") {
114 m_crate = 1;
115 if (Side == 'A')
116 m_crate_str = "BA01";
117 else if (Side == 'C')
118 m_crate_str = "BC01";
120 m_crate = 2;
121 if (Side == 'A')
122 m_crate_str = "BA02";
123 else if (Side == 'C')
124 m_crate_str = "BC02";
126 m_crate = 3;
127 if (Side == 'A' || Side == 'B')
128 m_crate_str = "BA03";
129 else if (Side == 'C')
130 m_crate_str = "BC03";
131 } else if (m_station_phi > 11) {
132 m_crate = 4;
133 if (Side == 'A' || Side == 'B')
134 m_crate_str = "BA04";
135 else if (Side == 'C')
136 m_crate_str = "BC04";
137 }
138 } else if ((Barrel == 'E') || name.substr(0, 3) == "BEE" || (name.substr(0, 3) == "BIS" && m_station_eta > 5)) {
139 if (m_station_phi < 4) {
140 m_crate = 1;
141 if (Side == 'A')
142 m_crate_str = "EA01";
143 else if (Side == 'C')
144 m_crate_str = "EC01";
146 m_crate = 2;
147 if (Side == 'A')
148 m_crate_str = "EA02";
149 else if (Side == 'C')
150 m_crate_str = "EC02";
152 m_crate = 3;
153 if (Side == 'A')
154 m_crate_str = "EA03";
155 else if (Side == 'C')
156 m_crate_str = "EC03";
157 } else if (m_station_phi > 11) {
158 m_crate = 4;
159 if (Side == 'A')
160 m_crate_str = "EA04";
161 else if (Side == 'C')
162 m_crate_str = "EC04";
163 }
164 } else {
165 }
166 } else {
167 // ATH_MSG_DEBUG("BAD CHAMBER NAME");
168 }
169}
170
171MDTChamber::~MDTChamber() = default;
172
174 // Plots BEE Chambers at the edge BIS plots, and EES/EEL on EIS/EIL plots
175 // EIL goes up to EIL5 in hardware name but in reality there are only 4 eta stations!
176 std::string_view name_v(m_hardware_name);
177 std::string_view station_eta_s = name_v.substr(3, 1);
178 std::string_view statphi_s = name_v.substr(5, 2);
179 if (name_v.substr(0, 4) == "BMF2") station_eta_s = "3";
180 if (name_v.substr(0, 4) == "BMF3") station_eta_s = "5";
181
182 std::string ecap_layer_IMO = std::string(name_v.substr(0, 1));
183 ecap_layer_IMO += name_v.substr(4, 1);
184 ecap_layer_IMO += station_eta_s;
185
186 if (m_station_phi == 12 && (m_station_eta == 4 || m_station_eta == 5)) { // m_station_phi+1==actual phi station
187 if (name_v == "BML4A13") ecap_layer_IMO = "BA5";
188 if (name_v == "BML5A13") ecap_layer_IMO = "BA6";
189 if (name_v == "BML4C13") ecap_layer_IMO = "BC5";
190 if (name_v == "BML5C13") ecap_layer_IMO = "BC6";
191 }
192
193 if (name_v == "BME1A14" || name_v == "BME1A13") { // protect against future fix in mdt helper
194 ecap_layer_IMO = "BA4";
195 statphi_s = "13";
196 }
197 if (name_v == "BME1C14" || name_v == "BME1C13") {
198 ecap_layer_IMO = "BC4";
199 statphi_s = "13";
200 }
201 // First there were only BMF1,2,3, then BMGs were added which are between the BMFs, so doing the ecap-layer assignment by hand.
202 if (name_v.substr(0, 5) == "BMF2A") ecap_layer_IMO = "BA3";
203 if (name_v.substr(0, 5) == "BMF3A") ecap_layer_IMO = "BA5";
204 if (name_v.substr(0, 5) == "BMF2C") ecap_layer_IMO = "BC3";
205 if (name_v.substr(0, 5) == "BMF3C") ecap_layer_IMO = "BC5";
206
207 std::string statphi_IMO_s = std::string(name_v.substr(1, 1));
208 statphi_IMO_s += ',';
209 statphi_IMO_s += statphi_s;
210 // Separate pesky BIR/BIM 11,15
211 if (name_v.substr(0, 3) == "BIR" || name_v.substr(0, 3) == "BIM") {
212 statphi_IMO_s += ',';
213 statphi_IMO_s += name_v.at(2);
214 }
215
216 int binx = h->GetXaxis()->FindBin(ecap_layer_IMO.c_str());
217 int biny = h->GetYaxis()->FindBin(statphi_IMO_s.c_str());
221}
222
223void MDTChamber::SetMDTHitsPerML_byLayer_Bins(TH2F* h_mdthitspermultilayerLumi, TH2F* h_mdthitsperML_byLayer) {
224 std::string statphi_s = m_hardware_name.substr(5, 2);
225
226 if (m_hardware_name == "BME1A14" || m_hardware_name == "BME1C14") statphi_s = "13";
227 const std::string_view name_v(m_hardware_name);
228 std::string statphi_ml1_s = statphi_s + ",1";
229 std::string statphi_ml2_s = statphi_s + ",2";
230
231 // Separate pesky BIR/BIM 11,15
232 if (m_hardware_name.substr(0, 3) == "BIR" || m_hardware_name.substr(0, 3) == "BIM") {
233 statphi_ml1_s = statphi_ml1_s + "," + m_hardware_name.at(2);
234 statphi_ml2_s = statphi_ml2_s + "," + m_hardware_name.at(2);
235 }
236
237 std::string stateta_s = m_hardware_name.substr(3, 1);
238 //coverity[WRAPPER_ESCAPE:FALSE]
239 if (name_v.substr(0, 4) == "BMF2") stateta_s = "3";
240 if (name_v.substr(0, 4) == "BMF3") stateta_s = "5";
241 std::string ecap_layer = m_hardware_name.substr(0, 2) + m_hardware_name.at(4) + stateta_s;
242
243 if (m_station_phi == 12 && (m_station_eta == 4 || m_station_eta == 5)) { // m_station_phi+1==actual phi station
244 if (m_hardware_name == "BML4A13") ecap_layer = "BMA5";
245 if (m_hardware_name == "BML5A13") ecap_layer = "BMA6";
246 if (m_hardware_name == "BML4C13") ecap_layer = "BMC5";
247 if (m_hardware_name == "BML5C13") ecap_layer = "BMC6";
248 }
249 if (m_hardware_name == "BME1A14" || m_hardware_name == "BME1A13") { ecap_layer = "BMA4"; }
250 if (m_hardware_name == "BME1C14" || m_hardware_name == "BME1C13") { ecap_layer = "BMC4"; }
251
252 // Setting BMF by hand because of irregular naming convention. BMF and BMG chambers alternate; historical BMF naming is BMF1,2,3 but BMG
253 // it is 2,4,6
254 //coverity[WRAPPER_ESCAPE:FALSE]
255 if (name_v.substr(0, 5) == "BMF2A") ecap_layer = "BMA3";
256 if (name_v.substr(0, 5) == "BMF3A") ecap_layer = "BMA5";
257 if (name_v.substr(0, 5) == "BMF2C") ecap_layer = "BMC3";
258 if (name_v.substr(0, 5) == "BMF3C") ecap_layer = "BMC5";
259
260 int binx = h_mdthitspermultilayerLumi->GetXaxis()->FindBin(ecap_layer.c_str());
261 int biny_m1 = h_mdthitspermultilayerLumi->GetYaxis()->FindBin(statphi_ml1_s.c_str());
262 int biny_m2 = biny_m1;
263 if (!(TString(h_mdthitspermultilayerLumi->GetName()) == "NumberOfHitsInBAExtraPerMultiLayer_ADCCut" ||
264 TString(h_mdthitspermultilayerLumi->GetName()) == "NumberOfHitsInBCExtraPerMultiLayer_ADCCut"))
265 biny_m2 = h_mdthitspermultilayerLumi->GetYaxis()->FindBin(statphi_ml2_s.c_str()); // Do not create extra bins
266
267 m_mdthitspermultilayerLumi_bin_m1 = h_mdthitspermultilayerLumi->GetBin(binx, biny_m1);
268 m_mdthitspermultilayerLumi_bin_m2 = h_mdthitspermultilayerLumi->GetBin(binx, biny_m2);
269
273
274 if ((statphi_ml1_s.substr(0, 2) == "11" || statphi_ml1_s.substr(0, 2) == "15") && m_hardware_name.at(0) == 'E' &&
275 (m_layer_region == 0 || m_layer_region == 3)) {
276 statphi_ml1_s += ",R"; // Correction for EIR/EIM
277 statphi_ml2_s += ",R"; // Correction for EIR/EIM
278 }
279
280 m_binx = h_mdthitsperML_byLayer->GetXaxis()->FindBin(ecap_layer.c_str());
281 m_biny_m1 = h_mdthitsperML_byLayer->GetYaxis()->FindBin(statphi_ml1_s.c_str());
282 m_biny_m2 = h_mdthitsperML_byLayer->GetYaxis()->FindBin(statphi_ml2_s.c_str());
283
284 m_mdthitsperML_byLayer_bin_m1 = h_mdthitsperML_byLayer->GetBin(binx, biny_m1);
285 m_mdthitsperML_byLayer_bin_m2 = h_mdthitsperML_byLayer->GetBin(binx, biny_m2);
286}
static Double_t ss
if(febId1==febId2)
Header file for AthHistogramAlgorithm.
void SetMDTHitsPerML_byLayer_Bins(TH2F *, TH2F *)
TH1F_LW * mdt_effEntries
Definition MDTChamber.h:42
short int m_mdthitsperchamber_InnerMiddleOuterLumi_bin
Definition MDTChamber.h:110
TH1F_LW * mdtadc_onSegm_ML2
Definition MDTChamber.h:31
short int m_biny_m1
Definition MDTChamber.h:121
short int m_mdthitspermultilayerLumi_bin_m1
Definition MDTChamber.h:113
short int m_mdthitsperchamber_InnerMiddleOuterLumi_binx
Definition MDTChamber.h:111
short int m_mdthitspermultilayerLumi_bin_m2
Definition MDTChamber.h:114
TH1F_LW * mdttube
Definition MDTChamber.h:36
TH1F_LW * mdttdc
Definition MDTChamber.h:27
TH1F_LW * mdtadc_onSegm_ML1
Definition MDTChamber.h:30
TH1F_LW * mdttube_masked
Definition MDTChamber.h:38
MDTChamber(std::string_view name)
TH2F_LW * mdt_DRvsDRerr
Definition MDTChamber.h:46
TH1F_LW * mdtmezz
Definition MDTChamber.h:39
short int m_layer_region
Definition MDTChamber.h:100
TH2F_LW * mdt_DRvsSegD
Definition MDTChamber.h:47
TH1F_LW * mdttdccut_ML2
Definition MDTChamber.h:29
TH2F_LW * mdttdcadc
Definition MDTChamber.h:34
short int m_barrel_region
Definition MDTChamber.h:99
short int m_mdthitsperML_byLayer_bin_m2
Definition MDTChamber.h:119
short int m_mdthitsperML_byLayer_bin_m1
Definition MDTChamber.h:118
TH1F_LW * mdttdctube
Definition MDTChamber.h:65
TH1F_LW * mdtlayer
Definition MDTChamber.h:35
TH1F_LW * mdttdccut_ML1
Definition MDTChamber.h:28
short int m_station_eta
Definition MDTChamber.h:101
short int m_station_phi
Definition MDTChamber.h:102
TH2F_LW * mdt_DRvsDT
Definition MDTChamber.h:45
TH1F_LW * mdt_effCounts
Definition MDTChamber.h:43
short int m_biny_m2
Definition MDTChamber.h:122
short int m_mdthitspermultilayerLumi_bin_m1_biny
Definition MDTChamber.h:116
short int m_binx
Definition MDTChamber.h:120
std::string m_hardware_name
Definition MDTChamber.h:97
short int m_mdthitsperchamber_InnerMiddleOuterLumi_biny
Definition MDTChamber.h:112
std::string m_crate_str
Definition MDTChamber.h:107
void SetMDTHitsPerChamber_IMO_Bin(TH2F *)
TH1F_LW * mdtadc
Definition MDTChamber.h:33
TH1F_LW * mdt_effPerTube
Definition MDTChamber.h:44
TH1F_LW * mdttubenoise
Definition MDTChamber.h:64
short int m_mdthitspermultilayerLumi_bin_m2_biny
Definition MDTChamber.h:117
short int m_mdthitspermultilayerLumi_bin_m1_binx
Definition MDTChamber.h:115
STL class.
STL namespace.