66 for (
int i = 1; i <= (
getNDaug() - 1 ); i++ ) {
74 m_WCurr = std::make_unique<EvtWHad>();
84 const EvtIdSet BcPlusID{
"B_c+" }, BcMinusID{
"B_c-" };
85 const EvtIdSet theK{
"K+",
"K-",
"K_S0" };
88 const EvtIdSet PiPlusID{ cMode == 0 ?
"pi+" :
"pi-" };
89 const EvtIdSet PiMinusID{ cMode == 0 ?
"pi-" :
"pi+" };
91 const EvtIdSet KPlusID{ cMode == 0 ?
"K+" :
"K-" };
92 const EvtIdSet KMinusID{ cMode == 0 ?
"K-" :
"K+" };
96 int PiPlusFound = 0, PiMinusFound = 0, PiZeroFound = 0, KPlusFound = 0,
98 for (
int iDaughter = 0; iDaughter <
getNDaug(); ++iDaughter ) {
101 <<
"iDaughter = " << iDaughter
103 if ( PiPlusID.
contains( daugId ) && PiPlusFound < 4 ) {
106 }
else if ( PiMinusID.
contains( daugId ) && PiMinusFound < 4 ) {
109 }
else if ( PiZeroID.
contains( daugId ) && PiZeroFound < 4 ) {
112 }
else if ( KPlusID.
contains( daugId ) && KPlusFound < 4 ) {
115 }
else if ( KMinusID.
contains( daugId ) && KMinusFound < 4 ) {
121 if (
getNDaug() == 2 && PiPlusFound == 1 ) {
123 }
else if (
getNDaug() == 3 && PiPlusFound == 1 && PiZeroFound == 1 ) {
125 }
else if (
getNDaug() == 4 && PiPlusFound == 2 && PiMinusFound == 1 ) {
127 }
else if (
getNDaug() == 5 && PiPlusFound == 2 && PiMinusFound == 1 &&
130 }
else if (
getNDaug() == 6 && PiPlusFound == 3 && PiMinusFound == 2 ) {
132 }
else if (
getNDaug() == 4 && KPlusFound == 1 && KMinusFound == 1 &&
135 }
else if (
getNDaug() == 4 && KPlusFound == 1 && PiPlusFound == 1 &&
136 PiMinusFound == 1 ) {
141 }
else if (
getNDaug() == 6 && KPlusFound == 1 && KMinusFound == 1 &&
142 PiPlusFound == 2 && PiMinusFound == 1 ) {
144 }
else if (
getNDaug() == 8 && PiPlusFound == 4 && PiMinusFound == 3 ) {
146 }
else if (
getNDaug() == 6 && KPlusFound == 1 && PiPlusFound == 2 &&
147 PiMinusFound == 2 ) {
151 <<
"Init: unknown decay" << std::endl;
157 for (
int i = 0; i < 4; ++i ) {
159 <<
" i = " << i <<
", m_iPiPlus = " <<
m_iPiPlus[i]
162 <<
", m_iKMinus = " <<
m_iKMinus[i] << std::endl;
165 <<
"PiPlusFound = " << PiPlusFound <<
", PiMinusFound = " << PiMinusFound
166 <<
", PiZeroFound = " << PiZeroFound <<
", KPlusFound = " << KPlusFound
167 <<
", KMinusFound = " << KMinusFound << std::endl;
300 <<
"probmax: Have not yet implemented this final state in BC_VHAD model, m_outCode = "
302 for (
int id = 0;
id < (
getNDaug() - 1 );
id++ ) {
360 hardCur =
m_WCurr->WCurrent_KKPPP(
369 hardCur =
m_WCurr->WCurrent_7pi(
380 hardCur =
m_WCurr->WCurrent_K4pi(
405 p4meson = Jpsi->
getP4(),
406 Q = p4b - p4meson, p4Sum = p4meson + p4b;
407 const double Q2 = Q.
mass2();
410 double a1f( 0.0 ), a2f( 0.0 ), vf( 0.0 ), a0f( 0.0 );
412 const double mMeson = Jpsi->
mass();
413 const double mB = parent->
mass();
414 const double mVar = mB + mMeson;
419 const double a3f = ( mVar / ( 2.0 * mMeson ) ) * a1f -
420 ( ( mB - mMeson ) / ( 2.0 * mMeson ) ) * a2f;
427 H.
addDirProd( ( a0f - a3f ) * 2.0 * ( mMeson / Q2 ) * p4b, Q );
430 for (
int i = 0; i < 3; i++ ) {
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=nullptr)
EvtTensor4C dual(const EvtTensor4C &t2)
std::array< int, 4 > m_iKMinus
std::array< int, 4 > m_iPiPlus
std::array< int, 4 > m_iPiMinus
std::string getName() const override
EvtVector4C hardCurr(EvtParticle *parent) const
std::unique_ptr< EvtWHad > m_WCurr
EvtDecayBase * clone() const override
std::array< int, 4 > m_iKPlus
void decay(EvtParticle *parent) override
std::array< int, 4 > m_iPiZero
std::unique_ptr< EvtBCVFF2 > m_FFModel
void initProbMax() override
void vertex(const EvtComplex &)
void checkSpinDaughter(int d1, EvtSpinType::spintype sp)
void checkSpinParent(EvtSpinType::spintype sp)
double getArg(unsigned int j)
void setProbMax(double prbmx)
EvtId getParentId() const
EvtId getDaug(int i) const
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
const EvtId * getDaugs() const
bool contains(const EvtId &id) const
std::string getName() const
static std::string name(EvtId i)
static EvtId getId(const std::string &name)
virtual EvtVector4C epsParent(int i) const
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
static const EvtTensor4C & g()
EvtTensor4C & addDirProd(const EvtVector4R &p1, const EvtVector4R &p2)
EvtVector4C cont2(const EvtVector4C &v4) const
EvtTensor3C directProd(const EvtVector3C &c1, const EvtVector3C &c2)