Changeset View
Changeset View
Standalone View
Standalone View
src/EvtGenModels/EvtRareLbToLllFF.cpp
/*********************************************************************** | /*********************************************************************** | ||||
* Copyright 1998-2020 CERN for the benefit of the EvtGen authors * | * Copyright 1998-2022 CERN for the benefit of the EvtGen authors * | ||||
* * | * * | ||||
* This file is part of EvtGen. * | * This file is part of EvtGen. * | ||||
* * | * * | ||||
* EvtGen is free software: you can redistribute it and/or modify * | * EvtGen is free software: you can redistribute it and/or modify * | ||||
* it under the terms of the GNU General Public License as published by * | * it under the terms of the GNU General Public License as published by * | ||||
* the Free Software Foundation, either version 3 of the License, or * | * the Free Software Foundation, either version 3 of the License, or * | ||||
* (at your option) any later version. * | * (at your option) any later version. * | ||||
* * | * * | ||||
▲ Show 20 Lines • Show All 146 Lines • ▼ Show 20 Lines | void EvtRareLbToLllFF::init() | ||||
EvtGenReport( EVTGEN_INFO, "EvtGen" ) | EvtGenReport( EVTGEN_INFO, "EvtGen" ) | ||||
<< " EvtRareLbToLll is using form factors from arXiv:1108.6129 " | << " EvtRareLbToLll is using form factors from arXiv:1108.6129 " | ||||
<< std::endl; | << std::endl; | ||||
} | } | ||||
//============================================================================= | //============================================================================= | ||||
double EvtRareLbToLllFF::func( const double p, | double EvtRareLbToLllFF::func( | ||||
EvtRareLbToLllFF::FormFactorDependence& dep ) | const double p, const EvtRareLbToLllFF::FormFactorDependence& dep ) const | ||||
{ | { | ||||
static const double mq = 0.2848; | static const double mq = 0.2848; | ||||
static const double mtilde = 1.122; | static const double mtilde = 1.122; | ||||
const double asq = 0.5 * ( dep.al_ * dep.al_ + dep.ap_ * dep.ap_ ); | const double asq = 0.5 * ( dep.al_ * dep.al_ + dep.ap_ * dep.ap_ ); | ||||
const double psq = p * p; | const double psq = p * p; | ||||
return ( dep.a0_ + dep.a2_ * psq + dep.a4_ * psq * psq ) * | return ( dep.a0_ + dep.a2_ * psq + dep.a4_ * psq * psq ) * | ||||
exp( -( 3. * mq * mq * psq ) / ( 2. * mtilde * mtilde * asq ) ); | exp( -( 3. * mq * mq * psq ) / ( 2. * mtilde * mtilde * asq ) ); | ||||
} | } | ||||
void EvtRareLbToLllFF::DiracFF( EvtParticle* parent, EvtParticle* lambda, | void EvtRareLbToLllFF::DiracFF( const EvtParticle& parent, | ||||
EvtRareLbToLllFF::FormFactorSet& dep, | const EvtParticle& lambda, | ||||
EvtRareLbToLllFF::FormFactors& FF ) | const EvtRareLbToLllFF::FormFactorSet& dep, | ||||
EvtRareLbToLllFF::FormFactors& FF ) const | |||||
{ | { | ||||
const double M = lambda->mass(); | const double M = lambda.mass(); | ||||
const double MB = parent->mass(); | const double MB = parent.mass(); | ||||
const double vdotv = calculateVdotV( parent, lambda ); | const double vdotv = calculateVdotV( parent, lambda ); | ||||
const double p = lambda->getP4().d3mag(); | const double p = lambda.getP4().d3mag(); | ||||
FF.F_[0] = func( p, dep.F1 ); | FF.F_[0] = func( p, dep.F1 ); | ||||
FF.F_[1] = func( p, dep.F2 ); | FF.F_[1] = func( p, dep.F2 ); | ||||
FF.F_[2] = func( p, dep.F3 ); | FF.F_[2] = func( p, dep.F3 ); | ||||
FF.G_[0] = func( p, dep.G1 ); | FF.G_[0] = func( p, dep.G1 ); | ||||
FF.G_[1] = func( p, dep.G2 ); | FF.G_[1] = func( p, dep.G2 ); | ||||
FF.G_[2] = func( p, dep.G3 ); | FF.G_[2] = func( p, dep.G3 ); | ||||
Show All 21 Lines | if ( isNatural( lambda ) ) { | ||||
FF.GT_[0] = -( MB + M ) * H1 + M * ( 1. + vdotv ) * H2 + | FF.GT_[0] = -( MB + M ) * H1 + M * ( 1. + vdotv ) * H2 + | ||||
MB * ( 1. + vdotv ) * H3; | MB * ( 1. + vdotv ) * H3; | ||||
FF.GT_[1] = MB * H1 - M * H2 - MB * H3; | FF.GT_[1] = MB * H1 - M * H2 - MB * H3; | ||||
FF.GT_[2] = M * H1 - M * H2 - MB * H3; | FF.GT_[2] = M * H1 - M * H2 - MB * H3; | ||||
} | } | ||||
} | } | ||||
void EvtRareLbToLllFF::RaritaSchwingerFF( EvtParticle* parent, | void EvtRareLbToLllFF::RaritaSchwingerFF( | ||||
EvtParticle* lambda, | const EvtParticle& parent, const EvtParticle& lambda, | ||||
EvtRareLbToLllFF::FormFactorSet& FFset, | const EvtRareLbToLllFF::FormFactorSet& FFset, | ||||
EvtRareLbToLllFF::FormFactors& FF ) | EvtRareLbToLllFF::FormFactors& FF ) const | ||||
{ | { | ||||
const double M = lambda->mass(); | const double M = lambda.mass(); | ||||
const double MB = parent->mass(); | const double MB = parent.mass(); | ||||
const double vdotv = calculateVdotV( parent, lambda ); | const double vdotv = calculateVdotV( parent, lambda ); | ||||
const double p = lambda->getP4().d3mag(); | const double p = lambda.getP4().d3mag(); | ||||
FF.F_[0] = func( p, FFset.F1 ); | FF.F_[0] = func( p, FFset.F1 ); | ||||
FF.F_[1] = func( p, FFset.F2 ); | FF.F_[1] = func( p, FFset.F2 ); | ||||
FF.F_[2] = func( p, FFset.F3 ); | FF.F_[2] = func( p, FFset.F3 ); | ||||
FF.F_[3] = func( p, FFset.F4 ); | FF.F_[3] = func( p, FFset.F4 ); | ||||
FF.G_[0] = func( p, FFset.G1 ); | FF.G_[0] = func( p, FFset.G1 ); | ||||
FF.G_[1] = func( p, FFset.G2 ); | FF.G_[1] = func( p, FFset.G2 ); | ||||
Show All 29 Lines | if ( isNatural( lambda ) ) { | ||||
FF.GT_[0] = -( MB + M ) * H1 + M * ( 1. + vdotv ) * H2 + | FF.GT_[0] = -( MB + M ) * H1 + M * ( 1. + vdotv ) * H2 + | ||||
MB * ( 1. + vdotv ) * H3 + MB * H5 + M * H6; | MB * ( 1. + vdotv ) * H3 + MB * H5 + M * H6; | ||||
FF.GT_[1] = MB * H1 - M * H2 - MB * H3; | FF.GT_[1] = MB * H1 - M * H2 - MB * H3; | ||||
FF.GT_[2] = M * H1 - M * H2 - MB * H3 - M * H6; | FF.GT_[2] = M * H1 - M * H2 - MB * H3 - M * H6; | ||||
FF.GT_[3] = -( MB - M ) * H5 - M * ( 1. - vdotv ) * H6; | FF.GT_[3] = -( MB - M ) * H5 - M * ( 1. - vdotv ) * H6; | ||||
} | } | ||||
} | } | ||||
void EvtRareLbToLllFF::getFF( EvtParticle* parent, EvtParticle* lambda, | void EvtRareLbToLllFF::getFF( const EvtParticle& parent, const EvtParticle& lambda, | ||||
EvtRareLbToLllFF::FormFactors& FF ) | EvtRareLbToLllFF::FormFactors& FF ) const | ||||
{ | { | ||||
// Find the FF information for this particle, start by setting all to zero | // Find the FF information for this particle, start by setting all to zero | ||||
FF.areZero(); | FF.areZero(); | ||||
// Are the FF's for the particle known? | // Are the FF's for the particle known? | ||||
auto it = FFMap_.find( lambda->getId().getId() ); | auto it = FFMap_.find( lambda.getId().getId() ); | ||||
if ( it == FFMap_.end() ) { | if ( it == FFMap_.end() ) { | ||||
EvtGenReport( EVTGEN_ERROR, "EvtGen" ) | EvtGenReport( EVTGEN_ERROR, "EvtGen" ) | ||||
<< " EvtRareLbToLll does not contain FF for " << lambda->getId() | << " EvtRareLbToLll does not contain FF for " << lambda.getId() | ||||
<< std::endl; | << std::endl; | ||||
return; | return; | ||||
} | } | ||||
// Split by spin 1/2, spin 3/2 | // Split by spin 1/2, spin 3/2 | ||||
const int spin = EvtPDL::getSpinType( lambda->getId() ); | const int spin = EvtPDL::getSpinType( lambda.getId() ); | ||||
if ( EvtSpinType::DIRAC == spin ) { | if ( EvtSpinType::DIRAC == spin ) { | ||||
DiracFF( parent, lambda, *( it->second ), FF ); | DiracFF( parent, lambda, *( it->second ), FF ); | ||||
} else if ( spin == EvtSpinType::RARITASCHWINGER ) { | } else if ( spin == EvtSpinType::RARITASCHWINGER ) { | ||||
RaritaSchwingerFF( parent, lambda, *( it->second ), FF ); | RaritaSchwingerFF( parent, lambda, *( it->second ), FF ); | ||||
} else { | } else { | ||||
EvtGenReport( EVTGEN_ERROR, "EvtGen" ) | EvtGenReport( EVTGEN_ERROR, "EvtGen" ) | ||||
<< " EvtRareLbToLll expects DIRAC or RARITASWINGER daughter " | << " EvtRareLbToLll expects DIRAC or RARITASWINGER daughter " | ||||
<< std::endl; // should add a warning here | << std::endl; // should add a warning here | ||||
return; | return; | ||||
} | } | ||||
return; | return; | ||||
} | } |