22 #include "GaudiKernel/MsgStream.h"
24 #include "Identifier/Identifier.h"
54 enum { enumBarrelA, enumBarrelC, enumEndCapA, enumEndCapC };
55 enum { enumBarrel, enumEndCap };
56 enum { enumInner, enumMiddle, enumOuter, enumExtra };
66 m_muonSelectionTool(this,
"MuonSelectionTool",
"CP::MuonSelectionTool/MuonSelectionTool"),
67 m_MdtDQFilterTools(this) {
126 for (
unsigned int i = 0;
i < 4;
i++) {
142 if (
i == 3)
continue;
146 if (
i == 2)
continue;
163 ManagedMonitorToolBase::MgmtAttr_t::ATTRIB_UNMANAGED,
"");
166 ManagedMonitorToolBase::MgmtAttr_t::ATTRIB_UNMANAGED,
"_lowStat");
195 std::string managerName =
"Muon";
198 ATH_MSG_DEBUG(
" Found the MuonGeoModel Manager from the Detector Store");
202 ATH_MSG_INFO(
"Processing configuration for layouts with BMG chambers.");
219 return StatusCode::SUCCESS;
232 if (
sc.isFailure()) {
237 if (
sc.isFailure()) {
246 ATH_MSG_DEBUG(
"MDT RawData Monitoring from ESD : newRunFlag()");
251 if (
sc.isFailure()) {
258 if (
sc.isFailure()) {
264 ATH_MSG_DEBUG(
"MdtRawDataValAlg::MDT RawData Monitoring Histograms being filled");
267 std::string hardware_name =
271 if (hardware_name ==
"BML6A13" || hardware_name ==
"BML6C13")
continue;
274 chamber = std::make_unique<MDTChamber>(hardware_name);
277 chamber->SetMDTHitsPerChamber_IMO_Bin(
279 chamber->SetMDTHitsPerChamber_IMO_Bin(
281 chamber->SetMDTHitsPerML_byLayer_Bins(
305 if (
sc.isFailure()) {
310 if (
sc.isFailure()) {
315 if (
sc.isFailure()) {
319 ATH_MSG_DEBUG(
"MdtRawDataValAlg::MDT RawData Monitoring Histograms being filled");
342 int nColl_ADCCut = 0;
355 for (containerIt = rpc_container->
begin(); containerIt != rpc_container->
end(); ++containerIt) {
361 bool isNoiseBurstCandidate =
false;
363 for (MdtcontainerIt = mdt_container->
begin(); MdtcontainerIt != mdt_container->
end(); ++MdtcontainerIt) {
365 mdtCollection != (*MdtcontainerIt)->end(); ++mdtCollection) {
370 std::string
type =
"MDT";
371 std::string hardware_name;
373 std::map<std::string, float> evnt_hitsperchamber_map;
374 std::set<std::string> chambers_from_tracks;
381 for (
const auto*
const mu : *muons) {
388 if (!trk) {
continue; }
394 if (ntri_eta + n_phi == 0)
continue;
398 if (!rot_from_track)
continue;
403 m_idHelperSvc->mdtIdHelper().get_module_hash(rotId, mdt_idHash);
405 std::string mdt_chambername = mdt_chamber->
getName();
406 chambers_from_tracks.insert(mdt_chambername);
414 if (containerIt == mdt_container->
end() || containerIt->empty())
continue;
417 bool isHit_above_ADCCut =
false;
419 for (
const auto* mdtCollection : **containerIt) {
422 float adc = mdtCollection->adc();
423 if (hardware_name.compare(0, 3,
"BMG") == 0)
adc /= 4.;
426 isHit_above_ADCCut =
true;
430 if (
sc.isSuccess()) {
438 if (
sc.isSuccess()) {
447 if (
sc.isSuccess()) {
448 ATH_MSG_DEBUG(
"Filled MDThistograms (chamber by chamber histos)");
455 if (iter_hitsperchamber == evnt_hitsperchamber_map.end()) {
456 evnt_hitsperchamber_map.insert(make_pair(hardware_name, 1));
458 iter_hitsperchamber->second += 1;
466 iter_hitsperchamber->second += 1;
473 if (isHit_above_ADCCut) nColl_ADCCut++;
476 int nHighOccChambers = 0;
479 for (iterstat = evnt_hitsperchamber_map.begin(); iterstat != evnt_hitsperchamber_map.end(); ++iterstat) {
480 std::string hardware_name = iterstat->first;
482 float nTubes = iter_tubesperchamber->second;
483 float hits = iterstat->second;
484 float occ =
hits / nTubes;
485 if (occ > 0.1) nHighOccChambers++;
489 else {
ATH_MSG_DEBUG(
"m_nummdtchamberswithHighOcc not in hist list!"); }
496 else {
ATH_MSG_DEBUG(
"m_mdteventscutLumi not in hist list!"); }
501 else {
ATH_MSG_DEBUG(
"m_mdteventscutLumi_big not in hist list!"); }
511 else {
ATH_MSG_DEBUG(
"m_mdteventsLumi_big not in hist list!"); }
518 else {
ATH_MSG_DEBUG(
"m_nummdtchamberswithhits not in hist list!"); }
523 else {
ATH_MSG_DEBUG(
"m_nummdtchamberswithhits_ADCCut not in hist list!"); }
531 if (
sc.isFailure()) {
591 for (
int iecap = 0; iecap < 4; iecap++) {
592 for (
int ilayer = 0; ilayer < 4; ilayer++) {
596 if (iecap == enumBarrelA)
598 else if (iecap == enumBarrelC)
600 else if (iecap == enumEndCapA)
605 if (
sc.isFailure()) {
606 ATH_MSG_ERROR(
"mdthitspermultilayer Failed to register histogram");
609 ATH_MSG_DEBUG(
"Inside LowStat Loop, iecap=" << iecap <<
", ilayer=" << ilayer);
614 if (ilayer == 0 && ((iecap == 0 || iecap == 2))) {
619 ATH_MSG_DEBUG(
"Bookint m_mdthitsperchamber_onSegm_InnerMiddleOuterLumi");
621 m_mg->mongroup_overview_recoMon);
623 if (
sc.isFailure()) {
624 ATH_MSG_ERROR(
"mdthitsperchamber_InnerMiddleOuter Failed to register histogram");
665 ATH_MSG_DEBUG(
"********Reached Last Event in MdtRawDataValAlg !!!");
675 const char* chambername_char = iterstat->first.c_str();
676 float hits = iterstat->second;
681 if (iterstat->first.length() < 7)
continue;
682 c[0] = chambername_char[5];
683 c[1] = chambername_char[6];
684 if (!(
c[0] ==
'0' ||
c[0] ==
'1') ||
c[1] <
'0' ||
c[1] >
'9')
continue;
686 if (i < 0 || i > 15)
continue;
689 if (
h)
h->Fill(chambername_char,
hits);
695 for (
int j = 0; j <= 15; ++j) {
709 std::string hardware_name =
chamber->getName();
711 m_idHelperSvc->mdtIdHelper().get_module_hash(digcoll_id, idHash);
713 int tubeIdMax =
GetTubeMax(digcoll_id, hardware_name);
716 std::string subdir_path = hardware_name.substr(0, 1) + hardware_name.substr(4, 1);
717 if (subdir_path.at(1) ==
'B') subdir_path.at(1) =
'A';
719 MonGroup* mongroup_chambers_expert =
nullptr;
720 if (subdir_path ==
"BA")
721 mongroup_chambers_expert = &(
m_mg->mongroup_chambers_expert_MDTBA);
722 else if (subdir_path ==
"BC")
723 mongroup_chambers_expert = &(
m_mg->mongroup_chambers_expert_MDTBC);
724 else if (subdir_path ==
"EA")
725 mongroup_chambers_expert = &(
m_mg->mongroup_chambers_expert_MDTEA);
727 mongroup_chambers_expert = &(
m_mg->mongroup_chambers_expert_MDTEC);
734 tubeIdMax, 1, tubeIdMax + 1, *mongroup_chambers_expert);
741 tubeIdMax, 1, tubeIdMax + 1, *mongroup_chambers_expert);
748 tubeIdMax + 1, *mongroup_chambers_expert);
755 *mongroup_chambers_expert);
762 100, 0, 2000., *mongroup_chambers_expert);
769 100, 0, 2000., *mongroup_chambers_expert);
775 "Number of Entries", 100, 0, 400., *mongroup_chambers_expert);
782 "Number of Entries", 100, 0, 400., *mongroup_chambers_expert);
789 *mongroup_chambers_expert);
795 10., *mongroup_chambers_expert);
801 1, tubeIdMax + 1, *mongroup_chambers_expert);
807 tubeIdMax, 1, tubeIdMax + 1, *mongroup_chambers_expert);
815 *mongroup_chambers_expert);
824 20., 0., 400., *mongroup_chambers_expert);
830 "Drift Time [nsec]", 80, -20, 20., 120, -200., 1000., *mongroup_chambers_expert);
836 "Error [mm]", 80, -20, 20., 80, -5., 5., *mongroup_chambers_expert);
842 "Segm dist. to tube [mm]", 80, -20, 20., 80, -20., 20., *mongroup_chambers_expert);
858 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brA_shiftLumi);
860 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brC_shiftLumi);
862 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecA_shiftLumi);
864 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecC_shiftLumi);
866 2000.,
m_mg->mongroup_brA_shiftLumi);
868 2000.,
m_mg->mongroup_brC_shiftLumi);
870 2000.,
m_mg->mongroup_ecA_shiftLumi);
872 2000.,
m_mg->mongroup_ecC_shiftLumi);
876 100, 0.5, 400.5,
m_mg->mongroup_brA_shiftLumi);
878 100, 0.5, 400.5,
m_mg->mongroup_brC_shiftLumi);
880 100, 0.5, 400.5,
m_mg->mongroup_ecA_shiftLumi);
882 100, 0.5, 400.5,
m_mg->mongroup_ecC_shiftLumi);
884 m_mg->mongroup_brA_shiftLumi);
886 m_mg->mongroup_brC_shiftLumi);
888 m_mg->mongroup_ecA_shiftLumi);
890 m_mg->mongroup_ecC_shiftLumi);
892 0., 400.,
m_mg->mongroup_brA_shiftLumi);
894 0., 400.,
m_mg->mongroup_brC_shiftLumi);
896 0., 400.,
m_mg->mongroup_ecA_shiftLumi);
898 0., 400.,
m_mg->mongroup_ecC_shiftLumi);
902 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brA_shiftLumi);
904 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brC_shiftLumi);
906 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecA_shiftLumi);
908 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecC_shiftLumi);
910 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brA_shiftLumi);
912 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brC_shiftLumi);
914 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecA_shiftLumi);
916 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecC_shiftLumi);
920 2000., 20., 0., 400.,
m_mg->mongroup_brA_shiftLumi);
922 2000., 20., 0., 400.,
m_mg->mongroup_brC_shiftLumi);
924 2000., 20., 0., 400.,
m_mg->mongroup_ecA_shiftLumi);
926 2000., 20., 0., 400.,
m_mg->mongroup_ecC_shiftLumi);
930 0, 1, 1, 0, 1,
m_mg->mongroup_overview_shiftLumi);
932 1, 0, 1, 1, 0, 1,
m_mg->mongroup_overview_shiftLumi);
934 0, 1, 1, 0, 1,
m_mg->mongroup_overview_shiftLumi);
937 std::string ecap[4] = {
"BA",
"BC",
"EA",
"EC"};
938 std::string
layer[4] = {
"Inner",
"Middle",
"Outer",
"Extra"};
939 std::string MDTHits_BE[2] = {
"Barrel",
"EndCap"};
941 for (
int iecap = 0; iecap < 4; iecap++) {
942 for (
int ilayer = 0; ilayer < 4; ilayer++) {
946 if (iecap == enumBarrelA)
948 "NumberOfHitsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
949 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_brA_shiftLumi);
950 else if (iecap == enumBarrelC)
952 "NumberOfHitsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
953 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_brC_shiftLumi);
954 else if (iecap == enumEndCapA)
956 "NumberOfHitsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
957 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_ecA_shiftLumi);
960 "NumberOfHitsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
961 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_ecC_shiftLumi);
963 std::string xAxis = ecap[iecap].substr(0, 1) +
layer[ilayer].substr(0, 1) + ecap[iecap].substr(1, 1);
966 if (
sc.isFailure()) {
967 ATH_MSG_ERROR(
"mdthitspermultilayer Failed to register histogram lowStat");
970 ATH_MSG_DEBUG(
"Inside LowStat Loop, iecap=" << iecap <<
", ilayer=" << ilayer);
975 if (ilayer == 0 && ((iecap == 0 || iecap == 2))) {
976 ATH_MSG_DEBUG(
"Bookint mdthitsperchamber_InnerMiddleOuter LowStat");
978 "NumberOfHitsIn" + MDTHits_BE[iecap / 2] +
"PerChamber_ADCCut",
"[Eta]",
"[Layer,Phi]", 1,
979 0, 1, 1, 0, 1,
m_mg->mongroup_overview_shiftLumi);
983 "NumberOfHitsIn" + MDTHits_BE[iecap / 2] +
"PerChamber_ADCCut_NoiseBurst",
"[Eta]",
984 "[Layer,Phi]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_overview_shiftLumi);
987 ATH_MSG_DEBUG(
"Bookint m_mdthitsperchamber_onSegm_InnerMiddleOuterLumi LowStat");
989 "NumberOfHitsIn" + MDTHits_BE[iecap / 2] +
"PerChamber_onSegm_ADCCut",
"[Eta]",
990 "[Layer,Phi]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_overview_shiftLumi_recoMon);
993 if (
sc.isFailure()) {
994 ATH_MSG_ERROR(
"mdthitsperchamber_InnerMiddleOuter Failed to register histogram in lowStat");
1007 std::string ecap[4] = {
"BA",
"BC",
"EA",
"EC"};
1008 std::string
layer[4] = {
"Inner",
"Middle",
"Outer",
"Extra"};
1009 std::string MDTHits_BE[2] = {
"Barrel",
"EndCap"};
1010 std::string crate[4] = {
"01",
"02",
"03",
"04"};
1012 for (
int iecap = 0; iecap < 4; iecap++) {
1013 for (
int ilayer = 0; ilayer < 4; ilayer++) {
1018 if (iecap == enumBarrelA) {
1020 "effsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
1021 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_brA_shift);
1022 }
else if (iecap == enumBarrelC) {
1024 "effsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
1025 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_brC_shift);
1026 }
else if (iecap == enumEndCapA) {
1028 "effsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
1029 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_ecA_shift);
1032 "effsIn" + ecap[iecap] +
layer[ilayer] +
"PerMultiLayer_ADCCut",
"[Eta]",
1033 "[Phi,Multilayer]", 1, 0, 1, 1, 0, 1,
m_mg->mongroup_ecC_shift);
1036 std::string xAxis = ecap[iecap].substr(0, 1) +
layer[ilayer].substr(0, 1) + ecap[iecap].substr(1, 1);
1039 if (
sc.isFailure()) {
1040 ATH_MSG_ERROR(
"mdthitspermultilayer Failed to register histogram ");
1043 ATH_MSG_DEBUG(
"Inside Loop, iecap=" << iecap <<
", ilayer=" << ilayer);
1048 if (ilayer == 0 && ((iecap == 0 || iecap == 2))) {
1049 ATH_MSG_DEBUG(
"Bookint m_mdteffperchamber_InnerMiddleOuter");
1051 "effsIn" + MDTHits_BE[iecap / 2] +
"PerChamber_ADCCut",
"[Eta]",
"[Layer,Phi]", 1, 0, 1,
1052 1, 0, 1,
m_mg->mongroup_overview_shift);
1056 if (
sc.isFailure()) {
1057 ATH_MSG_ERROR(
"mdthitsperchamber_InnerMiddleOuter Failed to register histogram ");
1064 "Number of Entries", 100, 0., 400.,
m_mg->mongroup_brA_shift);
1066 "Number of Entries", 100, 0., 400.,
m_mg->mongroup_brC_shift);
1068 "Number of Entries", 100, 0., 400.,
m_mg->mongroup_ecA_shift);
1070 "Number of Entries", 100, 0., 400.,
m_mg->mongroup_ecC_shift);
1072 "[adc counts]", 50, 0, 2000., 40, 0., 400.,
m_mg->mongroup_brA_shift);
1074 "[adc counts]", 50, 0, 2000., 40, 0., 400.,
m_mg->mongroup_brC_shift);
1076 "[adc counts]", 50, 0, 2000., 40, 0., 400.,
m_mg->mongroup_ecA_shift);
1078 "[adc counts]", 50, 0, 2000., 40, 0., 400.,
m_mg->mongroup_ecC_shift);
1080 0., 2000.,
m_mg->mongroup_brA_shift);
1082 0., 2000.,
m_mg->mongroup_brC_shift);
1084 0., 2000.,
m_mg->mongroup_ecA_shift);
1086 0., 2000.,
m_mg->mongroup_ecC_shift);
1088 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brA_shift);
1090 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_brC_shift);
1092 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecA_shift);
1094 "Number of Entries", 120, 0., 2000.,
m_mg->mongroup_ecC_shift);
1100 std::string lbhisttitle;
1102 lbhisttitle =
"OccupancyVsLB_" + ecap[iecap] +
layer[ilayer] +
"PlusExtra";
1104 lbhisttitle =
"OccupancyVsLB_" + ecap[iecap] +
layer[ilayer];
1105 if (iecap == enumBarrelA) {
1106 sc =
bookMDTHisto_OccVsLB(
m_mdtoccvslb[iecap][ilayer], lbhisttitle,
"LB",
"[Eta,Phi]", 834, 1, 2502, 100, 1, 100,
1107 m_mg->mongroup_brA_shift);
1108 if (
sc.isFailure()) {
1109 ATH_MSG_ERROR(
"m_mdtoccvslb Failed to register histogram ");
1112 }
else if (iecap == enumBarrelC) {
1113 sc =
bookMDTHisto_OccVsLB(
m_mdtoccvslb[iecap][ilayer], lbhisttitle,
"LB",
"[Eta,Phi]", 834, 1, 2502, 100, 0, 100,
1114 m_mg->mongroup_brC_shift);
1115 if (
sc.isFailure()) {
1116 ATH_MSG_ERROR(
"m_mdtoccvslb Failed to register histogram ");
1119 }
else if (iecap == enumEndCapA) {
1120 sc =
bookMDTHisto_OccVsLB(
m_mdtoccvslb[iecap][ilayer], lbhisttitle,
"LB",
"[Eta,Phi]", 834, 1, 2502, 100, 0, 100,
1121 m_mg->mongroup_ecA_shift);
1122 if (
sc.isFailure()) {
1123 ATH_MSG_ERROR(
"m_mdtoccvslb Failed to register histogram ");
1127 sc =
bookMDTHisto_OccVsLB(
m_mdtoccvslb[iecap][ilayer], lbhisttitle,
"LB",
"[Eta,Phi]", 834, 1, 2502, 100, 0, 100,
1128 m_mg->mongroup_ecC_shift);
1129 if (
sc.isFailure()) {
1130 ATH_MSG_ERROR(
"m_mdtoccvslb Failed to register histogram ");
1136 if (
sc.isFailure()) {
1137 ATH_MSG_ERROR(
"m_mdtoccvslb Failed to register histogram ");
1146 std::string lbCrate_histtitle =
"OccupancyVsLB_" + ecap[iecap] + crate[ilayer];
1147 if (iecap == enumBarrelA) {
1149 1, 100,
m_mg->mongroup_brA_shift);
1150 if (
sc.isFailure()) {
1151 ATH_MSG_ERROR(
"m_mdtoccvslb_by_crate Failed to register histogram ");
1154 }
else if (iecap == enumBarrelC) {
1156 0, 100,
m_mg->mongroup_brC_shift);
1157 if (
sc.isFailure()) {
1158 ATH_MSG_ERROR(
"m_mdtoccvslb_by_crate Failed to register histogram ");
1161 }
else if (iecap == enumEndCapA) {
1163 0, 100,
m_mg->mongroup_ecA_shift);
1164 if (
sc.isFailure()) {
1165 ATH_MSG_ERROR(
"m_mdtoccvslb_by_crate Failed to register histogram ");
1170 0, 100,
m_mg->mongroup_ecC_shift);
1171 if (
sc.isFailure()) {
1172 ATH_MSG_ERROR(
"m_mdtoccvslb_by_crate Failed to register histogram ");
1178 if (
sc.isFailure()) {
1179 ATH_MSG_ERROR(
"m_mdtoccvslb_by_crate Failed to register histogram ");
1183 std::string perSectors_summary_histtitle =
"OccupancyPerSectorVsLB";
1185 100,
m_mg->mongroup_overview_shift);
1186 if (
sc.isFailure()) {
1187 ATH_MSG_ERROR(
" mdtoccvslb_summaryPerSector Failed to register histogram ");
1196 std::string lbCrate_ontrack_histtitle =
"OccupancyVsLB_ontrack_" + ecap[iecap] + crate[ilayer];
1197 if (iecap == enumBarrelA) {
1199 834, 1, 2502, 100, 1, 100,
m_mg->mongroup_brA_shift);
1200 if (
sc.isFailure()) {
1201 ATH_MSG_ERROR(
"mdtoccvslb_ontrack_by_crate Failed to register histogram ");
1204 }
else if (iecap == enumBarrelC) {
1206 834, 1, 2502, 100, 0, 100,
m_mg->mongroup_brC_shift);
1207 if (
sc.isFailure()) {
1208 ATH_MSG_ERROR(
"mdtoccvslb_ontrack_by_crate Failed to register histogram ");
1211 }
else if (iecap == enumEndCapA) {
1213 834, 1, 2502, 100, 0, 100,
m_mg->mongroup_ecA_shift);
1214 if (
sc.isFailure()) {
1215 ATH_MSG_ERROR(
"mdtoccvslb_ontrack_by_crate Failed to register histogram ");
1220 834, 1, 2502, 100, 0, 100,
m_mg->mongroup_ecC_shift);
1221 if (
sc.isFailure()) {
1222 ATH_MSG_ERROR(
"mdtoccvslb_ontrack_by_crate Failed to register histogram ");
1228 if (
sc.isFailure()) {
1229 ATH_MSG_ERROR(
"mdtoccvslb_by_crate Failed to register histogram ");
1240 if (ilayer == 0 && iecap == 0) {
1245 "Counts/Chamber", 1, 0., 1.,
m_mg->mongroup_sectors_expert);
1250 if (!(iecap <= 1 && ilayer == enumExtra &&
1253 std::string title_MDTHitSummary =
"MDTHits_ADCCut_" + ecap[iecap] +
"_" +
layer[ilayer] +
"_StPhi" +
Phi;
1254 int max = (iecap < 2 && ilayer == 0) ? 11 : 7;
1255 int nbins = (iecap < 2 && ilayer == 0) ? 10 : 6;
1262 "Counts/Chamber",
nbins, 1,
max,
m_mg->mongroup_brA_hits_expert);
1265 "Counts/Chamber",
nbins, 1,
max,
m_mg->mongroup_brC_hits_expert);
1268 "Counts/Chamber",
nbins, 1,
max,
m_mg->mongroup_ecA_hits_expert);
1271 "Counts/Chamber",
nbins, 1,
max,
m_mg->mongroup_ecC_hits_expert);
1274 if (
sc.isFailure()) {
1275 ATH_MSG_ERROR(
"m_mdtChamberHits per eta and phi Failed to register histogram ");
1284 std::string title_MDTTDCSummary =
"MDTTDC_ADCCut_" + ecap[iecap] +
"_" +
layer[ilayer] +
"_StPhi" +
Phi;
1291 "number of entries", 100, 0, 2000.,
m_mg->mongroup_brA_tdc_expert);
1294 "number of entries", 100, 0, 2000.,
m_mg->mongroup_brC_tdc_expert);
1297 "number of entries", 100, 0, 2000.,
m_mg->mongroup_ecA_tdc_expert);
1300 "number of entries", 100, 0, 2000.,
m_mg->mongroup_ecC_tdc_expert);
1303 if (
sc.isFailure()) {
1304 ATH_MSG_ERROR(
"m_mdttdccut_sector per eta and phi Failed to register histogram ");
1322 if (newLumiBlock) {}
1328 m_mg->mongroup_overview_shiftLumi);
1333 2000.,
m_mg->mongroup_overview_shiftLumi);
1338 400.,
m_mg->mongroup_overview_shiftLumi);
1343 m_mg->mongroup_overview_shiftLumi);
1348 10000.,
m_mg->mongroup_overview_shiftLumi);
1352 200, 0., 100000.,
m_mg->mongroup_overview_shiftLumi);
1356 m_mg->mongroup_overview_shiftLumi);
1361 100000.,
m_mg->mongroup_overview_shiftLumi);
1365 sc =
bookMDTHisto_overview_2D(
m_overalltdcadcLumi,
"Overall_TDCADC_spectrum",
"[nsec]",
"[adc counts]", 50, 0, 2000., 20., 0., 400.,
1366 m_mg->mongroup_overview_shiftLumi);
1372 m_mg->mongroup_overview_shift);
1376 10000.,
m_mg->mongroup_overview_shift);
1380 m_mg->mongroup_overview_shift);
1384 400.,
m_mg->mongroup_overview_shift);
1388 20., 0., 400.,
m_mg->mongroup_overview_shift);
1392 "Number of Entries", 400, 0., 1600.,
m_mg->mongroup_overview_shift);
1396 "[Number_of_MDT_chambers_with_high_occupancy]",
"Number of Entries", 200, 0., 800.,
1397 m_mg->mongroup_overview_shift);
1403 "[Number_of_MDT_chambers_with_hits]",
"Number of Entries", 400, 0., 1600.,
m_mg->mongroup_overview_shift);
1408 m_mg->mongroup_overview_expert);
1412 if (hardware_name ==
"BML6A13" || hardware_name ==
"BML6C13")
continue;
1422 std::string mdtreg[3] = {
"Barrel",
"Overlap",
"EndCap"};
1423 std::string generic_path_mdtrzxydet =
"MDT/Overview";
1425 for (
int imdtreg = 0; imdtreg < 3; imdtreg++) {
1428 "MDT-GlobalZ(mm)",
"MDT-GlobalR(mm)", 250, -25000., 25000., 120, 0., 12000.,
1429 m_mg->mongroup_overview_shift_geometry);
1433 "MDT-GlobalX(mm)",
"MDT-GlobalY(mm)", 150, -15000., 15000., 150, -15000., 15000.,
1434 m_mg->mongroup_overview_shift_geometry);
1444 Identifier digcoll_id = (mdtCollection)->identify();
1445 IdentifierHash digcoll_idHash = (mdtCollection)->collectionHash();
1449 if (!
sc.isSuccess()) {
1450 ATH_MSG_ERROR(
"Could Not Retrieve MDTChamber w/ ID " << digcoll_idHash);
1454 std::string hardware_name =
chamber->getName();
1459 int mdtlayer =
m_idHelperSvc->mdtIdHelper().tubeLayer(digcoll_id);
1460 if (
m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id) == 2) {
1461 if (hardware_name.at(1) ==
'I' && hardware_name.at(3) !=
'8')
1474 float tdc = mdtCollection->
tdc() * 25.0 / 32.0;
1476 if (hardware_name.compare(0, 3,
"BMG") == 0) tdc = mdtCollection->
tdc() * 0.2;
1477 float adc = mdtCollection->
adc();
1478 if (hardware_name.compare(0, 3,
"BMG") == 0)
adc /= 4.;
1486 int mdtMultLayer =
m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id);
1490 if (
chamber->mdttdccut_ML1 && mdtMultLayer == 1) {
chamber->mdttdccut_ML1->Fill(tdc); }
1491 if (
chamber->mdttdccut_ML2 && mdtMultLayer == 2) {
chamber->mdttdccut_ML2->Fill(tdc); }
1513 bool& isNoiseBurstCandidate) {
1515 Identifier digcoll_id = (mdtCollection)->identify();
1516 IdentifierHash digcoll_idHash = (mdtCollection)->collectionHash();
1520 if (!
sc.isSuccess()) {
1521 ATH_MSG_ERROR(
"Could Not Retrieve MDTChamber w/ ID " << digcoll_idHash);
1526 int ibarrel =
chamber->GetBarrelEndcapEnum();
1527 int iregion =
chamber->GetRegionEnum();
1528 int ilayer =
chamber->GetLayerEnum();
1529 int icrate =
chamber->GetCrate();
1532 std::string chambername =
chamber->getName();
1533 bool is_on_track =
false;
1534 for (
const auto&
ch : chambers_from_tracks) {
1535 if (chambername ==
ch) is_on_track =
true;
1537 bool isBIM = (chambername.at(2) ==
'M');
1538 float tdc = mdtCollection->
tdc() * 25.0 / 32.0;
1540 if (chambername.compare(0, 3,
"BMG") == 0) tdc = mdtCollection->
tdc() * 0.2;
1541 float adc = mdtCollection->
adc();
1542 if (chambername.compare(0, 3,
"BMG") == 0)
adc /= 4.;
1547 int mlayer_n =
m_idHelperSvc->mdtIdHelper().multilayer(digcoll_id);
1550 if (!isNoisy &&
adc > 0) {
1556 if (isNoiseBurstCandidate) {
1575 if (isNoiseBurstCandidate) {
1596 int crate_region = iregion;
1597 if (chambername.compare(0, 3,
"BEE") == 0 || (chambername.compare(0, 3,
"BIS") == 0 && (
stationEta == 7 ||
stationEta == 8))) {
1598 if (iregion == 0) crate_region = 2;
1599 if (iregion == 1) crate_region = 3;
1616 Identifier digcoll_id = (mdtCollection)->identify();
1624 if (MuonDetMgr ==
nullptr) {
1625 ATH_MSG_ERROR(
"Null pointer to the read MuonDetectorManager conditions object");
1626 return StatusCode::FAILURE;
1631 float mdt_tube_eta = mdtgPos.eta();
1632 float mdt_tube_x = mdtgPos.x();
1633 float mdt_tube_y = mdtgPos.y();
1634 float mdt_tube_z = mdtgPos.z();
1635 float mdt_tube_perp = mdtgPos.perp();
1637 float tdc = mdtCollection->
tdc() * 25.0 / 32.0;
1639 if (hardware_name.compare(0, 3,
"BMG") == 0) tdc = mdtCollection->
tdc() * 0.2;
1640 float adc = mdtCollection->
adc();
1641 if (hardware_name.compare(0, 3,
"BMG") == 0)
adc /= 4.;
1645 if (std::abs(mdt_tube_eta) > 0. && std::abs(mdt_tube_eta) < 0.9) {
1650 if (std::abs(mdt_tube_eta) > 0.9 && std::abs(mdt_tube_eta) < 1.2) {
1655 if (std::abs(mdt_tube_eta) > 1.2 && std::abs(mdt_tube_eta) < 2.7) {
1671 if (isNoiseBurstCandidate) {
1687 ATH_MSG_DEBUG(
"m_overalltdcHighOcc_ADCCut not in hist list!");
1714 std::string
type =
"MDT";
1715 std::set<TubeTraversedBySegment, TubeTraversedBySegment_cmp> store_effTubes;
1716 std::set<Identifier> store_ROTs;
1721 if (MuonDetMgr ==
nullptr) {
1722 ATH_MSG_ERROR(
"Null pointer to the read MuonDetectorManager conditions object");
1723 return StatusCode::FAILURE;
1727 for (
const auto* segm : *segms) {
1739 std::vector<Identifier> ROTs_chamber;
1740 std::vector<int> ROTs_tube;
1741 std::vector<int> ROTs_L;
1742 std::vector<int> ROTs_ML;
1743 std::vector<float> ROTs_DR;
1744 std::vector<float> ROTs_DRerr;
1745 std::vector<float> ROTs_DT;
1746 for (
unsigned int irot = 0; irot <
segment->numberOfContainedROTs(); irot++) {
1753 m_idHelperSvc->mdtIdHelper().get_module_hash(tmpid, idHash);
1755 std::string chambername =
chamber->getName();
1757 if (chambername.compare(0, 3,
"BMG") == 0)
adc /= 4.;
1759 if (store_ROTs.insert(tmpid).second) {
1763 if (chambername.compare(0, 3,
"BMG") == 0) tdc = mrot->
prepRawData()->
tdc() * 0.2;
1765 int iregion =
chamber->GetRegionEnum();
1766 int ilayer =
chamber->GetLayerEnum();
1767 int statphi =
chamber->GetStationPhi();
1768 int ibarrel_endcap =
chamber->GetBarrelEndcapEnum();
1773 ATH_MSG_ERROR(
"MDT StationPhi: " << statphi <<
" Is too high. Chamber name: " <<
chamber->getName());
1784 chamber->GetMDTHitsPerChamber_IMO_Bin(), 1.);
1789 int mdtMultLayer =
m_idHelperSvc->mdtIdHelper().multilayer(tmpid);
1790 if (
chamber->mdtadc_onSegm_ML1 && mdtMultLayer == 1) {
chamber->mdtadc_onSegm_ML1->Fill(
adc); }
1791 if (
chamber->mdtadc_onSegm_ML2 && mdtMultLayer == 2) {
chamber->mdtadc_onSegm_ML2->Fill(
adc); }
1796 ROTs_chamber.push_back(tmpid);
1797 ROTs_ML.push_back(
m_idHelperSvc->mdtIdHelper().multilayer(tmpid));
1798 ROTs_L.push_back(
m_idHelperSvc->mdtIdHelper().tubeLayer(tmpid));
1799 ROTs_tube.push_back(
m_idHelperSvc->mdtIdHelper().tube(tmpid));
1811 std::vector<Identifier> unique_chambers;
1812 std::vector<std::vector<int> > unique_chambers_ML;
1813 for (
unsigned i = 0;
i < ROTs_chamber.size();
i++) {
1814 bool isUnique =
true;
1815 for (
unsigned j = 0; j < unique_chambers.size(); j++) {
1818 if (!
AinB(ROTs_ML.at(
i), unique_chambers_ML.at(j))) unique_chambers_ML.at(j).push_back(ROTs_ML.at(
i));
1823 unique_chambers.push_back(ROTs_chamber.at(
i));
1824 std::vector<int> tmp_ML;
1825 tmp_ML.push_back(ROTs_ML.at(
i));
1826 unique_chambers_ML.push_back(tmp_ML);
1833 std::vector<Identifier> traversed_station_id;
1834 std::vector<int> traversed_tube;
1835 std::vector<int> traversed_L;
1836 std::vector<int> traversed_ML;
1837 std::vector<float> traversed_distance;
1838 for (
unsigned i_chamber = 0; i_chamber < unique_chambers.size(); i_chamber++) {
1839 Identifier station_id = unique_chambers.at(i_chamber);
1854 for (
int ML : unique_chambers_ML.at(i_chamber)) {
1856 hardware_name.substr(0, 3),
m_idHelperSvc->mdtIdHelper().stationEta(station_id),
1857 m_idHelperSvc->mdtIdHelper().stationPhi(station_id), ML, 1, 1);
1859 auto [tubeLayerMin, tubeLayerMax] =
m_idHelperSvc->mdtIdHelper().tubeLayerMinMax(newId);
1862 for (
int i_tube = tubeMin; i_tube <=
tubeMax; i_tube++) {
1863 for (
int i_layer = tubeLayerMin; i_layer <= tubeLayerMax; i_layer++) {
1869 if (
std::find((myIt->second).begin(), (myIt->second).end(), tubeId) != (myIt->second).end()) {
1881 traversed_station_id.push_back(station_id);
1882 traversed_tube.push_back(i_tube);
1883 traversed_L.push_back(i_layer);
1884 traversed_ML.push_back(ML);
1885 traversed_distance.push_back(segment_track.
signDistFrom(tube_track));
1895 if (traversed_tube.size() < 20) {
1897 for (
unsigned k = 0;
k < traversed_tube.size();
k++) {
1898 std::string hardware_name =
getChamberName(traversed_station_id.at(
k));
1901 m_idHelperSvc->mdtIdHelper().get_module_hash(traversed_station_id.at(
k), idHash);
1904 if (!
sc.isSuccess()) {
1905 ATH_MSG_ERROR(
"Could Not Retrieve MDTChamber w/ ID " << idHash);
1909 bool hit_flag =
false;
1910 for (
unsigned j = 0; j < ROTs_tube.size(); j++) {
1911 if ((
getChamberName(ROTs_chamber.at(j)) == hardware_name) && (traversed_tube.at(
k) == ROTs_tube.at(j)) &&
1912 (traversed_L.at(
k) == ROTs_L.at(j)) &&
1913 (traversed_ML.at(
k) == ROTs_ML.at(j))) {
1915 if (
chamber->mdt_DRvsDT)
chamber->mdt_DRvsDT->Fill(ROTs_DR.at(j), ROTs_DT.at(j));
1917 chamber->mdt_DRvsDRerr->Fill(ROTs_DR.at(j), ROTs_DRerr.at(j));
1918 if (
chamber->mdt_DRvsSegD)
chamber->mdt_DRvsSegD->Fill(ROTs_DR.at(j), traversed_distance.at(
k));
1923 hardware_name.substr(0, 3),
m_idHelperSvc->mdtIdHelper().stationEta(traversed_station_id.at(
k)),
1924 m_idHelperSvc->mdtIdHelper().stationPhi(traversed_station_id.at(
k)), traversed_ML.at(
k), 1, 1);
1925 int tubeLayerMax =
m_idHelperSvc->mdtIdHelper().tubeLayerMax(newId);
1926 m_idHelperSvc->mdtIdHelper().get_module_hash(newId, idHash);
1929 int mdtlayer = ((traversed_L.at(
k) - 1) + (traversed_ML.at(
k) - 1) * tubeLayerMax);
1931 int ibin = traversed_tube.at(
k) + mdtlayer *
tubeMax;
1939 it = store_effTubes.find(tmp_effTube_Hit);
1940 if (hit_flag || (
it == store_effTubes.end()))
1941 store_effTubes.insert(tmp_effTube);
1942 it = store_effTubes.find(tmp_effTube_noHit);
1943 if (hit_flag && (
it != store_effTubes.end()))
1944 store_effTubes.erase(
it);
1954 for (
const auto& store_effTube : store_effTubes) {
1958 if (!
sc.isSuccess()) {
1959 ATH_MSG_ERROR(
"Could Not Retrieve MDTChamber w/ ID " << store_effTube.idHash);
1962 if (
chamber->mdt_effEntries)
chamber->mdt_effEntries->Fill(store_effTube.tubeBin);
1963 if (store_effTube.isHit &&
chamber->mdt_effCounts) {
chamber->mdt_effCounts->Fill(store_effTube.tubeBin); }
1971 PVConstLink cv = mydetEl->getMaterialGeom();
1972 int nGrandchildren = cv->getNChildVols();
1973 if (nGrandchildren <= 0)
return;
1975 std::vector<int> tubes;
1976 geoGetIds([&](
int id) { tubes.push_back(
id); }, &*cv);
1977 std::sort(tubes.begin(), tubes.end());
1985 std::vector<Identifier> deadTubes;
1990 int want_id =
layer * maxNTubesPerLayer +
tube;
1991 if (
it != tubes.end() && *
it == want_id) {
1994 it = std::lower_bound(tubes.begin(), tubes.end(), want_id);
1995 if (
it != tubes.end() && *
it == want_id) {
1999 deadTubes.push_back(deadTubeId);
2001 <<
"), name(" <<
name <<
"), multilayerId(" << ml <<
") and identifier "
2002 << deadTubeId <<
" .");
2007 std::sort(deadTubes.begin(), deadTubes.end());