...
Panel | ||
---|---|---|
|
...
GlastRandomSvc - can't recall why, but we implemented our own random number service that initializes the seeds of the random number generators for all packages that obtain random numbers. We desired to have event by event reproducibility (which we didn't achieve)...rather we can reproduce a run.
Toy Example
Code Block |
---|
#include "GaudiKernel/Algorithm.h"
#include "GaudiKernel/Property.h"
#include "GaudiKernel/MsgStream.h"
#include "GaudiKernel/AlgFactory.h"
#include "GaudiKernel/DataObject.h"
#include "GaudiKernel/IDataProviderSvc.h"
#include "GaudiKernel/SmartDataPtr.h"
#include "Event/TopLevel/Event.h"
#include "Event/TopLevel/EventModel.h"
/** @class HelloWorld @brief Simple Hello World example Gaudi algorithm. Prints Hello World with different priority levels.
$Header$
*/
class HelloWorld : public Algorithm {
public:
/// Constructor of this form must be provided
HelloWorld(const std::string& name, ISvcLocator* pSvcLocator) : Algorithm(name, pSvcLocator) { };
/// Three mandatory member functions of any Gaudi algorithm
StatusCode initialize() { return StatusCode::SUCCESS; };
StatusCode execute();
StatusCode finalize() { return StatusCode::SUCCESS; };
private:
};
// Static Factory declaration
static const AlgFactory<HelloWorld> Factory;
const IAlgFactory& HelloWorldFactory = Factory;
StatusCode HelloWorld::execute() {
MsgStream log( msgSvc(), name() );
static int eventCounter = 0;
// Sending informational log message
log << MSG::INFO << "Hello World!" << endreq;
// Access the Event TDS and retrieve the top-level "Event" object
SmartDataPtr<Event::EventHeader> evtTds(eventSvc(), EventModel::EventHeader);
if (evtTds) {
evtTds->setRun(10);
evtTds->setEvent(eventCounter++);
log << MSG::INFO << "<RunId, EvtId> = <" << evtTds->run() << ", " << evtTds->event() << ">" << endreq;
}
return StatusCode::SUCCESS;
}
|
References
Some words from Fermi's Online Workbook.
...