40 #include <tpia_target.h>
42 #if defined __cplusplus
51 tpia_productOutgoingData *outgoingData ) {
54 double m1 = decayChannel->m1_fullMass_MeV,
m2 = decayChannel->m2_fullMass_MeV,
m3, m4, mi, mf, Kp, x, beta;
57 m3 = pp3->productID->fullMass_MeV;
58 m4 = pp4->productID->fullMass_MeV;
61 beta = std::sqrt( K * ( K + 2. * m1 ) ) / ( K + mi );
62 x = K * m2 / ( mi * mi );
64 Kp = mi - mf + K * m2 / mi * ( 1 - 0.5 * x * ( 1 - x ) ); }
66 Kp = std::sqrt( mi * mi + 2 * K * m2 ) - mf;
69 outgoingData[0].decayChannel = &(pp3->decayChannel);
70 outgoingData[1].genre = outgoingData[0].genre;
71 outgoingData[1].productID = pp4->productID;
72 outgoingData[1].decayChannel = &(pp4->decayChannel);
80 double m3cc,
double m4cc, tpia_productOutgoingData *outgoingData ) {
86 double x, v_p, p, pp3, pp4, px3, py3, pz3, pz4, pz, p_perp2, E3, E4, gamma, m3cc2 = m3cc * m3cc, m4cc2 = m4cc * m4cc;
88 p = std::sqrt( e_kinetic_com * ( e_kinetic_com + 2. * m3cc ) * ( e_kinetic_com + 2. * m4cc ) * ( e_kinetic_com + 2. * ( m3cc + m4cc ) ) ) /
89 ( 2. * ( e_kinetic_com + m3cc + m4cc ) );
90 py3 = p * std::sqrt( 1 - mu * mu );
91 px3 = py3 * std::cos( phi );
92 py3 *= std::sin( phi );
95 E3 = std::sqrt( p * p + m3cc2 );
96 E4 = std::sqrt( p * p + m4cc2 );
97 gamma = std::sqrt( 1. / ( 1. - beta * beta ) );
98 pz3 = gamma * ( pz + beta * E3 );
99 pz4 = gamma * ( -pz + beta * E4 ); }
104 outgoingData[1].isVelocity = outgoingData[0].isVelocity;
105 outgoingData[1].frame = outgoingData[0].frame;
107 p_perp2 = px3 * px3 + py3 * py3;
109 outgoingData[0].px_vx = px3;
110 outgoingData[0].py_vy = py3;
111 outgoingData[0].pz_vz = pz3;
112 pp3 = p_perp2 + pz3 * pz3;
115 x = pp3 / ( 2 * m3cc2 );
120 outgoingData[0].kineticEnergy = m3cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); }
122 outgoingData[0].kineticEnergy = std::sqrt( m3cc2 + pp3 ) - m3cc;
124 outgoingData[1].px_vx = -px3;
125 outgoingData[1].py_vy = -py3;
126 outgoingData[1].pz_vz = pz4;
127 pp4 = p_perp2 + pz4 * pz4;
128 x = pp4 / ( 2 * m4cc2 );
130 outgoingData[1].kineticEnergy = m4cc * x * ( 1 - 0.5 * x * ( 1 - x ) ); }
132 outgoingData[1].kineticEnergy = std::sqrt( m4cc2 + pp4 ) - m4cc;
135 if( outgoingData[0].isVelocity ) {
136 v_p = tpia_speedOfLight_cm_sec / std::sqrt( pp3 + m3cc2 );
137 outgoingData[0].px_vx *= v_p;
138 outgoingData[0].py_vy *= v_p;
139 outgoingData[0].pz_vz *= v_p;
141 v_p = tpia_speedOfLight_cm_sec / std::sqrt( pp4 + m4cc2 );
142 outgoingData[1].px_vx *= v_p;
143 outgoingData[1].py_vy *= v_p;
144 outgoingData[1].pz_vz *= v_p;
150 #if defined __cplusplus
tpia_product * tpia_decayChannel_getNextProduct(tpia_product *product)
int tpia_kinetics_2BodyReaction(statusMessageReporting *smr, tpia_decayChannel *decayChannel, double K, double mu, double phi, tpia_productOutgoingData *outgoingData)
int tpia_kinetics_COMKineticEnergy2LabEnergyAndMomentum(statusMessageReporting *, double beta, double e_kinetic_com, double mu, double phi, double m3cc, double m4cc, tpia_productOutgoingData *outgoingData)
int tpia_frame_getColumn(statusMessageReporting *smr, tpia_data_frame *frame, int column)
tpia_product * tpia_decayChannel_getFirstProduct(tpia_decayChannel *decayChannel)