ATLAS Offline Software
TileDigitsGainFilter.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 //*****************************************************************************
6 // Filename : TileDigitsGainFilter.cxx
7 //
8 // DESCRIPTION
9 //
10 // Copy TileDigits and TileRawChannel from input container to output container
11 //
12 // HISTORY:
13 //
14 // BUGS:
15 //
16 //*****************************************************************************
17 
18 // Tile includes
23 
24 // Atlas includes
26 #include "StoreGate/ReadHandle.h"
27 #include "StoreGate/WriteHandle.h"
28 
29 //C++ STL includes
30 #include <vector>
31 
32 //
33 // Alg standard initialize function
34 //
36 
38 
41 
42  ATH_MSG_INFO( "Input digits container: '" << m_inputContainerKey
43  << "' output container: '" << m_outputContainerKey << "'" );
44 
45 
46  ATH_MSG_INFO( "Threshold to check overflowed in HG: " << m_threshold);
47  ATH_MSG_INFO( "initialization completed" );
48 
49  return StatusCode::SUCCESS;
50 }
51 
52 
53 /*==========================================================================*/
54 //
55 // Begin Execution Phase.
56 //
57 StatusCode TileDigitsGainFilter::execute(const EventContext& ctx) const {
58 
60  ATH_CHECK( inputContainer.isValid() );
61 
62  // Create new container for filtered digits
63  auto outputContainer = std::make_unique<TileDigitsContainer>(false, SG::VIEW_ELEMENTS);
64  outputContainer->set_unit(inputContainer->get_unit());
65  outputContainer->set_type(inputContainer->get_type());
66  outputContainer->set_bsflags(inputContainer->get_bsflags());
67 
68  const TileDigits* digits[2][48] = {{0}}; // 2 gains and 48 channels
69 
70  TileDigitsContainer::const_iterator collIt = inputContainer->begin();
71  TileDigitsContainer::const_iterator collEnd = inputContainer->end();
72  for (; collIt != collEnd; ++collIt) {
73  const TileDigitsCollection* digitsCollection = *collIt;
74 
75  memset(digits, 0, sizeof(digits));
76 
77  for (const TileDigits* tile_digits : *digitsCollection) {
78 
79  HWIdentifier adcId = tile_digits->adc_HWID();
80  int channel = m_tileHWID->channel(adcId);
81  int gain = m_tileHWID->adc(adcId);
82  digits[gain][channel] = tile_digits;
83 
84  }
85 
86  uint32_t lvl1Id = digitsCollection->getLvl1Id();
87  uint32_t lvl1Type = digitsCollection->getLvl1Type();
88  uint32_t detEvType = digitsCollection->getDetEvType();
89  uint32_t rodBCID = digitsCollection->getRODBCID();
90 
91  const std::vector<uint32_t>& fragChipCRCWords = digitsCollection->getFragChipCRCWords();
92  const std::vector<uint32_t>& fragChipCRCWordsHigh = digitsCollection->getFragChipCRCWordsHigh();
93  const std::vector<uint32_t>& fragChipHeaderWords = digitsCollection->getFragChipHeaderWords();
94  const std::vector<uint32_t>& fragChipHeaderWordsHigh = digitsCollection->getFragChipHeaderWordsHigh();
95  const std::vector<uint32_t>& fragExtraWords = digitsCollection->getFragExtraWords();
96 
97  uint32_t fragSize = digitsCollection->getFragSize();
98  uint32_t fragBCID = digitsCollection->getFragBCID();
99 
100  auto outColl = std::make_unique<ConstDataVector<TileDigitsCollection> > (SG::VIEW_ELEMENTS, digitsCollection->identify(),
101  lvl1Id, lvl1Type, detEvType, rodBCID,
102  fragChipCRCWords, fragChipCRCWordsHigh,
103  fragChipHeaderWords, fragChipHeaderWordsHigh,
104  fragExtraWords, fragSize, fragBCID);
105  outColl->reserve (TileCalibUtils::MAX_CHAN);
106 
107  for (unsigned int channel = 0; channel < TileCalibUtils::MAX_CHAN; ++channel) {
108 
109  const TileDigits* loGainDigits = digits[0][channel];
110  const TileDigits* hiGainDigits = digits[1][channel];
111 
112  if (hiGainDigits && loGainDigits) {
113  const std::vector<float> digits = hiGainDigits->samples();
114  auto minMaxDigits = std::minmax_element(digits.begin(), digits.end());
115  float maxDigit = *minMaxDigits.second;
116 
117  if (maxDigit < m_threshold) {
118  ATH_MSG_VERBOSE("Save HG: " << (std::string) *hiGainDigits);
119  outColl->push_back(hiGainDigits);
120  } else {
121  ATH_MSG_VERBOSE("Overflowed HG: " << (std::string) *hiGainDigits);
122  ATH_MSG_VERBOSE("Save LG: " << (std::string) *loGainDigits);
123  outColl->push_back(loGainDigits);
124  }
125  } else if (loGainDigits) {
126  ATH_MSG_VERBOSE("Save LG (only available): " << (std::string) *loGainDigits);
127  outColl->push_back(loGainDigits);
128  } else if (hiGainDigits) {
129  ATH_MSG_VERBOSE("Save HG (only available): " << (std::string) *hiGainDigits);
130  outColl->push_back(hiGainDigits);
131  }
132 
133  }
134  ATH_CHECK( outputContainer->addCollection (outColl.release()->asDataVector(), collIt.hashId()) );
135  }
136 
138  ATH_CHECK( outputDigitsContainer.record(std::move(outputContainer)) );
139 
140  return StatusCode::SUCCESS;
141 }
142 
143 
145 
146  ATH_MSG_DEBUG( "in finalize()" );
147 
148  return StatusCode::SUCCESS;
149 }
150 
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TileDigitsGainFilter::m_outputContainerKey
SG::WriteHandleKey< TileDigitsContainer > m_outputContainerKey
Definition: TileDigitsGainFilter.h:58
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:28
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
TileDigitsGainFilter.h
SG::VIEW_ELEMENTS
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
Definition: OwnershipPolicy.h:18
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
ConstDataVector.h
DataVector adapter that acts like it holds const pointers.
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
CaloCondBlobAlgs_fillNoiseFromASCII.gain
gain
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:110
TileCalibUtils.h
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
HWIdentifier
Definition: HWIdentifier.h:13
TileHWID::channel
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition: TileHWID.h:189
AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore
const ServiceHandle< StoreGateSvc > & detStore() const
The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
Definition: AthCommonDataStore.h:95
WriteHandle.h
Handle class for recording to StoreGate.
TileHWID::adc
int adc(const HWIdentifier &id) const
extract adc field from HW identifier
Definition: TileHWID.h:193
TileHWID.h
TileDigitsContainer.h
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
ATH_MSG_DEBUG
#define ATH_MSG_DEBUG(x)
Definition: AthMsgStreamMacros.h:29
TileRawDataContainer::get_bsflags
uint32_t get_bsflags() const
Definition: TileRawDataContainer.h:64
TileDigitsGainFilter::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileDigitsGainFilter.h:64
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
IdentifiableContainerMT::end
const_iterator end() const
return const_iterator for end of container
Definition: IdentifiableContainerMT.h:242
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
IdentifiableContainerMT::const_iterator
Definition: IdentifiableContainerMT.h:82
IdentifiableContainerMT::begin
const_iterator begin() const
return const_iterator for first entry
Definition: IdentifiableContainerMT.h:236
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
TileDigitsGainFilter::m_threshold
Gaudi::Property< int > m_threshold
Definition: TileDigitsGainFilter.h:61
TileDigits::samples
const std::vector< float > & samples() const
Definition: TileDigits.h:58
SG::ReadHandle::isValid
virtual bool isValid() override final
Can the handle be successfully dereferenced?
TileDigitsCollection
Definition: TileDigitsCollection.h:18
IdentifiableContainerMT::const_iterator::hashId
IdentifierHash hashId() const
hashId of the pointed-to element
Definition: IdentifiableContainerMT.h:130
TileDigits
Definition: TileDigits.h:30
TileDigitsGainFilter::finalize
StatusCode finalize() override
finalize method
Definition: TileDigitsGainFilter.cxx:144
TileRawDataContainer::get_type
TYPE get_type() const
Definition: TileRawDataContainer.h:62
SG::WriteHandle
Definition: StoreGate/StoreGate/WriteHandle.h:76
SG::WriteHandle::record
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
TileRawDataContainer::get_unit
UNIT get_unit() const
Definition: TileRawDataContainer.h:60
TileDigitsGainFilter::execute
StatusCode execute(const EventContext &ctx) const override
execute method
Definition: TileDigitsGainFilter.cxx:57
ReadHandle.h
Handle class for reading from StoreGate.
TileCalibUtils::MAX_CHAN
static const unsigned int MAX_CHAN
Number of channels in drawer.
Definition: TileCalibUtils.h:141
TileDigitsGainFilter::initialize
StatusCode initialize() override
initialize method
Definition: TileDigitsGainFilter.cxx:35
TileDigitsGainFilter::m_inputContainerKey
SG::ReadHandleKey< TileDigitsContainer > m_inputContainerKey
Definition: TileDigitsGainFilter.h:55