63 <<
" EvtRareLbToLll expects DIRAC or RARITASWINGER daughter "
73 const EvtIdSet leptons{
"e-",
"e+" };
77 <<
" EvtRareLbToLll has dielectron final state" << std::endl;
80 std::string model{
"LQCD" };
84 if ( model ==
"Gutsche" ) {
85 m_ffmodel = std::make_unique<EvtRareLbToLllFFGutsche>();
86 }
else if ( model ==
"LQCD" ) {
87 m_ffmodel = std::make_unique<EvtRareLbToLllFFlQCD>();
88 }
else if ( model ==
"MR" ) {
89 m_ffmodel = std::make_unique<EvtRareLbToLllFF>();
92 <<
" Unknown form-factor model, valid options are MR, LQCD, Gutsche."
93 <<
" Assuming LQCD form-factors... " << std::endl;
94 m_ffmodel = std::make_unique<EvtRareLbToLllFFlQCD>();
96 m_wcmodel = std::make_unique<EvtRareLbToLllWC>();
106 <<
" EvtRareLbToLll is finding maximum probability ... " << std::endl;
136 const double q2min = ( m1 + m2 ) * ( m1 + m2 );
137 const double q2max = ( M0 - mL ) * ( M0 - mL );
142 <<
" EvtRareLbToLll is probing whole phase space ..." << std::endl;
145 const int nsteps = 5000;
146 for (
int i = 0; i <= nsteps; i++ ) {
147 const double q2 = q2min + i * ( q2max - q2min ) / nsteps;
148 const double elambda = ( M0 * M0 + mL * mL - q2 ) / 2 / M0;
151 pstar = sqrt( q2 - ( m1 + m2 ) * ( m1 + m2 ) ) *
152 sqrt( q2 - ( m1 - m2 ) * ( m1 - m2 ) ) / 2 / sqrt( q2 );
154 boost.
set( M0 - elambda, 0, 0, +sqrt( elambda * elambda - mL * mL ) );
156 p4lambda.
set( elambda, 0, 0,
157 -sqrt( elambda * elambda - mL * mL ) );
159 p4lambda.
set( mL, 0, 0, 0 );
161 for (
int j = 0; j <= 45; j++ ) {
163 p4lep1.
set( sqrt( pstar * pstar + m1 * m1 ), 0,
164 +pstar * sin( theta ), +pstar * cos( theta ) );
165 p4lep2.
set( sqrt( pstar * pstar + m2 * m2 ), 0,
166 -pstar * sin( theta ), -pstar * cos( theta ) );
170 p4lep1 =
boostTo( p4lep1, boost );
171 p4lep2 =
boostTo( p4lep2, boost );
185 <<
" - probability " << prob <<
" found at q2 = " << q2
186 <<
" (" << nsteps * ( q2 - q2min ) / ( q2max - q2min )
217 const EvtIdSet partlist{
"Lambda_b0" };
228 const EvtIdSet leptons{
"e-",
"mu-",
"tau-" };
244 P.
set( parent.
mass(), 0.0, 0.0, 0.0 );
247 const double qsq = q.
mass2();
253 for (
int i = 0; i < 2; ++i ) {
254 for (
int j = 0; j < 2; ++j ) {
288 const double mb = 5.209;
291 for (
unsigned int i = 0; i < 4; ++i ) {
293 AC[i] = -2. * mb * C7eff * FF.
m_FT[i] / qsq + C9eff * FF.
m_F[i];
294 BC[i] = -2. * mb * C7eff * FF.
m_GT[i] / qsq - C9eff * FF.
m_G[i];
295 DC[i] = C10eff * FF.
m_F[i];
296 EC[i] = -C10eff * FF.
m_G[i];
298 AC[i] = -2. * mb * C7eff * FF.
m_GT[i] / qsq - C9eff * FF.
m_G[i];
299 BC[i] = -2. * mb * C7eff * FF.
m_FT[i] / qsq + C9eff * FF.
m_F[i];
300 DC[i] = -C10eff * FF.
m_G[i];
301 EC[i] = C10eff * FF.
m_F[i];
306 const double cv = ( isparticle > 0 ) ? 1.0 : -1.0 * parity;
307 const double ca = ( isparticle > 0 ) ? 1.0 : +1.0 * parity;
308 const double cs = ( isparticle > 0 ) ? 1.0 : +1.0 * parity;
309 const double cp = ( isparticle > 0 ) ? 1.0 : -1.0 * parity;
317 for (
int i = 0; i < 2; ++i ) {
318 for (
int j = 0; j < 2; ++j ) {
321 H1[i][j] = ( cv * AC[0] * T[0] + ca * BC[0] * T[1] +
322 cs * AC[1] * T[2] + cp * BC[1] * T[3] +
323 cs * AC[2] * T[4] + cp * BC[2] * T[5] );
325 H2[i][j] = ( cv * DC[0] * T[0] + ca * EC[0] * T[1] +
326 cs * DC[1] * T[2] + cp * EC[1] * T[3] +
327 cs * DC[2] * T[4] + cp * EC[2] * T[5] );
334 for (
int i = 0; i < 2; ++i ) {
335 for (
int ip = 0; ip < 2; ++ip ) {
336 for (
int j = 0; j < 2; ++j ) {
337 for (
int jp = 0; jp < 2; ++jp ) {
344 H2[i][ip] * LA[j][jp];
358 for (
int i = 0; i < 2; ++i ) {
359 for (
int j = 0; j < 4; ++j ) {
361 H1[i][j] = ( cv * AC[0] * T[0] + ca * BC[0] * T[1] +
362 cs * AC[1] * T[2] + cp * BC[1] * T[3] +
363 cs * AC[2] * T[4] + cp * BC[2] * T[5] +
364 cs * AC[3] * T[6] + cp * BC[3] * T[7] );
365 H2[i][j] = ( cv * DC[0] * T[0] + ca * EC[0] * T[1] +
366 cs * DC[1] * T[2] + cp * EC[1] * T[3] +
367 cs * DC[2] * T[4] + cp * EC[2] * T[5] +
368 cs * DC[3] * T[6] + cp * EC[3] * T[7] );
375 for (
int i = 0; i < 2; ++i ) {
376 for (
int ip = 0; ip < 4; ++ip ) {
377 for (
int j = 0; j < 2; ++j ) {
378 for (
int jp = 0; jp < 2; ++jp ) {
385 H2[i][ip] * LA[j][jp];
394 <<
" EvtRareLbToLll expects DIRAC or RARITASWINGER daughter "
405 const int i,
const int j )
413 P.
set( parent.
mass(), 0.0, 0.0, 0.0 );
415 const double Pm = parent.
mass();
416 const double Lm =
lambda.mass();
447 const int i,
const int j )
453 P.
set( parent.
mass(), 0.0, 0.0, 0.0 );
458 ID.
setdiag( 1.0, 1.0, 1.0, 1.0 );
462 for (
int ii = 0; ii < 4; ii++ ) {
466 const double Pmsq = P.
mass2();
467 const double Pm = parent.
mass();
468 const double PmLm = Pm *
lambda.mass();
472 for (
int ii = 0; ii < 4; ii++ ) {
496 T[6] = ID.
cont2( V1 );
499 T[7] = ID.
cont2( V2 );
EvtVector4C EvtLeptonACurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtComplex EvtLeptonSCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtVector4C EvtLeptonVCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
EvtComplex EvtLeptonPCurrent(const EvtDiracSpinor &d, const EvtDiracSpinor &dp)
double lambda(double q, double m1, double m2)
EvtRaritaSchwinger boostTo(const EvtRaritaSchwinger &rs, const EvtVector4R p4)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
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 setProbMax(double prbmx)
std::string getArgStr(int j) const
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
void init(EvtId part_n, const EvtVector4R &p4) override
void set_spinor(int i, const EvtComplex &sp)
bool contains(const EvtId &id) const
static EvtSpinType::spintype getSpinType(EvtId i)
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)
virtual EvtDiracSpinor spParent(int) const
int getSpinStates() const
void setDiagonalSpinDensity()
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
virtual EvtDiracSpinor sp(int) const
void makeDaughters(size_t ndaug, const EvtId *id)
bool isParticle(const EvtParticle &parent) const
std::unique_ptr< EvtRareLbToLllFFBase > m_ffmodel
void calcAmp(EvtAmp &, const EvtParticle &parent)
void HadronicAmpRS(const EvtParticle &parent, const EvtParticle &lambda, EvtVector4C *T, const int i, const int j)
void HadronicAmp(const EvtParticle &parent, const EvtParticle &lambda, EvtVector4C *T, const int i, const int j)
std::unique_ptr< EvtRareLbToLllWC > m_wcmodel
std::string getName() const override
void decay(EvtParticle *parent) override
void initProbMax() override
EvtDecayBase * clone() const override
EvtDiracSpinor getSpinor(int i) const
EvtVector4C getVector(int i) const
double normalizedProb(const EvtSpinDensity &d)
void setdiag(double t00, double t11, double t22, double t33)
EvtVector4C cont2(const EvtVector4C &v4) const
void set(int, const EvtComplex &)
void set(int i, double d)