ATLAS Offline Software
MdtRawDataMonAlg.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
6 // Package : MdtRawDataMonAlg
7 // Authors: N. Benekos(Illinois)
8 // A. Cortes (Illinois)
9 // G. Dedes (MPI)
10 // Orin Harris (University of Washington)
11 // Justin Griffiths (University of Washington)
12 // M. Biglietti (INFN - Roma Tre)
13 // Oct. 2007
14 //
15 // DESCRIPTION:
16 // Subject: MDT-->Offline Muon Data Quality
18 
19 #include "MdtRawDataMonAlg.h"
20 
23 #include "GaudiKernel/MsgStream.h"
25 #include "MdtHistCoder.h"
27 #include "MuonChamberIDSelector.h"
37 #include "TrkTrack/Track.h"
39 #include "xAODMuon/Muon.h"
43 
44 // root includes
45 #include <TH2F.h>
46 
47 #include <array>
48 #include <cmath>
49 #include <memory>
50 #include <sstream>
51 
52 namespace {
53  // the tube number of a tube in a tubeLayer in encoded in the GeoSerialIdentifier (modulo maxNTubesPerLayer)
54  constexpr unsigned int maxNTubesPerLayer = MdtIdHelper::maxNTubesPerLayer;
55 } // namespace
56 
58  std::vector<float> mdt_tube_x_barrel;
59  std::vector<float> mdt_tube_y_barrel;
60  std::vector<float> mdt_tube_z_barrel;
61  std::vector<float> mdt_tube_perp_barrel;
62 
63  std::vector<float> mdt_tube_x_ovl;
64  std::vector<float> mdt_tube_y_ovl;
65  std::vector<float> mdt_tube_z_ovl;
66  std::vector<float> mdt_tube_perp_ovl;
67 
68  std::vector<float> mdt_tube_x_endcap;
69  std::vector<float> mdt_tube_y_endcap;
70  std::vector<float> mdt_tube_z_endcap;
71  std::vector<float> mdt_tube_perp_endcap;
72 
73  std::vector<float> adc_mon_nosel;
74  std::vector<float> tdc_mon_nosel;
75  std::vector<float> tdc_mon;
76  std::vector<float> adc_mon;
77  std::vector<int> noiseBurst;
78 
79  std::vector<float> tdc_mon_noiseBurst;
80  std::vector<float> adc_mon_noiseBurst;
81  std::vector<float> adc_mon_noiseBurst_notNoisy;
82  std::vector<float> tdc_mon_noiseBurst_adcCut;
83 
84  std::vector<float> tdc_mon_adcCut;
85 };
86 
88  std::vector<int> sector;
89  std::vector<int> stationEta;
90  std::vector<float> adc_mon;
91  std::vector<float> tdc_mon;
92  std::vector<float> tdc_mon_nb2;
93  std::vector<float> adc_mon_nb2;
94  std::vector<float> tdc_mon_nb1;
95  std::vector<float> adc_mon_nb1;
96  std::vector<float> adc_mon_adccut;
97  std::vector<float> tdc_mon_adccut;
98  std::vector<int> x_mon;
99  std::vector<int> y_mon;
100  std::vector<int> x_mon_noise;
101  std::vector<int> y_mon_noise;
102  std::vector<float> tdc_mon_nb3;
103  std::vector<int> x_bin_perML;
104  std::vector<int> y_bin_perML;
105  std::vector<int> bin_byLayer_x;
106  std::vector<int> bin_byLayer_y;
107  std::vector<float> tdc_mon_rpc;
108  std::vector<float> tdc_mon_tgc;
109  std::vector<int> biny_vslb;
110  std::vector<int> biny_vslb_bycrate;
111  std::vector<int> biny_vslb_bycrate_bis_bee;
112  std::vector<int> biny_vslb_bycrate_ontrack;
114 };
115 
117  std::vector<float> adc_segs_mon;
118  std::vector<float> tdc_segs_mon;
119  std::vector<int> x_segs_mon;
120  std::vector<int> y_segs_mon;
121 };
123 // *********************************************************************
124 // Public Methods
125 // *********************************************************************
126 
127 MdtRawDataMonAlg::MdtRawDataMonAlg(const std::string& name, ISvcLocator* pSvcLocator) : AthMonitorAlgorithm(name, pSvcLocator) {}
128 
130 /*---------------------------------------------------------*/
132 /*---------------------------------------------------------*/
133 {
134  // init message stream
135  ATH_MSG_DEBUG("initialize MdtRawDataMonAlg");
136 
137  ATH_MSG_DEBUG("******************");
138  ATH_MSG_DEBUG("doMdtESD: " << m_doMdtESD);
139  ATH_MSG_DEBUG("******************");
140 
141  // MuonDetectorManager from the conditions store
144 
145  ATH_CHECK(m_idHelperSvc.retrieve());
146 
147  if (m_maskNoisyTubes)
148  m_masked_tubes = std::make_unique<MDTNoisyTubes>();
149  else
150  m_masked_tubes = std::make_unique<MDTNoisyTubes>(false);
151  mdtchamberId();
152 
153  ATH_CHECK(m_l1RoiKey.initialize(SG::AllowEmpty));
154  ATH_CHECK(m_muonKey.initialize());
155  ATH_CHECK(m_segm_type.initialize());
156  ATH_CHECK(m_key_mdt.initialize());
157  ATH_CHECK(m_key_rpc.initialize());
160  m_BMGid = m_idHelperSvc->mdtIdHelper().stationNameIndex("BMG");
161  if (m_BMGid != -1) {
162  ATH_MSG_DEBUG("Processing configuration for layouts with BMG chambers.");
163  m_BMGpresent = true;
164  // MuonDetectorManager from the Detector Store
165  const MuonGM::MuonDetectorManager* MuonDetMgrDS{nullptr};
166  ATH_CHECK(detStore()->retrieve(MuonDetMgrDS));
167 
168  for (int phi = 6; phi < 8; phi++) { // phi sectors
169  for (int eta = 1; eta < 4; eta++) { // eta sectors
170  for (int side = -1; side < 2; side += 2) { // side
171  if (!MuonDetMgrDS->getMuonStation("BMG", side * eta, phi)) continue;
172  for (int roe = 1; roe <= (MuonDetMgrDS->getMuonStation("BMG", side * eta, phi))->nMuonReadoutElements();
173  roe++) { // iterate on readout elemets
174  const MuonGM::MdtReadoutElement* mdtRE = dynamic_cast<const MuonGM::MdtReadoutElement*>(
175  (MuonDetMgrDS->getMuonStation("BMG", side * eta, phi))->getMuonReadoutElement(roe)); // has to be an MDT
176  if (mdtRE) initDeadChannels(mdtRE);
177  }
178  }
179  }
180  }
181  }
182 
183  /* It seems as if a bunch of histograms are created below on the heap
184  * Then these are filled in the binMdtFooBar methods
185  * Later these are passed onto relevant methods of MDTChamber where internals are filled
186  * The original histograms are transient and not needed past initialize here
187  * The logic is a little too convoluted but left as is
188  */
189  unsigned int counter{0};
190  std::string s{""}, xAxis{""};
191 
192  // Create Inner/Middle/Outer/Extra histograms per BA/BC/EA/EC
193  std::vector<std::string> ecap{"BA", "BC", "EA", "EC"};
194  std::vector<std::string> layer{"Inner", "Middle", "Outer", "Extra"};
195  std::vector<std::unique_ptr<TH2F>> mdtHitsPerMultiLayerLumi;
196  mdtHitsPerMultiLayerLumi.reserve(ecap.size() * layer.size());
197 
198  for (const auto& iecap : ecap) {
199  for (const auto& ilayer : layer) {
200  s = "NumberOfHitsIn" + iecap + ilayer + "PerMultiLayer_ADCCut";
201  mdtHitsPerMultiLayerLumi.push_back(std::make_unique<TH2F>(s.c_str(), s.c_str(), 1, 0, 1, 1, 0, 1));
202  xAxis = iecap.substr(0, 1) + ilayer.substr(0, 1) + iecap.substr(1, 1);
203  ATH_CHECK(binMdtRegional(mdtHitsPerMultiLayerLumi[counter].get(), xAxis));
204  counter++;
205  } // end of iecap
206  } // end of ilayer
207  counter = 0;
208 
209  // Create Barrel/EndCap histrograms here
210  std::vector<std::string> mdtHitsBE{"Barrel", "EndCap"};
211  std::vector<std::unique_ptr<TH2F>> mdtHitsPerChamberIMOLumi;
212  mdtHitsPerChamberIMOLumi.reserve(mdtHitsBE.size());
213 
214  for (const auto& imdt : mdtHitsBE) {
215  s = "NumberOfHits" + imdt;
216  mdtHitsPerChamberIMOLumi.push_back(std::make_unique<TH2F>(s.c_str(), s.c_str(), 1, 0, 1, 1, 0, 1));
217  ATH_CHECK(binMdtGlobal(mdtHitsPerChamberIMOLumi[counter].get(), imdt.at(0)));
218  counter++;
219  } // end of imdt
220  counter = 0;
221 
222  // Create Inner/Middle/Outer histograms here
223  std::vector<std::unique_ptr<TH2F>> mdtHitsPerMLByLayer;
224  mdtHitsPerMLByLayer.reserve(layer.size() - 1);
225 
226  for (const auto& ilayer : layer) {
227  if (ilayer == "Extra") continue;
228  s = "NumberOfHitsInMDT" + ilayer + "_ADCCut";
229  mdtHitsPerMLByLayer.push_back(std::make_unique<TH2F>(s.c_str(), s.c_str(), 1, 0, 1, 1, 0, 1));
230  } // end of ilayer
231  ATH_CHECK(binMdtGlobal_byLayer(mdtHitsPerMLByLayer[0].get(), mdtHitsPerMLByLayer[1].get(), mdtHitsPerMLByLayer[2].get()));
232 
233  for (std::vector<Identifier>::const_iterator itr = m_chambersId.begin(); itr != m_chambersId.end(); ++itr, ++counter) {
234  std::string hardware_name =
235  convertChamberName(m_idHelperSvc->mdtIdHelper().stationName(*itr), m_idHelperSvc->mdtIdHelper().stationEta(*itr),
236  m_idHelperSvc->mdtIdHelper().stationPhi(*itr), "MDT");
237  // Skip Chambers That Do NOT Exist
238  if (hardware_name == "BML6A13" || hardware_name == "BML6C13") continue;
239  std::unique_ptr<MDTChamber>& chamber = m_hist_hash_list[m_chambersIdHash.at(counter)];
240  chamber = std::make_unique<MDTChamber>(hardware_name);
241 
242  chamber->SetMDTHitsPerChamber_IMO_Bin(mdtHitsPerChamberIMOLumi[chamber->GetBarrelEndcapEnum()].get());
243  chamber->SetMDTHitsPerML_byLayer_Bins(
244  mdtHitsPerMultiLayerLumi[chamber->GetRegionEnum() * layer.size() + chamber->GetLayerEnum()].get(),
245  mdtHitsPerMLByLayer[(chamber->GetLayerEnum() < 3 ? chamber->GetLayerEnum() : 0)].get());
246 
247  m_tubesperchamber_map[hardware_name] = GetTubeMax(*itr, hardware_name); // total number of tubes in chamber
248  }
249 
250  ATH_MSG_DEBUG(" end of initialize ");
252 }
253 
254 /*----------------------------------------------------------------------------------*/
255 StatusCode MdtRawDataMonAlg::fillHistograms(const EventContext& ctx) const
256 /*----------------------------------------------------------------------------------*/
257 {
258  int lumiblock = -1;
259  SG::ReadHandle<xAOD::EventInfo> evt(m_eventInfo, ctx);
260  lumiblock = evt->lumiBlock();
261 
262  ATH_MSG_DEBUG("MdtRawDataMonAlg::MDT RawData Monitoring Histograms being filled");
263 
264  // Making an histo to store the Run3 geo flag
265  auto run3geo = Monitored::Scalar<int>("run3geo", m_do_run3Geometry);
266  auto firstEvent = Monitored::Scalar<int>("firstEvent", (int)(m_firstEvent));
267  fill("MdtMonitor", run3geo, firstEvent);
268  m_firstEvent = 0;
269 
270  // Retrieve the LVL1 Muon RoIs:
271  bool trig_BARREL = false;
272  bool trig_ENDCAP = false;
273  if (!m_l1RoiKey.empty()) {
274  SG::ReadHandle<xAOD::MuonRoIContainer> muonRoIs(m_l1RoiKey, ctx);
275  if (!muonRoIs.isValid()) { ATH_MSG_ERROR("evtStore() does not contain muon L1 ROI Collection with name " << m_l1RoiKey); }
276  // DEV still needed ? does not compile
277  if (muonRoIs.isPresent() && muonRoIs.isValid()) {
278  ATH_MSG_VERBOSE("Retrieved LVL1MuonRoIs object with key: " << m_l1RoiKey.key());
279  trig_BARREL = std::any_of(muonRoIs->begin(), muonRoIs->end(),
280  [](const auto& i) { return i->getSource() == xAOD::MuonRoI::RoISource::Barrel; });
281  trig_ENDCAP = std::any_of(muonRoIs->begin(), muonRoIs->end(),
282  [](const auto& i) { return i->getSource() == xAOD::MuonRoI::RoISource::Endcap; });
283  }
284  }
285 
286  // declare MDT stuff
287  SG::ReadHandle<Muon::MdtPrepDataContainer> mdt_container(m_key_mdt, ctx);
288  if (!mdt_container.isValid()) {
289  ATH_MSG_ERROR("evtStore() does not contain mdt prd Collection with name " << m_key_mdt);
290  return StatusCode::FAILURE;
291  }
292 
293  ATH_MSG_DEBUG("****** mdtContainer->size() : " << mdt_container->size());
294 
295  int nColl = 0; // Number of MDT chambers with hits
296  int nColl_ADCCut = 0; // Number of MDT chambers with hits above ADC cut
297  int nPrd = 0; // Total number of MDT prd digits
298  int nPrdcut = 0; // Total number of MDT prd digits with a cut on ADC>50.
299 
300  // declare RPC stuff
301  SG::ReadHandle<Muon::RpcPrepDataContainer> rpc_container(m_key_rpc, ctx);
302  if (!rpc_container.isValid()) {
303  ATH_MSG_ERROR("evtStore() does not contain rpc prd Collection with name " << m_key_rpc);
304  return StatusCode::FAILURE;
305  }
306 
307  ATH_MSG_DEBUG("****** rpc->size() : " << rpc_container->size());
308 
310 
312  float Nhitsrpc = 0;
313  for (containerIt = rpc_container->begin(); containerIt != rpc_container->end(); ++containerIt) {
314  for (Muon::RpcPrepDataCollection::const_iterator rpcPrd = (*containerIt)->begin(); rpcPrd != (*containerIt)->end(); ++rpcPrd) {
315  ++Nhitsrpc;
316  }
317  }
318  float Nhitsmdt = 0;
319  bool isNoiseBurstCandidate = false;
321  for (MdtcontainerIt = mdt_container->begin(); MdtcontainerIt != mdt_container->end(); ++MdtcontainerIt) {
322  for (Muon::MdtPrepDataCollection::const_iterator mdtCollection = (*MdtcontainerIt)->begin();
323  mdtCollection != (*MdtcontainerIt)->end(); ++mdtCollection) {
324  ++Nhitsmdt;
325  }
326  }
327 
328  if (Nhitsmdt > m_HighOccThreshold) isNoiseBurstCandidate = true;
329  std::string type = "MDT";
330  std::string hardware_name;
331 
332  std::map<std::string, int> evnt_hitsperchamber_map;
333  std::set<std::string> chambers_from_tracks;
334 
335  if (m_doMdtESD == true) {
336  // DEV this shouls be done in some other way, in AthenaMonManager there is
337  // Gaudi::Property<std::string> m_environmentStr {this,"Environment","user"}; ///< Environment string pulled from the job option
338  // and converted to enum
339  // commented out for the time being
340  // if(m_environment == AthenaMonManager::tier0 || m_environment == AthenaMonManager::tier0ESD || m_environment ==
341  // AthenaMonManager::online) {
342  if (true) { // DEV to be updated
343 
344  SG::ReadHandle<xAOD::TrackParticleContainer> muons(m_muon_type, ctx);
345 
346  // ATH_CHECK(muons.isValid());
347 
348  for (const auto* const mu : *muons) {
349  // add quality selection here
350  if (mu) {
351  const Trk::Track* trk = mu->track();
352  // this work only if tp are available
353  if (!trk) continue;
354 
355  uint8_t ntri_eta = 0;
356  uint8_t n_phi = 0;
357  mu->summaryValue(ntri_eta, xAOD::numberOfTriggerEtaLayers);
358  mu->summaryValue(n_phi, xAOD::numberOfPhiLayers);
359  if (ntri_eta + n_phi == 0) continue;
360 
361  for (const Trk::MeasurementBase* hit : *trk->measurementsOnTrack()) {
362  const Trk::RIO_OnTrack* rot_from_track = dynamic_cast<const Trk::RIO_OnTrack*>(hit);
363  if (!rot_from_track) continue;
364  Identifier rotId = rot_from_track->identify();
365  if (!m_idHelperSvc->isMdt(rotId)) continue;
366  IdentifierHash mdt_idHash;
367  MDTChamber* mdt_chamber = nullptr;
368  m_idHelperSvc->mdtIdHelper().get_module_hash(rotId, mdt_idHash);
369  ATH_CHECK(getChamber(mdt_idHash, mdt_chamber));
370  std::string mdt_chambername = mdt_chamber->getName();
371  chambers_from_tracks.insert(mdt_chambername);
372  }
373  }
374  }
375 
376  MDTOverviewHistogramStruct overviewPlots;
377  auto summaryPlots = std::make_unique<std::array<MDTSummaryHistogramStruct, 4096>>();
378  // loop in MdtPrepDataContainer
379  std::vector<std::string> v_hit_in_chamber_allphi;
380  std::map<std::string, std::vector<std::string>> v_hit_in_chamber;
381  for (Muon::MdtPrepDataContainer::const_iterator containerIt = mdt_container->begin(); containerIt != mdt_container->end();
382  ++containerIt) {
383  if (containerIt == mdt_container->end() || containerIt->empty()) continue; // check if there are counts
384  nColl++;
385 
386  bool isHit_above_ADCCut = false;
387  // loop over hits
388  for (const auto* mdtCollection : **containerIt) {
389  nPrd++;
390 
391  float adc = mdtCollection->adc();
392  hardware_name = getChamberName(mdtCollection);
393 
394  if (hardware_name.substr(0, 3) == "BMG") adc /= m_adcScale;
395  if (adc > m_ADCCut) {
396  nPrdcut++;
397  isHit_above_ADCCut = true;
398  if (m_do_mdtchamberstatphislice) {
399  std::string phi = hardware_name.substr(hardware_name.length() - 2);
400  v_hit_in_chamber[phi].push_back(hardware_name);
401  }
402  v_hit_in_chamber_allphi.push_back(hardware_name);
403  }
404  fillMDTOverviewVects(mdtCollection, isNoiseBurstCandidate, overviewPlots);
405  //=======================================================================
406  //=======================================================================
407  //=======================================================================
408  ATH_CHECK(fillMDTSummaryVects(mdtCollection, chambers_from_tracks, isNoiseBurstCandidate, trig_BARREL, trig_ENDCAP,
409  summaryPlots.get()));
410  //=======================================================================
411  //=======================================================================
412  //=======================================================================
413  if (m_doChamberHists) { ATH_CHECK(fillMDTHistograms(mdtCollection)); }
414 
415  std::map<std::string, int>::iterator iter_hitsperchamber = evnt_hitsperchamber_map.find(hardware_name);
416  if (iter_hitsperchamber == evnt_hitsperchamber_map.end()) {
417  evnt_hitsperchamber_map.insert(make_pair(hardware_name, 1));
418  } else {
419  iter_hitsperchamber->second += 1;
420  }
421 
422  } // for loop over hits mdtcollection
423  nColl_ADCCut += isHit_above_ADCCut;
424  } // loop in MdtPrepDataContainer
425  if (m_do_mdtchamberstatphislice) {
426  for (const auto& phiitem : v_hit_in_chamber) {
427  auto hit_in_chamber = Monitored::Collection("hits_phi_" + phiitem.first, phiitem.second);
428  fill("MdtMonitor", hit_in_chamber);
429  }
430  }
431  auto hit_in_chamber_allphi = Monitored::Collection("hits_allphi", v_hit_in_chamber_allphi);
432  fill("MdtMonitor", hit_in_chamber_allphi);
433 
434  fillMDTOverviewHistograms(overviewPlots);
435  ATH_CHECK(fillMDTSummaryHistograms(summaryPlots.get(), lumiblock));
436 
437  int nHighOccChambers = 0;
438  for (const auto& iterstat : evnt_hitsperchamber_map) {
439  const auto iter_tubesperchamber = m_tubesperchamber_map.find(iterstat.first);
440  if (ATH_UNLIKELY(iter_tubesperchamber == m_tubesperchamber_map.end())) { // indicates software error
441  ATH_MSG_ERROR("Unable to find chamber " << iterstat.first);
442  continue;
443  }
444  float nTubes = iter_tubesperchamber->second;
445  float hits = iterstat.second;
446  float occ = hits / nTubes;
447  if (occ > 0.1) nHighOccChambers++;
448  }
449 
450  auto nHighOccChambers_mon = Monitored::Scalar<float>("nHighOccChambers_mon", nHighOccChambers);
451 
452  auto nPrd_mon = Monitored::Scalar<int>("nPrd_mon", nPrd);
453  auto nPrdcut_mon = Monitored::Scalar<int>("nPrdcut_mon", nPrdcut);
454  auto Nhitsrpc_mon = Monitored::Scalar<int>("Nhitsrpc_mon", Nhitsrpc);
455  auto nColl_mon = Monitored::Scalar<int>("nColl_mon", nColl);
456  auto nColl_ADCCut_mon = Monitored::Scalar<int>("nColl_ADCCut_mon", nColl_ADCCut);
457 
458  fill("MdtMonitor", nHighOccChambers_mon, nPrd_mon, Nhitsrpc_mon, nPrdcut_mon, nColl_mon, nColl_ADCCut_mon);
459 
460  // if (m_mdtglobalhitstime) m_mdtglobalhitstime->Fill(m_time - m_firstTime);
461 
462  } // m_environment == AthenaMonManager::tier0 || m_environment == AthenaMonManager::tier0ESD
463  } // m_doMdtESD==true
464 
465  for (const auto& key : m_segm_type) {
467  if (!segms.isValid()) {
468  ATH_MSG_ERROR("evtStore() does not contain mdt segms Collection with name " << key);
469  return StatusCode::FAILURE;
470  }
471 
472  MDTSegmentHistogramStruct segsPlots[4][4][16]; // [region][layer][phi]
473 
474  ATH_CHECK(handleEvent_effCalc_fillVects(segms.cptr(), segsPlots));
475 
476  ATH_CHECK(fillMDTSegmentHistograms(segsPlots));
477  }
478  return StatusCode::SUCCESS;
479 }
480 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
481 
482 void MdtRawDataMonAlg::fillMDTOverviewVects(const Muon::MdtPrepData* mdtCollection, bool& isNoiseBurstCandidate,
483  MDTOverviewHistogramStruct& vects) const {
484  Identifier digcoll_id = mdtCollection->identify();
485 
486  std::string hardware_name = getChamberName(mdtCollection);
487  bool isNoisy = m_masked_tubes->isNoisy(mdtCollection);
488 
489  // MuonDetectorManager from the conditions store
491  const MuonGM::MuonDetectorManager* MuonDetMgr = DetectorManagerHandle.cptr();
492  if (!MuonDetMgr) {
493  ATH_MSG_ERROR("Null pointer to the read MuonDetectorManager conditions object");
494  return;
495  }
496 
497  const MuonGM::MdtReadoutElement* pReadoutElementMDT = MuonDetMgr->getMdtReadoutElement(digcoll_id);
498  const Amg::Vector3D mdtgPos = pReadoutElementMDT->tubePos(digcoll_id); // global position of the wire
499  float mdt_tube_eta = mdtgPos.eta();
500 
501  float tdc = mdtCollection->tdc() * 25.0 / 32.0;
502  // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
503  if (hardware_name.substr(0, 3) == "BMG") tdc = mdtCollection->tdc() * 0.2;
504 
505  float adc = mdtCollection->adc();
506  if (hardware_name.substr(0, 3) == "BMG") adc /= m_adcScale;
507 
508  if (adc > m_ADCCut) {
509  // barrel
510  if (std::abs(mdt_tube_eta) > 0. && std::abs(mdt_tube_eta) < 0.9) {
511  vects.mdt_tube_x_barrel.push_back(mdtgPos.x());
512  vects.mdt_tube_y_barrel.push_back(mdtgPos.y());
513  vects.mdt_tube_z_barrel.push_back(mdtgPos.z());
514  vects.mdt_tube_perp_barrel.push_back(mdtgPos.perp());
515  }
516  // OverLap -->Fill MDT Global RZ and YX
517  if (std::abs(mdt_tube_eta) > 0.9 && std::abs(mdt_tube_eta) < 1.2) {
518  vects.mdt_tube_x_ovl.push_back(mdtgPos.x());
519  vects.mdt_tube_y_ovl.push_back(mdtgPos.y());
520  vects.mdt_tube_z_ovl.push_back(mdtgPos.z());
521  vects.mdt_tube_perp_ovl.push_back(mdtgPos.perp());
522  }
523  // EndCap -->Fill MDT Global RZ and YX
524  if (std::abs(mdt_tube_eta) > 1.2 && std::abs(mdt_tube_eta) < 2.7) {
525  vects.mdt_tube_x_endcap.push_back(mdtgPos.x());
526  vects.mdt_tube_y_endcap.push_back(mdtgPos.y());
527  vects.mdt_tube_z_endcap.push_back(mdtgPos.z());
528  vects.mdt_tube_perp_endcap.push_back(mdtgPos.perp());
529  }
530  }
531 
532  vects.adc_mon_nosel.push_back(adc);
533  vects.tdc_mon_nosel.push_back(tdc);
534  if (!isNoisy && adc > 0) {
535  vects.tdc_mon.push_back(tdc);
536  vects.adc_mon.push_back(adc);
537  }
538 
539  vects.noiseBurst.push_back((int)isNoiseBurstCandidate);
540  if (isNoiseBurstCandidate) {
541  vects.tdc_mon_noiseBurst.push_back(tdc);
542  vects.adc_mon_noiseBurst.push_back(adc);
543  if (!isNoisy) { vects.adc_mon_noiseBurst_notNoisy.push_back(adc); }
544  if (adc > m_ADCCut) { vects.tdc_mon_noiseBurst_adcCut.push_back(tdc); }
545  }
546 
547  if (adc > m_ADCCut) { vects.tdc_mon_adcCut.push_back(tdc); }
548 }
549 
551  auto mdt_tube_x_barrel = Monitored::Collection("mdt_tube_x_barrel", vects.mdt_tube_x_barrel);
552  auto mdt_tube_y_barrel = Monitored::Collection("mdt_tube_y_barrel", vects.mdt_tube_y_barrel);
553  auto mdt_tube_z_barrel = Monitored::Collection("mdt_tube_z_barrel", vects.mdt_tube_z_barrel);
554  auto mdt_tube_perp_barrel = Monitored::Collection("mdt_tube_perp_barrel", vects.mdt_tube_perp_barrel);
555  fill("MdtMonitor", mdt_tube_z_barrel, mdt_tube_perp_barrel, mdt_tube_x_barrel, mdt_tube_y_barrel);
556 
557  auto mdt_tube_x_ovl = Monitored::Collection("mdt_tube_x_ovl", vects.mdt_tube_x_ovl);
558  auto mdt_tube_y_ovl = Monitored::Collection("mdt_tube_y_ovl", vects.mdt_tube_y_ovl);
559  auto mdt_tube_z_ovl = Monitored::Collection("mdt_tube_z_ovl", vects.mdt_tube_z_ovl);
560  auto mdt_tube_perp_ovl = Monitored::Collection("mdt_tube_perp_ovl", vects.mdt_tube_perp_ovl);
561  fill("MdtMonitor", mdt_tube_z_ovl, mdt_tube_perp_ovl, mdt_tube_x_ovl, mdt_tube_y_ovl);
562 
563  auto mdt_tube_x_endcap = Monitored::Collection("mdt_tube_x_endcap", vects.mdt_tube_x_endcap);
564  auto mdt_tube_y_endcap = Monitored::Collection("mdt_tube_y_endcap", vects.mdt_tube_y_endcap);
565  auto mdt_tube_z_endcap = Monitored::Collection("mdt_tube_z_endcap", vects.mdt_tube_z_endcap);
566  auto mdt_tube_perp_endcap = Monitored::Collection("mdt_tube_perp_endcap", vects.mdt_tube_perp_endcap);
567  fill("MdtMonitor", mdt_tube_z_endcap, mdt_tube_perp_endcap, mdt_tube_x_endcap, mdt_tube_y_endcap);
568 
569  auto adc_mon_nosel = Monitored::Collection("adc_mon_nosel", vects.adc_mon_nosel);
570  auto tdc_mon_nosel = Monitored::Collection("tdc_mon_nosel", vects.tdc_mon_nosel);
571  auto noiseBurst = Monitored::Collection("noiseBurst", vects.noiseBurst);
572  fill("MdtMonitor", adc_mon_nosel, tdc_mon_nosel, noiseBurst);
573 
574  auto tdc_mon = Monitored::Collection("tdc_mon", vects.tdc_mon);
575  auto adc_mon = Monitored::Collection("adc_mon", vects.adc_mon);
576  fill("MdtMonitor", tdc_mon, adc_mon);
577 
578  auto adc_mon_noiseBurst_notNoisy = Monitored::Collection("adc_mon_noiseBurst_notNoisy", vects.adc_mon_noiseBurst_notNoisy);
579  fill("MdtMonitor", adc_mon_noiseBurst_notNoisy);
580 
581  auto tdc_mon_noiseBurst_adcCut = Monitored::Collection("tdc_mon_noiseBurst_adcCut", vects.tdc_mon_noiseBurst_adcCut);
582  fill("MdtMonitor", tdc_mon_noiseBurst_adcCut);
583 
584  auto tdc_mon_adcCut = Monitored::Collection("tdc_mon_adcCut", vects.tdc_mon_adcCut);
585  fill("MdtMonitor", tdc_mon_adcCut);
586 }
587 
588 StatusCode MdtRawDataMonAlg::fillMDTSummaryVects(const Muon::MdtPrepData* mdtCollection, const std::set<std::string>& chambers_from_tracks,
589  bool& isNoiseBurstCandidate, bool trig_barrel, bool trig_endcap,
590  std::array<MDTSummaryHistogramStruct, 4096>* vects) const {
591  StatusCode sc = StatusCode::SUCCESS;
592  Identifier digcoll_id = (mdtCollection)->identify();
593  IdentifierHash digcoll_idHash = (mdtCollection)->collectionHash();
594 
595  MDTChamber* chamber{nullptr};
596  ATH_CHECK(getChamber(digcoll_idHash, chamber));
597  bool isNoisy = m_masked_tubes->isNoisy(mdtCollection);
598 
599  std::string region[4] = {"BA", "BC", "EA", "EC"};
600  std::string layer[4] = {"Inner", "Middle", "Outer", "Extra"};
601  std::string crate[4] = {"01", "02", "03", "04"};
602  // std::string slayer[4]={"inner","middle","outer","extra"};
603 
604  // int ibarrel = chamber->GetBarrelEndcapEnum();
605  int iregion = chamber->GetRegionEnum();
606  int ilayer = chamber->GetLayerEnum();
607  int icrate = chamber->GetCrate();
608  //
609  int stationPhi = chamber->GetStationPhi();
610  std::string chambername = chamber->getName();
611  int thisStationEta = chamber->GetStationEta();
612 
613  int crate_region = iregion;
614  // correct readout crate info for BEE,BIS7/8
615  if (chambername.substr(0, 3) == "BEE" || (chambername.substr(0, 3) == "BIS" && (thisStationEta == 7 || thisStationEta == 8))) {
616  if (iregion == 0) crate_region = 2;
617  if (iregion == 1) crate_region = 3;
618  }
619 
620  uint16_t v = MdtHistCoder::encode(iregion, ilayer, stationPhi, crate_region, icrate - 1);
621  std::array<MDTSummaryHistogramStruct, 4096>& array = *(vects);
622  auto& thisVects = array[v];
623 
624  bool is_on_track = false;
625  for (const auto& ch : chambers_from_tracks) {
626  if (chambername == ch) is_on_track = true;
627  }
628 
629  bool isBIM = (chambername.at(2) == 'M');
630  float tdc = mdtCollection->tdc() * 25.0 / 32.0;
631  // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
632  if (chambername.substr(0, 3) == "BMG") tdc = mdtCollection->tdc() * 0.2;
633  float adc = mdtCollection->adc();
634  if (chambername.substr(0, 3) == "BMG") adc /= m_adcScale;
635 
636  thisVects.sector.push_back(stationPhi + iregion * 16); // here valgrind complains
637 
638  // mdtoccvslb_summaryPerSector->Fill(lumiblock, stationPhi+iregion*16 );
639  // MDTBA/Overview/Hits
640  // iregion = BA/BC/EA/EC --> 4
641  // ilayer = //inner, middle, outer, extra --> 4
642  // stationPhi --> 16 ====> 256
643  // std::string mon="MDTHits_ADCCut_"+region[iregion]+"_Mon_"+layer[ilayer]+"_Phi_"+std::to_string(stationPhi+1);;
644  // int mlayer_n = m_mdtIdHelper->multilayer(digcoll_id);
645  int mlayer_n = m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id);
646 
647  if (!isNoisy && adc > 0) {
648  thisVects.adc_mon.push_back(adc);
649  thisVects.tdc_mon.push_back(tdc);
650  if (isNoiseBurstCandidate) {
651  thisVects.tdc_mon_nb2.push_back(tdc);
652  thisVects.adc_mon_nb2.push_back(adc);
653  }
654  }
655 
656  if (!isNoisy) {
657  // fill(MDT_regionGroup, adc_mon);
658  if (isNoiseBurstCandidate) {
659  thisVects.tdc_mon_nb1.push_back(tdc);
660  thisVects.adc_mon_nb1.push_back(adc);
661  }
662  }
663  if (adc > m_ADCCut && !isNoisy) {
664  thisVects.adc_mon_adccut.push_back(adc);
665  thisVects.tdc_mon_adccut.push_back(tdc);
666  int thisStationEta = chamber->GetStationEta();
667  thisVects.stationEta.push_back(thisStationEta);
668 
669  int binx = chamber->GetMDTHitsPerChamber_IMO_BinX();
670  if (iregion < 2)
671  binx = binx - 9;
672  else
673  binx = binx - 7;
674  int biny = chamber->GetMDTHitsPerChamber_IMO_BinY();
675 
676  std::string varx = " ";
677  std::string vary = " ";
678  std::string varx_noise = " ";
679  std::string vary_noise = " ";
680  if (iregion < 2) {
681  varx = "x_mon_barrel";
682  vary = "y_mon_barrel";
683  varx_noise = "x_mon_barrel_noise";
684  vary_noise = "y_mon_barrel_noise";
685  } else {
686  varx = "x_mon_endcap";
687  vary = "y_mon_endcap";
688  varx_noise = "x_mon_endcap_noise";
689  vary_noise = "y_mon_endcap_noise";
690  }
691 
692  thisVects.x_mon.push_back(binx);
693  thisVects.y_mon.push_back(biny - 1);
694  if (isNoiseBurstCandidate) {
695  thisVects.x_mon_noise.push_back(binx);
696  thisVects.y_mon_noise.push_back(biny - 1);
697  thisVects.tdc_mon_nb3.push_back(tdc);
698  }
699 
700  thisVects.x_bin_perML.push_back(chamber->GetMDTHitsPerML_Binx() - 1); // get the right bin!!!!
701  int biny_ml = 0;
702  if (mlayer_n == 1)
703  biny_ml = chamber->GetMDTHitsPerML_m1_Biny();
704  else if (mlayer_n == 2)
705  biny_ml = chamber->GetMDTHitsPerML_m2_Biny();
706  thisVects.y_bin_perML.push_back(biny_ml - 1);
707 
708  if (layer[ilayer] != "Extra") {
709  thisVects.bin_byLayer_x.push_back(chamber->GetMDTHitsPerML_byLayer_BinX() - 1);
710  thisVects.bin_byLayer_y.push_back(chamber->GetMDTHitsPerML_byLayer_BinY(mlayer_n) - 1);
711  }
712  if (trig_barrel) { thisVects.tdc_mon_rpc.push_back(tdc); }
713  if (trig_endcap) { thisVects.tdc_mon_tgc.push_back(tdc); }
714 
715  // Fill occupancy vs. Lumiblock
716  thisVects.biny_vslb.push_back(get_bin_for_LB_hist(iregion, ilayer, stationPhi, thisStationEta, isBIM));
717  if (chambername.substr(0, 3) == "BEE" || (chambername.substr(0, 3) == "BIS" && (thisStationEta == 7 || thisStationEta == 8))) {
718  thisVects.biny_vslb_bycrate_bis_bee.push_back(
719  get_bin_for_LB_crate_hist(crate_region, icrate, stationPhi + 1, thisStationEta, chambername));
720  } else {
721  thisVects.biny_vslb_bycrate.push_back(
722  get_bin_for_LB_crate_hist(crate_region, icrate, stationPhi + 1, thisStationEta, chambername));
723  }
724 
725  if (is_on_track) {
726  if (chambername.substr(0, 3) == "BEE" || (chambername.substr(0, 3) == "BIS" && (thisStationEta == 7 || thisStationEta == 8))) {
727  thisVects.biny_vslb_bycrate_bis_bee_ontrack.push_back(
728  get_bin_for_LB_crate_hist(crate_region, icrate, stationPhi + 1, thisStationEta, chambername));
729  } else {
730  thisVects.biny_vslb_bycrate_ontrack.push_back(
731  get_bin_for_LB_crate_hist(crate_region, icrate, stationPhi + 1, thisStationEta, chambername));
732  }
733  }
734  }
735 
736  return sc;
737 }
738 
739 StatusCode MdtRawDataMonAlg::fillMDTSummaryHistograms(std::array<MDTSummaryHistogramStruct, 4096>* vects, int lb) const {
740  std::string region[4] = {"BA", "BC", "EA", "EC"};
741  std::string layer[4] = {"Inner", "Middle", "Outer", "Extra"};
742  std::string crate[4] = {"01", "02", "03", "04"};
743  // std::string slayer[4]={"inner","middle","outer","extra"};
744 
745  auto lb_mon = Monitored::Scalar<int>("lb_mon", lb);
746 
747  for (int iregion = 0; iregion < 4; ++iregion) {
748  std::string MDT_regionGroup = "MDT_regionGroup" + region[iregion]; // MDTXX/Overview
749  for (int crate_region = 0; crate_region < 4; ++crate_region) {
750  std::string MDT_regionGroup_bycrate = "MDT_regionGroup_bycrate" + region[crate_region]; // MDTXX/Overview
751  for (int ilayer = 0; ilayer < 4; ++ilayer) {
752  for (int stationPhi = 0; stationPhi < 16; ++stationPhi) {
753  for (int icrate = 0; icrate < 4; ++icrate) {
754  uint16_t v = MdtHistCoder::encode(iregion, ilayer, stationPhi, crate_region, icrate);
755 
756  std::array<MDTSummaryHistogramStruct, 4096>& array = *(vects);
757  auto& thisVects = array[v];
758 
759  auto sector = Monitored::Collection("sector", thisVects.sector);
760 
761  fill("MdtMonitor", lb_mon, sector);
762 
764  "stEta_" + region[iregion] + "_" + layer[ilayer] + "_phi" + std::to_string(stationPhi + 1),
765  thisVects.stationEta);
766 
767  if (m_do_mdtChamberHits) { fill(MDT_regionGroup, stationEta); }
768 
769  auto adc_mon = Monitored::Collection("adc_mon", thisVects.adc_mon);
770  auto tdc_mon = Monitored::Collection("tdc_mon", thisVects.tdc_mon);
771 
772  auto tdc_mon_nb2 = Monitored::Collection("tdc_mon_nb2", thisVects.tdc_mon_nb2);
773  auto adc_mon_nb2 = Monitored::Collection("adc_mon_nb2", thisVects.adc_mon_nb2);
774 
775  auto tdc_mon_nb1 = Monitored::Collection("tdc_mon_nb1", thisVects.tdc_mon_nb1);
776  auto adc_mon_nb1 = Monitored::Collection("adc_mon_nb1", thisVects.adc_mon_nb1);
777 
778  auto adc_mon_adccut = Monitored::Collection("adc_mon_adccut", thisVects.adc_mon_adccut);
779 
780  auto tdc_mon_adccut = Monitored::Collection("tdc_mon_adccut", thisVects.tdc_mon_adccut);
781 
782  std::string varx = iregion < 2 ? "x_mon_barrel" : "x_mon_endcap";
783  std::string vary = iregion < 2 ? "y_mon_barrel" : "y_mon_endcap";
784  std::string varx_noise = iregion < 2 ? "x_mon_barrel_noise" : "x_mon_endcap_noise";
785  std::string vary_noise = iregion < 2 ? "y_mon_barrel_noise" : "y_mon_endcap_noise";
786 
787  auto x_mon = Monitored::Collection(varx, thisVects.x_mon);
788  auto y_mon = Monitored::Collection(vary, thisVects.y_mon);
789  auto x_mon_noise = Monitored::Collection(varx_noise, thisVects.x_mon_noise);
790  auto y_mon_noise = Monitored::Collection(vary_noise, thisVects.y_mon_noise);
791  fill("MdtMonitor", x_mon, y_mon, x_mon_noise, y_mon_noise);
792  auto tdc_mon_nb3 = Monitored::Collection("tdc_mon_nb3", thisVects.tdc_mon_nb3);
793 
794  varx = "x_mon_" + region[iregion] + "_" + layer[ilayer];
795  vary = "y_mon_" + region[iregion] + "_" + layer[ilayer];
796 
797  auto x_bin_perML = Monitored::Collection(varx, thisVects.x_bin_perML); // get the right bin!!!!
798  auto y_bin_perML = Monitored::Collection(vary, thisVects.y_bin_perML);
799 
800  if (layer[ilayer] != "Extra") {
801  varx = "x_mon_" + layer[ilayer];
802  vary = "y_mon_" + layer[ilayer];
803  auto bin_byLayer_x = Monitored::Collection(varx, thisVects.bin_byLayer_x);
804  auto bin_byLayer_y = Monitored::Collection(vary, thisVects.bin_byLayer_y);
805 
806  fill("MdtMonitor", bin_byLayer_x, bin_byLayer_y);
807  }
808 
809  auto tdc_mon_rpc = Monitored::Collection("tdc_mon_rpc", thisVects.tdc_mon_rpc);
810  auto tdc_mon_tgc = Monitored::Collection("tdc_mon_tgc", thisVects.tdc_mon_tgc);
811 
812  auto biny_name = "y_mon_bin_" + region[iregion] + "_" + layer[ilayer];
813  if (layer[ilayer] == "Extra" || layer[ilayer] == "Outer")
814  biny_name = "y_mon_bin_" + region[iregion] + "_OuterPlusExtra";
815 
816  auto biny_var = Monitored::Collection(biny_name, thisVects.biny_vslb);
817 
818  std::vector<int> sum_biny_vslb_bycrate;
819  sum_biny_vslb_bycrate.reserve(thisVects.biny_vslb_bycrate.size() + thisVects.biny_vslb_bycrate_bis_bee.size());
820  sum_biny_vslb_bycrate.insert(sum_biny_vslb_bycrate.end(), thisVects.biny_vslb_bycrate_bis_bee.begin(),
821  thisVects.biny_vslb_bycrate_bis_bee.end());
822  sum_biny_vslb_bycrate.insert(sum_biny_vslb_bycrate.end(), thisVects.biny_vslb_bycrate.begin(),
823  thisVects.biny_vslb_bycrate.end());
824 
825  auto biny_name_bycrate = "y_mon_bin_bycrate_" + region[crate_region] + "_" + crate[icrate];
826  auto biny_var_bycrate = Monitored::Collection(biny_name_bycrate, sum_biny_vslb_bycrate);
827 
828  std::vector<int> sum_biny_vslb_bycrate_ontrack;
829  sum_biny_vslb_bycrate_ontrack.reserve(thisVects.biny_vslb_bycrate_ontrack.size() +
830  thisVects.biny_vslb_bycrate_bis_bee_ontrack.size());
831  sum_biny_vslb_bycrate_ontrack.insert(sum_biny_vslb_bycrate_ontrack.end(),
832  thisVects.biny_vslb_bycrate_bis_bee_ontrack.begin(),
833  thisVects.biny_vslb_bycrate_bis_bee_ontrack.end());
834  sum_biny_vslb_bycrate_ontrack.insert(sum_biny_vslb_bycrate_ontrack.end(),
835  thisVects.biny_vslb_bycrate_ontrack.begin(),
836  thisVects.biny_vslb_bycrate_ontrack.end());
837 
838  auto biny_name_bycrate_ontrack = "y_mon_bin_bycrate_ontrack_" + region[crate_region] + "_" + crate[icrate];
839  auto biny_var_bycrate_ontrack = Monitored::Collection(biny_name_bycrate_ontrack, sum_biny_vslb_bycrate_ontrack);
840 
841  fill(MDT_regionGroup, adc_mon, tdc_mon, tdc_mon_nb2, adc_mon_nb2, tdc_mon_adccut, adc_mon_adccut, tdc_mon_adccut,
842  adc_mon_adccut, tdc_mon_nb3, x_bin_perML, y_bin_perML, tdc_mon_rpc, tdc_mon_tgc, biny_var, lb_mon, biny_var);
843 
844  fill(MDT_regionGroup_bycrate, lb_mon, biny_var_bycrate, biny_var_bycrate_ontrack);
845  }
846  }
847  }
848  }
849  }
850 
851  return StatusCode::SUCCESS;
852 }
853 
855  // fill chamber by chamber histos
856  StatusCode sc = StatusCode::SUCCESS;
857  Identifier digcoll_id = (mdtCollection)->identify();
858  IdentifierHash digcoll_idHash = (mdtCollection)->collectionHash();
859 
860  MDTChamber* chamber{nullptr};
861  ATH_CHECK(getChamber(digcoll_idHash, chamber));
862 
863  std::string hardware_name = chamber->getName();
864  //
865 
866  // //convert layer numbering from 1->4 to 1->8
867  // //check if we are in 2nd multilayer
868  // //then add 4 if large chamber, 3 if small chamber
869  int mdtlayer = m_idHelperSvc->mdtIdHelper().tubeLayer(digcoll_id);
870  if (m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id) == 2) {
871  if (hardware_name.at(1) == 'I' && hardware_name.at(3) != '8')
872  mdtlayer += 4;
873  else
874  mdtlayer += 3;
875  }
876 
877  int mdttube = m_idHelperSvc->mdtIdHelper().tube(digcoll_id) + (mdtlayer - 1) * cachedTubeMax(digcoll_id);
878 
879  ChamberTubeNumberCorrection(mdttube, hardware_name, m_idHelperSvc->mdtIdHelper().tube(digcoll_id), mdtlayer - 1);
880  bool isNoisy = m_masked_tubes->isNoisy(mdtCollection);
881 
882  float tdc = mdtCollection->tdc() * 25.0 / 32.0;
883  // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
884  if (hardware_name.substr(0, 3) == "BMG") tdc = mdtCollection->tdc() * 0.2;
885  float adc = mdtCollection->adc();
886  if (hardware_name.substr(0, 3) == "BMG") adc /= m_adcScale;
887 
888  int iregion = chamber->GetRegionEnum();
889 
890  int mezz = mezzmdt(digcoll_id);
891 
892  std::string monPerCh = "MdtMonPerChamber";
893  if (iregion == 0) monPerCh += "BA";
894  if (iregion == 1) monPerCh += "BC";
895  if (iregion == 2) monPerCh += "EA";
896  if (iregion == 3) monPerCh += "EC";
897 
898  int mdtMultLayer = m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id);
899 
900  auto tdc_perch = Monitored::Scalar<float>("tdc_perch_" + hardware_name, tdc);
901  auto adc_perch = Monitored::Scalar<float>("adc_perch_" + hardware_name, adc);
902  auto layer_perch = Monitored::Scalar<int>("layer_perch_" + hardware_name, mdtlayer);
903  auto tube_perch = Monitored::Scalar<int>("tube_perch_" + hardware_name, mdttube);
904  auto mezz_perch = Monitored::Scalar<int>("mezz_perch_" + hardware_name, mezz);
905  auto ml1_adccut = Monitored::Scalar<int>("ml1_adccut", (int)(adc > m_ADCCut && !isNoisy && mdtMultLayer == 1));
906  auto ml2_adccut = Monitored::Scalar<int>("ml2_adccut", (int)(adc > m_ADCCut && !isNoisy && mdtMultLayer == 2));
907  auto adccut_nonoise = Monitored::Scalar<int>("adccut_nonoise", (int)(adc > m_ADCCut && !isNoisy));
908  auto adccut = Monitored::Scalar<int>("adccut", (int)(adc > m_ADCCut));
909 
910  fill(monPerCh, tdc_perch, adc_perch, layer_perch, tube_perch, mezz_perch, ml1_adccut, ml2_adccut, adccut_nonoise, adccut);
911 
912  return sc;
913 }
914 
915 // Code for measuring tube efficiencies and tdc/adc based on hits along segments
916 // Strategy:
917 // First loop over hits along segments and store hits
918 // Identify the MLs affected for each segment
919 // Loop over the tubes in the affected MLs and identify tubes traversed by segment vector (these represent the denom in the efficiency calc)
920 // Find traversed tubes that also have a hit along the segment (these represent the num in the efficiency calc)
921 // Details:
922 // * To avoid double-counting hits (for tdc/adc fills) due to overlapping segments, use a set called store_ROTs
923 // * To avoid double-counting hits (for eff calc) due to overlapping segments, use a set called store_effTubes
924 // * The above 2 sets need not have the same size, because in the latter case some tubes are missed because they are slightly too
925 // far away from the segment vector -- these tubes are simply excluded from the eff calc.
926 // Additionally the latter case is complicated because for overlapping traversed tubes,
927 // we must preference the ones that are part of a segment that records a hit in those tubes
929  MDTSegmentHistogramStruct (&vects)[4][4][16]) const {
930  std::string type = "MDT";
931  const MdtIdHelper& id_helper = m_idHelperSvc->mdtIdHelper();
932  std::set<monAlg::TubeTraversedBySegment, monAlg::TubeTraversedBySegment_cmp> store_effTubes;
933  std::set<Identifier> store_ROTs;
934 
935  // MuonDetectorManager from the conditions store
936 
938  const MuonGM::MuonDetectorManager* MuonDetMgr = DetectorManagerHandle.cptr();
939  if (!MuonDetMgr) {
940  ATH_MSG_ERROR("Null pointer to the read MuonDetectorManager conditions object");
941  return StatusCode::FAILURE;
942  }
943 
944  // LOOP OVER SEGMENTS
945  for (const Trk::Segment* trk_seg : *segms) {
946  const Muon::MuonSegment* segment = dynamic_cast<const Muon::MuonSegment*>(trk_seg);
947  if (!segment) {
948  ATH_MSG_DEBUG("no pointer to segment!!!");
949  break;
950  }
951  if (segment->numberOfContainedROTs() < std::max(0lu, m_nb_hits.value()) ||
952  segment->fitQuality()->chiSquared() / segment->fitQuality()->doubleNumberDoF() > m_chi2_cut) {
953  continue;
954  }
955 
956  std::vector<Identifier> ROTs_chamber;
957  std::vector<int> ROTs_tube;
958  std::vector<int> ROTs_L;
959  std::vector<int> ROTs_ML;
960  for (unsigned int irot = 0; irot < segment->numberOfContainedROTs(); irot++) {
961  const Trk::RIO_OnTrack* rot = segment->rioOnTrack(irot);
962  const Muon::MdtDriftCircleOnTrack* mrot = dynamic_cast<const Muon::MdtDriftCircleOnTrack*>(rot);
963  if (!mrot) continue;
964  Identifier tmpid = rot->identify();
965  // This information needs to be stored fully for each segment (for calculations below), so deal with these duplicates later
966  // (otherwise we may not check a traversed ML for a differently pointing overlapping segment, for example)
967 
968  IdentifierHash idHash{0};
969  MDTChamber* chamber = nullptr;
970  id_helper.get_module_hash(tmpid, idHash);
971  ATH_CHECK(getChamber(idHash, chamber));
972  const std::string& chambername = chamber->getName();
973  float adc = mrot->prepRawData()->adc();
974 
975  if (m_idHelperSvc->hasHPTDC(tmpid)) adc /= m_adcScale;
976 
977  if (store_ROTs.count(tmpid)) { continue; }
978  store_ROTs.insert(tmpid);
979 
980  double tdc = mrot->prepRawData()->tdc() * 25.0 / 32.0;
981  // Note: the BMG is digitized with 200ps which is not same as other MDT chambers with 25/32=781.25ps
982  if (m_idHelperSvc->hasHPTDC(tmpid)) tdc = mrot->prepRawData()->tdc() * 0.2;
983  int iregion = chamber->GetRegionEnum();
984  int ilayer = chamber->GetLayerEnum();
985  int statphi = chamber->GetStationPhi();
986 
987  auto& thisVects = vects[iregion][ilayer][statphi];
988  thisVects.adc_segs_mon.push_back(adc);
989 
990  if (adc > m_ADCCut) { // This is somewhat redundant because this is usual cut for segment-reconstruction, but that's OK
991 
992  thisVects.tdc_segs_mon.push_back(tdc);
993 
994  int binx = chamber->GetMDTHitsPerChamber_IMO_BinX();
995  if (iregion < 2)
996  binx = binx - 9;
997  else
998  binx = binx - 7;
999  int biny = chamber->GetMDTHitsPerChamber_IMO_BinY();
1000  thisVects.x_segs_mon.push_back(binx);
1001  thisVects.y_segs_mon.push_back(biny - 1);
1002 
1003  } // adc cut
1004 
1005  int mdtMultLayer = m_idHelperSvc->mdtIdHelper().multilayer(tmpid);
1006  auto adc_perch = Monitored::Scalar<float>("adc_segs_perch_" + chambername, adc);
1007  auto adc_ml1 = Monitored::Scalar<int>("adc_ml1", (int)(mdtMultLayer == 1));
1008  auto adc_ml2 = Monitored::Scalar<int>("adc_ml2", (int)(mdtMultLayer == 2));
1009 
1010  std::string monPerCh = "MdtMonPerChamber";
1011  if (iregion == 0)
1012  monPerCh += "BA";
1013  else if (iregion == 1)
1014  monPerCh += "BC";
1015  else if (iregion == 2)
1016  monPerCh += "EA";
1017  else if (iregion == 3)
1018  monPerCh += "EC";
1019 
1020  ROTs_chamber.push_back(tmpid);
1021  ROTs_ML.push_back(mdtMultLayer);
1022  ROTs_tube.push_back(m_idHelperSvc->mdtIdHelper().tube(tmpid));
1023  ROTs_L.push_back(m_idHelperSvc->mdtIdHelper().tubeLayer(tmpid));
1024 
1025 
1026  fill(monPerCh, adc_perch, adc_ml1, adc_ml2);
1027  }
1028  // Finished gathering hits used in segment
1029 
1030  if (m_doChamberHists) {
1031  // Find unique chambers (since above we stored one chamber for every tube)
1032  // Also store the MLs affected by the ROTs, since we don't necessarily want to look for traversed tubes in entire chamber
1033  std::vector<Identifier> unique_chambers;
1034  std::vector<std::vector<int>> unique_chambers_ML;
1035 
1036  for (unsigned i = 0; i < ROTs_chamber.size(); i++) {
1037  bool isUnique = true;
1038  for (unsigned j = 0; j < unique_chambers.size(); j++) {
1039  if (getChamberName(ROTs_chamber.at(i)) == getChamberName(unique_chambers.at(j))) {
1040  isUnique = false;
1041  if (!AinB(ROTs_ML.at(i), unique_chambers_ML.at(j))) unique_chambers_ML.at(j).push_back(ROTs_ML.at(i));
1042  break;
1043  }
1044  }
1045  if (isUnique) {
1046  unique_chambers.push_back(ROTs_chamber.at(i));
1047  std::vector<int> tmp_ML;
1048  tmp_ML.push_back(ROTs_ML.at(i));
1049  unique_chambers_ML.push_back(tmp_ML);
1050  }
1051  }
1052  // Done finding unique chambers
1053  // Loop over the unique chambers
1054  // Here we store the tubes in each chamber that were traversed by the segment
1055  std::vector<Identifier> traversed_station_id;
1056  std::vector<int> traversed_tube;
1057  std::vector<int> traversed_L;
1058  std::vector<int> traversed_ML;
1059 
1060  for (const Identifier& station_id : unique_chambers) {
1061  const std::string hardware_name = getChamberName(station_id);
1062  // SEGMENT track
1063  const MuonGM::MdtReadoutElement* detEl = MuonDetMgr->getMdtReadoutElement(station_id);
1064  const Amg::Transform3D& gToStation = detEl->GlobalToAmdbLRSTransform();
1065  const Amg::Vector3D segPosL = gToStation * segment->globalPosition();
1066  const Amg::Vector3D segDirL = gToStation.linear() * segment->globalDirection();
1067  MuonCalib::MTStraightLine segment_track =
1068  MuonCalib::MTStraightLine(segPosL, segDirL, Amg::Vector3D(0, 0, 0), Amg::Vector3D(0, 0, 0));
1069 
1070  // Loop over tubes in chamber, find those along segment
1071  for (int ML : {1, 2}) {
1072 
1073  Identifier newId = id_helper.channelID(station_id, ML, 1, 1);
1074  const MuonGM::MdtReadoutElement* MdtRoEl = MuonDetMgr->getMdtReadoutElement(newId);
1075  int tubeMax = cachedTubeMax(newId);
1076  int tubeLayerMax = cachedTubeLayerMax(newId);
1077  CorrectTubeMax(hardware_name, tubeMax);
1078  CorrectLayerMax(hardware_name, tubeLayerMax);
1079 
1080  int tubeMin = id_helper.tubeMin(newId);
1081  int tubeLayerMin = id_helper.tubeLayerMin(newId);
1082  for (int i_tube = tubeMin; i_tube <= tubeMax; ++i_tube) {
1083  for (int i_layer = tubeLayerMin; i_layer <= tubeLayerMax; ++i_layer) {
1084  Identifier tubeId = id_helper.channelID(newId, ML, i_layer, i_tube);
1085 
1086  if (m_BMGpresent && m_idHelperSvc->mdtIdHelper().stationName(newId) == m_BMGid) {
1087  std::map<Identifier, std::set<Identifier>>::const_iterator myIt = m_DeadChannels.find(MdtRoEl->identify());
1088  if (myIt != m_DeadChannels.end()) {
1089  if (myIt->second.count(tubeId)) {
1090  ATH_MSG_DEBUG("Skipping tube with identifier " << m_idHelperSvc->toString(tubeId));
1091  continue;
1092  }
1093  }
1094  }
1095 
1096  Amg::Vector3D TubePos = MdtRoEl->GlobalToAmdbLRSCoords(MdtRoEl->tubePos(tubeId));
1097  Amg::Vector3D tube_position = Amg::Vector3D(TubePos.x(), TubePos.y(), TubePos.z());
1098  static const Amg::Vector3D tube_direction{1, 0, 0};
1099  MuonCalib::MTStraightLine tube_track =
1100  MuonCalib::MTStraightLine(tube_position, tube_direction, Amg::Vector3D(0, 0, 0), Amg::Vector3D(0, 0, 0));
1101  double distance = std::abs(segment_track.signDistFrom(tube_track));
1102 
1103  if (distance < (MdtRoEl->innerTubeRadius())) {
1104  traversed_tube.push_back(i_tube);
1105  traversed_L.push_back(i_layer);
1106  traversed_ML.push_back(ML);
1107  traversed_station_id.push_back(station_id);
1108  }
1109 
1110  }
1111  }
1112  }
1113  }
1114 
1115  // Done looping over the unqiue chambers
1116 
1117  // Loop over traversed tubes that were stored above
1118  // Here we fill the DRvsDT/DRvsSegD histos, as well is unique hits and traversed tubes to calculate efficiencies
1119  if (traversed_tube.size() < 20) { // quality cut here -- 20 traversed tubes is ridiculous and generates low efficiencies (these
1120  // are due to non-pointing segments)
1121 
1122  for (unsigned k = 0; k < traversed_tube.size(); k++) {
1123 
1124  std::string hardware_name = getChamberName(traversed_station_id.at(k));
1125 
1126  // GET HISTS
1127  IdentifierHash idHash{0};
1128  id_helper.get_module_hash(traversed_station_id.at(k), idHash);
1129 
1130  MDTChamber* chamber{nullptr};
1131  ATH_CHECK(getChamber(idHash, chamber));
1132 
1133  bool hit_flag = false;
1134  for (unsigned j = 0; j < ROTs_tube.size(); j++) {
1135  if ((getChamberName(ROTs_chamber.at(j)) == hardware_name) && (traversed_tube.at(k) == ROTs_tube.at(j)) &&
1136  (traversed_L.at(k) == ROTs_L.at(j)) &&
1137  (traversed_ML.at(k) == ROTs_ML.at(j))) { // found traversed tube with hit used in segment
1138  hit_flag = true;
1139  break;
1140  }
1141  }
1142 
1143  const Identifier& trav_id = traversed_station_id.at(k);
1144  Identifier newId = id_helper.channelID(trav_id, traversed_ML.at(k), 1, 1);
1145 
1146 
1147  int tubeLayerMax = cachedTubeLayerMax(newId);
1148  id_helper.get_module_hash(newId, idHash);
1149  CorrectLayerMax(hardware_name, tubeLayerMax); // ChamberTubeNumberCorrection handles the tubeMax problem
1150 
1151 
1152  int mdtlayer = ((traversed_L.at(k) - 1) + (traversed_ML.at(k) - 1) * tubeLayerMax);
1153  int ibin = traversed_tube.at(k) + mdtlayer * cachedTubeMax(newId);
1154 
1155 
1156  ChamberTubeNumberCorrection(ibin, hardware_name, traversed_tube.at(k), mdtlayer);
1157  // Store info for eff calc
1158  // (Here we make sure we are removing duplicates from overlapping segments by using sets)
1160  monAlg::TubeTraversedBySegment tmp_effTube = monAlg::TubeTraversedBySegment(hardware_name, ibin, hit_flag, idHash);
1161  monAlg::TubeTraversedBySegment tmp_effTube_Hit = monAlg::TubeTraversedBySegment(hardware_name, ibin, true, idHash);
1162  monAlg::TubeTraversedBySegment tmp_effTube_noHit = monAlg::TubeTraversedBySegment(hardware_name, ibin, false, idHash);
1163  it = store_effTubes.find(tmp_effTube_Hit);
1164  if (hit_flag || (it == store_effTubes.end()))
1165  store_effTubes.insert(tmp_effTube); // Insert if w/hit, but if w/o hit then only insert if no already stored w/ h
1166 
1167  it = store_effTubes.find(tmp_effTube_noHit);
1168  if (hit_flag && (it != store_effTubes.end()))
1169  store_effTubes.erase(it); // If w/ hit, and the same tube is stored w/o hit, remove duplicate w/o hit
1170  }
1171  }
1172  // Done looping over traversed tubes
1173 
1174  } // m_doChamberHists
1175  }
1176 
1177  // Fill effentries/effcounts hists for efficiency calculation
1178  if (m_doChamberHists) { // Don't perform this block if not doing chamber by chamber hists
1179  for (const monAlg::TubeTraversedBySegment& it : store_effTubes) {
1180  // GET HISTS
1181  MDTChamber* chamber{nullptr};
1182  ATH_CHECK(getChamber(it.idHash, chamber));
1183  int tubebin = it.tubeBin;
1184 
1185  int iregion = chamber->GetRegionEnum();
1186  std::string monPerCh = "MdtMonPerChamber";
1187  if (iregion == 0) monPerCh += "BA";
1188  if (iregion == 1) monPerCh += "BC";
1189  if (iregion == 2) monPerCh += "EA";
1190  if (iregion == 3) monPerCh += "EC";
1191 
1192  std::string chambername = chamber->getName();
1193  auto tube_perch_segs = Monitored::Scalar<int>("tube_perch_segs_" + chambername, tubebin);
1194  auto hitcut = Monitored::Scalar<int>("hitcut", (int)(it.isHit));
1195 
1196  fill(monPerCh, tube_perch_segs, hitcut);
1197  }
1198  }
1199  return StatusCode::SUCCESS;
1200 
1201 }
1202 
1204  std::string region[4] = {"BA", "BC", "EA", "EC"};
1205  std::string layer[4] = {"Inner", "Middle", "Outer", "Extra"};
1206 
1207  for (int iregion = 0; iregion < 4; ++iregion) {
1208  std::string MDT_regionGroup = "MDT_regionGroup" + region[iregion]; // MDTXX/Overview, 4 gruppi
1209  for (int ilayer = 0; ilayer < 4; ++ilayer) {
1210  for (int stationPhi = 0; stationPhi < 16; ++stationPhi) {
1211  const auto& thisVects = vects[iregion][ilayer][stationPhi];
1212 
1213  auto adc_segs_mon = Monitored::Collection("adc_segs_mon", thisVects.adc_segs_mon);
1214  auto adc_segs_overall_mon = Monitored::Collection("adc_segs_overall_mon", thisVects.adc_segs_mon);
1215  std::string tdc_var = "tdc_segs_" + region[iregion] + "_" + layer[ilayer] + "_phi" + std::to_string(stationPhi + 1);
1216  auto tdc_segs_mon = Monitored::Collection(tdc_var, thisVects.tdc_segs_mon);
1217  if (m_do_mdttdccut_sector) fill(MDT_regionGroup, tdc_segs_mon);
1218 
1219  auto tdc_segs_overall_mon = Monitored::Collection("tdc_segs_overall_mon", thisVects.tdc_segs_mon);
1220  auto tdc_segs_region_mon = Monitored::Collection("tdc_segs_region_mon", thisVects.tdc_segs_mon);
1221 
1222  fill(MDT_regionGroup, adc_segs_mon, tdc_segs_region_mon);
1223 
1224  std::string varx = iregion < 2 ? "x_segs_mon_barrel" : "x_segs_mon_endcap";
1225  std::string vary = iregion < 2 ? "y_segs_mon_barrel" : "y_segs_mon_endcap";
1226  auto x_segs_mon = Monitored::Collection(varx, thisVects.x_segs_mon);
1227  auto y_segs_mon = Monitored::Collection(vary, thisVects.y_segs_mon);
1228 
1229  fill("MdtMonitor", tdc_segs_overall_mon, adc_segs_overall_mon, x_segs_mon, y_segs_mon);
1230  }
1231  }
1232  }
1233  return StatusCode::SUCCESS;
1234 }
1235 
1237  PVConstLink cv = mydetEl->getMaterialGeom(); // it is "Multilayer"
1238  int nGrandchildren = cv->getNChildVols();
1239  if (nGrandchildren <= 0) return;
1240 
1241  Identifier detElId = mydetEl->identify();
1242 
1243  std::set<Identifier>& deadTubes = m_DeadChannels[detElId];
1244 
1245  for (int layer = 1; layer <= mydetEl->getNLayers(); ++layer) {
1246  for (int tube = 1; tube <= mydetEl->getNtubesperlayer(); ++tube) {
1247  bool tubefound = false;
1248  for (unsigned int kk = 0; kk < cv->getNChildVols(); ++kk) {
1249  int tubegeo = cv->getIdOfChildVol(kk) % maxNTubesPerLayer;
1250  int layergeo = (cv->getIdOfChildVol(kk) - tubegeo) / maxNTubesPerLayer;
1251  if (tubegeo == tube && layergeo == layer) {
1252  tubefound = true;
1253  break;
1254  }
1255  if (layergeo > layer) break; // don't loop any longer if you cannot find tube anyway anymore
1256  }
1257  if (!tubefound) {
1258  Identifier deadTubeId = m_idHelperSvc->mdtIdHelper().channelID(detElId, mydetEl->getMultilayer(), layer, tube);
1259  deadTubes.insert(deadTubeId);
1260  ATH_MSG_VERBOSE("adding dead tube " << m_idHelperSvc->toString(deadTubeId));
1261  }
1262  }
1263  }
1264 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
MDTSummaryHistogramStruct::biny_vslb_bycrate_ontrack
std::vector< int > biny_vslb_bycrate_ontrack
Definition: MdtRawDataMonAlg.cxx:112
MdtRawDataMonAlg::cachedTubeMax
int cachedTubeMax(const Identifier &id) const
Definition: MDTRawDataUtilsRun3.cxx:1432
convertChamberName
std::string convertChamberName(int, int, int, const std::string &)
Definition: MuonDQA/MuonDQAUtils/src/MuonChamberNameConverter.cxx:10
MdtRawDataMonAlg::m_nb_hits
Gaudi::Property< size_t > m_nb_hits
Definition: MdtRawDataMonAlg.h:175
Muon::nsw::STGTPSegments::moduleIDBits::stationPhi
constexpr uint8_t stationPhi
station Phi 1 to 8
Definition: NSWSTGTPDecodeBitmaps.h:129
MdtRawDataMonAlg::m_key_rpc
SG::ReadHandleKey< Muon::RpcPrepDataContainer > m_key_rpc
Definition: MdtRawDataMonAlg.h:159
MdtRawDataMonAlg::m_detMgr
const MuonGM::MuonDetectorManager * m_detMgr
Definition: MdtRawDataMonAlg.h:195
MuonGM::MdtReadoutElement::getNLayers
int getNLayers() const
Returns the number of tube layers inside the multilayer.
MDTSummaryHistogramStruct::tdc_mon_nb2
std::vector< float > tdc_mon_nb2
Definition: MdtRawDataMonAlg.cxx:92
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
sendEI_SPB.ch
ch
Definition: sendEI_SPB.py:35
python.SystemOfUnits.s
int s
Definition: SystemOfUnits.py:131
MDTOverviewHistogramStruct::tdc_mon_noiseBurst
std::vector< float > tdc_mon_noiseBurst
Definition: MdtRawDataMonAlg.cxx:79
max
#define max(a, b)
Definition: cfImp.cxx:41
MDTOverviewHistogramStruct::mdt_tube_perp_endcap
std::vector< float > mdt_tube_perp_endcap
Definition: MdtRawDataMonAlg.cxx:71
MDTSummaryHistogramStruct
Definition: MdtRawDataMonAlg.cxx:87
MDTOverviewHistogramStruct::mdt_tube_z_ovl
std::vector< float > mdt_tube_z_ovl
Definition: MdtRawDataMonAlg.cxx:65
phi
Scalar phi() const
phi method
Definition: AmgMatrixBasePlugin.h:64
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
MDTSummaryHistogramStruct::y_bin_perML
std::vector< int > y_bin_perML
Definition: MdtRawDataMonAlg.cxx:104
Muon::MdtDriftCircleOnTrack::prepRawData
virtual const MdtPrepData * prepRawData() const override final
Returns the PrepRawData used to create this corrected measurement.
Definition: MdtDriftCircleOnTrack.h:257
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:575
SG::ReadHandle::cptr
const_pointer_type cptr()
Dereference the pointer.
MdtRawDataMonAlg::fillMDTHistograms
virtual StatusCode fillMDTHistograms(const Muon::MdtPrepData *) const
Definition: MdtRawDataMonAlg.cxx:854
Trk::Track
The ATLAS Track class.
Definition: Tracking/TrkEvent/TrkTrack/TrkTrack/Track.h:73
python.MagFieldUtils.lumiblock
lumiblock
Definition: MagFieldUtils.py:188
MuonGM::MdtReadoutElement::innerTubeRadius
double innerTubeRadius() const
Returns the inner tube radius excluding the aluminium walls.
MdtRawDataMonAlg::mdtchamberId
void mdtchamberId()
Definition: MDTRawDataUtilsRun3.cxx:384
MDTSummaryHistogramStruct::bin_byLayer_x
std::vector< int > bin_byLayer_x
Definition: MdtRawDataMonAlg.cxx:105
MDTSummaryHistogramStruct::sector
std::vector< int > sector
Definition: MdtRawDataMonAlg.cxx:88
Muon.h
calibdata.chamber
chamber
Definition: calibdata.py:32
eta
Scalar eta() const
pseudorapidity method
Definition: AmgMatrixBasePlugin.h:79
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
MDTSummaryHistogramStruct::biny_vslb_bycrate
std::vector< int > biny_vslb_bycrate
Definition: MdtRawDataMonAlg.cxx:110
MdtHistCoder.h
MDTOverviewHistogramStruct
Definition: MdtRawDataMonAlg.cxx:57
MTStraightLine.h
MdtRawDataMonAlg::m_do_mdtChamberHits
Gaudi::Property< bool > m_do_mdtChamberHits
Definition: MdtRawDataMonAlg.h:177
MdtRawDataMonAlg::~MdtRawDataMonAlg
virtual ~MdtRawDataMonAlg()
MDTOverviewHistogramStruct::mdt_tube_y_endcap
std::vector< float > mdt_tube_y_endcap
Definition: MdtRawDataMonAlg.cxx:69
MuonGM::MuonReadoutElement::GlobalToAmdbLRSTransform
virtual Amg::Transform3D GlobalToAmdbLRSTransform() const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:153
skel.it
it
Definition: skel.GENtoEVGEN.py:423
IdentifiableContainerMT::size
size_t size() const
Duplicate of fullSize for backwards compatability.
Definition: IdentifiableContainerMT.h:209
MdtRawDataMonAlg::get_bin_for_LB_hist
int get_bin_for_LB_hist(int region, int layer, int phi, int eta, bool isBIM) const
Definition: MDTRawDataUtilsRun3.cxx:498
MdtHistCoder::encode
static uint16_t encode(const uint16_t regionIn, const uint16_t layerIn, const uint16_t phiIn, const uint16_t crate_regionIn, const uint16_t crateIn)
Definition: MdtHistCoder.h:19
MdtRawDataMonAlg::fillMDTSegmentHistograms
virtual StatusCode fillMDTSegmentHistograms(const MDTSegmentHistogramStruct(&vects)[4][4][16]) const
Definition: MdtRawDataMonAlg.cxx:1203
MdtRawDataMonAlg::get_bin_for_LB_crate_hist
int get_bin_for_LB_crate_hist(int region, int layer, int phi, int eta, std::string_view chamber) const
Definition: MDTRawDataUtilsRun3.cxx:1158
MDTSummaryHistogramStruct::adc_mon
std::vector< float > adc_mon
Definition: MdtRawDataMonAlg.cxx:90
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
MdtRawDataMonAlg::m_chi2_cut
Gaudi::Property< bool > m_chi2_cut
Definition: MdtRawDataMonAlg.h:176
ATH_UNLIKELY
#define ATH_UNLIKELY(x)
Definition: AthUnlikelyMacros.h:17
MdtRawDataMonAlg::ChamberTubeNumberCorrection
static void ChamberTubeNumberCorrection(int &tubeNum, std::string_view hardware_name, int tubePos, int numLayers)
Definition: MDTRawDataUtilsRun3.cxx:267
LArG4FSStartPointFilter.evt
evt
Definition: LArG4FSStartPointFilter.py:42
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
MdtDriftCircleOnTrack.h
MDTOverviewHistogramStruct::tdc_mon
std::vector< float > tdc_mon
Definition: MdtRawDataMonAlg.cxx:75
Muon::MdtPrepData::adc
int adc() const
Returns the ADC (typically range is 0 to 250)
Definition: MdtPrepData.h:166
MDTSummaryHistogramStruct::tdc_mon_adccut
std::vector< float > tdc_mon_adccut
Definition: MdtRawDataMonAlg.cxx:97
MdtRawDataMonAlg.h
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
MuonChamberNameConverter.h
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
MdtRawDataMonAlg::fillMDTOverviewVects
virtual void fillMDTOverviewVects(const Muon::MdtPrepData *, bool &isNoiseBurstCandidate, MDTOverviewHistogramStruct &vects) const
Definition: MdtRawDataMonAlg.cxx:482
MdtRawDataMonAlg::m_tubesperchamber_map
std::map< std::string, int > m_tubesperchamber_map
Definition: MdtRawDataMonAlg.h:156
TRT::Hit::side
@ side
Definition: HitInfo.h:83
Track.h
AthMonitorAlgorithm
Base class for Athena Monitoring Algorithms.
Definition: AthMonitorAlgorithm.h:36
MdtRawDataMonAlg::binMdtRegional
virtual StatusCode binMdtRegional(TH2 *, std::string_view xAxis)
Definition: MDTRawDataUtilsRun3.cxx:79
MdtRawDataMonAlg::GetTubeMax
int GetTubeMax(const Identifier &digcoll_id, std::string_view hardware_name)
Definition: MDTRawDataUtilsRun3.cxx:423
MDTOverviewHistogramStruct::mdt_tube_perp_barrel
std::vector< float > mdt_tube_perp_barrel
Definition: MdtRawDataMonAlg.cxx:61
MDTOverviewHistogramStruct::tdc_mon_noiseBurst_adcCut
std::vector< float > tdc_mon_noiseBurst_adcCut
Definition: MdtRawDataMonAlg.cxx:82
MDTOverviewHistogramStruct::adc_mon
std::vector< float > adc_mon
Definition: MdtRawDataMonAlg.cxx:76
python.changerun.kk
list kk
Definition: changerun.py:41
tubeMax
double tubeMax
Definition: MDT_ResponseTest.cxx:31
MDTOverviewHistogramStruct::mdt_tube_y_ovl
std::vector< float > mdt_tube_y_ovl
Definition: MdtRawDataMonAlg.cxx:64
MDTSummaryHistogramStruct::tdc_mon_nb3
std::vector< float > tdc_mon_nb3
Definition: MdtRawDataMonAlg.cxx:102
MDTSummaryHistogramStruct::y_mon
std::vector< int > y_mon
Definition: MdtRawDataMonAlg.cxx:99
MDTSummaryHistogramStruct::adc_mon_adccut
std::vector< float > adc_mon_adccut
Definition: MdtRawDataMonAlg.cxx:96
MdtRawDataMonAlg::m_chambersIdHash
std::vector< IdentifierHash > m_chambersIdHash
Definition: MdtRawDataMonAlg.h:154
MdtRawDataMonAlg::getChamber
StatusCode getChamber(const IdentifierHash &id, MDTChamber *&chamber) const
Definition: MDTRawDataUtilsRun3.cxx:490
MDTChamber
Definition: MDTChamber.h:22
MuonGM::MuonReadoutElement::GlobalToAmdbLRSCoords
virtual Amg::Vector3D GlobalToAmdbLRSCoords(const Amg::Vector3D &x) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonReadoutElement.cxx:149
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
MdtRawDataMonAlg::m_do_mdttdccut_sector
Gaudi::Property< bool > m_do_mdttdccut_sector
Definition: MdtRawDataMonAlg.h:178
python.BunchSpacingUtils.lb
lb
Definition: BunchSpacingUtils.py:88
MuonGM::MuonDetectorManager::getMdtReadoutElement
const MdtReadoutElement * getMdtReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:204
xAOD::numberOfTriggerEtaLayers
@ numberOfTriggerEtaLayers
layers with trigger eta hits [unit8_t].
Definition: TrackingPrimitives.h:292
MuonChambersRange.h
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
MuonGM::MdtReadoutElement
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MdtReadoutElement.h:50
MDTOverviewHistogramStruct::mdt_tube_x_barrel
std::vector< float > mdt_tube_x_barrel
Definition: MdtRawDataMonAlg.cxx:58
MuonChamberIDSelector.h
lumiFormat.i
int i
Definition: lumiFormat.py:92
MDTSegmentHistogramStruct::y_segs_mon
std::vector< int > y_segs_mon
Definition: MdtRawDataMonAlg.cxx:120
MDTOverviewHistogramStruct::mdt_tube_z_barrel
std::vector< float > mdt_tube_z_barrel
Definition: MdtRawDataMonAlg.cxx:60
MdtRawDataMonAlg::m_DetectorManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_DetectorManagerKey
Definition: MdtRawDataMonAlg.h:114
MDTOverviewHistogramStruct::adc_mon_noiseBurst_notNoisy
std::vector< float > adc_mon_noiseBurst_notNoisy
Definition: MdtRawDataMonAlg.cxx:81
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
MDTOverviewHistogramStruct::adc_mon_nosel
std::vector< float > adc_mon_nosel
Definition: MdtRawDataMonAlg.cxx:73
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
MdtRawDataMonAlg::m_doMdtESD
Gaudi::Property< bool > m_doMdtESD
Definition: MdtRawDataMonAlg.h:171
LArG4ShowerLibProcessing.hits
hits
Definition: LArG4ShowerLibProcessing.py:136
TRT::Hit::layer
@ layer
Definition: HitInfo.h:79
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
Trk::Segment
Definition: TrkEvent/TrkSegment/TrkSegment/Segment.h:56
LVL1_ROI.h
TrackCollection.h
MDTSummaryHistogramStruct::stationEta
std::vector< int > stationEta
Definition: MdtRawDataMonAlg.cxx:89
MDTOverviewHistogramStruct::mdt_tube_x_ovl
std::vector< float > mdt_tube_x_ovl
Definition: MdtRawDataMonAlg.cxx:63
MDTSummaryHistogramStruct::tdc_mon_rpc
std::vector< float > tdc_mon_rpc
Definition: MdtRawDataMonAlg.cxx:107
MdtIdHelper
Definition: MdtIdHelper.h:61
MDTSummaryHistogramStruct::bin_byLayer_y
std::vector< int > bin_byLayer_y
Definition: MdtRawDataMonAlg.cxx:106
MdtIdHelper.h
AthenaMonManager.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IdentifiableContainerMT::end
const_iterator end() const
return const_iterator for end of container
Definition: IdentifiableContainerMT.h:242
MDTSummaryHistogramStruct::adc_mon_nb2
std::vector< float > adc_mon_nb2
Definition: MdtRawDataMonAlg.cxx:93
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:82
MuonGM::MdtReadoutElement::getMultilayer
int getMultilayer() const
Returns the multilayer represented by the readout element.
IdentifiableContainerMT::begin
const_iterator begin() const
return const_iterator for first entry
Definition: IdentifiableContainerMT.h:236
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
MuonDQAHistMap.h
MDTSummaryHistogramStruct::adc_mon_nb1
std::vector< float > adc_mon_nb1
Definition: MdtRawDataMonAlg.cxx:95
MdtRawDataMonAlg::m_ADCCut
Gaudi::Property< size_t > m_ADCCut
Definition: MdtRawDataMonAlg.h:174
DataVector< Trk::Segment >
MdtRawDataMonAlg::m_hist_hash_list
std::vector< std::unique_ptr< MDTChamber > > m_hist_hash_list
Definition: MdtRawDataMonAlg.h:165
MdtRawDataMonAlg::m_muon_type
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_muon_type
Definition: MdtRawDataMonAlg.h:151
MDTOverviewHistogramStruct::mdt_tube_perp_ovl
std::vector< float > mdt_tube_perp_ovl
Definition: MdtRawDataMonAlg.cxx:66
MdtRawDataMonAlg::cachedTubeLayerMax
int cachedTubeLayerMax(const Identifier &id) const
Definition: MDTRawDataUtilsRun3.cxx:1436
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
MDTOverviewHistogramStruct::tdc_mon_adcCut
std::vector< float > tdc_mon_adcCut
Definition: MdtRawDataMonAlg.cxx:84
MdtRawDataMonAlg::m_muonKey
SG::ReadHandleKey< xAOD::MuonContainer > m_muonKey
Definition: MdtRawDataMonAlg.h:161
MDTSummaryHistogramStruct::biny_vslb_bycrate_bis_bee
std::vector< int > biny_vslb_bycrate_bis_bee
Definition: MdtRawDataMonAlg.cxx:111
MDTSummaryHistogramStruct::biny_vslb
std::vector< int > biny_vslb
Definition: MdtRawDataMonAlg.cxx:109
MdtIdHelper::tubeMin
static int tubeMin()
Definition: MdtIdHelper.cxx:768
lumiFormat.array
array
Definition: lumiFormat.py:98
Trk::MeasurementBase
Definition: MeasurementBase.h:58
MdtRawDataMonAlg::binMdtGlobal
virtual StatusCode binMdtGlobal(TH2 *, char ecap)
Definition: MDTRawDataUtilsRun3.cxx:28
Trk::PrepRawData::identify
Identifier identify() const
return the identifier
MdtRawDataMonAlg::m_maskNoisyTubes
Gaudi::Property< bool > m_maskNoisyTubes
Definition: MdtRawDataMonAlg.h:173
Muon::MdtPrepData::tdc
int tdc() const
Returns the TDC (typically range is 0 to 2500).
Definition: MdtPrepData.h:161
MdtRawDataMonAlg::m_DeadChannels
std::map< Identifier, std::set< Identifier > > m_DeadChannels
Definition: MdtRawDataMonAlg.h:186
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
MdtIdHelper::channelID
Identifier channelID(int stationName, int stationEta, int stationPhi, int multilayer, int tubeLayer, int tube) const
Definition: MdtIdHelper.cxx:659
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
MdtRawDataMonAlg::AinB
static bool AinB(int A, std::vector< int > &B)
Definition: MDTRawDataUtilsRun3.cxx:454
Muon::MdtDriftCircleOnTrack
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Definition: MdtDriftCircleOnTrack.h:37
MuonCalib::MTStraightLine::signDistFrom
double signDistFrom(const MTStraightLine &h) const
get the signed distance of two lines (if both are parallel, dist>0)
Definition: MTStraightLine.cxx:89
MdtRawDataMonAlg::m_chambersId
std::vector< Identifier > m_chambersId
Definition: MdtRawDataMonAlg.h:153
MdtRawDataMonAlg::mezzmdt
int mezzmdt(const Identifier &id) const
Definition: MDTRawDataUtilsRun3.cxx:411
MdtRawDataMonAlg::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: MdtRawDataMonAlg.h:110
MDTOverviewHistogramStruct::tdc_mon_nosel
std::vector< float > tdc_mon_nosel
Definition: MdtRawDataMonAlg.cxx:74
MdtRawDataMonAlg::m_adcScale
Gaudi::Property< size_t > m_adcScale
Definition: MdtRawDataMonAlg.h:182
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
MdtRawDataMonAlg::CorrectTubeMax
static void CorrectTubeMax(const std::string &hardware_name, int &numTubes)
Definition: MDTRawDataUtilsRun3.cxx:286
Muon::MdtPrepData
Class to represent measurements from the Monitored Drift Tubes.
Definition: MdtPrepData.h:37
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonDetectorManager.h
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
MdtRawDataMonAlg::CorrectLayerMax
static void CorrectLayerMax(const std::string &hardware_name, int &numLayers)
Definition: MDTRawDataUtilsRun3.cxx:291
MDTSegmentHistogramStruct::x_segs_mon
std::vector< int > x_segs_mon
Definition: MdtRawDataMonAlg.cxx:119
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
Trk::Track::measurementsOnTrack
const DataVector< const MeasurementBase > * measurementsOnTrack() const
return a pointer to a vector of MeasurementBase (NOT including any that come from outliers).
Definition: Tracking/TrkEvent/TrkTrack/src/Track.cxx:178
MDTSummaryHistogramStruct::tdc_mon_tgc
std::vector< float > tdc_mon_tgc
Definition: MdtRawDataMonAlg.cxx:108
TrackParticle.h
python.PyAthena.v
v
Definition: PyAthena.py:157
MDTSegmentHistogramStruct::tdc_segs_mon
std::vector< float > tdc_segs_mon
Definition: MdtRawDataMonAlg.cxx:118
MdtRawDataMonAlg::m_eventInfo
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfo
Definition: MdtRawDataMonAlg.h:162
MdtRawDataMonAlg::m_segm_type
SG::ReadHandleKeyArray< Trk::SegmentCollection > m_segm_type
Definition: MdtRawDataMonAlg.h:149
MDTOverviewHistogramStruct::mdt_tube_y_barrel
std::vector< float > mdt_tube_y_barrel
Definition: MdtRawDataMonAlg.cxx:59
MuonGM::MdtReadoutElement::tubePos
Amg::Vector3D tubePos(const Identifier &id) const
Returns the global position of the given tube.
ReadFloatFromCool.adc
adc
Definition: ReadFloatFromCool.py:48
lumiFormat.fill
fill
Definition: lumiFormat.py:111
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
MDTSegmentHistogramStruct::adc_segs_mon
std::vector< float > adc_segs_mon
Definition: MdtRawDataMonAlg.cxx:117
MdtRawDataMonAlg::fillMDTSummaryHistograms
virtual StatusCode fillMDTSummaryHistograms(std::array< MDTSummaryHistogramStruct, 4096 > *vects, int lb) const
Definition: MdtRawDataMonAlg.cxx:739
python.CaloScaleNoiseConfig.type
type
Definition: CaloScaleNoiseConfig.py:78
MDTOverviewHistogramStruct::noiseBurst
std::vector< int > noiseBurst
Definition: MdtRawDataMonAlg.cxx:77
MuonGM::MuonReadoutElement::identify
Identifier identify() const override final
Returns the ATLAS Identifier of the MuonReadOutElement.
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:184
Trk::RIO_OnTrack::identify
virtual Identifier identify() const final
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:155
MDTSummaryHistogramStruct::x_mon_noise
std::vector< int > x_mon_noise
Definition: MdtRawDataMonAlg.cxx:100
get
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
Definition: hcg.cxx:127
MuonCalib::MTStraightLine
Definition: MTStraightLine.h:16
MdtRawDataMonAlg::m_key_mdt
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_key_mdt
Definition: MdtRawDataMonAlg.h:158
MDTChamber::getName
const std::string & getName() const
Definition: MDTChamber.h:67
MuonSegment.h
MDTOverviewHistogramStruct::mdt_tube_z_endcap
std::vector< float > mdt_tube_z_endcap
Definition: MdtRawDataMonAlg.cxx:70
SG::VarHandleBase::isPresent
bool isPresent() const
Is the referenced object present in SG?
Definition: StoreGate/src/VarHandleBase.cxx:397
MdtIdHelper::get_module_hash
virtual int get_module_hash(const Identifier &id, IdentifierHash &hash_id) const override
Definition: MdtIdHelper.cxx:318
Muon::MuonSegment
Definition: MuonSpectrometer/MuonReconstruction/MuonRecEvent/MuonSegment/MuonSegment/MuonSegment.h:45
MdtRawDataMonAlg::initDeadChannels
void initDeadChannels(const MuonGM::MdtReadoutElement *mydetEl)
Definition: MdtRawDataMonAlg.cxx:1236
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
Muon::nsw::STGTPSegments::moduleIDBits::stationEta
constexpr uint8_t stationEta
1 to 3
Definition: NSWSTGTPDecodeBitmaps.h:127
IdentifierHash
Definition: IdentifierHash.h:38
MdtRawDataMonAlg::MdtRawDataMonAlg
MdtRawDataMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
Definition: MdtRawDataMonAlg.cxx:127
MdtIdHelper::maxNTubesPerLayer
static constexpr int maxNTubesPerLayer
The maxNTubesPerLayer represents the absolute maximum of tubes which are built into a single multilay...
Definition: MdtIdHelper.h:68
MDTSummaryHistogramStruct::tdc_mon_nb1
std::vector< float > tdc_mon_nb1
Definition: MdtRawDataMonAlg.cxx:94
FitQuality.h
MuonGM::MdtReadoutElement::getNtubesperlayer
int getNtubesperlayer() const
Returns the number of tubes in each tube layer.
MuonStation.h
test_pyathena.counter
counter
Definition: test_pyathena.py:15
MdtRawDataMonAlg::fillMDTSummaryVects
virtual StatusCode fillMDTSummaryVects(const Muon::MdtPrepData *, const std::set< std::string > &, bool &isNoiseBurstCandidate, bool trig_barrel, bool trig_endcap, std::array< MDTSummaryHistogramStruct, 4096 > *) const
Definition: MdtRawDataMonAlg.cxx:588
MDTSummaryHistogramStruct::x_mon
std::vector< int > x_mon
Definition: MdtRawDataMonAlg.cxx:98
CaloNoise_fillDB.mu
mu
Definition: CaloNoise_fillDB.py:53
MdtRawDataMonAlg::m_doChamberHists
Gaudi::Property< bool > m_doChamberHists
Definition: MdtRawDataMonAlg.h:172
MdtRawDataMonAlg::m_masked_tubes
std::unique_ptr< MDTNoisyTubes > m_masked_tubes
Definition: MdtRawDataMonAlg.h:108
SG::AllowEmpty
@ AllowEmpty
Definition: StoreGate/StoreGate/VarHandleKey.h:30
xAOD::numberOfPhiLayers
@ numberOfPhiLayers
layers with a trigger phi hit [unit8_t].
Definition: TrackingPrimitives.h:290
MdtRawDataMonAlg::binMdtGlobal_byLayer
virtual StatusCode binMdtGlobal_byLayer(TH2 *, TH2 *, TH2 *)
Definition: MDTRawDataUtilsRun3.cxx:142
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
MDTSegmentHistogramStruct
Definition: MdtRawDataMonAlg.cxx:116
TrackingPrimitives.h
MdtRawDataMonAlg::m_BMGpresent
bool m_BMGpresent
Definition: MdtRawDataMonAlg.h:184
MdtRawDataMonAlg::handleEvent_effCalc_fillVects
StatusCode handleEvent_effCalc_fillVects(const Trk::SegmentCollection *segms, MDTSegmentHistogramStruct(&vects)[4][4][16]) const
Definition: MdtRawDataMonAlg.cxx:928
MdtRawDataMonAlg::m_l1RoiKey
SG::ReadHandleKey< xAOD::MuonRoIContainer > m_l1RoiKey
Definition: MdtRawDataMonAlg.h:160
MuonFixedId.h
MDTSummaryHistogramStruct::tdc_mon
std::vector< float > tdc_mon
Definition: MdtRawDataMonAlg.cxx:91
MdtRawDataMonAlg::fillMDTOverviewHistograms
virtual void fillMDTOverviewHistograms(const MDTOverviewHistogramStruct &vects) const
Definition: MdtRawDataMonAlg.cxx:550
calibdata.tube
tube
Definition: calibdata.py:31
MdtRawDataMonAlg::initialize
virtual StatusCode initialize() override
initialize
Definition: MdtRawDataMonAlg.cxx:131
TrackParticleContainer.h
MdtIdHelper::tubeLayerMin
static int tubeLayerMin()
Definition: MdtIdHelper.cxx:764
MDTOverviewHistogramStruct::adc_mon_noiseBurst
std::vector< float > adc_mon_noiseBurst
Definition: MdtRawDataMonAlg.cxx:80
MDTSummaryHistogramStruct::x_bin_perML
std::vector< int > x_bin_perML
Definition: MdtRawDataMonAlg.cxx:103
monAlg::TubeTraversedBySegment
Definition: MdtRawDataMonAlg.h:68
MDTSummaryHistogramStruct::y_mon_noise
std::vector< int > y_mon_noise
Definition: MdtRawDataMonAlg.cxx:101
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
fitman.k
k
Definition: fitman.py:528
MdtRawDataMonAlg::m_BMGid
int m_BMGid
Definition: MdtRawDataMonAlg.h:185
NSWL1::PadTriggerAdapter::segment
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
Definition: PadTriggerAdapter.cxx:5
MDTOverviewHistogramStruct::mdt_tube_x_endcap
std::vector< float > mdt_tube_x_endcap
Definition: MdtRawDataMonAlg.cxx:68
MdtRawDataMonAlg::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: MdtRawDataMonAlg.cxx:255
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37
MDTSummaryHistogramStruct::biny_vslb_bycrate_bis_bee_ontrack
std::vector< int > biny_vslb_bycrate_bis_bee_ontrack
Definition: MdtRawDataMonAlg.cxx:113
MdtRawDataMonAlg::getChamberName
std::string getChamberName(const Muon::MdtPrepData *) const
Definition: MDTRawDataUtilsRun3.cxx:479