diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/CMakeLists.txt b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/CMakeLists.txt index 01e6fd278550eeff198aa45442fd5b085ee83456..a3157ef0f81f6b90c13b73be6d419c29afce245c 100644 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/CMakeLists.txt +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/CMakeLists.txt @@ -16,6 +16,7 @@ atlas_depends_on_subdirs( PUBLIC Tracking/TrkEvent/TrkSegment PRIVATE DetectorDescription/Identifier + DetectorDescription/GeoModel/GeoModelUtilities Event/xAOD/xAODEventInfo Event/xAOD/xAODTrigger GaudiKernel @@ -37,7 +38,7 @@ atlas_add_component( MdtRawDataMonitoring src/*.cxx src/components/*.cxx INCLUDE_DIRS ${ROOT_INCLUDE_DIRS} - LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps AthenaMonitoringLib EventInfo MuonIdHelpersLib MuonPrepRawData MuonDQAUtilsLib TrkSegment Identifier xAODEventInfo xAODTrigger GaudiKernel MdtCalibFitters MuonCalibIdentifier MuonReadoutGeometry MuonRIO_OnTrack MuonSegment AnalysisTriggerEvent LWHists TrkEventPrimitives ) + LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaBaseComps AthenaMonitoringLib EventInfo MuonIdHelpersLib MuonPrepRawData MuonDQAUtilsLib TrkSegment Identifier xAODEventInfo xAODTrigger GaudiKernel MdtCalibFitters MuonCalibIdentifier MuonReadoutGeometry MuonRIO_OnTrack MuonSegment AnalysisTriggerEvent LWHists TrkEventPrimitives GeoModelUtilities ) # Install files from the package: atlas_install_headers( MdtRawDataMonitoring ) diff --git a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx index 1e10ab06aeb2c2b346a8422dee45aab8eea8eaf4..4b4a0172554e9a153df89d9e6059d96b321959a1 100755 --- a/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx +++ b/MuonSpectrometer/MuonValidation/MuonDQA/MuonRawDataMonitoring/MdtRawDataMonitoring/src/MdtRawDataValAlg.cxx @@ -46,6 +46,7 @@ #include "TrkTrack/TrackCollection.h" #include "TrkTrack/Track.h" +#include "GeoModelUtilities/GeoGetIds.h" #include "GaudiKernel/MsgStream.h" //root includes @@ -2289,6 +2290,10 @@ void MdtRawDataValAlg::initDeadChannels(const MuonGM::MdtReadoutElement* mydetEl int nGrandchildren = cv->getNChildVols(); if(nGrandchildren <= 0) return; + std::vector<int> tubes; + geoGetIds ([&] (int id) { tubes.push_back (id); }, &*cv); + std::sort (tubes.begin(), tubes.end()); + Identifier detElId = mydetEl->identify(); int name = m_muonIdHelperTool->mdtIdHelper().stationName(detElId); @@ -2297,24 +2302,25 @@ void MdtRawDataValAlg::initDeadChannels(const MuonGM::MdtReadoutElement* mydetEl int ml = m_muonIdHelperTool->mdtIdHelper().multilayer(detElId); std::vector<Identifier> deadTubes; + std::vector<int>::iterator it = tubes.begin(); for(int layer = 1; layer <= mydetEl->getNLayers(); layer++){ for(int tube = 1; tube <= mydetEl->getNtubesperlayer(); tube++){ - bool tubefound = false; - for(unsigned int kk=0; kk < cv->getNChildVols(); kk++) { - int tubegeo = cv->getIdOfChildVol(kk) % 100; - int layergeo = ( cv->getIdOfChildVol(kk) - tubegeo ) / 100; - if( tubegeo == tube && layergeo == layer ) { - tubefound=true; - break; - } - if( layergeo > layer ) break; // don't loop any longer if you cannot find tube anyway anymore + int want_id = layer*100 + tube; + if (it != tubes.end() && *it == want_id) { + ++it; } - if(!tubefound) { - Identifier deadTubeId = m_muonIdHelperTool->mdtIdHelper().channelID( name, eta, phi, ml, layer, tube ); - deadTubes.push_back( deadTubeId ); - ATH_MSG_VERBOSE("adding dead tube (" << tube << "), layer(" << layer - << "), phi(" << phi << "), eta(" << eta << "), name(" << name - << "), multilayerId(" << ml << ") and identifier " << deadTubeId <<" ."); + else { + it = std::lower_bound (tubes.begin(), tubes.end(), want_id); + if (it != tubes.end() && *it == want_id) { + ++it; + } + else { + Identifier deadTubeId = m_muonIdHelperTool->mdtIdHelper().channelID( name, eta, phi, ml, layer, tube ); + deadTubes.push_back( deadTubeId ); + ATH_MSG_VERBOSE("adding dead tube (" << tube << "), layer(" << layer + << "), phi(" << phi << "), eta(" << eta << "), name(" << name + << "), multilayerId(" << ml << ") and identifier " << deadTubeId <<" ."); + } } } }