The Gaudi Framework  v30r3 (a5ef0a68)
HiveTestAlgorithm.cpp
Go to the documentation of this file.
4 
5 #include <atomic>
6 
7 DECLARE_COMPONENT( HiveTestAlgorithm )
8 
9 using namespace std;
10 
12 {
13  int m_data;
16 
17 public:
18  MyObject( int d ) : m_data( d ) { c_instances++; }
19  MyObject( const MyObject& o ) : DataObject(), m_data( o.m_data ) { c_instances++; }
20  ~MyObject() { d_instances++; }
21  int getData() { return m_data; }
22  static void dump() { cout << "MyObject (C/D): " << c_instances << "/" << d_instances << endl; }
23 };
24 
27 
29 {
30  info() << ":HiveTestAlgorithm::initialize " << endmsg;
31 
32  int i = 0;
33  for ( auto k : m_inputs ) {
34  debug() << "adding input key " << k << endmsg;
35  m_inputHandles.push_back( new DataObjectHandle<DataObject>( k, Gaudi::DataHandle::Reader, this ) );
36  declareProperty( "dummy_in_" + std::to_string( i ), *( m_inputHandles.back() ) );
37  i++;
38  }
39 
40  i = 0;
41  for ( auto k : m_outputs ) {
42  debug() << "adding output key " << k << endmsg;
43  m_outputHandles.push_back( new DataObjectHandle<DataObject>( k, Gaudi::DataHandle::Writer, this ) );
44  declareProperty( "dummy_out_" + std::to_string( i ), *( m_outputHandles.back() ) );
45  i++;
46  }
47 
48  return StatusCode::SUCCESS;
49 }
50 
52 {
53  ++m_total;
55 
56  info() << ":HiveTestAlgorithm::getting inputs... " << evt << endmsg;
57 
58  for ( auto& handle : m_inputHandles ) {
59  auto obj = dynamic_cast<MyObject*>( handle->get() );
60  if ( !obj ) {
61  fatal() << "Unable to dcast inputHandles object" << endmsg;
62  return StatusCode::FAILURE;
63  }
64  info() << "Got data with value " << obj->getData() << endmsg;
65  }
66 
67  info() << ":HiveTestAlgorithm::registering outputs... " << evt << endmsg;
68 
69  for ( auto& outputHandle : m_outputHandles ) {
70  outputHandle->put( new MyObject( 1000 + evt ) );
71  }
72 
73  return StatusCode::SUCCESS;
74 }
75 
77 {
78  info() << name() << ":HiveTestAlgorithm::finalize - total events: " << m_total << endmsg;
80  return StatusCode::SUCCESS;
81 }
82 
84 
constexpr static const auto FAILURE
Definition: StatusCode.h:88
static atomic< int > c_instances
MyObject(const MyObject &o)
T to_string(T...args)
T endl(T...args)
virtual const std::vector< std::string > get_outputs()
STL namespace.
static void dump()
#define class
static atomic< int > d_instances
ContextEvt_t evt() const
Definition: EventContext.h:39
#define DECLARE_COMPONENT(type)
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:51
Gaudi::Details::PropertyBase * declareProperty(const std::string &name, TYPE &value, const std::string &doc="none")
Declare a property (templated)
GAUDI_API const EventContext & currentContext()
StatusCode initialize() override
constexpr static const auto SUCCESS
Definition: StatusCode.h:87
std::vector< InputHandle_t< In > > m_inputs
virtual const std::vector< std::string > get_inputs()
StatusCode execute() override
StatusCode finalize() override
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
evt
Definition: IOTest.py:96