|
EvtGen
2.0.0
Monte Carlo generator of particle decays, in particular the weak decays of heavy flavour particles such as B mesons.
|
Go to the documentation of this file. 61 << "_nA,_nB,_nC:" << _nA << "," << _nB << "," << _nC << endl; 71 << "_JA2,_JB2,_JC2:" << _JA2 << "," << _JB2 << "," << _JC2 << endl; 75 int* _lambdaA2 = new int[_nA]; 76 int* _lambdaB2 = new int[_nB]; 77 int* _lambdaC2 = new int[_nC]; 81 for ( ib = 0; ib < _nB; ib++ ) { 94 << "Helicity states of particle A:" << endl; 95 for ( i = 0; i < _nA; i++ ) { 100 << "Helicity states of particle B:" << endl; 101 for ( i = 0; i < _nB; i++ ) { 106 << "Helicity states of particle C:" << endl; 107 for ( i = 0; i < _nC; i++ ) { 112 << "Will now figure out the valid (M_LS) states:" << endl; 115 int Lmin = std::max( _JA2 - _JB2 - _JC2, 116 std::max( _JB2 - _JA2 - _JC2, _JC2 - _JA2 - _JB2 ) ); 120 int Lmax = _JA2 + _JB2 + _JC2; 124 int _nPartialWaveAmp = 0; 129 for ( L = Lmin; L <= Lmax; L += 2 ) { 130 int Smin = abs( L - _JA2 ); 131 if ( Smin < abs( _JB2 - _JC2 ) ) 132 Smin = abs( _JB2 - _JC2 ); 134 if ( Smax > abs( _JB2 + _JC2 ) ) 135 Smax = abs( _JB2 + _JC2 ); 137 for ( S = Smin; S <= Smax; S += 2 ) { 138 _nL[_nPartialWaveAmp] = L; 139 _nS[_nPartialWaveAmp] = S; 144 << "M[" << L << "][" << S << "]" << endl; 155 double partampsqtot = 0.0; 157 for ( i = 0; i < _nPartialWaveAmp; i++ ) { 158 _M[i] = getArg( argcounter ) * 162 partampsqtot += abs2( _M[i] ); 165 << "M[" << _nL[i] << "][" << _nS[i] << "]=" << _M[i] << endl; 171 double helampsqtot = 0.0; 173 for ( ib = 0; ib < _nB; ib++ ) { 174 for ( ic = 0; ic < _nC; ic++ ) { 176 if ( abs( _lambdaB2[ib] - _lambdaC2[ic] ) <= _JA2 ) { 177 for ( i = 0; i < _nPartialWaveAmp; i++ ) { 180 int lambda2 = _lambdaB2[ib]; 181 int lambda3 = _lambdaC2[ic]; 185 int m1 = lambda2 - lambda3; 191 << "s2,lambda2:" << s2 << " " << lambda2 << endl; 194 double fkwTmp = ( L + 1.0 ) / ( s1 + 1.0 ); 196 if ( S >= abs( m1 ) ) { 198 c1. coef( S, m1, s2, s3, lambda2, 200 c2. coef( s1, m1, L, S, 0, m1 ) * _M[i]; 206 << "_HBC[" << ib << "][" << ic << "]=" << _HBC[ib][ic] 210 helampsqtot += abs2( _HBC[ib][ic] ); 214 if ( fabs( helampsqtot - partampsqtot ) / ( helampsqtot + partampsqtot ) > 221 for ( i = 0; i * 2 < getNArg(); i++ ) { 223 << "M(" << _nL[i] << "," << _nS[i] 226 << _M[i] << std::endl; 229 << "The total probability in the partwave basis is: " << partampsqtot 232 << "The total probability in the helamp basis is: " << helampsqtot 235 << "Most likely this is because the specified partwave amplitudes " 238 << "project onto unphysical helicities of photons or neutrinos. " 241 << "Seriously consider if your specified amplitudes are correct. " 255 << "Calculated probmax" << maxprob << endl; 276 if ( n == 2 && J2 == 2 ) { 282 assert( n == J2 + 1 ); 284 for ( i = 0; i < n; i++ ) { 285 lambda2[i] = n - i * 2 - 1;
static std::string name(EvtId i)
EvtDecayBase * clone() override
void decay(EvtParticle *p) override
double getArg(unsigned int j)
static EvtSpinType::spintype getSpinType(EvtId i)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
std::unique_ptr< EvtEvalHelAmp > _evalHelAmp
void fillHelicity(int *lambda2, int n, int J2)
double abs2(const EvtComplex &c)
static int getSpinStates(spintype stype)
std::string getName() override
void setProbMax(double prbmx)
EvtId getParentId() const
double initializePhaseSpace(unsigned int numdaughter, EvtId *daughters, bool forceResetMasses=false, double poleSize=-1., int whichTwo1=0, int whichTwo2=1)
void initProbMax() override
void checkNDaug(int d1, int d2=-1)
double coef(int J, int M, int j1, int j2, int m1, int m2)
void checkNArg(int a1, int a2=-1, int a3=-1, int a4=-1)
double abs(const EvtComplex &c)
static int getSpin2(spintype stype)
EvtComplex exp(const EvtComplex &c)
EvtId getDaug(int i) const
|