75 int GG[4][4] = { { 1, 0, 0, 0 }, { 0, -1, 0, 0 }, { 0, 0, -1, 0 }, { 0, 0, 0, -1 } };
76 for (
int i = 0; i < 4; i++ )
78 for (
int j = 0; j < 4; j++ ) { G[i][j] = GG[i][j]; }
112 double P1[4], P2[4], P3[4];
127 value = calDalEva( P1, P2, P3 );
132Double_t EvtDsToEtapipi0::calDalEva( Double_t P1[], Double_t P2[], Double_t P3[] ) {
136 PDF[0] = Spin_factor( P1, P2, P3, 1, 1 );
137 PDF[1] = Spin_factor( P1, P2, P3, 1, 0 );
138 PDF[2] = Spin_factor( P1, P3, P2, 0, 31 ) - Spin_factor( P2, P3, P1, 0, 30 );
141 for ( Int_t i = 0; i < 4; i++ )
143 cof =
TComplex( rho[i] * TMath::Cos( phi[i] ), rho[i] * TMath::Sin( phi[i] ) );
146 module = pdf * TComplex::Conjugate( pdf );
149 return ( value <= 0 ) ? 1e-20 : value;
152TComplex EvtDsToEtapipi0::Spin_factor( Double_t P1[], Double_t P2[], Double_t P3[], Int_t spin,
156 Double_t
R[4],
s[3], sp2, sDs,
B[2], snk, sck;
157 for ( Int_t i = 0; i < 4; i++ ) {
R[i] = P1[i] + P2[i]; }
158 s[0] = SCADot( R, R );
159 s[1] = SCADot( P1, P1 );
160 s[2] = SCADot( P2, P2 );
161 sp2 = SCADot( P3, P3 );
164 sck = mass_Kaon * mass_Kaon;
168 Double_t
mass( 0.99 );
173 if (
flag == 0 ) prop = TComplex::One();
174 if (
flag == 1 ) prop = propagatorRBW( ma0, Ga0,
s[0],
s[1],
s[2], 3.0, 0 );
177 rhokk = Flatte_rhoab(
s[0], sck, sck );
178 rhopieta = Flatte_rhoab(
s[0],
s[1],
s[2] );
179 prop = 1.0 / ( mass * mass -
s[0] - ci * ( 0.341 * rhopieta + 0.341 * 0.892 * rhokk ) );
183 rhokk = Flatte_rhoab(
s[0], snk, sck );
184 rhopieta = Flatte_rhoab(
s[0],
s[1],
s[2] );
185 prop = 1.0 / ( mass * mass -
s[0] - ci * ( 0.341 * rhopieta + 0.341 * 0.892 * rhokk ) );
189 else if ( spin == 1 )
194 prop = TComplex::One();
200 propagatorRBW( mrho, Grho,
s[0],
s[1],
s[2], 3.0, 1 );
204 Double_t T1[4], t1[4];
207 B[0] = barrierNeo( 1,
s[0],
s[1],
s[2], 3.0, m_res );
208 B[1] = barrierNeo( 1, sDs,
s[0], sp2, 5.0, 1.9683 );
209 for ( Int_t i = 0; i < 4; i++ ) { tmp += T1[i] * t1[i] * G[i][i]; }
210 amp = tmp * prop *
B[0] *
B[1];
212 else if ( spin == 2 )
215 Double_t T2[4][4], t2[4][4];
218 B[0] = barrierNeo( 2,
s[0],
s[1],
s[2], 3.0, mrho );
219 B[1] = barrierNeo( 2, sDs,
s[0], sp2, 5.0, 1.9683 );
220 for ( Int_t i = 0; i < 4; i++ )
222 for ( Int_t j = 0; j < 4; j++ ) { tmp += T2[i][j] * t2[j][i] * G[j][j] * G[i][i]; }
224 if (
flag == 0 ) prop = TComplex::One();
225 if (
flag == 1 ) prop = propagatorRBW( mrho, Grho,
s[0],
s[1],
s[2], 3.0, 1 );
228 amp = tmp * prop *
B[0] *
B[1];
230 else { cout <<
"Only S, P, D wave allowed" << endl; }
234void EvtDsToEtapipi0::Com_Multi(
double a1[2],
double a2[2],
double res[2] ) {
235 res[0] = a1[0] * a2[0] - a1[1] * a2[1];
236 res[1] = a1[1] * a2[0] + a1[0] * a2[1];
238void EvtDsToEtapipi0::Com_Divide(
double a1[2],
double a2[2],
double res[2] ) {
239 res[0] = ( a1[0] * a2[0] + a1[1] * a2[1] ) / ( a2[0] * a2[0] + a2[1] * a2[1] );
240 res[1] = ( a1[1] * a2[0] - a1[0] * a2[1] ) / ( a2[0] * a2[0] + a2[1] * a2[1] );
243double EvtDsToEtapipi0::SCADot(
double a1[4],
double a2[4] ) {
245 _cal = a1[0] * a2[0] - a1[1] * a2[1] - a1[2] * a2[2] - a1[3] * a2[3];
248double EvtDsToEtapipi0::barrierNeo(
int l,
double sa,
double sb,
double sc,
double r,
250 double mR2 = mR * mR;
251 double pAB = 0.25 * ( sa + sb - sc ) * ( sa + sb - sc ) / sa - sb;
252 double pR = 0.25 * ( mR2 + sb - sc ) * ( mR2 + sb - sc ) / mR2 - sb;
253 double zAB = pAB * r * r;
254 double zR = pR * r * r;
257 if ( l == 1 ) F = sqrt( ( 1 + zR ) / ( 1 + zAB ) );
258 if ( l == 2 ) F = sqrt( ( 9 + 3 * zAB + zAB * zAB ) / ( 9 + 3 * zAB + zAB * zAB ) );
262void EvtDsToEtapipi0::calt1(
double daug1[4],
double daug2[4],
double t1[4] ) {
265 for (
int i = 0; i < 4; i++ )
267 pa[i] = daug1[i] + daug2[i];
268 qa[i] = daug1[i] - daug2[i];
270 p = SCADot( pa, pa );
271 pq = SCADot( pa, qa );
272 for (
int i = 0; i < 4; i++ ) { t1[i] = qa[i] - pq / p * pa[i]; }
274void EvtDsToEtapipi0::calt2(
double daug1[4],
double daug2[4],
double t2[4][4] ) {
277 calt1( daug1, daug2, t1 );
278 r = SCADot( t1, t1 );
279 for (
int i = 0; i < 4; i++ ) { pa[i] = daug1[i] + daug2[i]; }
280 p = SCADot( pa, pa );
281 for (
int i = 0; i < 4; i++ )
283 for (
int j = 0; j < 4; j++ )
284 { t2[i][j] = t1[i] * t1[j] - 1.0 / 3 * r * ( G[i][j] - pa[i] * pa[j] / p ); }
288double EvtDsToEtapipi0::wid(
double mass,
double sa,
double sb,
double sc,
double r,
int l ) {
292 double sa0 = mass * mass;
293 double m = sqrt( sa );
294 q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
295 if (
q < 0 )
q = 1e-16;
296 q0 = ( sa0 + sb - sc ) * ( sa0 + sb - sc ) / ( 4 * sa0 ) - sb;
297 if ( q0 < 0 ) q0 = 1e-16;
299 double z =
q * r * r;
300 double z0 = q0 * r * r;
303 if ( l == 1 ) F = sqrt( ( 1 + z0 ) / ( 1 + z ) );
304 if ( l == 2 ) F = sqrt( ( 9 + 3 * z0 + z0 * z0 ) / ( 9 + 3 * z + z * z ) );
306 widm = pow(
t, l + 0.5 ) * mass / m * F * F;
310void EvtDsToEtapipi0::Flatte_rhoab(
double sa,
double sb,
double sc,
double rho[2] ) {
311 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
315 rho[0] = 2 * sqrt(
q / sa );
321 rho[1] = 2 * sqrt( -
q / sa );
325TComplex EvtDsToEtapipi0::Flatte_rhoab(
double sa,
double sb,
double sc ) {
326 double q = ( sa + sb - sc ) * ( sa + sb - sc ) / ( 4 * sa ) - sb;
329 if (
q > 0 ) { rho = 2.0 * sqrt(
q / sa ) * ( TComplex::One() ); }
330 if (
q < 0 ) { rho = 2.0 * sqrt( -
q / sa ) * ci; }
334TComplex EvtDsToEtapipi0::propagatorRBW(
double mass,
double width,
double sa,
double sb,
335 double sc,
double r,
int l ) {
338 1.0 / ( mass * mass - sa - ci * mass * width * wid( mass, sa, sb, sc, r, l ) );
complex< double > TComplex
****INTEGER imax DOUBLE PRECISION m_pi *DOUBLE PRECISION m_amfin DOUBLE PRECISION m_Chfin DOUBLE PRECISION m_Xenph DOUBLE PRECISION m_sinw2 DOUBLE PRECISION m_GFermi DOUBLE PRECISION m_MfinMin DOUBLE PRECISION m_ta2 INTEGER m_out INTEGER m_KeyFSR INTEGER m_KeyQCD *COMMON c_Semalib $ !copy of input $ !CMS energy $ !beam mass $ !final mass $ !beam charge $ !final charge $ !smallest final mass $ !Z mass $ !Z width $ !EW mixing angle $ !Gmu Fermi $ alphaQED at q
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
void checkNDaug(int d1, int d2=-1)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
void setProb(double prob)
void decay(EvtParticle *p)
void getName(std::string &name)
virtual ~EvtDsToEtapipi0()
const EvtVector4R & getP4() const
EvtParticle * getDaug(int i)
double initializePhaseSpace(int numdaughter, EvtId *daughters, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
complex_t R(double Q2, double M2, double G, double Mp2, double Mm2)