ATLAS Offline Software
BunchCrossingCondAlg.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 #include "BunchCrossingCondAlg.h"
6 #include "CoolKernel/IObject.h"
8 #include "CoralBase/Blob.h"
11 #include <cstdint>
12 
13 #include "CoralBase/AttributeListException.h"
14 
15 
17  if (m_mode == 2) {
18  ATH_CHECK( m_trigConfigSvc.retrieve() );
19  }
24  return StatusCode::SUCCESS;
25 }
26 
27 
28 StatusCode BunchCrossingCondAlg::execute (const EventContext& ctx) const {
29 
31  if (writeHdl.isValid()) {
32  ATH_MSG_DEBUG("Found valid write handle");
33  return StatusCode::SUCCESS;
34  }
35  // make sure that the output IOV has a valid timestamp, otherwise the conditions
36  // data cannot be added to the "mixed" conditions data container. A mixed container
37  // is needed when the conditions depends on e.g. the LuminosityCondData
39 
40  //Output object & range:
41  auto bccd=std::make_unique<BunchCrossingCondData>();
42 
43  if (m_mode == 2) { // use trigger bunch groups
44  const TrigConf::L1BunchGroupSet* bgs{nullptr};
47  if (! bgsh.isValid()) {
48  ATH_MSG_ERROR("Unable to retrieve L1BunchGroupSet object " << m_bunchGroupCondDataKey);
49  return StatusCode::FAILURE;
50  }
51  bgs = *bgsh;
52  } else {
53  bgs = &(m_trigConfigSvc->l1BunchGroupSet(ctx));
54  }
55  // bunch group 1 = paired
56  if (bgs->size() >= 2) {
57  ATH_MSG_DEBUG("from BunchGroupCondData: BG1 bunches " << bgs->getBunchGroup(1)->bunches() );
58  for (const auto& pos : bgs->getBunchGroup(1)->bunches() ) {
59  bccd->m_beam1.set(pos);
60  bccd->m_beam2.set(pos);
61  bccd->m_luminous.set(pos);
62  }
63  }
64  else {
65  ATH_MSG_ERROR("missing bunch group data");
66  }
67  // in Run 1 we don't have bunch group information to determine beam 1 or beam 2 unpaired
68  // so test if we have at least 15 bunch groups, then assume BG13/14 are the unpaired bunches
69  if (bgs->size() >= 15) {
70  for (const auto& pos : bgs->getBunchGroup(13)->bunches() ) {
71  bccd->m_beam1.set(pos);
72  }
73  for (const auto& pos : bgs->getBunchGroup(14)->bunches() ) {
74  bccd->m_beam2.set(pos);
75  }
76  }
77  // find trains
78  bccd->m_trains=findTrains(bccd->m_luminous, m_maxBunchSpacing,m_minBunchesPerTrain);
79  // we will only trust the validity for 1 LB but that's OK
80  const auto& thisevt = ctx.eventID();
81  EventIDRange range = EventIDRange(EventIDBase(thisevt.run_number(), EventIDBase::UNDEFEVT,
82  EventIDBase::UNDEFNUM, 0, thisevt.lumi_block()),
83  EventIDBase(thisevt.run_number(), EventIDBase::UNDEFEVT,
84  EventIDBase::UNDEFNUM, 0, thisevt.lumi_block()+1));
85  writeHdl.addDependency(range);
86  }
87 
88  if (m_mode == 3) { // use luminosity data
90  writeHdl.addDependency(prefLumiHdl);
91 
92  // consider BCID filled if mu < 1000*average mu
93  float avMu = prefLumiHdl->lbAverageInteractionsPerCrossing();
94  const auto& lumiVec = prefLumiHdl->lbLuminosityPerBCIDVector();
95  float cutLumi = avMu/1000.f*prefLumiHdl->muToLumi();
96 
97  for (size_t bcid = 0; bcid < LuminosityCondData::TOTAL_LHC_BCIDS; ++bcid ) {
98  if (lumiVec[bcid] > cutLumi) {
99  bccd->m_beam1.set(bcid);
100  bccd->m_beam2.set(bcid);
101  bccd->m_luminous.set(bcid);
102  }
103  }
104  // find trains
105  bccd->m_trains=findTrains(bccd->m_luminous, m_maxBunchSpacing,m_minBunchesPerTrain);
106  }
107 
108  if (m_mode == 0 || m_mode == 1) { // use FILLPARAMS (data) or /Digitization/Parameters (MC)
109 
111  writeHdl.addDependency(fillParamsHdl);
112 
113  const AthenaAttributeList* attrList=*fillParamsHdl;
114 
115 
116  if (m_mode == 1) {
117  ATH_MSG_INFO("Assuming MC case");
118  ATH_MSG_INFO("Got AttributeList with size " << attrList->size());
119  std::string sbunches;
120  try {
121  const coral::Attribute& attr=(*attrList)[std::string("BeamIntensityPattern")];
122  if (attr.isNull()) {
123  ATH_MSG_ERROR("Got NULL attribute for BeamIntensityPattern");
124  return StatusCode::FAILURE;
125  }
126  sbunches = attr.data< std::string >();
127  } catch (coral::AttributeListException& e) {
128  ATH_MSG_ERROR(e.what());
129  ATH_MSG_ERROR("Failed to get Attribute 'BeamIntensityPattern' from AttributeList in " << m_fillParamsFolderKey);
130  return StatusCode::FAILURE;
131  }
132 
133  const float minBunchIntensity=0.001;
134  std::vector<float> bunches=tokenize(sbunches);
135  if (!bunches.empty()) {
136  // Check if the pattern "fits into" the LHC:
137  if( BunchCrossingCondData::m_MAX_BCID % bunches.size() ) {
138 
139  ATH_MSG_INFO( "Bunch pattern doesn't \"fit into\" " << BunchCrossingCondData::m_MAX_BCID );
140  // The loop doesn't go all the way up to MAX_BCID/2 in order not to produce "weird"
141  // patterns half way. This should be pretty safe to do, because the MC BCIDs will
142  // only be in the range defined by the pattern from the metadata.
143  for( int i = 0; i < ( BunchCrossingCondData::m_MAX_BCID / 2 - 20 ); ++i ) {
144  const int pos1 = i % bunches.size();
145  const int pos2 = bunches.size() - 1 - ( i % bunches.size() );
146  if( bunches[ pos1 ] > minBunchIntensity) {
147  bccd->m_beam1.set(i);
148  bccd->m_beam2.set(i);
149  bccd->m_luminous.set(i);
150  }
151  if( bunches[ pos2 ] > minBunchIntensity) {
152  bccd->m_beam1.set(BunchCrossingCondData::m_MAX_BCID - 1 -i);
153  bccd->m_beam2.set(BunchCrossingCondData::m_MAX_BCID - 1 -i);
154  bccd->m_luminous.set(BunchCrossingCondData::m_MAX_BCID - 1 -i);
155  }
156  }
157 
158  } else {
159  // If the sample size fits into the number of available bunches, the algorithm
160  // is pretty simple:
161  ATH_MSG_INFO( "Bunch pattern \"fits into\" " << BunchCrossingCondData::m_MAX_BCID );
162  for( int i = 0; i < BunchCrossingCondData::m_MAX_BCID; ++i ) {
163  const int pos = i % bunches.size();
164  if( bunches[ pos ] > minBunchIntensity) {
165  bccd->m_beam1.set(i);
166  bccd->m_beam2.set(i);
167  bccd->m_luminous.set(i);
168  }
169  }
170  }
171  //Filled bcid-bitsets, now extract trains:
172  bccd->m_trains=findTrains(bccd->m_luminous, m_maxBunchSpacing,m_minBunchesPerTrain);
173  }
174  else {//got no bunches from metadata
175  ATH_MSG_INFO("Bunch structure information not found in metadata");
176  ATH_MSG_INFO("Will consider all BCIDs as single filled bunches (no trains)");
177  bccd->m_beam1.set();
178  bccd->m_beam2.set();
179  bccd->m_luminous.set();
180  }
181  }
182  else { // mode == 0, Data-case
183  if ((*attrList)["BCIDmasks"].isNull()) {
184  ATH_MSG_ERROR( "BunchCode is NULL in " << m_fillParamsFolderKey.key() << "!" );
185  return StatusCode::FAILURE;
186  }
187 
188 
189  // Do everything here for now, but should copy this to a vanilla object based on attrList
190  cool::UInt32 nb1 = (*attrList)["Beam1Bunches"].data<cool::UInt32>();
191  cool::UInt32 nb2 = (*attrList)["Beam2Bunches"].data<cool::UInt32>();
192  cool::UInt32 ncol = (*attrList)["LuminousBunches"].data<cool::UInt32>();
193 
194  ATH_MSG_DEBUG( "Beam1Bunches: " << nb1 );
195  ATH_MSG_DEBUG( "Beam2Bunches: " << nb2 );
196  ATH_MSG_DEBUG( "LuminousBunches: " << ncol );
197 
198  const coral::Blob& blob = (*attrList)["BCIDmasks"].data<coral::Blob>();
199 
200  if (m_isRun1) { //Assume run1 layout as explained at https://twiki.cern.ch/twiki/bin/view/AtlasComputing/CoolOnlineData
201  ATH_MSG_DEBUG("Assuming run 1 database");
202  // Verify length
203  if ( static_cast<cool::UInt32>( blob.size() ) != 2 * (nb1 + nb2 + ncol)) {
204  ATH_MSG_WARNING( "BCIDmasks length " << blob.size() << " != 2 * " << (nb1+nb2+ncol) );
205  return StatusCode::SUCCESS;
206  }
207  const uint16_t* blobAddr=static_cast<const uint16_t*>(blob.startingAddress());
208  //Decode beam1 filling:
209  for (size_t idx=0;idx<nb1;++idx) {
210  const uint32_t bcid=blobAddr[idx];
211  bccd->m_beam1.set(bcid);
212  }
213 
214  //Decode beam2 filling:
215  for (size_t idx=nb1;idx<nb2;++idx) {
216  const uint32_t bcid=blobAddr[idx];
217  bccd->m_beam2.set(bcid);
218  }
219 
220  //Decode colliding:
221  for (size_t idx=nb2;idx<ncol;++idx) {
222  const uint32_t bcid=blobAddr[idx];
223  bccd->m_luminous.set(bcid);
224  }
225  }
226  else {
227  ATH_MSG_DEBUG("Assuming run 2/3 database");
228  //Assume run2 layout as explained at https://twiki.cern.ch/twiki/bin/view/AtlasComputing/CoolOnlineData
229  //Verify length
231  ATH_MSG_ERROR("Found blob with unexpected length " << blob.size() << "(expect " << BunchCrossingCondData::m_MAX_BCID <<") in folder " << m_fillParamsFolderKey.key());
232  return StatusCode::FAILURE;
233  }
234  const uint8_t* blobAddr=static_cast<const uint8_t*>(blob.startingAddress());
236  if (blobAddr[bcid] & 0x1) {
237  bccd->m_beam1.set(bcid);
238  }
239  if (blobAddr[bcid] & 0x2) {
240  bccd->m_beam2.set(bcid);
241  }
242  if ((blobAddr[bcid] & 0x3) == 0x3) {
243  bccd->m_luminous.set(bcid);
244  }
245  }
246 
247  //Consistency checks:
248  if (bccd->m_beam1.count()!= nb1) {
249  ATH_MSG_WARNING("Found " << bccd->m_beam1.count() << " bunches in beam1, expected " << nb1);
250  }
251 
252  if (bccd->m_beam2.count()!= nb2) {
253  ATH_MSG_WARNING("Found " << bccd->m_beam2.count() << " bunches in beam2, expected " << nb2);
254  }
255 
256  if (bccd->m_luminous.count()!= ncol) {
257  ATH_MSG_WARNING("Found " << bccd->m_luminous.count() << " colliding bunches, expected " << ncol);
258  }
259  }//end else run2
260  //Filled bcid-bitsets, now extract trains
261  bccd->m_trains=findTrains(bccd->m_luminous, m_maxBunchSpacing,m_minBunchesPerTrain);
262  }//end else is data
263  }
264 
265  ATH_CHECK( writeHdl.record (std::move (bccd)) );
266  return StatusCode::SUCCESS;
267 }
268 
269 
270 std::vector<BunchCrossingCondData::bunchTrain_t> BunchCrossingCondAlg::findTrains(const std::bitset< BunchCrossingCondData::m_MAX_BCID>& collidingBCIDs, const int maxSpacingInTrain, const unsigned minBunchesPerTrain) const {
271 
272  const int MAX_BCID=collidingBCIDs.size();
273  std::vector<bunchTrain_t> result;
274 
275  std::vector<std::pair<int,int> > holes;
276  int start=0;
277  int stop=0;
278 
279  while (stop<MAX_BCID) { //Outer loop, over holes
280  for (start=stop;stop<MAX_BCID && !collidingBCIDs.test(stop); ++stop) {};//Count consecutive holes
281  //stop points now to the next filled bcid (or MAX)
282  if ((stop-start)>maxSpacingInTrain) {
283  holes.emplace_back(start,stop);
284  }//end if >maxSpacingInTrain
285  ++stop;
286  }//end outer loop
287 
288 
289  ATH_MSG_DEBUG("Found " << holes.size() << " gaps larger than " << maxSpacingInTrain << " in the bunch structure");
290  if (msgLvl(MSG::VERBOSE)) {
291  for (auto& h : holes) {
292  msg(MSG::VERBOSE) << "Hole: " << h.first << " - " << h.second << endmsg;
293  }
294  }
295 
296 
297  if (holes.empty()) {
298  ATH_MSG_ERROR("Looks like we have bunch train spanning the entire ring w/o any gap. Really?");
299  return result;
300  }
301 
302 
303  if (holes.size()>1) {
304  //generic case of having at least 2 gaps int the bunch structure
305  for (unsigned i=0;i<holes.size()-1;++i) {
306  //Count colliding bunches in this train:
307  unsigned ncoll=0;
308  for (int idx=holes[i].second;idx<holes[i+1].first-1;++idx) {
309  if (collidingBCIDs.test(idx)) {
310  ++ncoll;
311  }
312  }
313  result.emplace_back(holes[i].second,holes[i+1].first-1,ncoll);
314  }
315  }
316 
317  if (holes.size()==1 || (holes.front().first!=0 && holes.back().second!=MAX_BCID-1)) {
318  //Special case of only one hole and/or first/last BCIDs populated (train across the wrap-around)
319 
320  //To simplify the distanceToFront and distanceToTail methods we duplicate this train
321  //Once as first train wiht a starting point in the negative range, and
322  //once as last train with a ending point beyond MAX_BCID
323 
324  //Count the number of collisions in this train:
325  unsigned ncoll=0;
326  for (int idx=0;idx<holes.front().first;++idx) {
327  if (collidingBCIDs.test(idx)) {
328  ++ncoll;
329  }
330  }
331  for (int idx=holes.back().second;idx<MAX_BCID;++idx) {
332  if (collidingBCIDs.test(idx)) {
333  ++ncoll;
334  }
335  }
336 
337  BunchCrossingCondData::bunchTrain_t firsttrain(holes.back().second-MAX_BCID, holes.front().first-1,ncoll);
338  BunchCrossingCondData::bunchTrain_t lasttrain(holes.back().second,MAX_BCID+holes.front().first-1,ncoll);
339  result.insert(result.begin(),firsttrain);
340  result.push_back(lasttrain);
341  }//end if wrap-around populated
342 
343 
344  ATH_MSG_DEBUG("Found " << result.size() << " Bunch trains separated by gaps of at least " << maxSpacingInTrain << " bcids ");
345 
346  //copy the vector, cleaning out trains with too few colliding bunches
347  std::vector<bunchTrain_t> result1;
348  result1.reserve(result.size());
349  for (const bunchTrain_t& train: result) {
350  if (train.m_nColl >= minBunchesPerTrain) {
351  result1.emplace_back(train);
352  }
353  }
354 
355  ATH_MSG_INFO("Found " << result1.size() << " Bunch trains having at least " << minBunchesPerTrain << " colliding bunches and separated by at least " << maxSpacingInTrain << " bcids");
356 
357 
358  if (msgLvl(MSG::VERBOSE)) {
359  for (auto& r : result1) {
360  msg(MSG::VERBOSE) << "Train " << r.m_first << " - " << r.m_last << ", " << r.m_nColl << " colliding bcids" << endmsg;
361  }
362  }
363 
364  return result1;
365 }
366 
367 
376 std::vector<float> BunchCrossingCondAlg::tokenize( const std::string& pattern ) const {
377  ATH_MSG_VERBOSE("Input to tokenize: " << pattern);
378 
379  std::vector< float > result;
380  const char* c= pattern.data();
381  const char* cEnd= c + pattern.size();
382  while(c<cEnd) {
383  //This loop swallows actually any string containing numbers
384  //separated by non-numbers
385  char* end;
386  float f=std::strtof(c,&end);
387  if (c==end) {//Can't convert, try next
388  c++;
389  }
390  else { //got a value
391  result.push_back(f);
392  c=end;
393  }
394  }//end while loop
395  return result;
396 }
mergePhysValFiles.pattern
pattern
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:26
AllowedVariables::e
e
Definition: AsgElectronSelectorTool.cxx:37
beamspotman.r
def r
Definition: beamspotman.py:676
python.SystemOfUnits.second
int second
Definition: SystemOfUnits.py:120
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
BunchCrossingCondAlg::tokenize
std::vector< float > tokenize(const std::string &pattern) const
This helper function is used to convert a string of type "[0.0, 0.0, 1.0, 1.0, 1.0]" into a vector of...
Definition: BunchCrossingCondAlg.cxx:376
get_generator_info.result
result
Definition: get_generator_info.py:21
SG::ReadCondHandle
Definition: ReadCondHandle.h:44
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
xAOD::uint8_t
uint8_t
Definition: Muon_v1.cxx:557
xAOD::uint32_t
setEventNumber uint32_t
Definition: EventInfo_v1.cxx:127
BunchCrossingCondAlg::m_trigConfigSvc
const ServiceHandle< TrigConf::ILVL1ConfigSvc > m_trigConfigSvc
Definition: BunchCrossingCondAlg.h:56
BunchCrossingCondAlg::m_minBunchesPerTrain
Gaudi::Property< unsigned > m_minBunchesPerTrain
Definition: BunchCrossingCondAlg.h:64
InDetDD::holes
@ holes
Definition: InDetDD_Defs.h:17
mergePhysValFiles.start
start
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:14
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
IOVInfiniteRange::infiniteMixed
static EventIDRange infiniteMixed()
Produces an mixed EventIDRange that is infinite in Time and RunLumi.
Definition: IOVInfiniteRange.h:55
SG::ReadCondHandle::isValid
bool isValid()
Definition: ReadCondHandle.h:206
AthCommonMsg< Gaudi::Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
python.subdetectors.tile.Blob
Blob
Definition: tile.py:17
PixelModuleFeMask_create_db.stop
int stop
Definition: PixelModuleFeMask_create_db.py:76
LuminosityCondData::TOTAL_LHC_BCIDS
static constexpr unsigned int TOTAL_LHC_BCIDS
Definition: LuminosityCondData.h:27
BunchCrossingCondAlg::m_bunchGroupCondDataKey
SG::ReadCondHandleKey< TrigConf::L1BunchGroupSet > m_bunchGroupCondDataKey
Definition: BunchCrossingCondAlg.h:51
ATH_MSG_VERBOSE
#define ATH_MSG_VERBOSE(x)
Definition: AthMsgStreamMacros.h:28
SG::VarHandleKey::key
const std::string & key() const
Return the StoreGate ID for the referenced object.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:141
SG::VarHandleKey::empty
bool empty() const
Test if the key is blank.
Definition: AthToolSupport/AsgDataHandles/Root/VarHandleKey.cxx:150
SG::WriteCondHandle::record
StatusCode record(const EventIDRange &range, T *t)
record handle, with explicit range DEPRECATED
Definition: WriteCondHandle.h:157
ReadCondHandle.h
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
BunchCrossingCondAlg::m_isRun1
Gaudi::Property< bool > m_isRun1
Definition: BunchCrossingCondAlg.h:65
BunchCrossingCondData::m_MAX_BCID
static constexpr int m_MAX_BCID
Definition: BunchCrossingCondData.h:28
BunchCrossingCondAlg::execute
virtual StatusCode execute(const EventContext &ctx) const override
Algorithm execute method.
Definition: BunchCrossingCondAlg.cxx:28
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
BunchCrossingCondAlg::findTrains
std::vector< bunchTrain_t > findTrains(const std::bitset< BunchCrossingCondData::m_MAX_BCID > &pairsToConsume, const int maxSpacingInTrain, const unsigned minBunchesPerTrain) const
internal methods:
Definition: BunchCrossingCondAlg.cxx:270
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
lumiFormat.i
int i
Definition: lumiFormat.py:85
BunchCrossingCondAlg::m_outputKey
SG::WriteCondHandleKey< BunchCrossingCondData > m_outputKey
Output conditions object.
Definition: BunchCrossingCondAlg.h:53
endmsg
#define endmsg
Definition: AnalysisConfig_Ntuple.cxx:63
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
WriteCondHandle.h
plotBeamSpotVxVal.range
range
Definition: plotBeamSpotVxVal.py:195
BunchCrossingCondAlg::initialize
virtual StatusCode initialize() override
Gaudi initialize method.
Definition: BunchCrossingCondAlg.cxx:16
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
AthenaAttributeList
An AttributeList represents a logical row of attributes in a metadata table. The name and type of eac...
Definition: PersistentDataModel/PersistentDataModel/AthenaAttributeList.h:45
hist_file_dump.f
f
Definition: hist_file_dump.py:135
TrigConf::L1BunchGroupSet
L1 board configuration.
Definition: L1BunchGroupSet.h:71
BunchCrossingCondAlg::m_fillParamsFolderKey
SG::ReadCondHandleKey< AthenaAttributeList > m_fillParamsFolderKey
Input conditions object.
Definition: BunchCrossingCondAlg.h:49
IOVInfiniteRange.h
SG::CondHandleKey::initialize
StatusCode initialize(bool used=true)
xAOD::bcid
setEventNumber setTimeStamp bcid
Definition: EventInfo_v1.cxx:133
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
BunchCrossingCondAlg::m_lumiCondDataKey
SG::ReadCondHandleKey< LuminosityCondData > m_lumiCondDataKey
Definition: BunchCrossingCondAlg.h:50
BunchCrossingCondAlg.h
Conditions algorithm to fill BunchCrossingCondData.
h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
AsgConfigHelper::strtof
bool strtof(const std::string &input, T &f)
Definition: AsgEGammaConfigHelper.cxx:47
DeMoScan.first
bool first
Definition: DeMoScan.py:536
AthCommonMsg< Gaudi::Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
xAOD::collidingBCIDs
collidingBCIDs
Definition: BunchConf_v1.cxx:28
LArNewCalib_DelayDump_OFC_Cali.idx
idx
Definition: LArNewCalib_DelayDump_OFC_Cali.py:69
SG::WriteCondHandle::isValid
bool isValid() const
Definition: WriteCondHandle.h:248
BunchCrossingCondAlg::m_maxBunchSpacing
Gaudi::Property< unsigned > m_maxBunchSpacing
Definition: BunchCrossingCondAlg.h:63
python.Constants.VERBOSE
int VERBOSE
Definition: Control/AthenaCommon/python/Constants.py:14
BunchCrossingCondAlg::m_mode
Gaudi::Property< int > m_mode
Definition: BunchCrossingCondAlg.h:66
python.compressB64.c
def c
Definition: compressB64.py:93
SG::WriteCondHandle
Definition: WriteCondHandle.h:26
CaloCondBlobAlgs_fillNoiseFromASCII.blob
blob
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:96
SG::WriteCondHandle::addDependency
void addDependency(const EventIDRange &range)
Definition: WriteCondHandle.h:275
BunchCrossingCondData::bunchTrain_t
Definition: BunchCrossingCondData.h:315