diff --git a/Control/AthAllocators/AthAllocators/ATLAS_CHECK_THREAD_SAFETY b/Control/AthAllocators/AthAllocators/ATLAS_CHECK_THREAD_SAFETY old mode 100644 new mode 100755 diff --git a/Control/AthContainersRoot/share/AuxStoreRoot_test.ref b/Control/AthContainersRoot/share/AuxStoreRoot_test.ref old mode 100644 new mode 100755 diff --git a/Control/AthenaKernel/AthenaKernel/ATLAS_CHECK_THREAD_SAFETY b/Control/AthenaKernel/AthenaKernel/ATLAS_CHECK_THREAD_SAFETY old mode 100644 new mode 100755 diff --git a/Control/AthenaKernel/share/ClassName_test.ref b/Control/AthenaKernel/share/ClassName_test.ref old mode 100755 new mode 100644 diff --git a/Control/DataModelRoot/DataModelRoot/ATLAS_CHECK_THREAD_SAFETY b/Control/DataModelRoot/DataModelRoot/ATLAS_CHECK_THREAD_SAFETY old mode 100644 new mode 100755 diff --git a/Control/SGMon/SGAudCore/SGAudCore/ATLAS_CHECK_THREAD_SAFETY b/Control/SGMon/SGAudCore/SGAudCore/ATLAS_CHECK_THREAD_SAFETY old mode 100644 new mode 100755 diff --git a/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerTools/MdtSegmentT0Fitter/doc/packagedoc.h b/MuonSpectrometer/MuonReconstruction/MuonSegmentMakers/MuonSegmentMakerTools/MdtSegmentT0Fitter/doc/packagedoc.h old mode 100644 new mode 100755 diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MdtDataPreparator.h b/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MdtDataPreparator.h index 42b19a6a98d86d977a1439a9565afbffec08b689..6f000350af2161f850c01e8738f73a850b20daf8 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MdtDataPreparator.h +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/TrigL2MuonSA/MdtDataPreparator.h @@ -115,6 +115,8 @@ namespace TrigL2MuonSA { TrigL2MuonSA::MdtHits& mdtHits, const TrigL2MuonSA::MuonRoad& muonRoad); + void initDeadChannels(const MuonGM::MdtReadoutElement* mydetEl); + private: // Reference to StoreGateSvc; @@ -151,6 +153,9 @@ namespace TrigL2MuonSA { bool m_use_mdtcsm; bool m_use_RoIBasedDataAccess; + bool m_BMGpresent; + int m_BMGid; + std::map<Identifier, std::vector<Identifier> > m_DeadChannels; }; diff --git a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx index d7b39cb53a3dfc132ba51a5f66f2adad28dd8e1a..529bd932bc4baf024592aca43968d826aa234a32 100644 --- a/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx +++ b/Trigger/TrigAlgorithms/TrigL2MuonSA/src/MdtDataPreparator.cxx @@ -31,8 +31,6 @@ #include "MuonCablingData/MuonMDT_CablingMap.h" #include "MuonCablingData/MdtSubdetectorMap.h" #include "MuonCablingData/MdtCsmMap.h" -#include "MuonReadoutGeometry/MuonDetectorManager.h" -#include "MuonReadoutGeometry/MdtReadoutElement.h" #include "MuonReadoutGeometry/MuonStation.h" #include "MuonIdHelpers/MdtIdHelper.h" @@ -62,7 +60,9 @@ TrigL2MuonSA::MdtDataPreparator::MdtDataPreparator(const std::string& type, m_regionSelector(0), m_robDataProvider(0), m_recMuonRoIUtils(), m_mdtRegionDefiner("TrigL2MuonSA::MdtRegionDefiner"), m_mdtPrepDataProvider("Muon::MdtRdoToPrepDataTool/MdtPrepDataProviderTool"), - m_use_mdtcsm(true) + m_use_mdtcsm(true), + m_BMGpresent(false), + m_BMGid(-1) { declareInterface<TrigL2MuonSA::MdtDataPreparator>(this); @@ -179,6 +179,25 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::initialize() return sc ; } ATH_MSG_DEBUG("Retrieved ActiveStoreSvc."); + + m_BMGpresent = m_mdtIdHelper->stationNameIndex("BMG") != -1; + if(m_BMGpresent){ + ATH_MSG_INFO("Processing configuration for layouts with BMG chambers."); + m_BMGid = m_mdtIdHelper->stationNameIndex("BMG"); + for(int phi=6; phi<8; phi++) { // phi sectors - BMGs are ony in (6 aka 12) and (7 aka 14) + for(int eta=1; eta<4; eta++) { // eta sectors - BMGs are in eta 1 to 3 + for(int side=-1; side<2; side+=2) { // side - both sides have BMGs + if( !m_muonMgr->getMuonStation("BMG", side*eta, phi) ) continue; + for(int roe=1; roe<=( m_muonMgr->getMuonStation("BMG", side*eta, phi) )->nMuonReadoutElements(); roe++) { // iterate on readout elemets + const MuonGM::MdtReadoutElement* mdtRE = + dynamic_cast<const MuonGM::MdtReadoutElement*> ( ( m_muonMgr->getMuonStation("BMG", side*eta, phi) )->getMuonReadoutElement(roe) ); // has to be an MDT + if(mdtRE) initDeadChannels(mdtRE); + } + } + } + } + } + // return StatusCode::SUCCESS; @@ -637,9 +656,23 @@ bool TrigL2MuonSA::MdtDataPreparator::decodeMdtCsm(const MdtCsm* csm, if (st=='M' && chamberType[2]=='E') chamber = xAOD::L2MuonParameters::Chamber::BME; if (st=='M' && chamberType[2]=='G') chamber = xAOD::L2MuonParameters::Chamber::Backup; } - - double R = m_mdtReadout->center(TubeLayer, Tube).perp(); - double Z = m_mdtReadout->center(TubeLayer, Tube).z(); + + double R = -99999., Z = -99999.; + if(m_BMGpresent) { + Identifier tubeId = m_mdtIdHelper->channelID(StationName, StationEta, StationPhi, MultiLayer, Layer, Tube); + if(m_mdtIdHelper->stationName(tubeId) == m_BMGid ) { + std::map<Identifier, std::vector<Identifier> >::iterator myIt = m_DeadChannels.find( m_muonMgr->getMdtReadoutElement(tubeId)->identify() ); + if( myIt != m_DeadChannels.end() ){ + if( std::find( (myIt->second).begin(), (myIt->second).end(), tubeId) != (myIt->second).end() ) { + ATH_MSG_DEBUG("Skipping tube with identifier " << m_mdtIdHelper->show_to_string(tubeId) ); + ++amt; + continue; + } + } + } + } + R = m_mdtReadout->center(TubeLayer, Tube).perp(); + Z = m_mdtReadout->center(TubeLayer, Tube).z(); Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*m_muonStation->getNominalAmdbLRSToGlobal()); if(m_muonStation->endcap()==0){ @@ -1018,9 +1051,19 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::collectMdtHitsFromPrepData(const std if (st=='M' && chamberType[2]=='E') chamber = xAOD::L2MuonParameters::Chamber::BME; if (st=='M' && chamberType[2]=='G') chamber = xAOD::L2MuonParameters::Chamber::Backup; } - - double R = m_mdtReadout->center(TubeLayer, Tube).perp(); - double Z = m_mdtReadout->center(TubeLayer, Tube).z(); + + double R = -99999., Z = -99999.; + if(m_BMGpresent && m_mdtIdHelper->stationName(id) == m_BMGid ) { + std::map<Identifier, std::vector<Identifier> >::iterator myIt = m_DeadChannels.find( m_muonMgr->getMdtReadoutElement(id)->identify() ); + if( myIt != m_DeadChannels.end() ){ + if( std::find( (myIt->second).begin(), (myIt->second).end(), id) != (myIt->second).end() ) { + ATH_MSG_DEBUG("Skipping tube with identifier " << m_mdtIdHelper->show_to_string(id) ); + continue; + } + } + } + R = m_mdtReadout->center(TubeLayer, Tube).perp(); + Z = m_mdtReadout->center(TubeLayer, Tube).z(); Amg::Transform3D trans = Amg::CLHEPTransformToEigen(*m_muonStation->getNominalAmdbLRSToGlobal()); if(m_muonStation->endcap()==0){ @@ -1125,3 +1168,45 @@ StatusCode TrigL2MuonSA::MdtDataPreparator::finalize() // -------------------------------------------------------------------------------- // -------------------------------------------------------------------------------- + +void TrigL2MuonSA::MdtDataPreparator::initDeadChannels(const MuonGM::MdtReadoutElement* mydetEl) { + PVConstLink cv = mydetEl->getMaterialGeom(); // it is "Multilayer" + int nGrandchildren = cv->getNChildVols(); + if(nGrandchildren <= 0) return; + + Identifier detElId = mydetEl->identify(); + + int name = m_mdtIdHelper->stationName(detElId); + int eta = m_mdtIdHelper->stationEta(detElId); + int phi = m_mdtIdHelper->stationPhi(detElId); + int ml = m_mdtIdHelper->multilayer(detElId); + std::vector<Identifier> deadTubes; + + 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 + } + if(!tubefound) { + Identifier deadTubeId = m_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 <<" ."); + } + } + } + std::sort(deadTubes.begin(), deadTubes.end()); + m_DeadChannels[detElId] = deadTubes; + return; +} + +// -------------------------------------------------------------------------------- +// -------------------------------------------------------------------------------- diff --git a/Trigger/TrigSteer/ViewAlgs/src/SplitViewPerRoI.cxx b/Trigger/TrigSteer/ViewAlgs/src/SplitViewPerRoI.cxx old mode 100644 new mode 100755