Skip to content
Snippets Groups Projects

UT ChannelID to provide subsector and asic info

Merged Hangyi Wu requested to merge ut-subsector-in-readoutmap into 2024-patches
Files
2
@@ -24,19 +24,23 @@ namespace LHCb::Detector::UT {
/// Bitmasks for UT bitfield that are different from TT/IT
enum struct Mask : unsigned {
strip = 0x1ffL,
sector = 0x200L,
module = 0x1c00L,
face = 0x2000L,
stave = 0x3c000L,
layer = 0xc0000L,
side = 0x100000,
type = 0x600000,
uniquelayer = layer | side,
uniquestave = uniquelayer | stave,
uniqueface = uniquestave | face,
uniquemodule = uniqueface | module,
uniqueSector = uniquemodule | sector
strip = 0x1ffL,
asic = 0x180L,
subsector = 0x100L,
sector = 0x200L,
module = 0x1c00L,
face = 0x2000L,
stave = 0x3c000L,
layer = 0xc0000L,
side = 0x100000,
type = 0x600000,
uniquelayer = layer | side,
uniquestave = uniquelayer | stave,
uniqueface = uniquestave | face,
uniquemodule = uniqueface | module,
uniquesector = uniquemodule | sector,
uniquesubsector = uniquesector | subsector,
uniqueasic = uniquesector | asic
};
template <Mask m>
@@ -68,10 +72,10 @@ namespace LHCb::Detector::UT {
/// constructor with side, halflayer, stave, face, module, sector, strip. New style
ChannelID( const unsigned int iType, const unsigned int iSide, const unsigned int iHalflayer,
const unsigned int iStave, const unsigned int iFace, const unsigned int iModule,
const unsigned int iSubsector, const unsigned int iStrip )
const unsigned int iSector, const unsigned int iStrip )
: ChannelID{shift<Mask::type>( iType ) | shift<Mask::side>( iSide ) | shift<Mask::layer>( iHalflayer ) |
shift<Mask::stave>( iStave ) | shift<Mask::face>( iFace ) | shift<Mask::module>( iModule ) |
shift<Mask::sector>( iSubsector ) | shift<Mask::strip>( iStrip )} {}
shift<Mask::sector>( iSector ) | shift<Mask::strip>( iStrip )} {}
/// cast
constexpr operator unsigned int() const { return m_channelID; }
@@ -85,6 +89,9 @@ namespace LHCb::Detector::UT {
/// Retrieve sector
[[nodiscard]] constexpr unsigned int sector() const { return extract<Mask::sector>( m_channelID ); }
/// Retrieve subsector
[[nodiscard]] constexpr unsigned int subSector() const { return extract<Mask::subsector>( m_channelID ); }
/// Retrieve detRegion
[[nodiscard]] constexpr unsigned int detRegion() const { return stave() < 2 ? 2 : side() == 0 ? 1 : 3; }
@@ -94,6 +101,24 @@ namespace LHCb::Detector::UT {
/// Retrieve unique layer
[[nodiscard]] constexpr unsigned int uniqueLayer() const { return extract<Mask::uniquelayer>( m_channelID ); }
/// Trim to keep until sector part
[[nodiscard]] constexpr unsigned int getFullSector() const {
unsigned int m = (unsigned int)Mask::uniquesector | (unsigned int)Mask::type;
return channelID() & m;
}
/// Trim to keep until subsector part
[[nodiscard]] constexpr unsigned int getFullSubSector() const {
unsigned int m = (unsigned int)Mask::uniquesubsector | (unsigned int)Mask::type;
return channelID() & m;
}
/// Trim to keep until asic part
[[nodiscard]] constexpr unsigned int getFullAsic() const {
unsigned int m = (unsigned int)Mask::uniqueasic | (unsigned int)Mask::type;
return channelID() & m;
}
/// Print method for python NOT NEEDED + SLOW IN C++ use operator<<
[[nodiscard]] std::string toString() const;
@@ -109,11 +134,22 @@ namespace LHCb::Detector::UT {
/// Retrieve strip
[[nodiscard]] constexpr unsigned int strip() const { return extract<Mask::strip>( m_channelID ); }
/// Retrive asic
[[nodiscard]] constexpr unsigned int asic() const { return extract<Mask::asic>( m_channelID ); }
/// Retrieve station
[[nodiscard]] constexpr unsigned int station() const { return ( this->layer() / 2 + 1u ); }
/// Retrieve unique sector
[[nodiscard]] constexpr unsigned int uniqueSector() const { return extract<Mask::uniqueSector>( m_channelID ); }
[[nodiscard]] constexpr unsigned int uniqueSector() const { return extract<Mask::uniquesector>( m_channelID ); }
/// Retrieve unique sub sector
[[nodiscard]] constexpr unsigned int uniqueSubSector() const {
return extract<Mask::uniquesubsector>( m_channelID );
}
/// Retrieve unique asic
[[nodiscard]] constexpr unsigned int uniqueAsic() const { return extract<Mask::uniqueasic>( m_channelID ); }
/// Retrieve side
[[nodiscard]] constexpr unsigned int side() const { return extract<Mask::side>( m_channelID ); }
Loading