115 double wcm = p->
mass();
116 double eb = 0.5 * wcm;
119 double q2m = phi->
mass() * wcm;
124 double wcm_new = wcm;
125 double s_new = wcm * wcm;
138 while ( f_col == 0. ) {
140 ckhrad( eb, q2m, e01, e02, f_col );
143 <<
"EvtVectorIsr is having problems. Called ckhrad 10000 times.\n";
149 ebeam = sqrt( e01 * e02 );
151 s_new = wcm_new * wcm_new;
154 if ( phi->
mass() > wcm_new ) {
156 <<
"EvtVectorIsr finds Vector mass=" << phi->
mass()
157 <<
" > Weff=" << wcm_new <<
". Should not happen\n";
169 double L = 2. * log( wcm_new / electMass );
172 double W = ( L - 1. ) * ( 1. - x0 + 0.5 * x0 * x0 );
184 <<
"EvtVectorIsr finds a problem with fmax, the maximum weight setting\n" 185 <<
"fmax is the third decay argument in the .dec file. VectorIsr attempts to set it reasonably if it wasn't provided\n" 186 <<
"To determine a more appropriate value, build GeneratorQAApp, and set the third argument for this decay <0.\n" 187 <<
"If you haven't been providing the first 2 arguments, set them to be 1. 1.). The program will report\n" 188 <<
"the largest weight it finds. You should set fmax to be slightly larger.\n" 189 <<
"Alternatively try the following values for various vector particles: " 190 <<
"phi->1.15 J/psi-psi(4415)->0.105\n" 191 <<
"The current value of f and fmax for " 194 <<
"Will now assert\n";
204 if ( f > largest_f ) {
210 <<
" fmax should be at least " << largest_f
211 <<
". f_col cs_B = " << f_col <<
" " << cs_Born
214 if ( m % 10000 == 0 ) {
219 <<
" fmax should be at least " << largest_f
220 <<
". f_col cs_B = " << f_col <<
" " << cs_Born
232 <<
"EvtVectorIsr is having problems. Check the fmax value - the 3rd argument in the .dec file\n" 233 <<
"Recommended values for various vector particles: " 234 <<
"phi->1.15 J/psi-psi(4415)->0.105 " 235 <<
"Upsilon(1S,2S,3S)->0.14\n";
258 double xx = e02 / e01;
259 double sq_xx = sqrt( xx );
260 bet_l = ( 1. - xx ) / ( 1. + xx );
261 gam_l = ( 1. + xx ) / ( 2. * sq_xx );
262 betgam_l = ( 1. - xx ) / ( 2. * sq_xx );
265 csfrmn_new = (
csfrmn - bet_l ) / ( 1. - bet_l *
csfrmn );
266 csbkmn_new = (
csbkmn - bet_l ) / ( 1. - bet_l *
csbkmn );
277 double pg = ( s_new - phi->
mass() * phi->
mass() ) / ( 2. * wcm_new );
280 double beta = electMass / ebeam;
281 beta = sqrt( 1. - beta * beta );
283 double ymax = log( ( 1. + beta * csfrmn_new ) / ( 1. - beta * csfrmn_new ) );
284 double ymin = log( ( 1. - beta * csbkmn_new ) / ( 1. + beta * csbkmn_new ) );
288 double cs =
exp( y );
289 cs = ( cs - 1. ) / ( cs + 1. ) / beta;
290 double sn = sqrt( 1 - cs * cs );
295 double phi_p0 = sqrt( phi->
mass() * phi->
mass() + pg * pg );
296 double phi_p3 = -pg * cs;
299 EvtVector4R p4phi( gam_l * phi_p0 + betgam_l * phi_p3, -pg * sn * cos( fi ),
300 -pg * sn * sin( fi ), betgam_l * phi_p0 + gam_l * phi_p3 );
303 double isr_p3 = -phi_p3;
304 EvtVector4R p4gamma( gam_l * isr_p0 + betgam_l * isr_p3, -p4phi.
get( 1 ),
305 -p4phi.
get( 2 ), betgam_l * isr_p0 + gam_l * isr_p3 );
309 p4softg1.
set( 0, eb - e02 );
310 p4softg1.
set( 3, e02 - eb );
311 p4softg2.
set( 0, eb - e01 );
312 p4softg2.
set( 3, eb - e01 );
324 softg1->
init( gammaId, p4softg1 );
325 softg2->
init( gammaId, p4softg2 );
362 rho.
set( 0, 0, rho11 );
363 rho.
set( 0, 1, rho12 );
364 rho.
set( 0, 2, rho13 );
365 rho.
set( 1, 0, rho21 );
366 rho.
set( 1, 1, rho22 );
367 rho.
set( 1, 2, rho23 );
368 rho.
set( 2, 0, rho31 );
369 rho.
set( 2, 1, rho32 );
370 rho.
set( 2, 2, rho33 );
382 double zz = 1. - 2 * xx + yy;
383 return 0.5 * ( 1. + yy + zz / ( a - 1. ) +
384 0.25 * b * ( -0.5 * ( 1. + 3 * yy ) * log( xx ) ) - zz );
388 double& e01,
double& e02,
double& f )
399 double sss = 4. * e_beam * e_beam;
400 double biglog = log( sss / ( dme * dme ) );
401 double beta = 2. * adp * ( biglog - 1. );
402 double betae_lab = beta;
403 double p3 = adp * ( pi2 / 3. - 0.5 );
404 double p12 = adp * adp * ( 11. / 8. - 2. * pi2 / 3. );
405 double coefener = 1. + 0.75 * betae_lab + p3;
406 double coef1 = coefener + 0.125 * pi2 * beta * beta;
407 double coef2 = p12 * biglog * biglog;
408 double facts = coef1 + coef2;
411 double e1min = 0.25 * q2_min / e_beam;
412 double y1_max = pow( 1. - e1min / e_beam, 0.5 * beta );
413 double y1 = y1_min + r1 * ( y1_max - y1_min );
414 e01 = e_beam * ( 1. - pow( y1, 2. / beta ) );
417 double e2min = 0.25 * q2_min / e01;
418 double y2_max = pow( 1. - e2min / e_beam, 0.5 * beta );
419 double y2 = y2_min + r2 * ( y2_max - y2_min );
420 e02 = e_beam * ( 1. - pow( y2, 2. / beta ) );
422 double xx1 = e01 / e_beam;
423 double xx2 = e02 / e_beam;
425 f = y1_max * y2_max *
ckhrad1( xx1, biglog, betae_lab ) *
426 ckhrad1( xx2, biglog, betae_lab ) * facts;
static std::string name(EvtId i)
void setSpinDensityForward(const EvtSpinDensity &rho)
double getArg(unsigned int j)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
Evt3Rank3C conj(const Evt3Rank3C &t2)
std::string getName() override
static const double twoPi
static double getMeanMass(EvtId i)
virtual EvtVector4C epsParentPhoton(int i)
double ckhrad1(double xx, double a, double b)
void set(int i, double d)
void ckhrad(const double &e_beam, const double &q2_min, double &e01, double &e02, double &f)
void init(EvtId part_n, double e, double px, double py, double pz)
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
virtual EvtVector4C epsParent(int i) const
void decay(EvtParticle *p) override
void checkNDaug(int d1, int d2=-1)
void checkSpinParent(EvtSpinType::spintype sp)
void addDaug(EvtParticle *node)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
static EvtId getId(const std::string &name)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
EvtComplex exp(const EvtComplex &c)
void setDaughterSpinDensity(int daughter)
EvtDecayBase * clone() override
EvtParticle * getDaug(int i)
static double getMaxRange(EvtId i)
void set(int i, int j, const EvtComplex &rhoij)
void initProbMax() override
EvtId getDaug(int i) const