ATLAS Offline Software
Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
ROIB::RoIBuilder Class Reference

RoIBuilder simulation algorithm. More...

#include <RoIBuilder.h>

Inheritance diagram for ROIB::RoIBuilder:
Collaboration diagram for ROIB::RoIBuilder:

Public Member Functions

 RoIBuilder (const std::string &name, ISvcLocator *pSvcLocator)
 
virtual StatusCode initialize () override
 
virtual StatusCode execute () override
 
virtual StatusCode sysInitialize () override
 Override sysInitialize. More...
 
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies. More...
 
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & evtStore () const
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc. More...
 
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc. More...
 
virtual StatusCode sysStart () override
 Handle START transition. More...
 
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles. More...
 
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles. More...
 
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T > &t)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &)
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &)
 Declare a new Gaudi property. More...
 
Gaudi::Details::PropertyBase * declareProperty (const std::string &name, T &property, const std::string &doc="none")
 Declare a new Gaudi property. More...
 
void updateVHKA (Gaudi::Details::PropertyBase &)
 
MsgStream & msg () const
 
MsgStream & msg (const MSG::Level lvl) const
 
bool msgLvl (const MSG::Level lvl) const
 

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution More...
 
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
 
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed. More...
 

Private Types

typedef DataVector< LVL1CTP::SlinkWordSlinkWordDV
 
typedef ServiceHandle< StoreGateSvcStoreGateSvc_t
 

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &)
 specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &)
 specialization for handling Gaudi::Property<SG::VarHandleBase> More...
 
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &)
 specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
 

Private Attributes

Gaudi::Property< bool > m_doCalo { this, "DoCalo", true, "Use inputs from Calo system" }
 
Gaudi::Property< bool > m_doMuon { this, "DoMuon", true, "Use inputs from Muon system" }
 
SG::ReadHandleKey< LVL1CTP::CTPSLinkm_ctpSLinkLocation
 
SG::ReadHandleKey< xAOD::EventInfom_eventInfoKey { this, "EventInfoKey", "EventInfo", "Event info object "}
 
SG::ReadHandleKeyArray< SlinkWordDVm_caloEMTauLocation
 
SG::ReadHandleKeyArray< SlinkWordDVm_caloJetEnergyLocation
 
SG::ReadHandleKey< L1MUINT::MuCTPIToRoIBSLinkm_muctpiSLinkLocation
 
SG::WriteHandleKey< RoIBResultm_roibRDOLocation { this, "RoIBRDOLocation", ROIB::DEFAULT_RoIBRDOLocation, "StoreGate location of RoIB RDO" }
 
DataObjIDColl m_extendedExtraObjects
 
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default) More...
 
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default) More...
 
std::vector< SG::VarHandleKeyArray * > m_vhka
 
bool m_varHandleArraysDeclared
 

Detailed Description

RoIBuilder simulation algorithm.

   The RoIBuilder algorithm concatenates the different L1 RODs from
   calo, muon and CTP and fills the L1 RDO.
Author
Thomas Schoerner-Sadenius thoma.nosp@m.s.sc.nosp@m.hoern.nosp@m.er@c.nosp@m.ern.c.nosp@m.h,
Attila Kraznahorkay Jr. Attil.nosp@m.a.Kr.nosp@m.aszna.nosp@m.hork.nosp@m.ay@ce.nosp@m.rn.c.nosp@m.h
Wolfgang Ehrenfeld Wolfg.nosp@m.ang..nosp@m.Ehren.nosp@m.feld.nosp@m.@desy.nosp@m..de

Definition at line 37 of file RoIBuilder.h.

Member Typedef Documentation

◆ SlinkWordDV

Definition at line 53 of file RoIBuilder.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ RoIBuilder()

ROIB::RoIBuilder::RoIBuilder ( const std::string &  name,
ISvcLocator *  pSvcLocator 
)

Definition at line 34 of file RoIBuilder.cxx.

35  : AthAlgorithm( name, pSvcLocator ) {
36 
37  // Property setting general behaviour:
38 
39  }

Member Function Documentation

◆ declareGaudiProperty() [1/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyArrayType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKeyArray>

Definition at line 170 of file AthCommonDataStore.h.

172  {
173  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
174  hndl.value(),
175  hndl.documentation());
176 
177  }

