37 _rawbrfrsum = o._rawbrfrsum;
41 for ( i = 0; i < _nmode; i++ )
51 std::vector<std::string> args;
53 for ( j = 0; j < tModel->
getNArg(); j++ ) { args.push_back( tModel->
getArgStr( j ) ); }
57 _decaylist[i]->setDecayModel( tModelNew );
60 _decaylist[i]->setBrfrSum( o._decaylist[i]->
getBrfrSum() );
61 _decaylist[i]->setMassMin( o._decaylist[i]->
getMassMin() );
68 for ( i = 0; i < _nmode; i++ ) {
delete _decaylist[i]; }
70 if ( _decaylist != 0 )
delete[] _decaylist;
76 for ( i = 0; i < _nmode; i++ ) { _decaylist[i]->printSummary(); }
82 for ( i = 0; i < _nmode; i++ ) {
delete _decaylist[i]; }
110 report(
ERROR,
"EvtGen" ) <<
"Internal error!!!" << endl;
116 for ( j = 0; j < 1000; j++ )
126 if ( breakL )
continue;
127 if ( u <
getDecay( i ).getBrfrSum() )
172 <<
" with mass:" << p->
mass() <<
" will throw event away! "
188 report(
ERROR,
"EvtGen" ) <<
"Error _nmode not equal to zero!!!" << endl;
192 _decaylist = _decaylist_new;
197 if ( nchannel >= _nmode )
199 report(
ERROR,
"EvtGen" ) <<
"Error getting channel:" << nchannel <<
" with only "
200 << _nmode <<
" stored!" << endl;
203 return *( _decaylist[nchannel] );
208 _rawbrfrsum = conjDecayList->_rawbrfrsum;
214 for ( i = 0; i < _nmode; i++ )
217 _decaylist[i]->
chargeConj( conjDecayList->_decaylist[i] );
226 for ( i = 0; i < _nmode; i++ ) { newlist[i] = _decaylist[i]; }
228 _rawbrfrsum = brfrsum;
237 for ( i = 0; i < _nmode; i++ )
246 report(
ERROR,
"EvtGen" ) <<
"Two matching decays with same parent in decay table\n";
250 for (
int j = 0; j < newDec->
getNDaug(); j++ )
257 if ( _nmode != 0 ) {
delete[] _decaylist; }
261 _decaylist = newlist;
268 if ( _rawbrfrsum < 0.000001 )
271 <<
"branching fraction sum greater than 0\n";
274 if ( fabs( _rawbrfrsum - 1.0 ) > 0.0001 )
277 <<
"Warning, sum of branching fractions for "
279 << _rawbrfrsum << endl;
280 report(
INFO,
"EvtGen" ) <<
"rescaled to one! " << endl;
285 for ( i = 0; i < _nmode; i++ )
287 double brfrsum = _decaylist[i]->getBrfrSum() / _rawbrfrsum;
288 _decaylist[i]->setBrfrSum( brfrsum );
299 for ( i = 0; i < _nmode; i++ )
301 if ( decay->
matchingDecay( *( _decaylist[i]->getDecayModel() ) ) ) { match = i; }
306 report(
ERROR,
"EvtGen" ) <<
" Attempt to remove undefined mode for" << endl
310 for (
int j = 0; j < decay->
getNDaug(); j++ )
316 if ( match == 0 ) { match_bf = _decaylist[match]->getBrfrSum(); }
318 { match_bf = ( _decaylist[match]->getBrfrSum() - _decaylist[match - 1]->getBrfrSum() ); }
320 double divisor = 1 - match_bf;
321 if ( divisor < 0.000001 && _nmode > 1 )
323 report(
ERROR,
"EvtGen" ) <<
"Removing requested mode leaves "
325 <<
" with zero sum branching fraction," << endl
326 <<
"but more than one decay mode remains. Aborting." << endl;
332 for ( i = 0; i < match; i++ )
334 newlist[i] = _decaylist[i];
335 newlist[i]->
setBrfrSum( newlist[i]->getBrfrSum() / divisor );
337 for ( i = match + 1; i < _nmode; i++ )
339 newlist[i - 1] = _decaylist[i];
340 newlist[i - 1]->
setBrfrSum( ( newlist[i - 1]->getBrfrSum() - match_bf ) / divisor );
347 _decaylist = newlist;
349 if ( _nmode == 0 ) {
delete[] _decaylist; }
EvtParticleDecay * EvtParticleDecayPtr
ostream & report(Severity severity, const char *facility)
virtual EvtDecayBase * clone()=0
virtual bool matchingDecay(const EvtDecayBase &other) const
std::string getModelName()
void saveDecayInfo(EvtId ipar, int ndaug, EvtId *daug, int narg, std::vector< std::string > &args, std::string name, double brfr)
double getBranchingFraction()
std::string getArgStr(int j)
static std::string name(EvtId i)
void removeMode(EvtDecayBase *decay)
EvtDecayBase * getDecayModel(EvtParticle *p)
void makeChargeConj(EvtParticleDecayList *conjDecayList)
void addMode(EvtDecayBase *decay, double brfr, double massmin)
EvtParticleDecay & getDecay(int nchannel)
void setDecayModel(EvtDecayBase *decay)
EvtDecayBase * getDecayModel()
void setMassMin(double massmin)
void chargeConj(EvtParticleDecay *decay)
void setBrfrSum(double brfrsum)
static void setRejectFlag()