60 const EvtIdSet leptons{
"e-",
"e+" };
64 <<
" EvtVtoSll has dielectron final state" << std::endl;
71 <<
" EvtVtoSll is finding maximum probability ... " << std::endl;
73 double theProbMax = 0;
74 double theProbMax_q2 = 0;
75 double theProbMax_theta = 0;
102 const double m12Sum = m1 + m2;
103 const double m12Del = m1 - m2;
105 const double q2min = ( m1 + m2 ) * ( m1 + m2 );
106 const double q2max = ( M0 - mL ) * ( M0 - mL );
107 const double mSqSum = M0 * M0 + mL * mL;
112 <<
" EvtVtoSll is probing whole phase space ..." << std::endl;
115 const int nsteps = 5000;
116 for (
int i = 0; i <= nsteps; i++ ) {
117 const double q2 = q2min + i * ( q2max - q2min ) / nsteps;
118 const double eScalar = ( mSqSum - q2 ) / ( 2 * M0 );
119 const double pstar = i == 0 ? 0
120 : sqrt( q2 - m12Sum * m12Sum ) *
121 sqrt( q2 - m12Del * m12Del ) /
124 boost.
set( M0 - eScalar, 0, 0, +sqrt( eScalar * eScalar - mL * mL ) );
126 p4scalar.
set( eScalar, 0, 0, -sqrt( eScalar * eScalar - mL * mL ) );
128 p4scalar.
set( mL, 0, 0, 0 );
131 const double pstarSq = pstar * pstar;
132 const double E1star = sqrt( pstarSq + m1 * m1 );
133 const double E2star = sqrt( pstarSq + m2 * m2 );
135 for (
int j = 0; j <= 45; j++ ) {
138 const double pstarT = pstar * sin( theta );
139 const double pstarZ = pstar * cos( theta );
141 p4lep1.
set( E1star, 0, pstarT, pstarZ );
142 p4lep2.
set( E2star, 0, -pstarT, -pstarZ );
146 p4lep1 =
boostTo( p4lep1, boost );
147 p4lep2 =
boostTo( p4lep2, boost );
159 if ( prob > theProbMax ) {
162 theProbMax_theta = theta;
171 <<
" EvtVtoSll set up maximum probability to " << theProbMax
172 <<
" found at q2 = " << theProbMax_q2 <<
" ("
173 << nsteps * ( theProbMax_q2 - q2min ) / ( q2max - q2min )
174 <<
" %) and theta = " << theProbMax_theta * 180 /
EvtConst::pi
211 const double k2 = k * k;
216 double M2 = parent.
mass();
218 double m2 = l1.
mass();
221 const double norm = 1.0 / sqrt( 2 * M2 + 4 * m2 - 4 * m2 * m2 / M2 );
223 amp.
vertex( 0, 0, 0, norm * ( eps0 * T.
cont2( l11 ) ) );
224 amp.
vertex( 0, 0, 1, norm * ( eps0 * T.
cont2( l12 ) ) );
225 amp.
vertex( 0, 1, 0, norm * ( eps0 * T.
cont2( l21 ) ) );
226 amp.
vertex( 0, 1, 1, norm * ( eps0 * T.
cont2( l22 ) ) );
228 amp.
vertex( 1, 0, 0, norm * ( eps1 * T.
cont2( l11 ) ) );
229 amp.
vertex( 1, 0, 1, norm * ( eps1 * T.
cont2( l12 ) ) );
230 amp.
vertex( 1, 1, 0, norm * ( eps1 * T.
cont2( l21 ) ) );
231 amp.
vertex( 1, 1, 1, norm * ( eps1 * T.
cont2( l22 ) ) );
233 amp.
vertex( 2, 0, 0, norm * ( eps2 * T.
cont2( l11 ) ) );
234 amp.
vertex( 2, 0, 1, norm * ( eps2 * T.
cont2( l12 ) ) );
235 amp.
vertex( 2, 1, 0, norm * ( eps2 * T.
cont2( l21 ) ) );
236 amp.
vertex( 2, 1, 1, norm * ( eps2 * T.
cont2( l22 ) ) );
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
EvtTensor4C dual(const EvtTensor4C &t2)
void vertex(const EvtComplex &)
EvtSpinDensity getSpinDensity() const
void init(EvtId p, int ndaug, const EvtId *daug)
void setWeight(double weight)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
void setProbMax(double prbmx)
EvtId getParentId() const
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
bool contains(const EvtId &id) const
static double getMass(EvtId i)
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)
EvtVector4R getP4Restframe() const
virtual EvtDiracSpinor spParent(int) const
int getSpinStates() const
void setDiagonalSpinDensity()
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
virtual EvtVector4C eps(int i) const
void makeDaughters(size_t ndaug, const EvtId *id)
double normalizedProb(const EvtSpinDensity &d)
EvtVector4C cont2(const EvtVector4C &v4) const
void set(int i, double d)
void init(EvtId part_n, double e, double px, double py, double pz)
void calcAmp(const EvtParticle &parent, EvtAmp &) const
void decay(EvtParticle *parent) override
void initProbMax() override
std::string getName() const override
EvtDecayBase * clone() const override
static constexpr double m_poleSize
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)