◆ declareGaudiProperty() [2/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleKeyType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158  {
159  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
160  hndl.value(),
161  hndl.documentation());
162 
163  }

◆ declareGaudiProperty() [3/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  hndl,
const SG::VarHandleType  
)
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleBase>

Definition at line 184 of file AthCommonDataStore.h.

186  {
187  return *AthCommonDataStore<PBASE>::declareProperty(hndl.name(),
188  hndl.value(),
189  hndl.documentation());
190  }

◆ declareGaudiProperty() [4/4]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T > &  t,
const SG::NotHandleType  
)
inlineprivateinherited

specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray>

Definition at line 199 of file AthCommonDataStore.h.

200  {
201  return PBASE::declareProperty(t);
202  }

◆ declareProperty() [1/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleBase hndl,
const std::string &  doc,
const SG::VarHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleBase. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 245 of file AthCommonDataStore.h.

249  {
250  this->declare(hndl.vhKey());
251  hndl.vhKey().setOwner(this);
252 
253  return PBASE::declareProperty(name,hndl,doc);
254  }

◆ declareProperty() [2/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKey hndl,
const std::string &  doc,
const SG::VarHandleKeyType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
hndlObject holding the property value.
docDocumentation string for the property.

This is the version for types that derive from SG::VarHandleKey. The property value object is put on the input and output lists as appropriate; then we forward to the base class.

Definition at line 221 of file AthCommonDataStore.h.

225  {
226  this->declare(hndl);
227  hndl.setOwner(this);
228 
229  return PBASE::declareProperty(name,hndl,doc);
230  }

◆ declareProperty() [3/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
SG::VarHandleKeyArray hndArr,
const std::string &  doc,
const SG::VarHandleKeyArrayType  
)
inlineinherited

Definition at line 259 of file AthCommonDataStore.h.

263  {
264 
265  // std::ostringstream ost;
266  // ost << Algorithm::name() << " VHKA declareProp: " << name
267  // << " size: " << hndArr.keys().size()
268  // << " mode: " << hndArr.mode()
269  // << " vhka size: " << m_vhka.size()
270  // << "\n";
271  // debug() << ost.str() << endmsg;
272 
273  hndArr.setOwner(this);
274  m_vhka.push_back(&hndArr);
275 
276  Gaudi::Details::PropertyBase* p = PBASE::declareProperty(name, hndArr, doc);
277  if (p != 0) {
278  p->declareUpdateHandler(&AthCommonDataStore<PBASE>::updateVHKA, this);
279  } else {
280  ATH_MSG_ERROR("unable to call declareProperty on VarHandleKeyArray "
281  << name);
282  }
283 
284  return p;
285 
286  }

◆ declareProperty() [4/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc,
const SG::NotHandleType  
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This is the generic version, for types that do not derive from SG::VarHandleKey. It just forwards to the base class version of declareProperty.

Definition at line 333 of file AthCommonDataStore.h.

337  {
338  return PBASE::declareProperty(name, property, doc);
339  }

◆ declareProperty() [5/6]

Gaudi::Details::PropertyBase* AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( const std::string &  name,
T &  property,
const std::string &  doc = "none" 
)
inlineinherited

Declare a new Gaudi property.

Parameters
nameName of the property.
propertyObject holding the property value.
docDocumentation string for the property.

This dispatches to either the generic declareProperty or the one for VarHandle/Key/KeyArray.

Definition at line 352 of file AthCommonDataStore.h.

355  {
356  typedef typename SG::HandleClassifier<T>::type htype;
357  return declareProperty (name, property, doc, htype());
358  }

◆ declareProperty() [6/6]

Gaudi::Details::PropertyBase& AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T > &  t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145  {
146  typedef typename SG::HandleClassifier<T>::type htype;
148  }

◆ detStore()

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

95 { return m_detStore; }

◆ evtStore() [1/2]

ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

85 { return m_evtStore; }

◆ evtStore() [2/2]

const ServiceHandle<StoreGateSvc>& AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( ) const
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 90 of file AthCommonDataStore.h.

90 { return m_evtStore; }

◆ execute()

StatusCode ROIB::RoIBuilder::execute ( )
overridevirtual

Definition at line 86 of file RoIBuilder.cxx.

86  {
87 
88  // Exec message
89  ATH_MSG_DEBUG( "============================" );
90  ATH_MSG_DEBUG( "Execution of RoIB algorithm." );
91  ATH_MSG_DEBUG( "============================" );
92 
93  //
94  // Get the official event ID:
95  //
96 
97  auto eventInfoHandle = SG::makeHandle( m_eventInfoKey );
98  CHECK( eventInfoHandle.isValid() );
99  const xAOD::EventInfo* thisEvent = eventInfoHandle.cptr();
100  // Note we are loosing precision here as we cast from 64 to 32 bits integer
101  // but this is constraint imposed by: Trigger/TrigT1/TrigT1Result/TrigT1Result/Header.h
102  const int evtNum = static_cast<int>(thisEvent->eventNumber());
103  ATH_MSG_VERBOSE( "Event number is: " << evtNum );
104 
105 
107  // //
108  // CTP RoI //
109  // //
111 
112  // create the header
113  Header ctp_rdo_header( eformat::helper::SourceIdentifier( eformat::TDAQ_CTP,
114  0 ).code() );
115 
116  // create zero data trailer
117  Trailer ctp_rdo_trailer( 0 );
118 
119  // create data element
120  std::vector< unsigned int > ctp_rdo_data;
121 
122  bool ctp_simulation_error = false;
123  auto ctpSlinkHandle = SG::makeHandle( m_ctpSLinkLocation );
124  CHECK( ctpSlinkHandle.isValid() );
125  const LVL1CTP::CTPSLink* ctp_slink = ctpSlinkHandle.cptr();
126 
127  // test for consistency
128  if ( ctp_slink->getCTPToRoIBWords().empty() ) {
129  ctp_simulation_error = true;
130  REPORT_MESSAGE( MSG::WARNING ) << "CTP size is zero. No header, trailer, data element";
131  } else if( ctp_slink->getDataElements().size() != ctp_slink->getNumWordsPerCTPSLink() ) {
132  ctp_simulation_error = true;
133  REPORT_MESSAGE( MSG::WARNING )
134  << "Found CTP size inconsistency: "
135  << ctp_slink->getDataElements().size() << "/"
136  //<< LVL1CTP::CTPSLink::wordsPerCTPSLink
137  << ctp_slink->getNumWordsPerCTPSLink()
138  << " (found/expected)";
139 
140  // get the data elements
141  if( msgLvl( MSG::DEBUG ) ) {
142  const std::vector< unsigned int > ctp_rdo_data_inc = ctp_slink->getDataElements();
143  for( size_t i(0); i < ctp_rdo_data_inc.size(); ++i ) {
144  ATH_MSG_DEBUG( "broken CTP RoI = " << std::setw( 2 ) << i << ' '
145  << MSG::hex << std::setfill('0') << std::setw( 8 )
146  << ctp_rdo_data_inc[i]
147  << MSG::dec << std::setfill(' ') );
148  }
149  }
150  } else {
151  ATH_MSG_VERBOSE( "Retrieved CTP result from TES with key: "
152  << m_ctpSLinkLocation );
153  }
154 
155  if( ctp_simulation_error ) {
156 
157  REPORT_MESSAGE( MSG::WARNING )
158  << "Creating empty CTP RDO with error code!";
159  ctp_rdo_trailer.setSimulationError();
160 
161  } else {
162 
163  // prepare header
164  ctp_rdo_header = Header(std::vector<uint32_t>(ctp_slink->getHeader()));
165 
166  // get the data elements
167  ctp_rdo_data = ctp_slink->getDataElements();
168  if( msgLvl( MSG::DEBUG ) ) {
169  for (size_t i(0); i < ctp_rdo_data.size(); ++i) {
170  ATH_MSG_DEBUG( "CTP RoI = " << MSG::dec << std::setw( 2 ) << i
171  << " 0x" << MSG::hex << std::setfill('0') << std::setw( 8 )
172  << ctp_rdo_data[i]
173  << MSG::dec << std::setfill(' ') );
174  }
175  }
176 
177  // prepare trailer
178  ctp_rdo_trailer = Trailer(std::vector<uint32_t>(ctp_slink->getTrailer()));
179  }
180 
181  // build result
182  CTPResult ctp_rdo_result( ctp_slink->getCTPVersionNumber(), std::move(ctp_rdo_header),
183  std::move(ctp_rdo_trailer), ctp_rdo_data ); //ctp_rdo_data is not moved because it needs to be converted
184  ATH_MSG_VERBOSE( "Dump CTPResult object:\n" + ctp_rdo_result.dump() );
185 
186  //
187  // Check whether the event was accepted or not:
188  //
189  bool accept = ctp_slink->getAccept();
190  ATH_MSG_DEBUG( "L1 Accept = " << accept );
191 
193  // //
194  // egamma RoI //
195  // //
197 
198  std::vector< EMTauResult > emtau_rdo_result_vector;
199 
200 
201  for( unsigned int slink = 0; slink < numEMTauSlinks; ++slink ) {
202 
203  eformat::helper::SourceIdentifier
204  emtau_source_id( eformat::TDAQ_CALO_CLUSTER_PROC_ROI, slink );
205  Header emtau_rdo_header( emtau_source_id.code(), evtNum );
206  std::vector< EMTauRoI > emtau_rdo_data;
207 
208  bool emtau_simulation_error = false;
209  const DataVector< LVL1CTP::SlinkWord >* emtau_slink = 0;
210 
211  if( m_doCalo ) {
212  ATH_MSG_VERBOSE("Reading " << m_caloEMTauLocation[slink].key() );
213  auto handle = SG::makeHandle( m_caloEMTauLocation[slink] );
214  CHECK( handle.isValid() );
215  emtau_slink = handle.cptr();
216 
217  unsigned int icnt = 0;
219  emtau_slink->begin();
221  emtau_slink->end();
222  for( ; itr != end; ++itr ) {
223  ++icnt;
224  if( ( icnt > ( wordsPerHeader + 1 ) ) &&
225  ( icnt <= ( emtau_slink->size() - wordsPerTrailer - 1 ) ) ) {
226 
227  EMTauRoI emtau_roi( ( *itr )->word() );
228  emtau_rdo_data.push_back( emtau_roi );
229  ATH_MSG_DEBUG( "EmTau RoI = " << MSG::hex << std::setw( 8 )
230  << emtau_roi.roIWord() );
231  }
232  }
233 
234  } else {
235  emtau_simulation_error = true;
236  ATH_MSG_VERBOSE( "Retrieved EMTau Slink from TES with key: " << m_caloEMTauLocation[slink] );
237  }
238 
239 
240 
241  Trailer emtau_rdo_trailer( 0, 0 );
242  if( ! emtau_simulation_error ) {
243  emtau_rdo_trailer.setNumDataWords( emtau_rdo_data.size() );
244  } else {
245  emtau_rdo_trailer.setSimulationError();
246  }
247 
248  EMTauResult emtau_rdo_result( std::move(emtau_rdo_header), std::move(emtau_rdo_trailer),
249  std::move(emtau_rdo_data) );
250 
251  emtau_rdo_result_vector.push_back( emtau_rdo_result );
252  }
253 
255  // //
256  // jet/energy RoI //
257  // //
259 
260  std::vector< JetEnergyResult > jetenergy_rdo_result_vector;
261 
262  for( unsigned int slink = 0; slink < numJetEnergySlinks; ++slink ) {
263 
264  eformat::helper::SourceIdentifier
265  jetenergy_source_id( eformat::TDAQ_CALO_JET_PROC_ROI, slink );
266  Header jetenergy_rdo_header( jetenergy_source_id.code(), evtNum );
267  std::vector< JetEnergyRoI > jetenergy_rdo_data;
268 
269  bool jetenergy_simulation_error = false;
270  const DataVector< LVL1CTP::SlinkWord >* jetenergy_slink = 0;
271 
272  if( m_doCalo ) {
273  auto handle = SG::makeHandle( m_caloJetEnergyLocation[slink] );
274  CHECK( handle.isValid() );
275  jetenergy_slink = handle.cptr();
276 
277  ATH_MSG_VERBOSE( "Retrieved JetEnergy Slink from TES with key: "
278  << m_caloJetEnergyLocation[slink] );
279 
280  unsigned int icnt = 0;
282  jetenergy_slink->begin();
284  jetenergy_slink->end();
285  for( ; itr != end; ++itr ) {
286 
287  ++icnt;
288  if( ( icnt > ( wordsPerHeader + 1 ) ) &&
289  ( icnt <= ( jetenergy_slink->size() - wordsPerTrailer - 1 ) ) ) {
290 
291  JetEnergyRoI jetenergy_roi( ( *itr )->word() );
292  jetenergy_rdo_data.push_back( jetenergy_roi );
293  ATH_MSG_DEBUG( "Jet/Energy RoI = " << MSG::hex << std::setw( 8 )
294  << jetenergy_roi.roIWord() );
295  }
296  }
297  } else {
298  jetenergy_simulation_error = true;
299  }
300 
301 
302 
303  // Now wrap up the jet energy triggers:
304  Trailer jetenergy_rdo_trailer( 0, 0 );
305  if( !jetenergy_simulation_error ) {
306  jetenergy_rdo_trailer.setNumDataWords( jetenergy_rdo_data.size() );
307  } else {
308  jetenergy_rdo_trailer.setSimulationError();
309  }
310 
311  JetEnergyResult jetenergy_rdo_result( std::move(jetenergy_rdo_header),
312  std::move(jetenergy_rdo_trailer),
313  std::move(jetenergy_rdo_data) );
314 
315  jetenergy_rdo_result_vector.push_back( jetenergy_rdo_result );
316  }
317 
319  // //
320  // muon RoI //
321  // //
323 
324  eformat::helper::SourceIdentifier
325  muon_source_id( eformat::TDAQ_MUON_CTP_INTERFACE, 0 );
326  Header muctpi_rdo_header( muon_source_id.code(), evtNum );
327  std::vector< MuCTPIRoI > muctpi_rdo_data;
328 
329  bool muctpi_simulation_error = false;
330  const L1MUINT::MuCTPIToRoIBSLink* muctpi_slink = 0;
331 
332  if( m_doMuon ) {
333  auto handle = SG::makeHandle( m_muctpiSLinkLocation );
334  CHECK( handle.isValid() );
335  muctpi_slink = handle.cptr();
336  ATH_MSG_VERBOSE( "Retrieved MuCTPI result from TES with key: "
338 
339  unsigned int icnt = 0;
340  std::vector< unsigned int >::const_iterator itr =
341  muctpi_slink->getMuCTPIToRoIBWords().begin();
342  std::vector< unsigned int >::const_iterator end =
343  muctpi_slink->getMuCTPIToRoIBWords().end();
344  for( ; itr != end; ++itr ) {
345 
346  ++icnt;
347  if( ( icnt > ( wordsPerHeader + 1 ) ) &&
348  ( icnt <= ( muctpi_slink->getMuCTPIToRoIBWords().size() -
349  wordsPerTrailer ) ) ) {
350 
351  MuCTPIRoI muctpi_roi( *itr );
352  muctpi_rdo_data.push_back( muctpi_roi );
353  ATH_MSG_DEBUG( "MuCTPI RoI = " << MSG::hex << std::setw( 8 )
354  << muctpi_roi.roIWord() );
355  }
356  }
357  } else {
358  muctpi_simulation_error = true;
359  }
360 
361 
362 
363  Trailer muctpi_rdo_trailer( 0, 0 );
364  if( ! muctpi_simulation_error ) {
365  muctpi_rdo_trailer.setNumDataWords( muctpi_rdo_data.size() );
366  } else {
367  muctpi_rdo_trailer.setSimulationError();
368  }
369 
370  MuCTPIResult muctpi_rdo_result( std::move(muctpi_rdo_header), std::move(muctpi_rdo_trailer),
371  std::move(muctpi_rdo_data) );
372 
373  //
374  // Finally create RoIB RDO object:
375  //
376  std::unique_ptr<RoIBResult> roib_rdo_result = std::make_unique< RoIBResult>(
377  std::move(muctpi_rdo_result),
378  std::move(ctp_rdo_result),
379  std::move(jetenergy_rdo_result_vector),
380  std::move(emtau_rdo_result_vector) );
381  if( msgLvl( MSG::DEBUG ) ) {
382  ATH_MSG_DEBUG( "RoIB Results:" );
383  roib_rdo_result->muCTPIResult().dumpData( msg( MSG::DEBUG ) );
384  // roib_rdo_result->eMTauResult();
385  // roib_rdo_result->jetEnergyResult();
386  ATH_MSG_DEBUG( roib_rdo_result->cTPResult().dump() );
387  }
388 
389  //
390  // Put RoIB RDO object into SG:
391  //
392  auto roibHandle = SG::makeHandle( m_roibRDOLocation );
393  CHECK( roibHandle.record( std::move( roib_rdo_result ) ) );
394  // no owerwrite possible with DataHandles
395 
396  return StatusCode::SUCCESS;
397  }

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase &  ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51 {
52  // If we didn't find any symlinks to add, just return the collection
53  // from the base class. Otherwise, return the extended collection.
54  if (!m_extendedExtraObjects.empty()) {
56  }
57  return Algorithm::extraOutputDeps();
58 }

◆ initialize()

StatusCode ROIB::RoIBuilder::initialize ( )
overridevirtual

Definition at line 44 of file RoIBuilder.cxx.

44  {
45 
46  ATH_MSG_INFO( "========================================" );
47  ATH_MSG_INFO( "Initialisation for RoIBuilder algorithm." );
48  ATH_MSG_INFO( "========================================" );
49  // Print system info
50  if( ! m_doCalo ) {
51  ATH_MSG_WARNING( "Inputs from LVL1 Calo systems switched off" );
52  }
53  if( ! m_doMuon ) {
54  ATH_MSG_WARNING("Inputs from LVL1 Muon systems switched off" );
55  }
56 
58 
59  if ( m_doCalo ) {
60  CHECK( not m_caloEMTauLocation.empty() );
61  CHECK( not m_caloJetEnergyLocation.empty() );
62  } else {
65  }
66  CHECK( m_caloEMTauLocation.initialize() );
67  CHECK( m_caloJetEnergyLocation.initialize() );
68 
69 
70  if ( m_doMuon ) {
71  CHECK( not m_muctpiSLinkLocation.key().empty() );
72  } else {
74  }
76 
78  CHECK( m_roibRDOLocation.initialize() );
79 
80  return StatusCode::SUCCESS;
81  }

◆ inputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ msg() [1/2]

MsgStream& AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24  {
25  return this->msgStream();
26  }

◆ msg() [2/2]

MsgStream& AthCommonMsg< Algorithm >::msg ( const MSG::Level  lvl) const
inlineinherited

Definition at line 27 of file AthCommonMsg.h.

27  {
28  return this->msgStream(lvl);
29  }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level  lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30  {
31  return this->msgLevel(lvl);
32  }

◆ outputHandles()

virtual std::vector<Gaudi::DataHandle*> AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t<std::is_void_v<std::result_of_t<decltype(&T::renounce)(T)> > && !std::is_base_of_v<SG::VarHandleKeyArray, T> && std::is_base_of_v<Gaudi::DataHandle, T>, void> AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T &  h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381  {
382  h.renounce();
383  PBASE::renounce (h);
384  }

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364  {
365  handlesArray.renounce();
366  }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, PyAthena::Alg, and AthHistogramAlgorithm.

Definition at line 66 of file AthAlgorithm.cxx.

66  {
68 
69  if (sc.isFailure()) {
70  return sc;
71  }
72  ServiceHandle<ICondSvc> cs("CondSvc",name());
73  for (auto h : outputHandles()) {
74  if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75  // do this inside the loop so we don't create the CondSvc until needed
76  if ( cs.retrieve().isFailure() ) {
77  ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78  return StatusCode::SUCCESS;
79  }
80  if (cs->regHandle(this,*h).isFailure()) {
81  sc = StatusCode::FAILURE;
82  ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83  << " with CondSvc");
84  }
85  }
86  }
87  return sc;
88 }

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase &  )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308  {
309  // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310  // << " size: " << m_vhka.size() << endmsg;
311  for (auto &a : m_vhka) {
312  std::vector<SG::VarHandleKey*> keys = a->keys();
313  for (auto k : keys) {
314  k->setOwner(this);
315  }
316  }
317  }

Member Data Documentation

◆ m_caloEMTauLocation

SG::ReadHandleKeyArray< SlinkWordDV > ROIB::RoIBuilder::m_caloEMTauLocation
private
Initial value:

Definition at line 57 of file RoIBuilder.h.

◆ m_caloJetEnergyLocation

SG::ReadHandleKeyArray< SlinkWordDV > ROIB::RoIBuilder::m_caloJetEnergyLocation
private
Initial value:
{ this, "CaloJetEnergyLocation",
"StoreGate location of JetEnergy inputs" }

Definition at line 64 of file RoIBuilder.h.

◆ m_ctpSLinkLocation

SG::ReadHandleKey<LVL1CTP::CTPSLink> ROIB::RoIBuilder::m_ctpSLinkLocation
private
Initial value:
{ this, "CTPSLinkLocation",
LVL1CTP::DEFAULT_CTPSLinkLocation, "StoreGate location of CTP RoI"}

Definition at line 50 of file RoIBuilder.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_doCalo

Gaudi::Property<bool> ROIB::RoIBuilder::m_doCalo { this, "DoCalo", true, "Use inputs from Calo system" }
private

Definition at line 46 of file RoIBuilder.h.

◆ m_doMuon

Gaudi::Property<bool> ROIB::RoIBuilder::m_doMuon { this, "DoMuon", true, "Use inputs from Muon system" }
private

Definition at line 47 of file RoIBuilder.h.

◆ m_eventInfoKey

SG::ReadHandleKey<xAOD::EventInfo> ROIB::RoIBuilder::m_eventInfoKey { this, "EventInfoKey", "EventInfo", "Event info object "}
private

Definition at line 55 of file RoIBuilder.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_muctpiSLinkLocation

SG::ReadHandleKey<L1MUINT::MuCTPIToRoIBSLink> ROIB::RoIBuilder::m_muctpiSLinkLocation
private
Initial value:
{ this, "MuCTPISLinkLocation",
LVL1MUCTPI::DEFAULT_MuonRoIBLocation,
"StoreGate location of MuCTPI inputs" }

Definition at line 69 of file RoIBuilder.h.

◆ m_roibRDOLocation

SG::WriteHandleKey<RoIBResult> ROIB::RoIBuilder::m_roibRDOLocation { this, "RoIBRDOLocation", ROIB::DEFAULT_RoIBRDOLocation, "StoreGate location of RoIB RDO" }
private

Definition at line 73 of file RoIBuilder.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files:
DataModel_detail::const_iterator
Const iterator class for DataVector/DataList.
Definition: DVLIterator.h:82
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
ATH_MSG_INFO
#define ATH_MSG_INFO(x)
Definition: AthMsgStreamMacros.h:31
ROIB::RoIBuilder::m_caloJetEnergyLocation
SG::ReadHandleKeyArray< SlinkWordDV > m_caloJetEnergyLocation
Definition: RoIBuilder.h:64
xAOD::EventInfo_v1::eventNumber
uint64_t eventNumber() const
The current event's event number.
ROIB::RoIBuilder::m_ctpSLinkLocation
SG::ReadHandleKey< LVL1CTP::CTPSLink > m_ctpSLinkLocation
Definition: RoIBuilder.h:50
AthCommonDataStore::declareProperty
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
Definition: AthCommonDataStore.h:145
ROIB::RoIBuilder::m_doMuon
Gaudi::Property< bool > m_doMuon
Definition: RoIBuilder.h:47
CutsMETMaker::accept
StatusCode accept(const xAOD::Muon *mu)
Definition: CutsMETMaker.cxx:18
AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)
Definition: AthCommonDataStore.h:380
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Definition: AthCommonDataStore.h:390
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
std::vector< SG::VarHandleKeyArray * > m_vhka
Definition: AthCommonDataStore.h:398
AthCommonMsg< Algorithm >::msgLvl
bool msgLvl(const MSG::Level lvl) const
Definition: AthCommonMsg.h:30
AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray
void renounceArray(SG::VarHandleKeyArray &handlesArray)
remove all handles from I/O resolution
Definition: AthCommonDataStore.h:364
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
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
AthenaPoolTestRead.sc
sc
Definition: AthenaPoolTestRead.py:27
mergePhysValFiles.end
end
Definition: DataQuality/DataQualityUtils/scripts/mergePhysValFiles.py:93
SG::VarHandleKeyArray::setOwner
virtual void setOwner(IDataHandleHolder *o)=0
ROIB::RoIBuilder::m_caloEMTauLocation
SG::ReadHandleKeyArray< SlinkWordDV > m_caloEMTauLocation
Definition: RoIBuilder.h:57
SG::makeHandle
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
Definition: ReadCondHandle.h:269
ROIB::RoIBuilder::m_roibRDOLocation
SG::WriteHandleKey< RoIBResult > m_roibRDOLocation
Definition: RoIBuilder.h:73
AthCommonDataStore
Definition: AthCommonDataStore.h:52
AthAlgorithm::sysInitialize
virtual StatusCode sysInitialize() override
Override sysInitialize.
Definition: AthAlgorithm.cxx:66
ATH_MSG_ERROR
#define ATH_MSG_ERROR(x)
Definition: AthMsgStreamMacros.h:33
AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
Return this algorithm's output handles.
LVL1::TrigT1CaloDefs::EmTauSlinkLocation
static const std::string EmTauSlinkLocation
Definition: TrigT1CaloDefs.h:81
lumiFormat.i
int i
Definition: lumiFormat.py:92
LVL1::TrigT1CaloDefs::jepSlinkLocation
static const std::string jepSlinkLocation
Definition: TrigT1CaloDefs.h:82
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
CHECK
#define CHECK(...)
Evaluate an expression and check for errors.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:422
AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Definition: AthCommonDataStore.h:393
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
ROIB::RoIBuilder::m_muctpiSLinkLocation
SG::ReadHandleKey< L1MUINT::MuCTPIToRoIBSLink > m_muctpiSLinkLocation
Definition: RoIBuilder.h:69
DataVector
Derived DataVector<T>.
Definition: DataVector.h:581
SG::VarHandleKeyArray::renounce
virtual void renounce()=0
SG::HandleClassifier::type
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Definition: HandleClassifier.h:54
pmontree.code
code
Definition: pmontree.py:443
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:195
ROIB::RoIBuilder::m_eventInfoKey
SG::ReadHandleKey< xAOD::EventInfo > m_eventInfoKey
Definition: RoIBuilder.h:55
REPORT_MESSAGE
#define REPORT_MESSAGE(LVL)
Report a message.
Definition: Control/AthenaKernel/AthenaKernel/errorcheck.h:365
xAOD::EventInfo_v1
Class describing the basic event information.
Definition: EventInfo_v1.h:43
DataVector::end
const_iterator end() const noexcept
Return a const_iterator pointing past the end of the collection.
ROIB::RoIBuilder::m_doCalo
Gaudi::Property< bool > m_doCalo
Definition: RoIBuilder.h:46
AthAlgorithm::m_extendedExtraObjects
DataObjIDColl m_extendedExtraObjects
Definition: AthAlgorithm.h:79
a
TList * a
Definition: liststreamerinfos.cxx:10
h
ATH_MSG_WARNING
#define ATH_MSG_WARNING(x)
Definition: AthMsgStreamMacros.h:32
DEBUG
#define DEBUG
Definition: page_access.h:11
AthCommonMsg< Algorithm >::msg
MsgStream & msg() const
Definition: AthCommonMsg.h:24
SG::VarHandleBase::vhKey
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Definition: StoreGate/src/VarHandleBase.cxx:616
declareProperty
#define declareProperty(n, p, h)
Definition: BaseFakeBkgTool.cxx:15
AthAlgorithm::AthAlgorithm
AthAlgorithm()
Default constructor:
python.Bindings.keys
keys
Definition: Control/AthenaPython/python/Bindings.py:790
LHEF::Writer
Pythia8::Writer Writer
Definition: Prophecy4fMerger.cxx:12
DataVector::size
size_type size() const noexcept
Returns the number of elements in the collection.
AthCommonDataStore::declareGaudiProperty
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition: AthCommonDataStore.h:156
PixelByteStreamErrors::Trailer
@ Trailer
Definition: PixelByteStreamErrors.h:13
DataVector::begin
const_iterator begin() const noexcept
Return a const_iterator pointing at the beginning of the collection.
fitman.k
k
Definition: fitman.py:528
ServiceHandle< ICondSvc >
mapkey::key
key
Definition: TElectronEfficiencyCorrectionTool.cxx:37