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