ATLAS Offline Software
PixelByteStreamErrorDetectorElementStatusTool.cxx
Go to the documentation of this file.
5 
7 {
9 
10  bool useByteStream = (m_useByteStreamFEI4 || m_useByteStreamFEI3 || m_useByteStreamRD53);
12 
13  static_assert( static_cast<unsigned int>(InDetDD::PixelReadoutTechnology::FEI4) < 32u) ;
14  static_assert( static_cast<unsigned int>(InDetDD::PixelReadoutTechnology::FEI3) < 32u) ;
15  static_assert( static_cast<unsigned int>(InDetDD::PixelReadoutTechnology::RD53) < 32u) ;
19 
20  return StatusCode::SUCCESS;
21 }
22 
23 namespace {
24  inline constexpr bool isBSError(uint64_t error, uint64_t max_error, uint64_t mask) {
25  return error<max_error && (error & mask);
26  }
27 
28 }
29 
30 std::unique_ptr<InDet::SiDetectorElementStatus>
33  std::unique_ptr<InDet::SiDetectorElementStatus> element_status( createDetectorElementStatus(ctx, whandle));
34  std::vector<bool> &status=element_status->getElementStatus();
35  if (status.empty()) {
36  status.resize(m_pixelID->wafer_hash_max(),true );
37  }
38  std::vector<InDet::ChipFlags_t> &chip_status=element_status->getElementChipStatus();
39  if (chip_status.empty()) {
40  chip_status.resize(status.size(),0xffff);
41  }
42 
43  if (whandle) {
44  ATH_MSG_ERROR("PixelByteStreamErrorDetectorStatusTool is not for use with conditions objects");
46  }
47 
50  if (!idcErrCont.isValid()) {
51  ATH_MSG_ERROR("Did not get bytestream error container with key " << m_BSErrContReadKey);
52  }
53  else {
54 
55  const IDCInDetBSErrContainer_Cache *idcCachePtr = idcErrCont->cache();
56 
69 
80 
81  // The index array is defined in PixelRawDataProviderTool::SizeOfIDCInDetBSErrContainer()
82  // Here, 52736 is a separator beween error flags and isActive flags.
83  const bool active_only = m_activeOnly;
84  unsigned int element_offset_i = (active_only ? 52736 : 0);
85 
86  unsigned int element_i=0;
87  unsigned int maxHash = m_pixelID->wafer_hash_max();
88 
89  constexpr uint64_t missingErrorInfo{std::numeric_limits<uint64_t>::max()-3000000000};
90 
91  for (const InDetDD::SiDetectorElement *element : element_status->getDetectorElements()) {
92  const InDetDD::PixelModuleDesign *p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
93  InDetDD::PixelReadoutTechnology readout_technology = p_design->getReadoutTechnology();
94  unsigned int readout_technology_flags = m_readoutTechnologyMask & Pixel::makeReadoutTechnologyBit(readout_technology);
95 
96  // set to false if has one of the considered errors and the readout technology is considered.
97  status.at(element_i) = status.at(element_i) && not ( readout_technology_flags
98  && ( !active_only
99  ? isBSError(static_cast<uint64_t>(idcCachePtr->retrieve(element_i)), missingErrorInfo, error_mask)
100  : idcCachePtr->retrieve(element_i+element_offset_i)!=1 ));
101 
102  // compute the status for the individual front-ends
103  if (status[element_i]) {
104  unsigned int number_of_chips = readout_technology == InDetDD::PixelReadoutTechnology::FEI3 ? 2*p_design->numberOfCircuits() : p_design->numberOfCircuits();
105  InDet::ChipFlags_t chip_mask = status[element_i] ? (1ul<<number_of_chips)-1ul : 0;
106  assert( chip_mask != 0 );
107  InDet::ChipFlags_t bs_status_flags = active_only ? chip_mask : 0;
108  if (!active_only) {
109  for (unsigned int chip_i =0; chip_i < number_of_chips; ++chip_i) {
110  // get bytestream error for chip
111  unsigned int indexFE = (1+chip_i)*maxHash + element_i; // (FE_channel+1)*2048 + moduleHash
112  InDet::ChipFlags_t chip_flag =not ( readout_technology_flags
113  && (isBSError(static_cast<uint64_t>(idcCachePtr->retrieve(indexFE)), missingErrorInfo, chip_error_mask)));
114  bs_status_flags |= (chip_flag << chip_i);
115  }
116  }
117  chip_status[element_i] &= (bs_status_flags & chip_mask);
118  }
119  else {
120  chip_status[element_i] = 0;
121  }
122  ++element_i;
123  }
124  }
125  }
126 
127  return element_status;
128 }
PixelFEUtils.h
InDetDD::PixelReadoutTechnology
PixelReadoutTechnology
Definition: PixelReadoutDefinitions.h:28
InDet::SiDetectorElementStatus::getElementStatus
const std::vector< bool > & getElementStatus() const
Definition: SiDetectorElementStatus.h:116
max
#define max(a, b)
Definition: cfImp.cxx:41
PixelByteStreamErrorDetectorElementStatusTool::m_useByteStreamFEI4
Gaudi::Property< bool > m_useByteStreamFEI4
Definition: PixelByteStreamErrorDetectorElementStatusTool.h:32
InDetDD::PixelModuleDesign
Definition: PixelModuleDesign.h:48
PixelByteStreamErrorDetectorElementStatusTool::m_readoutTechnologyMask
unsigned int m_readoutTechnologyMask
Mask where each bit represents a readout technology;.
Definition: PixelByteStreamErrorDetectorElementStatusTool.h:43
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
PixelDetectorElementStatusToolBase::m_pixelID
const PixelID * m_pixelID
Definition: PixelDetectorElementStatusToolBase.h:39
PixelByteStreamErrorDetectorElementStatusTool::m_BSErrContReadKey
SG::ReadHandleKey< IDCInDetBSErrContainer > m_BSErrContReadKey
Definition: PixelByteStreamErrorDetectorElementStatusTool.h:29
Pixel::makeReadoutTechnologyBit
unsigned int makeReadoutTechnologyBit(InDetDD::PixelReadoutTechnology technology, unsigned int bit_val=1)
Create a word with a bit representing the given readout technology to the given value.
Definition: PixelFEUtils.h:60
PixelByteStreamErrorDetectorElementStatusTool::m_activeOnly
Gaudi::Property< bool > m_activeOnly
Definition: PixelByteStreamErrorDetectorElementStatusTool.h:41
PixelByteStreamErrors::MCCBCIDEoECheck
@ MCCBCIDEoECheck
Definition: PixelByteStreamErrors.h:15
InDetDD::PixelReadoutTechnology::FEI3
@ FEI3
PixelByteStreamErrorDetectorElementStatusTool::m_useByteStreamRD53
Gaudi::Property< bool > m_useByteStreamRD53
Definition: PixelByteStreamErrorDetectorElementStatusTool.h:38
PixelByteStreamErrors::makeError
constexpr IDCInDetBSErrContainer::ErrorCode makeError(PixelErrorsEnum errType)
helper to be used in clients to fetch error information
Definition: PixelByteStreamErrors.h:21
PixelByteStreamErrorDetectorElementStatusTool::m_useByteStreamFEI3
Gaudi::Property< bool > m_useByteStreamFEI3
Definition: PixelByteStreamErrorDetectorElementStatusTool.h:35
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
IdentifiableValueContainer::cache
const Cache * cache() const
Obtain const access to the cache.
Definition: IdentifiableValueContainer.h:77
Trk::u
@ u
Enums for curvilinear frames.
Definition: ParamDefs.h:83
PixelByteStreamErrors::TimeOut
@ TimeOut
Definition: PixelByteStreamErrors.h:13
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
IdentifiableValueCache::retrieve
T retrieve(size_t i)
Retrieve the Value stored in that hash.
Definition: IdentifiableValueCache.h:49
InDetDD::PixelReadoutTechnology::RD53
@ RD53
PixelByteStreamErrors::BCID
@ BCID
Definition: PixelByteStreamErrors.h:13
PixelByteStreamErrorDetectorElementStatusTool.h
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
PixelByteStreamErrors::Preamble
@ Preamble
Definition: PixelByteStreamErrors.h:13
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
IDetectorElementStatusTool::getInvalidRange
static EventIDRange getInvalidRange()
Definition: IDetectorElementStatusTool.h:33
InDetDD::PixelModuleDesign::numberOfCircuits
int numberOfCircuits() const
Total number of circuits:
Definition: PixelModuleDesign.h:297
PixelByteStreamErrors::MCCLVL1IDEoECheck
@ MCCLVL1IDEoECheck
Definition: PixelByteStreamErrors.h:15
PixelDetectorElementStatusToolBase::createDetectorElementStatus
std::unique_ptr< InDet::SiDetectorElementStatus > createDetectorElementStatus(const EventContext &ctx, SG::WriteCondHandle< InDet::SiDetectorElementStatus > *whandle) const
Create a new detector element status element container.
Definition: PixelDetectorElementStatusToolBase.cxx:34
xAOD::uint64_t
uint64_t
Definition: EventInfo_v1.cxx:123
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
SG::VarHandleKey::initialize
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:103
PixelByteStreamErrors::MaskedROB
@ MaskedROB
Definition: PixelByteStreamErrors.h:14
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
PixelByteStreamErrorDetectorElementStatusTool::getDetectorElementStatus
virtual std::unique_ptr< InDet::SiDetectorElementStatus > getDetectorElementStatus(const EventContext &ctx, SG::WriteCondHandle< InDet::SiDetectorElementStatus > *whandle) const override
Definition: PixelByteStreamErrorDetectorElementStatusTool.cxx:31
PixelByteStreamErrors::MCCHitOverflow
@ MCCHitOverflow
Definition: PixelByteStreamErrors.h:15
PixelByteStreamErrors::MCCLVL1IDCheck
@ MCCLVL1IDCheck
Definition: PixelByteStreamErrors.h:15
PixelByteStreamErrors::MCCEoEOverflow
@ MCCEoEOverflow
Definition: PixelByteStreamErrors.h:15
PixelByteStreamErrorDetectorElementStatusTool::initialize
virtual StatusCode initialize() override
Definition: PixelByteStreamErrorDetectorElementStatusTool.cxx:6
InDet::SiDetectorElementStatus::getDetectorElements
const std::vector< InDetDD::SiDetectorElement * > & getDetectorElements() const
Definition: SiDetectorElementStatus.h:94
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
PixelID::wafer_hash_max
size_type wafer_hash_max(void) const
Definition: PixelID.cxx:912
InDetDD::PixelReadoutTechnology::FEI4
@ FEI4
InDetDD::PixelModuleDesign::getReadoutTechnology
PixelReadoutTechnology getReadoutTechnology() const
Definition: PixelModuleDesign.h:368
PixelModuleDesign.h
InDet::SiDetectorElementStatus::getElementChipStatus
const std::vector< ChipFlags_t > & getElementChipStatus() const
Definition: SiDetectorElementStatus.h:118
InDet::ChipFlags_t
unsigned short ChipFlags_t
Definition: SiDetectorElementStatus.h:60
merge.status
status
Definition: merge.py:17
PixelByteStreamErrors.h
error
Definition: IImpactPoint3dEstimator.h:70
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
IdentifiableValueCache
This class is to provide an event wide MT container for concurrent storing of basic types,...
Definition: IdentifiableValueCache.h:19
PixelByteStreamErrors::TruncatedROB
@ TruncatedROB
Definition: PixelByteStreamErrors.h:14
PixelByteStreamErrors::Trailer
@ Trailer
Definition: PixelByteStreamErrors.h:13
PixelDetectorElementStatusToolBase::initialize
virtual StatusCode initialize() override
Definition: PixelDetectorElementStatusToolBase.cxx:15
SG::WriteCondHandle::addDependency
void addDependency(const EventIDRange &range)
Definition: WriteCondHandle.h:275
PixelByteStreamErrors::LVL1ID
@ LVL1ID
Definition: PixelByteStreamErrors.h:13