ATLAS Offline Software
TileRawChannelTimeMonitorAlgorithm.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4 
8 
9 #include "StoreGate/ReadHandle.h"
11 
13 
14  ATH_MSG_DEBUG("in initialize()");
15 
16  // initialize superclass
18 
20 
21  ATH_CHECK( m_cablingSvc.retrieve() );
22  m_cabling = m_cablingSvc->cablingService();
23 
29 
30  using Tile = TileCalibUtils;
31  using namespace Monitored;
32  const int nDigitizers = 8;
33 
34  m_timeGroups = buildToolMap<int>(m_tools, "TileAverageTime", Tile::MAX_ROS - 1);
35  m_uncorrTimeGroups = buildToolMap<int>(m_tools, "TileAverageUncorrectedTime", Tile::MAX_ROS - 1);
36  m_timeLBGroups = buildToolMap<int>(m_tools, "TileAverageTimeLB", Tile::MAX_ROS - 1);
37  m_timeDiffLBGroups = buildToolMap<int>(m_tools, "TileAverageTimeDifferenceLB", m_partitionTimeDifferencePairs.size());
38  m_digiTimeLBGroups = buildToolMap<std::vector<std::vector<int>>>(m_tools, "TileDigitizerTimeLB",
39  Tile::MAX_ROS - 1, Tile::MAX_DRAWER, nDigitizers);
40 
41  m_amplitudeGroups = buildToolMap<int>(m_tools, "TileAverageAmplitude", Tile::MAX_ROS - 1);
42 
43  std::vector<std::string> modules;
44  for (int fragID : m_amplitudeFragIDs) {
45  unsigned int ros = fragID >> 8;
46  unsigned int drawer = fragID & 0x3F;
47  modules.push_back(TileCalibUtils::getDrawerString(ros, drawer));
49  }
50 
51  std::ostringstream os;
52  if ( m_amplitudeFragIDs.size() != 0) {
53  std::sort(m_amplitudeFragIDs.begin(), m_amplitudeFragIDs.end());
54  for (int fragID : m_amplitudeFragIDs) {
55  unsigned int ros = fragID >> 8;
56  unsigned int drawer = fragID & 0x3F;
58  os << " " << module << "/0x" << std::hex << fragID << std::dec;
59  }
60  } else {
61  os << "NONE";
62  }
63 
64  ATH_MSG_INFO("Monitored amplitude vs LB for modules/frag ID:" << os.str());
65 
66  if (!modules.empty()) {
67  m_amplitudeVsLBGroups = buildToolMap<int>(m_tools, "TileAmplitudeVsLB", modules);
68  }
69 
70  return StatusCode::SUCCESS;
71 }
72 
73 
75 
76  using Tile = TileCalibUtils;
77 
78  // In case you want to measure the execution time
79  auto timer = Monitored::Timer("TIME_execute");
80 
81  const xAOD::EventInfo* eventInfo = GetEventInfo(ctx).get();
82 
83  unsigned int lvl1TriggerType = eventInfo->level1TriggerType();
84  if (!m_triggerTypes.empty()
85  && std::find( m_triggerTypes.begin(), m_triggerTypes.end(), lvl1TriggerType) == m_triggerTypes.end()) {
86  fill("TileRawChanTimeMonExecuteTime", timer);
87  return StatusCode::SUCCESS;
88  }
89 
90  unsigned int lumiBlock = eventInfo->lumiBlock();
91  auto monLumiBlock = Monitored::Scalar<double>("lumiBlock", lumiBlock);
92 
93  std::vector<int> drawers[Tile::MAX_ROS - 1];
94  std::vector<int> channels[Tile::MAX_ROS - 1];
95  std::vector<double> channelTimes[Tile::MAX_ROS - 1];
96  std::vector<double> channelUncorrectedTimes[Tile::MAX_ROS - 1];
97  std::vector<double> channelAmplitudes[Tile::MAX_ROS - 1];
98 
99  const TileDQstatus* dqStatus = SG::makeHandle(m_DQstatusKey, ctx).get();
100  const TileDCSState* dcsState = m_checkDCS ? SG::ReadCondHandle(m_DCSStateKey, ctx).cptr() : nullptr;
101 
103  ATH_CHECK( emScale.isValid() );
104 
106 
108  ATH_CHECK( rawChannelContainer.isValid() );
109 
110  TileRawChannelUnit::UNIT rawChannelUnit = rawChannelContainer->get_unit();
111 
112  for (const TileRawChannelCollection* rawChannelCollection : *rawChannelContainer) {
113  if (rawChannelCollection->empty() ) continue;
114 
115  HWIdentifier adc_id = rawChannelCollection->front()->adc_HWID();
116  int ros = m_tileHWID->ros(adc_id);
117  int drawer = m_tileHWID->drawer(adc_id);
118  unsigned int drawerIdx = TileCalibUtils::getDrawerIdx(ros, drawer);
119  int partition = ros - 1;
120  std::string moduleName = TileCalibUtils::getDrawerString(ros, drawer);
121 
122  for (const TileRawChannel* rawChannel : *rawChannelCollection) {
123 
124  adc_id = rawChannel->adc_HWID();
125  int channel = m_tileHWID->channel(adc_id);
126  int adc = m_tileHWID->adc(adc_id);
127 
129  ATH_MSG_VERBOSE(m_tileHWID->to_string(adc_id) << ": channlel is disconnected => skipping!");
130  continue;
131  }
132 
133  if (!(dqStatus->isAdcDQgood(ros, drawer, channel, adc))) {
134  ATH_MSG_VERBOSE(m_tileHWID->to_string(adc_id) << ": DQ is BAD => skipping!");
135  continue;
136  }
137 
138  if (m_checkDCS && dcsState->isStatusBad(ros, drawer, channel)) {
139  ATH_MSG_VERBOSE(m_tileHWID->to_string(adc_id) << ": DCS is Bad => skipping!");
140  continue;
141  }
142 
143  TileBchStatus status = badChannels->getAdcStatus(adc_id);
144  if (status.isBad() || status.isBadTiming()) {
145  ATH_MSG_VERBOSE(m_tileHWID->to_string(adc_id) << ": Status or Timing is BAD => skipping!");
146  continue;
147  }
148 
149  if (rawChannel->amplitude() < m_energyThresholds[adc]) {
150  ATH_MSG_VERBOSE(m_tileHWID->to_string(adc_id) << ": Energy is below threshold => skipping!");
151  continue;
152  }
153 
154  drawers[partition].push_back(drawer);
155  channels[partition].push_back(channel);
156  channelTimes[partition].push_back(rawChannel->time());
157  channelUncorrectedTimes[partition].push_back(rawChannel->uncorrTime());
158 
159  float amplitude = rawChannel->amplitude();
160  amplitude = emScale->calibrateChannel(drawerIdx, channel, adc, amplitude, rawChannelUnit, TileRawChannelUnit::PicoCoulombs);
161  channelAmplitudes[partition].push_back(amplitude);
162 
163  if (m_amplitudeMonitoredDrawerIdx[drawerIdx]) {
164  auto monAmplitude = Monitored::Scalar<double>("amplitude_" + std::to_string(channel), amplitude);
165  fill(m_tools[m_amplitudeVsLBGroups.at(moduleName)], monLumiBlock, monAmplitude);
166  }
167  }
168  }
169 
170  float partitionTime[4] = {0};
171 
172  for (unsigned int partition = 0; partition < Tile::MAX_ROS - 1; ++partition) {
173  int nChannels = 0;
174  double averagePartitionTime = 0.0;
175  std::vector<double>& times = channelTimes[partition];
176 
177  for (unsigned int channelIdx = 0; channelIdx < channels[partition].size(); ++ channelIdx) {
178  int channel = channels[partition][channelIdx];
179  if ( (partition > 1) // EB, exclude some channels (most likely single PMT) from calculating average time
180  && (channel < 6 || channel == 12 || channel == 13 || channel == 18 || channel == 19) ) continue;
181 
182  averagePartitionTime += times[channelIdx];
183  ++nChannels;
184  }
185 
186  if (nChannels > 0) {
187  averagePartitionTime /= nChannels;
188  partitionTime[partition] = averagePartitionTime - m_partitionTimeCorrection[partition];
189 
190  std::transform(times.begin(), times.end(), times.begin(),
191  [averagePartitionTime] (double time) {return time - averagePartitionTime;});
192  }
193  }
194 
195  static const int channel2digitizer[48] = {7, 7, 7, 7, 7, 7,
196  6, 6, 6, 6, 6, 6,
197  5, 5, 5, 5, 5, 5,
198  4, 4, 4, 4, 4, 4,
199  3, 3, 3, 3, 3, 3,
200  2, 2, 2, 2, 2, 2,
201  1, 1, 1, 1, 1, 1,
202  0, 0, 0, 0, 0, 0};
203 
204 
205  for (unsigned int partition = 0; partition < Tile::MAX_ROS - 1; ++partition) {
206  if (!channelTimes[partition].empty()) {
207  auto monModule = Monitored::Collection("module", drawers[partition]);
208  auto monChannel = Monitored::Collection("channel", channels[partition]);
209  auto monTime = Monitored::Collection("time", channelTimes[partition]);
210  fill(m_tools[m_timeGroups[partition]], monModule, monChannel, monTime);
211 
212  auto monUncorrTime = Monitored::Collection("time", channelUncorrectedTimes[partition]);
213  fill(m_tools[m_uncorrTimeGroups[partition]], monModule, monChannel, monUncorrTime);
214 
215  auto monPartitionTime = Monitored::Scalar<float>("time", partitionTime[partition]);
216  fill(m_tools[m_timeLBGroups[partition]], monLumiBlock, monPartitionTime);
217 
218  auto monAmplitude = Monitored::Collection("amplitude", channelAmplitudes[partition]);
219  fill(m_tools[m_amplitudeGroups[partition]], monModule, monChannel, monAmplitude);
220 
221  for (unsigned int channelIdx = 0; channelIdx < channels[partition].size(); ++ channelIdx) {
222  int drawer = drawers[partition][channelIdx];
223  int digitizer = channel2digitizer[ channels[partition][channelIdx] ];
224  auto monTime = Monitored::Scalar<double>("time", channelTimes[partition][channelIdx]);
225  fill(m_tools[m_digiTimeLBGroups[partition][drawer][digitizer]], monLumiBlock, monTime);
226  }
227 
228  }
229  }
230 
231  for (unsigned int pairIdx = 0; pairIdx < m_partitionTimeDifferencePairs.size(); ++pairIdx) {
232  const std::pair<int, int>& partitionPair = m_partitionTimeDifferencePairs[pairIdx];
233  int partition1 = partitionPair.first;
234  int partition2 = partitionPair.second;
235  auto monTime = Monitored::Scalar<double>("time", partitionTime[partition1] - partitionTime[partition2]);
236  fill(m_tools[m_timeDiffLBGroups[pairIdx]], monLumiBlock, monTime);
237  }
238 
239  fill("TileRawChanTimeMonExecuteTime", timer);
240 
241  return StatusCode::SUCCESS;
242 }
python.PyKernel.retrieve
def retrieve(aClass, aKey=None)
Definition: PyKernel.py:110
TileRawChannelTimeMonitorAlgorithm::m_DQstatusKey
SG::ReadHandleKey< TileDQstatus > m_DQstatusKey
Definition: TileRawChannelTimeMonitorAlgorithm.h:58
RunTileTBMonitoring.fragID
fragID
Definition: RunTileTBMonitoring.py:212
RPDUtils::nChannels
unsigned constexpr int nChannels
Definition: RPDUtils.h:23
TileRawChannelTimeMonitorAlgorithm::m_amplitudeGroups
std::vector< int > m_amplitudeGroups
Definition: TileRawChannelTimeMonitorAlgorithm.h:96
TileRawChannelTimeMonitorAlgorithm::m_rawChannelContainerKey
SG::ReadHandleKey< TileRawChannelContainer > m_rawChannelContainerKey
Definition: TileRawChannelTimeMonitorAlgorithm.h:61
plotting.yearwise_efficiency.channel
channel
Definition: yearwise_efficiency.py:24
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
find
std::string find(const std::string &s)
return a remapped string
Definition: hcg.cxx:135
SG::ReadHandle
Definition: StoreGate/StoreGate/ReadHandle.h:70
TileRawChannelTimeMonitorAlgorithm::m_digiTimeLBGroups
std::vector< std::vector< std::vector< int > > > m_digiTimeLBGroups
Definition: TileRawChannelTimeMonitorAlgorithm.h:95
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
TileCalibUtils.h
TileRawChannelTimeMonitorAlgorithm::fillHistograms
virtual StatusCode fillHistograms(const EventContext &ctx) const override
adds event to the monitoring histograms
Definition: TileRawChannelTimeMonitorAlgorithm.cxx:74
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
TileRawChannelUnit::PicoCoulombs
@ PicoCoulombs
Definition: TileRawChannelUnit.h:18
TileRawChannelTimeMonitorAlgorithm::m_amplitudeMonitoredDrawerIdx
std::array< bool, TileCalibUtils::MAX_DRAWERIDX > m_amplitudeMonitoredDrawerIdx
Definition: TileRawChannelTimeMonitorAlgorithm.h:99
empty
bool empty(TH1 *h)
Definition: computils.cxx:294
TileDCSState::isStatusBad
bool isStatusBad(unsigned int ros, unsigned int drawer) const
Return true if given Tile drawer considered as bad by summary drawer states per LVPS otherwise return...
Definition: TileDCSState.h:320
Example_ReadSampleNoise.drawer
drawer
Definition: Example_ReadSampleNoise.py:39
TileRawChannelTimeMonitorAlgorithm::m_cabling
const TileCablingService * m_cabling
Definition: TileRawChannelTimeMonitorAlgorithm.h:89
ReadCondHandle.h
TileHWID::channel
int channel(const HWIdentifier &id) const
extract channel field from HW identifier
Definition: TileHWID.h:189
TileRawChannelTimeMonitorAlgorithm::m_timeLBGroups
std::vector< int > m_timeLBGroups
Definition: TileRawChannelTimeMonitorAlgorithm.h:93
TileRawChannelTimeMonitorAlgorithm.h
python.utils.AtlRunQueryTimer.timer
def timer(name, disabled=False)
Definition: AtlRunQueryTimer.py:86
dq_defect_copy_defect_database.channels
def channels
Definition: dq_defect_copy_defect_database.py:56
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
Monitored::Collection
ValuesCollection< T > Collection(std::string name, const T &collection)
Declare a monitored (double-convertible) collection.
Definition: MonitoredCollection.h:38
TileHWID::ros
int ros(const HWIdentifier &id) const
extract ros field from HW identifier
Definition: TileHWID.h:167
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:270
python.PyAthena.module
module
Definition: PyAthena.py:131
TileRawChannelTimeMonitorAlgorithm::m_partitionTimeDifferencePairs
Gaudi::Property< std::vector< std::pair< int, int > > > m_partitionTimeDifferencePairs
Definition: TileRawChannelTimeMonitorAlgorithm.h:52
TileEMScale::calibrateChannel
float calibrateChannel(unsigned int drawerIdx, unsigned int channel, unsigned int adc, float amplitude, TileRawChannelUnit::UNIT rawDataUnitIn, TileRawChannelUnit::UNIT rawDataUnitOut) const
Calibrate a Tile channel.
Definition: TileEMScale.cxx:136
TileDQstatus
Class that holds Data Quality fragment information and provides functions to extract the data quality...
Definition: TileDQstatus.h:49
TileHWID::adc
int adc(const HWIdentifier &id) const
extract adc field from HW identifier
Definition: TileHWID.h:193
Tile
Definition: TileVolumeBuilder.h:43
TileHWID.h
Monitored
Generic monitoring tool for athena components.
Definition: GenericMonitoringTool.h:30
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
Amg::transform
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Definition: GeoPrimitivesHelpers.h:156
TileRawChannel
Definition: TileRawChannel.h:35
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthMonitorAlgorithm::fill
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable >> &&variables) const
Fills a vector of variables to a group by reference.
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
maskDeadModules.ros
ros
Definition: maskDeadModules.py:35
TileRawChannelTimeMonitorAlgorithm::m_uncorrTimeGroups
std::vector< int > m_uncorrTimeGroups
Definition: TileRawChannelTimeMonitorAlgorithm.h:92
AthMonitorAlgorithm::GetEventInfo
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
Definition: AthMonitorAlgorithm.cxx:107
TileRawChannelTimeMonitorAlgorithm::m_timeGroups
std::vector< int > m_timeGroups
Definition: TileRawChannelTimeMonitorAlgorithm.h:91
TileRawChannelUnit::UNIT
UNIT
Definition: TileRawChannelUnit.h:16
xAOD::EventInfo_v1::lumiBlock
uint32_t lumiBlock() const
The current event's luminosity block number.
ReadFromCoolCompare.os
os
Definition: ReadFromCoolCompare.py:231
TileRawChannelTimeMonitorAlgorithm::m_timeDiffLBGroups
std::vector< int > m_timeDiffLBGroups
Definition: TileRawChannelTimeMonitorAlgorithm.h:94
TileDQstatus::isAdcDQgood
bool isAdcDQgood(int partition, int drawer, int ch, int gain) const
returns status of single ADC returns False if there are any errors
Definition: TileDQstatus.cxx:178
TileRawChannelTimeMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: TileRawChannelTimeMonitorAlgorithm.cxx:12
TileRawChannelTimeMonitorAlgorithm::m_badChannelsKey
SG::ReadCondHandleKey< TileBadChannels > m_badChannelsKey
Name of TileBadChannels in condition store.
Definition: TileRawChannelTimeMonitorAlgorithm.h:73
AthMonitorAlgorithm::m_tools
ToolHandleArray< GenericMonitoringTool > m_tools
Array of Generic Monitoring Tools.
Definition: AthMonitorAlgorithm.h:338
ActsTrk::to_string
std::string to_string(const DetectorType &type)
Definition: GeometryDefs.h:34
TileRawChannelTimeMonitorAlgorithm::m_cablingSvc
ServiceHandle< TileCablingSvc > m_cablingSvc
Name of Tile cabling service.
Definition: TileRawChannelTimeMonitorAlgorithm.h:85
TileRawChannelCollection
Definition: TileRawChannelCollection.h:12
TileRawChannelTimeMonitorAlgorithm::m_tileHWID
const TileHWID * m_tileHWID
Definition: TileRawChannelTimeMonitorAlgorithm.h:88
TileRawChannelTimeMonitorAlgorithm::m_emScaleKey
SG::ReadCondHandleKey< TileEMScale > m_emScaleKey
Name of TileEMScale in condition store.
Definition: TileRawChannelTimeMonitorAlgorithm.h:79
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
TileRawChannelTimeMonitorAlgorithm::m_amplitudeVsLBGroups
std::map< std::string, int > m_amplitudeVsLBGroups
Definition: TileRawChannelTimeMonitorAlgorithm.h:97
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
TileBadChannels::getAdcStatus
const TileBchStatus & getAdcStatus(const HWIdentifier adc_id) const
Return Tile ADC status.
Definition: TileBadChannels.cxx:24
AthMonitorAlgorithm::initialize
virtual StatusCode initialize() override
initialize
Definition: AthMonitorAlgorithm.cxx:18
TileCalibUtils::getDrawerString
static std::string getDrawerString(unsigned int ros, unsigned int drawer)
Return the drawer name, e.g.
Definition: TileCalibUtils.cxx:145
python.Classes.TileBchStatus
TileBchStatus
Definition: TileCalib/TileCalibBlobObjs/python/Classes.py:16
TileCablingService::isDisconnected
bool isDisconnected(int ros, int drawer, int channel) const
Definition: TileCablingService.cxx:2461
TileHWID::drawer
int drawer(const HWIdentifier &id) const
extract drawer field from HW identifier
Definition: TileHWID.h:171
ReadFloatFromCool.adc
adc
Definition: ReadFloatFromCool.py:48
python.Classes.TileCalibUtils
TileCalibUtils
Definition: TileCalib/TileCalibBlobObjs/python/Classes.py:5
StateLessPT_NewConfig.partition
partition
Definition: StateLessPT_NewConfig.py:49
TileRawChannelTimeMonitorAlgorithm::m_DCSStateKey
SG::ReadCondHandleKey< TileDCSState > m_DCSStateKey
Name of TileDCSState object in condition store.
Definition: TileRawChannelTimeMonitorAlgorithm.h:67
xAOD::EventInfo_v1::level1TriggerType
uint16_t level1TriggerType() const
The Level-1 trigger type.
TileDCSState
Condition object to keep Tile DCS status from DB.
Definition: TileDCSState.h:24
TileRawChannelTimeMonitorAlgorithm::m_energyThresholds
Gaudi::Property< std::vector< double > > m_energyThresholds
Definition: TileRawChannelTimeMonitorAlgorithm.h:45
TileRawChannelTimeMonitorAlgorithm::m_checkDCS
Gaudi::Property< bool > m_checkDCS
Definition: TileRawChannelTimeMonitorAlgorithm.h:40
merge.status
status
Definition: merge.py:17
TileCalibUtils::getDrawerIdx
static unsigned int getDrawerIdx(unsigned int ros, unsigned int drawer)
Returns a drawer hash.
Definition: TileCalibUtils.cxx:60
TileAANtupleConfig.rawChannelContainer
rawChannelContainer
Definition: TileAANtupleConfig.py:120
TileRawChannelTimeMonitorAlgorithm::m_triggerTypes
Gaudi::Property< std::vector< unsigned int > > m_triggerTypes
Definition: TileRawChannelTimeMonitorAlgorithm.h:42
Monitored::Scalar
Declare a monitored scalar variable.
Definition: MonitoredScalar.h:34
TileHWID::to_string
std::string to_string(const HWIdentifier &id, int level=0) const
extract all fields from HW identifier HWIdentifier get_all_fields ( const HWIdentifier & id,...
Definition: TileHWID.cxx:50
ReadHandle.h
Handle class for reading from StoreGate.
xAOD::lumiBlock
setTeId lumiBlock
Definition: L2StandAloneMuon_v1.cxx:327
TileRawChannelTimeMonitorAlgorithm::m_amplitudeFragIDs
Gaudi::Property< std::vector< int > > m_amplitudeFragIDs
Definition: TileRawChannelTimeMonitorAlgorithm.h:55
Monitored::Timer
A monitored timer.
Definition: MonitoredTimer.h:32
plot_times.times
def times(fn)
Definition: plot_times.py:11
TileRawChannelTimeMonitorAlgorithm::m_partitionTimeCorrection
Gaudi::Property< std::vector< double > > m_partitionTimeCorrection
Definition: TileRawChannelTimeMonitorAlgorithm.h:48
SG::ReadCondHandle::cptr
const_pointer_type cptr()
Definition: ReadCondHandle.h:67