39 return "SSD_DirectCP";
65 <<
"EvtSSD_DirectCP generator expected "
66 <<
"one of the daugters to be a scalar, "
67 <<
"the other either scalar, vector, or tensor, "
71 <<
"Will terminate execution!" << std::endl;
80 double theProbMax = 1.;
118 sqrt( pow( parentMass, 2 ) - pow( ( sdMass + ndMass ), 2 ) ) *
119 sqrt( pow( parentMass, 2 ) - pow( ( ndMass - sdMass ), 2 ) ) /
124 const int nsteps = 16;
127 double theta_max = 0;
129 for (
int i = 0; i <= nsteps; i++ ) {
132 p4_sd.
set( sqrt( pow( pstar, 2 ) + pow( sdMass, 2 ) ), 0,
133 +pstar * sin( theta ), +pstar * cos( theta ) );
135 p4_nd.
set( sqrt( pow( pstar, 2 ) + pow( ndMass, 2 ) ), 0,
136 -pstar * sin( theta ), -pstar * cos( theta ) );
138 scalarDaughter->
init(
getDaug( scalarDaughterIndex ), p4_sd );
139 nonScalarDaughter->
init(
getDaug( nonScalarDaughterIndex ), p4_nd );
145 if ( i_prob > prob_max ) {
152 <<
" - probability " << prob_max
153 <<
" found at theta = " << theta_max << std::endl;
154 theProbMax *= 1.01 * prob_max;
160 <<
" EvtSSD_DirectCP - set up maximum probability to " << theProbMax
208 if ( ( p.
getId() != B0 ) && ( p.
getId() != B0B ) )
225 if ( ( p.
getId() != BS0 ) && ( p.
getId() != BSB ) )
267 const double norm = momv.
mass() / ( momv.
d3mag() * parent.
mass() );
277 const double norm = daughter.
mass() * daughter.
mass() /
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)
double getArg(unsigned int j)
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)
static EvtSpinType::spintype getSpinType(EvtId i)
static int getStdHep(EvtId id)
static double getMass(EvtId i)
static std::string name(EvtId i)
static EvtId chargeConj(EvtId id)
static EvtId getId(const std::string &name)
virtual EvtVector4C epsParent(int i) const
virtual void init(EvtId part_n, const EvtVector4R &p4)=0
virtual EvtTensor4C epsTensorParent(int i) const
double initializePhaseSpace(size_t numdaughter, const EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
EvtVector4R getP4Restframe() const
int getSpinStates() const
void setDiagonalSpinDensity()
const EvtVector4R & getP4() const
EvtParticle * getDaug(const int i)
EvtParticle * getParent() const
void makeDaughters(size_t ndaug, const EvtId *id)
std::string getName() const override
void calcAmp(const EvtParticle &parent, EvtAmp &) const
bool isB0Mixed(const EvtParticle &p)
bool isBsMixed(const EvtParticle &p)
void decay(EvtParticle *p) override
std::string getParamName(int i) override
void initProbMax() override
EvtDecayBase * clone() const override
void init(EvtId part_n, double e, double px, double py, double pz)
double normalizedProb(const EvtSpinDensity &d)
EvtVector4C cont1(const EvtVector4C &v4) const
void set(int i, double d)