BOSS 7.0.8
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
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);
81double getObsXsection(double mhds,int mode);
82double energySpread(double mu,double sigma);
83
84
85private:
86 StatusCode callEvtGen( HepMC::GenEvent* hepMCevt );
87 StatusCode callBesEvtGen( HepMC::GenEvent* hepMCevt );
88 StatusCode makeHepMC(EvtParticle*, HepMC::GenEvent*, HepMC::GenParticle*);
89
90 double CalAmpsMax( EvtParticle* part );
91 double CalAmpsMDIY(EvtParticle* part );
92
93 void MeVToGeV(HepMC::GenEvent* hepMCevt);
94 void GeVToMeV(HepMC::GenEvent* hepMCevt);
95
96 void ReadTruth(EvtParticle* part,std::vector<std::vector<string> > mylist);
97 // data members
98 int m_targetID;
99 int isNumber(double d);
100 double m_SetMthr;
101//for EvtGen interface
102 EvtGen* m_Gen;
103 EvtBesRandom* m_RandomEngine;
104
105// Local Member Data:-
106 IBesRndmGenSvc* p_BesRndmGenSvc;
107 vector<long int> m_seeds;
108
109
110// jobOption params
111string m_DecayDec, m_PdtTable, userDecFileName,m_DecayTop,m_DecayRec, m_ParentPart,m_printfs;
112
113 std::ofstream outfile,outfile2,truth;
114 std::vector<int> m_InSeeds;
115
116 bool _mDIY,m_RdMeasuredEcms, _truthAtCM;
117 double dbEcms, m_beamEnergySpread;
118 bool m_ampscalflag;
119 bool m_Ncharge,m_NtupleFile, m_Psi4040OpenCharm, m_Psi2openCharm, m_statDecays;
120 int m_numberEvent;
121 int AllTrk_index,Trk_index[500];
122 double px_trk[500];
123 double py_trk[500];
124 double pz_trk[500];
125 double en_trk[500];
126 // --- SuperBody3decay
127 void SuperBody3decay_make(EvtId ppid, EvtVector4R p_init);
128 bool SuperBody3decay_judge(EvtParticle* part);
129 string m_SB3File, m_SB3HT;
130 EvtHis2F SuperBody3decay;
131 bool first;
132 int parentPDGcode;
133 double parentMass;
134
135 int pdg0,pdg1,pdg2,pdg,multi;
136 EvtVector4R son0,son1,son2,son;
137 void FinalState_make(EvtId ppid, EvtVector4R p_init);
138 void FinalState_sort(EvtParticle* part);
139 void assign_momentum(int pdx, EvtVector4R pv4);
140 void assign_momentum2(int pdx, EvtVector4R pv4); // for two identical particle
141 bool identical_flag;
142 string m_FDPparticle;
143 EvtVector4R FDP_init;
144 EvtId FDP_id;
145 EvtParticle* FDP_part;
146 void findPart(EvtParticle* part);
147 void countChannel(EvtParticle* part);
148 int br[500],vbr[500];
149 int totalChannels;
150 bool isCharmonium(EvtId xid);
151 bool isCharm(EvtId xid);
152 bool isRadecay(EvtParticle* par);
153 string m_outputp4;
154 int decayType(EvtParticle *par);
155 std::string getModel(EvtParticle* par, int mode);
156 std::string getModel(EvtParticle* par);
157 bool m_tagLundModel,_RvalueTag;
158
159 std::vector<std::string> m_mystring;
160 std::vector<double> m_wind0,m_wind1,m_wind2, m_vangs;
161 std::vector<int> m_cluster0,m_cluster1,m_cluster2;
162 static int m_runNo;
163 std::vector<std::vector<std::string> > m_ReadTruth;
164
165 double m_eBeamPolarization;
166 int writeFlag;
167 EvtId m_KKMCRes;
168 std::vector<double> m_polarization;
169 std::string m_truthFile,m_truthPart;
170// for Ntuple
171NTuple::Tuple* m_tuple;
172NTuple::Item<int> TotNumTrk;
173NTuple::Item<int> m_nchr;
174NTuple::Item<int> m_nchr_e;
175NTuple::Item<int> m_nchr_mu;
176NTuple::Item<int> m_nchr_pi;
177NTuple::Item<int> m_nchr_k;
178NTuple::Item<int> m_nchr_p;
179NTuple::Item<int> m_gamma;
180NTuple::Item<int> m_gammaFSR;
181NTuple::Item<int> m_flag1;
182
183NTuple::Array<int> m_Trk_index;
184NTuple::Array<int> m_fst;
185NTuple::Array<double> m_px_trk;
186NTuple::Array<double> m_py_trk;
187NTuple::Array<double> m_pz_trk;
188NTuple::Array<double> m_en_trk;
189
190NTuple::Tuple* mass_tuple;
191NTuple::Item<double> m_m12;
192NTuple::Item<double> m_m13;
193NTuple::Item<double> m_m23;
194NTuple::Item<double> m_m1;
195NTuple::Item<double> m_m2;
196NTuple::Item<double> m_m3;
197NTuple::Item<double> m_cos1;
198NTuple::Item<double> m_cos2;
199NTuple::Item<double> m_cos3;
200NTuple::Item<int> m_ich;
201NTuple::Tuple* massgen_tuple;
202NTuple::Item<double> _m12;
203NTuple::Item<double> _m13;
204NTuple::Item<double> _m23;
205NTuple::Item<double> _m1;
206NTuple::Item<double> _m2;
207NTuple::Item<double> _m3;
208NTuple::Item<double> _cos1;
209NTuple::Item<double> _cos2;
210NTuple::Item<double> _cos3;
211NTuple::Item<int> _ich;
212/////////////
213};
214
215#endif
TTree * sigma
double random()
Definition: EvtDecay.cxx:1163
virtual ~EvtBesRandom()
Definition: EvtDecay.cxx:1160
double ampsLenu(vector< double > Vexp, std::vector< double > vpars)
DataInfoSvc * dataInfoSvc
Definition: EvtDecay.h:75
IDataInfoSvc * tmpInfoSvc
Definition: EvtDecay.h:74
double energySpread(double mu, double sigma)
Definition: EvtDecay.cxx:1604
StatusCode initialize()
Definition: EvtDecay.cxx:138
StatusCode finalize()
Definition: EvtDecay.cxx:996
double getObsXsection(double mhds, int mode)
double ampsLbenu(vector< double > Vexp, std::vector< double > vpars)
StatusCode execute()
Definition: EvtDecay.cxx:336
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