BOSS 7.0.1
BESIII Offline Software System
Loading...
Searching...
No Matches
EvtDecay.h
Go to the documentation of this file.
1//*****************************************************************************
2//
3// Generators/EvtGen_i/EvtDecay.h
4//
5// This module takes HepMC events from the transient store and decays
6// particles including the secondaries unstable particles
7// in EvtGen.
8// It is a TopAlg can be used in conjunction Pythia KKMC
9// and SingleParticleGun
10//
11// October 2005 adapted to be used in BES3 by A.Zhemchugov
12// November 2003: Maria Smizanska
13// August 2002: Malte Muller, [email protected]
14// Original LHCb code by Witold Pokorski
15//
16//*****************************************************************************
17
18#ifndef GENERATORMODULESEVTDECAY_H
19#define GENERATORMODULESEVTDECAY_H
20
21#include "HepMC/GenEvent.h"
22#include "HepMC/GenParticle.h"
23
27#include "EvtGen.hh"
29
30#include "GaudiKernel/Algorithm.h"
31#include "GaudiKernel/ISvcLocator.h"
32#include "GaudiKernel/NTuple.h"
33
34#include "CLHEP/Random/Ranlux64Engine.h"
35#include <stdio.h>
36#include <vector>
39#include "EvtGenBase/EvtId.hh"
40
41#include "DataInfoSvc/IDataInfoSvc.h"
42#include "DataInfoSvc/DataInfoSvc.h"
43
44//#include "TFile.h"
45//#include "TTree.h"
46//#include "GaudiKernel/NTuple.h"
47
48class IBesRndmGenSvc;
49
50using namespace std;
51using namespace CLHEP;
52
54{
55public:
56 EvtBesRandom(HepRandomEngine* engine);
57 double random();
58 virtual ~EvtBesRandom();
59
60
61private:
62 HepRandomEngine* m_engine;
63};
64
65class EvtDecay:public Algorithm
66{
67public:
68 EvtDecay(const string& name, ISvcLocator* pSvcLocator);
69
70 StatusCode initialize();
71 StatusCode execute();
72 StatusCode finalize();
73 //--
76
77double ampsLenu(vector<double> Vexp,std::vector<double> vpars);
78double ampsLbenu(vector<double> Vexp,std::vector<double> vpars);
79double HV(double i,double j,vector<double> Vexp, std::vector<double> vpars);
80double HA(double i,double j,vector<double> Vexp, std::vector<double> vpars);
81
82private:
83 StatusCode callEvtGen( HepMC::GenEvent* hepMCevt );
84 StatusCode callBesEvtGen( HepMC::GenEvent* hepMCevt );
85 StatusCode makeHepMC(EvtParticle*, HepMC::GenEvent*, HepMC::GenParticle*);
86
87 double CalAmpsMax( EvtParticle* part );
88 double CalAmpsMDIY(EvtParticle* part );
89
90 void MeVToGeV(HepMC::GenEvent* hepMCevt);
91 void GeVToMeV(HepMC::GenEvent* hepMCevt);
92
93 void ReadTruth(EvtParticle* part,std::vector<std::vector<string> > mylist);
94 // data members
95 int m_targetID;
96 int isNumber(double d);
97//for EvtGen interface
98 EvtGen* m_Gen;
99 EvtBesRandom* m_RandomEngine;
100
101// Local Member Data:-
102 IBesRndmGenSvc* p_BesRndmGenSvc;
103 vector<long int> m_seeds;
104
105
106// jobOption params
107string m_DecayDec, m_PdtTable, userDecFileName,m_DecayTop,m_DecayRec, m_ParentPart;
108
109 std::ofstream outfile,outfile2,truth;
110 std::vector<int> m_InSeeds;
111
112 bool _mDIY,m_RdMeasuredEcms;
113 double dbEcms;
114 bool m_ampscalflag;
115 bool m_Ncharge,m_NtupleFile, m_Psi4040OpenCharm, m_Psi2openCharm, m_statDecays;
116 int m_numberEvent;
117 int AllTrk_index,Trk_index[500];
118 double px_trk[500];
119 double py_trk[500];
120 double pz_trk[500];
121 double en_trk[500];
122// --- SuperBody3decay
123 void SuperBody3decay_make(EvtId ppid, EvtVector4R p_init);
124 bool SuperBody3decay_judge(EvtParticle* part);
125 string m_SB3File, m_SB3HT;
126 EvtHis2F SuperBody3decay;
127 bool first;
128 int parentPDGcode;
129 double parentMass;
130
131 int pdg0,pdg1,pdg2,pdg,multi;
132 EvtVector4R son0,son1,son2,son;
133 void FinalState_make(EvtId ppid, EvtVector4R p_init);
134 void FinalState_sort(EvtParticle* part);
135 void assign_momentum(int pdx, EvtVector4R pv4);
136 void assign_momentum2(int pdx, EvtVector4R pv4); // for two identical particle
137 bool identical_flag;
138 string m_FDPparticle;
139 EvtVector4R FDP_init;
140 EvtId FDP_id;
141 EvtParticle* FDP_part;
142 void findPart(EvtParticle* part);
143 void countChannel(EvtParticle* part);
144 int br[500],vbr[500];
145 int totalChannels;
146 bool isCharmonium(EvtId xid);
147 bool isCharm(EvtId xid);
148 bool isRadecay(EvtParticle* par);
149 string m_outputp4;
150 int decayType(EvtParticle *par);
151 std::string getModel(EvtParticle* par, int mode);
152 std::string getModel(EvtParticle* par);
153 bool m_tagLundModel;
154
155 std::vector<std::string> m_mystring;
156 std::vector<double> m_wind0,m_wind1,m_wind2;
157 std::vector<int> m_cluster0,m_cluster1,m_cluster2;
158 static int m_runNo;
159 std::vector<std::vector<std::string> > m_ReadTruth;
160
161 double m_eBeamPolarization;
162 int writeFlag;
163 EvtId m_KKMCRes;
164 std::vector<double> m_polarization;
165 std::string m_truthFile,m_truthPart;
166// for Ntuple
167NTuple::Tuple* m_tuple;
168NTuple::Item<int> TotNumTrk;
169NTuple::Item<int> m_nchr;
170NTuple::Item<int> m_nchr_e;
171NTuple::Item<int> m_nchr_mu;
172NTuple::Item<int> m_nchr_pi;
173NTuple::Item<int> m_nchr_k;
174NTuple::Item<int> m_nchr_p;
175NTuple::Item<int> m_gamma;
176NTuple::Item<int> m_gammaFSR;
177NTuple::Item<int> m_flag1;
178
179NTuple::Array<int> m_Trk_index;
180NTuple::Array<int> m_fst;
181NTuple::Array<double> m_px_trk;
182NTuple::Array<double> m_py_trk;
183NTuple::Array<double> m_pz_trk;
184NTuple::Array<double> m_en_trk;
185
186NTuple::Tuple* mass_tuple;
187NTuple::Item<double> m_m12;
188NTuple::Item<double> m_m13;
189NTuple::Item<double> m_m23;
190NTuple::Item<double> m_m1;
191NTuple::Item<double> m_m2;
192NTuple::Item<double> m_m3;
193NTuple::Item<double> m_cos1;
194NTuple::Item<double> m_cos2;
195NTuple::Item<double> m_cos3;
196NTuple::Item<int> m_ich;
197NTuple::Tuple* massgen_tuple;
198NTuple::Item<double> _m12;
199NTuple::Item<double> _m13;
200NTuple::Item<double> _m23;
201NTuple::Item<double> _m1;
202NTuple::Item<double> _m2;
203NTuple::Item<double> _m3;
204NTuple::Item<double> _cos1;
205NTuple::Item<double> _cos2;
206NTuple::Item<double> _cos3;
207NTuple::Item<int> _ich;
208/////////////
209};
210
211#endif
double random()
Definition: EvtDecay.cxx:1111
virtual ~EvtBesRandom()
Definition: EvtDecay.cxx:1108
double ampsLenu(vector< double > Vexp, std::vector< double > vpars)
DataInfoSvc * dataInfoSvc
Definition: EvtDecay.h:75
IDataInfoSvc * tmpInfoSvc
Definition: EvtDecay.h:74
StatusCode initialize()
Definition: EvtDecay.cxx:129
StatusCode finalize()
Definition: EvtDecay.cxx:944
double ampsLbenu(vector< double > Vexp, std::vector< double > vpars)
StatusCode execute()
Definition: EvtDecay.cxx:322
double HV(double i, double j, vector< double > Vexp, std::vector< double > vpars)
double HA(double i, double j, vector< double > Vexp, std::vector< double > vpars)
Definition: EvtGen.hh:46
Definition: EvtId.hh:27
manage multiple CLHEP random engines as named streams