23 #include "GaudiKernel/MsgStream.h"
162 ATH_MSG_DEBUG(
"Processing configuration for layouts with BMG chambers.");
171 if (!MuonDetMgrDS->getMuonStation(
"BMG",
side *
eta,
phi))
continue;
172 for (
int roe = 1; roe <= (MuonDetMgrDS->getMuonStation(
"BMG",
side *
eta,
phi))->nMuonReadoutElements();
175 (MuonDetMgrDS->getMuonStation(
"BMG",
side *
eta,
phi))->getMuonReadoutElement(roe));
190 std::string
s{
""}, xAxis{
""};
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());
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);
210 std::vector<std::string> mdtHitsBE{
"Barrel",
"EndCap"};
211 std::vector<std::unique_ptr<TH2F>> mdtHitsPerChamberIMOLumi;
212 mdtHitsPerChamberIMOLumi.reserve(mdtHitsBE.size());
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));
223 std::vector<std::unique_ptr<TH2F>> mdtHitsPerMLByLayer;
224 mdtHitsPerMLByLayer.reserve(
layer.size() - 1);
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));
234 std::string hardware_name =
238 if (hardware_name ==
"BML6A13" || hardware_name ==
"BML6C13")
continue;
240 chamber = std::make_unique<MDTChamber>(hardware_name);
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());
262 ATH_MSG_DEBUG(
"MdtRawDataMonAlg::MDT RawData Monitoring Histograms being filled");
267 fill(
"MdtMonitor", run3geo, firstEvent);
271 bool trig_BARREL =
false;
272 bool trig_ENDCAP =
false;
273 if (!m_l1RoiKey.empty()) {
275 if (!muonRoIs.
isValid()) {
ATH_MSG_ERROR(
"evtStore() does not contain muon L1 ROI Collection with name " << m_l1RoiKey); }
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; });
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;
296 int nColl_ADCCut = 0;
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;
313 for (containerIt = rpc_container->
begin(); containerIt != rpc_container->
end(); ++containerIt) {
319 bool isNoiseBurstCandidate =
false;
321 for (MdtcontainerIt = mdt_container->
begin(); MdtcontainerIt != mdt_container->
end(); ++MdtcontainerIt) {
323 mdtCollection != (*MdtcontainerIt)->end(); ++mdtCollection) {
328 if (Nhitsmdt > m_HighOccThreshold) isNoiseBurstCandidate =
true;
329 std::string
type =
"MDT";
330 std::string hardware_name;
332 std::map<std::string, int> evnt_hitsperchamber_map;
333 std::set<std::string> chambers_from_tracks;
335 if (m_doMdtESD ==
true) {
348 for (
const auto*
const mu : *muons) {
359 if (ntri_eta + n_phi == 0)
continue;
363 if (!rot_from_track)
continue;
365 if (!m_idHelperSvc->isMdt(rotId))
continue;
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);
377 auto summaryPlots = std::make_unique<std::array<MDTSummaryHistogramStruct, 4096>>();
379 std::vector<std::string> v_hit_in_chamber_allphi;
380 std::map<std::string, std::vector<std::string>> v_hit_in_chamber;
383 if (containerIt == mdt_container->
end() || containerIt->empty())
continue;
386 bool isHit_above_ADCCut =
false;
388 for (
const auto* mdtCollection : **containerIt) {
391 float adc = mdtCollection->adc();
392 hardware_name = getChamberName(mdtCollection);
394 if (hardware_name.substr(0, 3) ==
"BMG")
adc /= m_adcScale;
395 if (
adc > m_ADCCut) {
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);
402 v_hit_in_chamber_allphi.push_back(hardware_name);
404 fillMDTOverviewVects(mdtCollection, isNoiseBurstCandidate, overviewPlots);
408 ATH_CHECK(fillMDTSummaryVects(mdtCollection, chambers_from_tracks, isNoiseBurstCandidate, trig_BARREL, trig_ENDCAP,
409 summaryPlots.get()));
413 if (m_doChamberHists) {
ATH_CHECK(fillMDTHistograms(mdtCollection)); }
416 if (iter_hitsperchamber == evnt_hitsperchamber_map.end()) {
417 evnt_hitsperchamber_map.insert(make_pair(hardware_name, 1));
419 iter_hitsperchamber->second += 1;
423 nColl_ADCCut += isHit_above_ADCCut;
425 if (m_do_mdtchamberstatphislice) {
426 for (
const auto& phiitem : v_hit_in_chamber) {
428 fill(
"MdtMonitor", hit_in_chamber);
432 fill(
"MdtMonitor", hit_in_chamber_allphi);
434 fillMDTOverviewHistograms(overviewPlots);
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())) {
444 float nTubes = iter_tubesperchamber->second;
445 float hits = iterstat.second;
446 float occ =
hits / nTubes;
447 if (occ > 0.1) nHighOccChambers++;
458 fill(
"MdtMonitor", nHighOccChambers_mon, nPrd_mon, Nhitsrpc_mon, nPrdcut_mon, nColl_mon, nColl_ADCCut_mon);
465 for (
const auto&
key : m_segm_type) {
468 ATH_MSG_ERROR(
"evtStore() does not contain mdt segms Collection with name " <<
key);
469 return StatusCode::FAILURE;
474 ATH_CHECK(handleEvent_effCalc_fillVects(segms.
cptr(), segsPlots));
476 ATH_CHECK(fillMDTSegmentHistograms(segsPlots));
478 return StatusCode::SUCCESS;
493 ATH_MSG_ERROR(
"Null pointer to the read MuonDetectorManager conditions object");
499 float mdt_tube_eta = mdtgPos.eta();
501 float tdc = mdtCollection->
tdc() * 25.0 / 32.0;
503 if (hardware_name.substr(0, 3) ==
"BMG") tdc = mdtCollection->
tdc() * 0.2;
505 float adc = mdtCollection->
adc();
510 if (std::abs(mdt_tube_eta) > 0. && std::abs(mdt_tube_eta) < 0.9) {
517 if (std::abs(mdt_tube_eta) > 0.9 && std::abs(mdt_tube_eta) < 1.2) {
524 if (std::abs(mdt_tube_eta) > 1.2 && std::abs(mdt_tube_eta) < 2.7) {
534 if (!isNoisy &&
adc > 0) {
539 vects.
noiseBurst.push_back((
int)isNoiseBurstCandidate);
540 if (isNoiseBurstCandidate) {
555 fill(
"MdtMonitor", mdt_tube_z_barrel, mdt_tube_perp_barrel, mdt_tube_x_barrel, mdt_tube_y_barrel);
561 fill(
"MdtMonitor", mdt_tube_z_ovl, mdt_tube_perp_ovl, mdt_tube_x_ovl, mdt_tube_y_ovl);
567 fill(
"MdtMonitor", mdt_tube_z_endcap, mdt_tube_perp_endcap, mdt_tube_x_endcap, mdt_tube_y_endcap);
572 fill(
"MdtMonitor", adc_mon_nosel, tdc_mon_nosel, noiseBurst);
576 fill(
"MdtMonitor", tdc_mon, adc_mon);
579 fill(
"MdtMonitor", adc_mon_noiseBurst_notNoisy);
582 fill(
"MdtMonitor", tdc_mon_noiseBurst_adcCut);
585 fill(
"MdtMonitor", tdc_mon_adcCut);
589 bool& isNoiseBurstCandidate,
bool trig_barrel,
bool trig_endcap,
590 std::array<MDTSummaryHistogramStruct, 4096>* vects)
const {
592 Identifier digcoll_id = (mdtCollection)->identify();
593 IdentifierHash digcoll_idHash = (mdtCollection)->collectionHash();
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"};
605 int iregion =
chamber->GetRegionEnum();
606 int ilayer =
chamber->GetLayerEnum();
607 int icrate =
chamber->GetCrate();
610 std::string chambername =
chamber->getName();
611 int thisStationEta =
chamber->GetStationEta();
613 int crate_region = iregion;
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;
621 std::array<MDTSummaryHistogramStruct, 4096>&
array = *(vects);
622 auto& thisVects =
array[
v];
624 bool is_on_track =
false;
625 for (
const auto&
ch : chambers_from_tracks) {
626 if (chambername ==
ch) is_on_track =
true;
629 bool isBIM = (chambername.at(2) ==
'M');
630 float tdc = mdtCollection->
tdc() * 25.0 / 32.0;
632 if (chambername.substr(0, 3) ==
"BMG") tdc = mdtCollection->
tdc() * 0.2;
633 float adc = mdtCollection->
adc();
636 thisVects.sector.push_back(
stationPhi + iregion * 16);
645 int mlayer_n =
m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id);
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);
658 if (isNoiseBurstCandidate) {
659 thisVects.tdc_mon_nb1.push_back(tdc);
660 thisVects.adc_mon_nb1.push_back(
adc);
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);
669 int binx =
chamber->GetMDTHitsPerChamber_IMO_BinX();
674 int biny =
chamber->GetMDTHitsPerChamber_IMO_BinY();
676 std::string varx =
" ";
677 std::string vary =
" ";
678 std::string varx_noise =
" ";
679 std::string vary_noise =
" ";
681 varx =
"x_mon_barrel";
682 vary =
"y_mon_barrel";
683 varx_noise =
"x_mon_barrel_noise";
684 vary_noise =
"y_mon_barrel_noise";
686 varx =
"x_mon_endcap";
687 vary =
"y_mon_endcap";
688 varx_noise =
"x_mon_endcap_noise";
689 vary_noise =
"y_mon_endcap_noise";
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);
700 thisVects.x_bin_perML.push_back(
chamber->GetMDTHitsPerML_Binx() - 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);
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);
712 if (trig_barrel) { thisVects.tdc_mon_rpc.push_back(tdc); }
713 if (trig_endcap) { thisVects.tdc_mon_tgc.push_back(tdc); }
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(
721 thisVects.biny_vslb_bycrate.push_back(
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(
730 thisVects.biny_vslb_bycrate_ontrack.push_back(
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"};
747 for (
int iregion = 0; iregion < 4; ++iregion) {
748 std::string MDT_regionGroup =
"MDT_regionGroup" + region[iregion];
749 for (
int crate_region = 0; crate_region < 4; ++crate_region) {
750 std::string MDT_regionGroup_bycrate =
"MDT_regionGroup_bycrate" + region[crate_region];
751 for (
int ilayer = 0; ilayer < 4; ++ilayer) {
753 for (
int icrate = 0; icrate < 4; ++icrate) {
756 std::array<MDTSummaryHistogramStruct, 4096>&
array = *(vects);
757 auto& thisVects =
array[
v];
761 fill(
"MdtMonitor", lb_mon, sector);
765 thisVects.stationEta);
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";
791 fill(
"MdtMonitor", x_mon, y_mon, x_mon_noise, y_mon_noise);
794 varx =
"x_mon_" + region[iregion] +
"_" +
layer[ilayer];
795 vary =
"y_mon_" + region[iregion] +
"_" +
layer[ilayer];
800 if (
layer[ilayer] !=
"Extra") {
801 varx =
"x_mon_" +
layer[ilayer];
802 vary =
"y_mon_" +
layer[ilayer];
806 fill(
"MdtMonitor", bin_byLayer_x, bin_byLayer_y);
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";
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());
825 auto biny_name_bycrate =
"y_mon_bin_bycrate_" + region[crate_region] +
"_" + crate[icrate];
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());
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);
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);
844 fill(MDT_regionGroup_bycrate, lb_mon, biny_var_bycrate, biny_var_bycrate_ontrack);
851 return StatusCode::SUCCESS;
857 Identifier digcoll_id = (mdtCollection)->identify();
858 IdentifierHash digcoll_idHash = (mdtCollection)->collectionHash();
863 std::string hardware_name =
chamber->getName();
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')
882 float tdc = mdtCollection->
tdc() * 25.0 / 32.0;
884 if (hardware_name.substr(0, 3) ==
"BMG") tdc = mdtCollection->
tdc() * 0.2;
885 float adc = mdtCollection->
adc();
888 int iregion =
chamber->GetRegionEnum();
890 int mezz =
mezzmdt(digcoll_id);
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";
898 int mdtMultLayer =
m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id);
910 fill(monPerCh, tdc_perch, adc_perch, layer_perch, tube_perch, mezz_perch, ml1_adccut, ml2_adccut, adccut_nonoise, adccut);
930 std::string
type =
"MDT";
932 std::set<monAlg::TubeTraversedBySegment, monAlg::TubeTraversedBySegment_cmp> store_effTubes;
933 std::set<Identifier> store_ROTs;
940 ATH_MSG_ERROR(
"Null pointer to the read MuonDetectorManager conditions object");
941 return StatusCode::FAILURE;
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++) {
972 const std::string& chambername =
chamber->getName();
977 if (store_ROTs.count(tmpid)) {
continue; }
978 store_ROTs.insert(tmpid);
983 int iregion =
chamber->GetRegionEnum();
984 int ilayer =
chamber->GetLayerEnum();
985 int statphi =
chamber->GetStationPhi();
987 auto& thisVects = vects[iregion][ilayer][statphi];
988 thisVects.adc_segs_mon.push_back(
adc);
992 thisVects.tdc_segs_mon.push_back(tdc);
994 int binx =
chamber->GetMDTHitsPerChamber_IMO_BinX();
999 int biny =
chamber->GetMDTHitsPerChamber_IMO_BinY();
1000 thisVects.x_segs_mon.push_back(binx);
1001 thisVects.y_segs_mon.push_back(biny - 1);
1005 int mdtMultLayer =
m_idHelperSvc->mdtIdHelper().multilayer(tmpid);
1010 std::string monPerCh =
"MdtMonPerChamber";
1013 else if (iregion == 1)
1015 else if (iregion == 2)
1017 else if (iregion == 3)
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));
1026 fill(monPerCh, adc_perch, adc_ml1, adc_ml2);
1033 std::vector<Identifier> unique_chambers;
1034 std::vector<std::vector<int>> unique_chambers_ML;
1036 for (
unsigned i = 0;
i < ROTs_chamber.size();
i++) {
1037 bool isUnique =
true;
1038 for (
unsigned j = 0; j < unique_chambers.size(); j++) {
1041 if (!
AinB(ROTs_ML.at(
i), unique_chambers_ML.at(j))) unique_chambers_ML.at(j).push_back(ROTs_ML.at(
i));
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);
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;
1060 for (
const Identifier& station_id : unique_chambers) {
1071 for (
int ML : {1, 2}) {
1080 int tubeMin = id_helper.
tubeMin(newId);
1082 for (
int i_tube = tubeMin; i_tube <=
tubeMax; ++i_tube) {
1083 for (
int i_layer = tubeLayerMin; i_layer <= tubeLayerMax; ++i_layer) {
1087 std::map<Identifier, std::set<Identifier>>::const_iterator myIt =
m_DeadChannels.find(MdtRoEl->
identify());
1089 if (myIt->second.count(tubeId)) {
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);
1119 if (traversed_tube.size() < 20) {
1122 for (
unsigned k = 0;
k < traversed_tube.size();
k++) {
1124 std::string hardware_name =
getChamberName(traversed_station_id.at(
k));
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))) {
1143 const Identifier& trav_id = traversed_station_id.at(
k);
1152 int mdtlayer = ((traversed_L.at(
k) - 1) + (traversed_ML.at(
k) - 1) * tubeLayerMax);
1153 int ibin = traversed_tube.at(
k) + mdtlayer *
cachedTubeMax(newId);
1163 it = store_effTubes.find(tmp_effTube_Hit);
1164 if (hit_flag || (
it == store_effTubes.end()))
1165 store_effTubes.insert(tmp_effTube);
1167 it = store_effTubes.find(tmp_effTube_noHit);
1168 if (hit_flag && (
it != store_effTubes.end()))
1169 store_effTubes.erase(
it);
1183 int tubebin =
it.tubeBin;
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";
1192 std::string chambername =
chamber->getName();
1196 fill(monPerCh, tube_perch_segs, hitcut);
1199 return StatusCode::SUCCESS;
1204 std::string region[4] = {
"BA",
"BC",
"EA",
"EC"};
1205 std::string
layer[4] = {
"Inner",
"Middle",
"Outer",
"Extra"};
1207 for (
int iregion = 0; iregion < 4; ++iregion) {
1208 std::string MDT_regionGroup =
"MDT_regionGroup" + region[iregion];
1209 for (
int ilayer = 0; ilayer < 4; ++ilayer) {
1211 const auto& thisVects = vects[iregion][ilayer][
stationPhi];
1222 fill(MDT_regionGroup, adc_segs_mon, tdc_segs_region_mon);
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";
1229 fill(
"MdtMonitor", tdc_segs_overall_mon, adc_segs_overall_mon, x_segs_mon, y_segs_mon);
1233 return StatusCode::SUCCESS;
1237 PVConstLink cv = mydetEl->getMaterialGeom();
1238 int nGrandchildren = cv->getNChildVols();
1239 if (nGrandchildren <= 0)
return;
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) {
1255 if (layergeo >
layer)
break;
1259 deadTubes.insert(deadTubeId);