BOSS 7.0.7
BESIII Offline Software System
Loading...
Searching...
No Matches
TruthDemo.cxx
Go to the documentation of this file.
1// Example algoritm to demonstrate how to use
2// the predicates in Genarators/GenAnalysisTools/TruthHelper
3// Ian Hinchliffe
4// January 2003#include <math.h>
5//
8
9#include "GaudiKernel/MsgStream.h"
10#include "GaudiKernel/AlgFactory.h"
11
12#include "GaudiKernel/SmartDataPtr.h"
13#include "GaudiKernel/DataSvc.h"
14
15#include "GaudiKernel/IHistogramSvc.h"
16
18
19#include "AIDA/IHistogram1D.h"
20#include "AIDA/IHistogram2D.h"
21
22#include "GaudiKernel/PropertyMgr.h"
23#include "GaudiKernel/INTupleSvc.h"
24#include "GaudiKernel/ISvcLocator.h"
25#include "GaudiKernel/IDataProviderSvc.h"
26#include "GaudiKernel/MsgStream.h"
27#include "GaudiKernel/ObjectList.h"
28
29#include "HepMC/GenEvent.h"
30#include "HepMC/GenParticle.h"
31// #include "HepMC/ParticleData.h"
32// #include "HepMC/ParticleDataTable.h"
33// #include "HepMC/IO_PDG_ParticleDataTable.h"
34#include "HepMC/GenVertex.h"
35
36typedef std::vector<const HepMC::GenParticle*> MCparticleCollection ;
37
38
39static const AlgFactory<TruthDemo> Factory;
40const IAlgFactory& TruthDemoFactory = Factory;
41
42TruthDemo::TruthDemo(const std::string& name, ISvcLocator* pSvcLocator) :
43 Algorithm(name, pSvcLocator)
44{
45//Declare the algorithm's properties
46 declareProperty("HistogramFlag", m_produceHistogram = true );
47// declareProperty("HistogramFlag", m_produceHistogram = false );
48}
49
51 StatusCode result = StatusCode::SUCCESS;
52 MsgStream msglog(messageService(), name());
53 msglog << MSG::INFO << ">>> Truthdemo from Initialize" << endreq;
54 m_hgenerated = histoSvc()->book("/stat/1Dhist/1","Generated",100,0,1200);
55 if (0 == m_hgenerated) {
56 msglog << MSG::ERROR << " ERROR booking histogram" << endreq;
57 result = StatusCode::FAILURE;
58 }
59 m_pxBalance = histoSvc()->book("/stat/1Dhist/25","px balance",50,-10.,10.);
60 m_pyBalance = histoSvc()->book("/stat/1Dhist/26","py balance",50,-10.,10.);
61 m_totEnergy = histoSvc()->book("/stat/1Dhist/27","total energy",50,10000.,20000.);
62 m_tesIO = new GenAccessIO();
63
64// return StatusCode::SUCCESS;
65 return result;
66}
67StatusCode TruthDemo::execute() {
68// HepMC::IO_PDG_ParticleDataTable pdg_io("PDGTABLE");
69// static HepMC::ParticleDataTable *pp = NULL;
70// if (pp == NULL) pp = pdg_io.read_particle_data_table();
71 MsgStream msglog(messageService(), name());
72 msglog << MSG::INFO << ">>> TruthDemo from execute" << endreq;
73 //
74 // Px/Py Balance and total energy
75 //
76 float totenergy = 0.;
77 float pxbalance = 0.;
78 float pybalance = 0.;
79 // Iterate over MC particles We are using the IsGenStable predicate from
80 IsGenStable ifs;
81 std::vector<const HepMC::GenParticle*> particles;
82 StatusCode stat = m_tesIO->getMC(particles, &ifs);
83 for (std::vector<const HepMC::GenParticle*>::iterator pitr = particles.begin();
84 pitr != particles.end(); pitr++) {
85 pxbalance += (*pitr)->momentum().x();
86 pybalance += (*pitr)->momentum().y();
87 totenergy += (*pitr)->momentum().e();
88 }
89 m_pxBalance->fill(pxbalance, 1.);
90 m_pyBalance->fill(pybalance, 1.);
91 m_totEnergy->fill(totenergy, 1.);
92 // End of execution for each event
93 return StatusCode::SUCCESS;
94}
95
96StatusCode TruthDemo::finalize() {
97 MsgStream msglog(messageService(), name());
98 msglog << MSG::INFO << ">>> TruthDemo from finalize" << endreq;
99 return StatusCode::SUCCESS;
100}
101
102
IHistogramSvc * histoSvc()
std::vector< const HepMC::GenParticle * > MCparticleCollection
Definition: TruthDemo.cxx:36
const IAlgFactory & TruthDemoFactory
Definition: TruthDemo.cxx:40
StatusCode getMC(MCparticleCollection &) const
Definition: GenAccessIO.cxx:9
StatusCode finalize()
Definition: TruthDemo.cxx:96
StatusCode execute()
Definition: TruthDemo.cxx:67
StatusCode initialize()
Definition: TruthDemo.cxx:50
TruthDemo(const std::string &name, ISvcLocator *pSvcLocator)
Definition: TruthDemo.cxx:42