Pluto v6.3.0
Loading...
Searching...
No Matches
PPionBeamAmplitude.cc
Go to the documentation of this file.
1
2// PPionBeamAmplitude
3//
4// This class contains Eqns. (15-18, 31-33) from
5// Ref. 23
6//
7// Author: H. Schuldes / IF
8// Written: 21.04.09
9//
11
12
13
14#include "PPionBeamAmplitude.h"
15
16
18 //clone the object
19 return new PPionBeamAmplitude((const PPionBeamAmplitude &)* this);
20};
21
22PPionBeamAmplitude::PPionBeamAmplitude(const Char_t *id, const Char_t *de, Int_t key) :
23 PChannelModel(id, de, key) {
24 //Constructor
25 dilepton = NULL;
26 parent = NULL;
27 RhoPropagator = NULL;
28 OmPropagator = NULL;
29 p_in = NULL;
30 pion = NULL;
31 p_out = NULL;
32 term = 0;
33 mode = 0;
34 monte_carlo = 0;
35};
36
38
39 //looking for the mandatory particles
40 dilepton = GetParticle("dilepton");
41 if (!dilepton) {
42 Warning("Init", "Dilepton not found");
43 return kFALSE;
44 }
45
46 parent = GetParticle("parent");
47 if (!parent) {
48 Warning("Init", "Parent not found");
49 return kFALSE;
50 }
51
52 p_in= GetParticle("p_in");
53 if (!p_in) {
54 Warning("Init", "p_in not found");
55 return kFALSE;
56 }
57
58 pion= GetParticle("pion");
59 if (!pion) {
60 Warning("Init", "pion not found");
61 return kFALSE;
62 }
63
64 p_out= GetParticle("p_out");
65 if (!p_out) {
66 Warning("Init", "p_out not found");
67 return kFALSE;
68 }
69
70 if (pion->Is("pi+"))
71 mode = 1;
72
73 return kTRUE;
74}
75
76
78
79 PParticle p_in_tmp(p_in);
80 PParticle pion_tmp(pion);
81 p_in_tmp.Boost(-parent->BoostVector());
82 pion_tmp.Boost(-parent->BoostVector());
83
84
85 p_bar_p = p_out->P();
86 q_bar_p = dilepton->P(); //Monte-Carlo
87 p_p = p_in_tmp.P();
88 p_0 = p_in_tmp.E();
89 p_bar_0 = p_out->E();
90 s = parent->M2();
91
92 s = parent->M2();
93 monte_carlo = 1;
94
95 Double_t dilepton_mass = dilepton->M();
96 Double_t wert = GetWeight(&dilepton_mass);
97
98 return wert;
99}
100
101
102Double_t PPionBeamAmplitude::GetWeight(Double_t *mass, Int_t *) {
103
104 Double_t q_bar_m = mass[0];
105 Double_t q_bar_m2 = q_bar_m * q_bar_m;
106
107 Double_t f_Rho = 0.036 ;
108 Double_t f_Om = 0.011 ; //Coupling constants of the rho- and w-meson (real und positiv)
109
110
111 Double_t M_Rho = makeStaticData()->GetParticleMass(41);
112 Double_t M_Om = makeStaticData()->GetParticleMass(52);
113 Double_t M_p = makeStaticData()->GetParticleMass(14);
114 Double_t M_n = makeStaticData()->GetParticleMass(13);
115 Double_t m_e = makeStaticData()->GetParticleMass(3);
116 Double_t m_pi_minus = makeStaticData()->GetParticleMass(9);
117 // Double_t m_pi_plus = makeStaticData()->GetParticleMass(8);
118
119 // if (q_bar_m < 2* m_e) return 0.;
120 if (q_bar_m < m_pi_minus) return 0.;
121
122 if (q_bar_m > (sqrt(s) - M_p)) return 0.;
123
124 if (!monte_carlo) { //if Pluto is not in Monte-Carlo mode use kinematic eqn from Ref. 23
125 p_p = sqrt(s) / 2. * sqrt(1. - 2. * (M_p*M_p + m_pi_minus*m_pi_minus) / s +
126 (M_p*M_p - m_pi_minus*m_pi_minus)*(M_p*M_p - m_pi_minus*m_pi_minus) / (s*s) );
127
128 p_bar_p = sqrt(s) / 2. * sqrt(1. - 2. * (M_p*M_p + q_bar_m2) / s +
129 (M_p*M_p - q_bar_m2)*(M_p*M_p - q_bar_m2) / (s*s) );
130
131
132 p_0 = sqrt(p_p*p_p + M_p*M_p);
133
134 p_bar_0 = sqrt(p_bar_p*p_bar_p + M_n*M_n);
135 }
136
137 Double_t C_1_2_1_2_bar = ((p_0 + M_p) * (p_bar_0 + M_n)) / (4. * M_n * M_p)
138 * (1. + p_bar_p * p_bar_p / (3. * q_bar_m2));
139
140 Double_t C_3_2_3_2_bar = (p_bar_0 + M_n) / (p_0 + M_p)
141 * ((p_p*p_p*p_p*p_p) / (2. * M_n * M_p) )
142 * (1. + p_bar_p * p_bar_p / (3. * q_bar_m2));
143
144 Double_t sqrt_s = sqrt(s);
145
146 TComplex Rho_I_1_2_J_1_2(Graph_Rho_Re_T11->Eval(sqrt_s), Graph_Rho_Im_T11->Eval(sqrt_s));
147 TComplex Rho_I_1_2_J_3_2(Graph_Rho_Re_T13->Eval(sqrt_s), Graph_Rho_Im_T13->Eval(sqrt_s));
148 TComplex Rho_I_3_2_J_1_2(Graph_Rho_Re_T31->Eval(sqrt_s), Graph_Rho_Im_T31->Eval(sqrt_s));
149 TComplex Rho_I_3_2_J_3_2(Graph_Rho_Re_T33->Eval(sqrt_s), Graph_Rho_Im_T33->Eval(sqrt_s));
150
151 TComplex Rho_J_1_2,Rho_J_3_2;
152
153 if (mode == 0){
154 Rho_J_1_2 = sqrt(2.) / 3. * (Rho_I_3_2_J_1_2 - Rho_I_1_2_J_1_2);
155 Rho_J_3_2 = sqrt(2.) / 3. * (Rho_I_3_2_J_3_2 - Rho_I_1_2_J_3_2);
156 //Paper Eqn (15)
157 } else {
158 Rho_J_1_2 = sqrt(2.) / 3. * (Rho_I_1_2_J_1_2 - Rho_I_3_2_J_1_2);
159 Rho_J_3_2 = sqrt(2.) / 3. * (Rho_I_1_2_J_3_2 - Rho_I_3_2_J_3_2);
160 }
161
162
163 TComplex Om_J_1_2(Graph_Om_Re_T11->Eval(sqrt_s), Graph_Om_Im_T11->Eval(sqrt_s));
164 TComplex Om_J_3_2(Graph_Om_Re_T13->Eval(sqrt_s), Graph_Om_Im_T13->Eval(sqrt_s));
165
166 Om_J_1_2 = sqrt(2. / 3.) * Om_J_1_2;
167 Om_J_3_2 = sqrt(2. / 3.) * Om_J_3_2;
168 //Paper Eqn (16)
169
170 TComplex Rho_J_1_2_Star = TComplex::Conjugate(Rho_J_1_2);
171 TComplex Rho_J_3_2_Star = TComplex::Conjugate(Rho_J_3_2);
172 TComplex Om_J_1_2_Star = TComplex::Conjugate(Om_J_1_2);
173 TComplex Om_J_3_2_Star = TComplex::Conjugate(Om_J_3_2);
174
175
176 if (RhoPropagator == NULL) {
177 RhoPropagator = makeDynamicData()->GetParticleSecondaryModel("rho0", "propagator");
178 if (!RhoPropagator) {
179 Error("GetWeight", "Rho propagator not found");
180 return 0.;
181 }
182 }
183
184 if (OmPropagator == NULL) {
185 OmPropagator = makeDynamicData()->GetParticleSecondaryModel("w", "propagator");
186 if (!OmPropagator) {
187 Error("GetWeight", "Omega propagator not found");
188 return 0.;
189 }
190 }
191
192 TComplex S_rho = RhoPropagator->GetAmplitude(&q_bar_m);
193 TComplex S_w = OmPropagator->GetAmplitude(&q_bar_m);
194
195 TComplex S_rho_Star = TComplex::Conjugate(S_rho);
196 TComplex S_w_Star = TComplex::Conjugate(S_w);
197
198 TComplex Part_1 = (f_Rho*f_Rho / (M_Rho*M_Rho*M_Rho*M_Rho))
199 * S_rho_Star * S_rho
200 * (C_1_2_1_2_bar * Rho_J_1_2_Star * Rho_J_1_2
201 + C_3_2_3_2_bar * Rho_J_3_2_Star * Rho_J_3_2);
202
203 TComplex Part_2 = (f_Rho*f_Om / (M_Rho*M_Rho*M_Om*M_Om)
204 * S_rho_Star * S_w
205 * (C_1_2_1_2_bar * Rho_J_1_2_Star * Om_J_1_2
206 + C_3_2_3_2_bar * Rho_J_3_2_Star * Om_J_3_2));
207
208 TComplex Part_3 = (f_Om*f_Rho / (M_Rho*M_Rho*M_Om*M_Om)
209 * S_w_Star * S_rho
210 * (C_1_2_1_2_bar * Om_J_1_2_Star * Rho_J_1_2
211 + C_3_2_3_2_bar * Om_J_3_2_Star * Rho_J_3_2));
212
213 TComplex Part_4 = (f_Om*f_Om / (M_Om*M_Om*M_Om*M_Om))
214 * S_w_Star * S_w
215 * (C_1_2_1_2_bar * Om_J_1_2_Star * Om_J_1_2
216 + C_3_2_3_2_bar * Om_J_3_2_Star * Om_J_3_2);
217
218
219 Double_t Vorfaktor = (1./137.) /(6.* TMath::Pi()*TMath::Pi())
220 * M_p*M_n / s
221 * (p_bar_p / p_p) * m_e*m_e *
222 (1. + q_bar_m2 / (2. * m_e*m_e) )
223 * sqrt(1. - 4. * m_e*m_e / q_bar_m2);
224
225
226 Double_t d_Sigma_d_q_bar2=0.;
227
228 if (term == 0)
229 d_Sigma_d_q_bar2 = Vorfaktor * (Part_1 + Part_2 + Part_3 + Part_4).Re();
230 else if (term == 1)
231 d_Sigma_d_q_bar2 = Vorfaktor * (Part_1).Re();
232 else if (term == 2)
233 d_Sigma_d_q_bar2 = Vorfaktor * (Part_4).Re();
234
235 return 2. * q_bar_m * d_Sigma_d_q_bar2 / 2100. ;
236
237};
238
239
240
ClassImp(PBeamLineSimulation) PBeamLineSimulation
PDynamicData * makeDynamicData()
PStaticData * makeStaticData()
PParticle * GetParticle(const Char_t *pflag=NULL)
PChannelModel * GetParticleSecondaryModel(const char *name, const char *modelname)
PDistribution * Clone(const char *delme=NULL) const
PPionBeamAmplitude(const Char_t *id, const Char_t *de, Int_t key)
double GetParticleMass(const int &id)
Double_t mass