diff --git a/Detector/FT/include/Detector/FT/FTUtils.h b/Detector/FT/include/Detector/FT/FTUtils.h index 5e752a430a7f35d041c550c8518e3c41ec5702ef..f4be0998396ec5a2a63db724dbdf8042b90655cc 100644 --- a/Detector/FT/include/Detector/FT/FTUtils.h +++ b/Detector/FT/include/Detector/FT/FTUtils.h @@ -19,8 +19,8 @@ namespace FTConstants = LHCb::Detector::FT; namespace LHCb::Detector { namespace FTUtils { - /// From global module-ID, retrieve "local" coordinates in a string format useful for monitoring - std::string globalModuleToLocalString( const unsigned int globalModuleIdx ) { + /// From global module-ID, return a channel ID + inline auto globalModuleToChannelID( const unsigned int globalModuleIdx ) { unsigned int station, layer, quarter, module, temp_id, temp_station, nModules; //---LoH: Detector!442 station = globalModuleIdx / ( 5 * FTConstants::nQuarters * FTConstants::nLayers ); @@ -43,13 +43,20 @@ namespace LHCb::Detector { module = temp_id - nModules * ( quarter + FTConstants::nQuarters * ( layer + temp_station * FTConstants::nLayers ) ); station = station + 1; + return FTChannelID( FTChannelID::StationID{ station }, FTChannelID::LayerID{ layer }, + FTChannelID::QuarterID{ quarter }, FTChannelID::ModuleID{ module }, 0, 0, 0 ); + } + /// From global module-ID, retrieve "local" coordinates in a string format useful for monitoring + inline std::string globalModuleToLocalString( const unsigned int globalModuleIdx ) { + auto id = globalModuleToChannelID( globalModuleIdx ); /// Return a string - return fmt::format( "T{}L{}Q{}M{}", station, layer, quarter, module ); + return fmt::format( "T{}L{}Q{}M{}", int( id.station() ), int( id.layer() ), int( id.quarter() ), + int( id.module() ) ); } /// From global quarter-ID, retrieve "local" coordinates in a string format useful for monitoring - std::string globalQuarterToLocalString( const unsigned int globalQuarterIdx ) { + inline std::string globalQuarterToLocalString( const unsigned int globalQuarterIdx ) { unsigned int station, layer, quarter; /// Retrieve the local coordinates @@ -63,7 +70,7 @@ namespace LHCb::Detector { } /// From "local" coordinates in a string format, retrieve global module ID. - unsigned int fromLocalStringToGlobalModule( const std::string local_coords ) { + inline unsigned int fromLocalStringToGlobalModule( const std::string local_coords ) { int count = 0; unsigned int temp_arr[4] = { 0 }; diff --git a/Detector/FT/src/DeFT.cpp b/Detector/FT/src/DeFT.cpp index dfda430d11ed983ab265ba3e2f8335123aa5c948..62fe93e4da342ce72cca1615c2191d02c3c829e4 100644 --- a/Detector/FT/src/DeFT.cpp +++ b/Detector/FT/src/DeFT.cpp @@ -214,8 +214,12 @@ LHCb::Detector::detail::DeFTMatObject::DeFTMatObject( const dd4hep::DetElement& const std::string contractionConditionName = getContractionConditionName(); m_matContractionCondition = ctxt.condition( dd4hep::ConditionKey::KeyMaker( deFT, "matContraction" ).hash ); auto& params = m_matContractionCondition.get(); - if ( params.find( contractionConditionName ) != params.end() ) { - m_matContractionParameterVector = params[contractionConditionName].get>(); + if ( auto it = params.find( contractionConditionName ); it != params.end() ) { + m_matContractionParameterVector = it->get>(); + if ( m_matContractionParameterVector.size() != FTConstants::nChannels * FTConstants::nSiPM ) { + dd4hep::printout( dd4hep::ERROR, "Length of MatContractionParameterVector is incorrect %s", + std::to_string( m_matContractionParameterVector.size() ).c_str() ); + } } else { dd4hep::printout( dd4hep::DEBUG, "Unable to find FT condition %s. It will not be possible to correct for temperature distortions.",