BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
TPhoton.h
Go to the documentation of this file.
1#ifndef RAD_TPhoton
2#define RAD_TPhoton
3
4#include "TRadGlobal.h"
5#include "TRandom.h"
6
7class TPhoton {
8protected:
9 double fNorm; // normalization factor
10 double fP0; // auxilary parameter 0
11 double fP1; // auxilary parameter 1
12 double fP2; // auxilary parameter 2
13 double fP3; // auxilary parameter 3
14 double fxmin; // minimum emitted energy
15 double fxmax; // maximum emitted energy
16 double fX; // emitted energy
17 double fCosTheta; // cosine of photon on a big angle
18 double fLnD; // ln((1-beta*c1)/(1+beta*c1))
19 double fBetaI; // velocity of final particles
20 double fiBetaI; // inverse velocity of final particles
21 double fLnD_n; // ln((1-beta*c1)/(1+beta*c1)*(1+beta*c2)/(1-beta*c2))
22 double fBt; // (1+beta*c1)/(1-beta*c1)
23 double fLnD_n2; // ln((1-beta*c1)/(1-beta*c2))
24 double fBt2; // (1-beta*c1)
25public:
26 TPhoton() { Init(); };
27 virtual ~TPhoton(){};
28 virtual void Init(){};
29 double GetMinimum() { return fxmin; }
30 double GetMaximum() { return fxmax; }
31
32 virtual inline double GetCosTheta() {
33 double d = exp( fLnD * ( 2 * gRandom->Rndm() - 1 ) );
34 fCosTheta = ( d - 1 ) / ( fBetaI * ( d + 1 ) );
35 return fCosTheta;
36 }
37 virtual inline double GetThNorm() {
38 double k = fBetaI * fCosTheta;
39 return fLnD * ( 1 - k * k );
40 }
41
42 virtual inline double GetCosThetaF() {
43 double d = fBt * exp( fLnD_n * gRandom->Rndm() );
44 fCosTheta = ( d - 1 ) / ( fBetaI * ( d + 1 ) );
45 return fCosTheta;
46 }
47 virtual inline double GetThNormF() {
48 double k = fBetaI * fCosTheta;
49 return -0.5 * fiBetaI * fLnD_n * ( 1 - k * k );
50 }
51
52 virtual inline double GetCosThetaF2() {
53 double d = fBt2 * exp( fLnD_n2 * gRandom->Rndm() );
54 fCosTheta = ( 1 - d ) * fiBetaI;
55 return fCosTheta;
56 }
57 virtual inline double GetThNormF2() {
58 double k = fBetaI * fCosTheta;
59 return fiBetaI * fLnD_n2 * ( 1 - k );
60 }
61
62 static double GetPhi() { return 2 * gRandom->Rndm() * M_PI; }
63 static double GetPhiNorm() { return 2 * M_PI; }
64
65 inline double GetPhE() { return fX; }
66 inline double GetPhC() { return fCosTheta; }
67 virtual inline double GetENorm() { return 1; };
68 virtual inline double GetEnergy() { return 0; };
69
70 void SetCosTheta( const double& x ) { fCosTheta = x; }
71 void SetEnergy( const double& x ) { fX = x; }
72};
73
74// photons in Initial state
75// by distribution 1/x/(1-x)
76class TPhotonI : public TPhoton {
77public:
79 void Init();
80 inline double GetEnergy() {
81 double d = fP0 * exp( gRandom->Rndm() * fP1 );
82 fX = d / ( 1 + d );
83 return fX;
84 }
85 inline double GetENorm() { return fNorm * fX * ( 1 - fX ); }
86};
87
88// photons in final state
89// by distribution 1/x
90class TPhotonF : public TPhoton {
91public:
93 void Init();
94 inline double GetEnergy() {
95 fX = fP0 * exp( gRandom->Rndm() * fP1 );
96 return fX;
97 }
98 inline double GetENorm() { return fNorm * fX; }
99};
100
101// photons in final state
102// with uniform angle distribution
103class TPhotonFS : public TPhotonF {
104protected:
106
107public:
108 TPhotonFS() : TPhotonF() { fCosThetaMin = 0.995; };
109 inline double GetCosTheta() {
110 fCosTheta = ( 2 * gRandom->Rndm() - 1 ) * fCosThetaMin;
111 return fCosTheta;
112 }
113 inline double GetThNorm() { return 2 * fCosThetaMin; }
114};
115
116// soft and virtual photons
117// by distribution 1/x^b/2 from 0 to Delta_E
118class TPhotonS : public TPhoton {
119protected:
120 double fP2, fP3;
121
122public:
124 void Init();
125 void Init( const double&, const double& );
126 inline double GetEnergy() { return 0; };
127 inline void GetEnergy( double& x1, double& x2, double& x3, double& x4 ) {
128 double t1 = log( gRandom->Rndm() ) * fP1;
129 x1 = fP0 * exp( t1 );
130
131 double t2 = log( gRandom->Rndm() ) * fP1;
132 x2 = fP0 * exp( t2 );
133
134 double t3 = log( gRandom->Rndm() ) * fP1;
135 x3 = fP0 * exp( t3 );
136
137 double t4 = log( gRandom->Rndm() ) * fP1;
138 x4 = fP0 * exp( t4 );
139
140 fX = t1 + t2 + t3 + t4;
141 }
142 inline double GetENorm() { return fNorm; }
143 inline double GetXNorm() { return fP2 * exp( fP3 * fX ); }
144 inline double GetX() { return fX; }
145};
146
147// soft and virtual photons
148// by distribution 1/x^b/2 from 0 to Delta_E
149class TPhotonD : public TPhoton {
150public:
152 void Init();
153 void Init( const double&, const double& );
154 inline double GetEnergy() {
155 double t1 = log( gRandom->Rndm() ) * fP1;
156 fX = fP0 * exp( t1 );
157 return fX;
158 }
159
160 inline double GetEnergy( const double& delta, const double& b2 ) {
161 fNorm = pow( delta, b2 );
162 fX = delta * exp( log( gRandom->Rndm() ) / b2 );
163 return fX;
164 }
165
166 inline double GetENorm() { return fNorm; }
167};
168
169#endif // #ifndef RAD_TPhoton
EvtComplex exp(const EvtComplex &c)
#define M_PI
Definition TConstant.h:4
double GetENorm()
Definition TPhoton.h:166
double GetEnergy()
Definition TPhoton.h:154
void Init(const double &, const double &)
TPhotonD()
Definition TPhoton.h:151
double GetEnergy(const double &delta, const double &b2)
Definition TPhoton.h:160
void Init()
double GetCosTheta()
Definition TPhoton.h:109
double fCosThetaMin
Definition TPhoton.h:105
TPhotonFS()
Definition TPhoton.h:108
double GetThNorm()
Definition TPhoton.h:113
TPhotonF()
Definition TPhoton.h:92
double GetEnergy()
Definition TPhoton.h:94
void Init()
double GetENorm()
Definition TPhoton.h:98
TPhotonI()
Definition TPhoton.h:78
double GetENorm()
Definition TPhoton.h:85
double GetEnergy()
Definition TPhoton.h:80
void Init()
double GetX()
Definition TPhoton.h:144
double fP3
Definition TPhoton.h:120
TPhotonS()
Definition TPhoton.h:123
double fP2
Definition TPhoton.h:120
double GetEnergy()
Definition TPhoton.h:126
void GetEnergy(double &x1, double &x2, double &x3, double &x4)
Definition TPhoton.h:127
double GetENorm()
Definition TPhoton.h:142
void Init(const double &, const double &)
double GetXNorm()
Definition TPhoton.h:143
void Init()
double fxmin
Definition TPhoton.h:14
double fLnD_n2
Definition TPhoton.h:23
double fLnD
Definition TPhoton.h:18
double GetMaximum()
Definition TPhoton.h:30
void SetCosTheta(const double &x)
Definition TPhoton.h:70
static double GetPhiNorm()
Definition TPhoton.h:63
double fBt
Definition TPhoton.h:22
double GetMinimum()
Definition TPhoton.h:29
void SetEnergy(const double &x)
Definition TPhoton.h:71
virtual double GetCosTheta()
Definition TPhoton.h:32
virtual ~TPhoton()
Definition TPhoton.h:27
double GetPhE()
Definition TPhoton.h:65
virtual double GetCosThetaF2()
Definition TPhoton.h:52
virtual double GetCosThetaF()
Definition TPhoton.h:42
virtual double GetThNormF()
Definition TPhoton.h:47
TPhoton()
Definition TPhoton.h:26
virtual double GetThNorm()
Definition TPhoton.h:37
double fX
Definition TPhoton.h:16
double fCosTheta
Definition TPhoton.h:17
double fxmax
Definition TPhoton.h:15
double fLnD_n
Definition TPhoton.h:21
static double GetPhi()
Definition TPhoton.h:62
virtual double GetENorm()
Definition TPhoton.h:67
virtual double GetEnergy()
Definition TPhoton.h:68
double fP2
Definition TPhoton.h:12
double fBetaI
Definition TPhoton.h:19
double fBt2
Definition TPhoton.h:24
double fP0
Definition TPhoton.h:10
double fP1
Definition TPhoton.h:11
double fP3
Definition TPhoton.h:13
double fNorm
Definition TPhoton.h:9
virtual double GetThNormF2()
Definition TPhoton.h:57
double fiBetaI
Definition TPhoton.h:20
double GetPhC()
Definition TPhoton.h:66
virtual void Init()
Definition TPhoton.h:28