BOSS 7.1.1
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
42DECLARE_COMPONENT(TruthDemo)
43TruthDemo::TruthDemo(const std::string& name, ISvcLocator* pSvcLocator) :
44 Algorithm(name, pSvcLocator)
45{
46//Declare the algorithm's properties
47 declareProperty("HistogramFlag", m_produceHistogram = true );
48// declareProperty("HistogramFlag", m_produceHistogram = false );
49}
50
52 StatusCode result = StatusCode::SUCCESS;
53 MsgStream msglog(messageService(), name());
54 msglog << MSG::INFO << ">>> Truthdemo from Initialize" << endreq;
55 m_hgenerated = histoSvc()->book("/stat/1Dhist/1","Generated",100,0,1200);
56 if (0 == m_hgenerated) {
57 msglog << MSG::ERROR << " ERROR booking histogram" << endreq;
58 result = StatusCode::FAILURE;
59 }
60 m_pxBalance = histoSvc()->book("/stat/1Dhist/25","px balance",50,-10.,10.);
61 m_pyBalance = histoSvc()->book("/stat/1Dhist/26","py balance",50,-10.,10.);
62 m_totEnergy = histoSvc()->book("/stat/1Dhist/27","total energy",50,10000.,20000.);
63 m_tesIO = new GenAccessIO();
64
65// return StatusCode::SUCCESS;
66 return result;
67}
68StatusCode TruthDemo::execute() {
69// HepMC::IO_PDG_ParticleDataTable pdg_io("PDGTABLE");
70// static HepMC::ParticleDataTable *pp = NULL;
71// if (pp == NULL) pp = pdg_io.read_particle_data_table();
72 MsgStream msglog(messageService(), name());
73 msglog << MSG::INFO << ">>> TruthDemo from execute" << endreq;
74 //
75 // Px/Py Balance and total energy
76 //
77 float totenergy = 0.;
78 float pxbalance = 0.;
79 float pybalance = 0.;
80 // Iterate over MC particles We are using the IsGenStable predicate from
81 IsGenStable ifs;
82 std::vector<const HepMC::GenParticle*> particles;
83 StatusCode stat = m_tesIO->getMC(particles, &ifs);
84 for (std::vector<const HepMC::GenParticle*>::iterator pitr = particles.begin();
85 pitr != particles.end(); pitr++) {
86 pxbalance += (*pitr)->momentum().x();
87 pybalance += (*pitr)->momentum().y();
88 totenergy += (*pitr)->momentum().e();
89 }
90 m_pxBalance->fill(pxbalance, 1.);
91 m_pyBalance->fill(pybalance, 1.);
92 m_totEnergy->fill(totenergy, 1.);
93 // End of execution for each event
94 return StatusCode::SUCCESS;
95}
96
97StatusCode TruthDemo::finalize() {
98 MsgStream msglog(messageService(), name());
99 msglog << MSG::INFO << ">>> TruthDemo from finalize" << endreq;
100 return StatusCode::SUCCESS;
101}
102
103
IHistogramSvc * histoSvc()
std::vector< const HepMC::GenParticle * > MCparticleCollection
Definition TruthDemo.cxx:36
const IAlgFactory & TruthDemoFactory
Definition TruthDemo.cxx:40
StatusCode getMC(MCparticleCollection &) const
StatusCode finalize()
Definition TruthDemo.cxx:97
StatusCode execute()
Definition TruthDemo.cxx:68
StatusCode initialize()
Definition TruthDemo.cxx:51