63 if ( theDecayTable == 0 ) {
105 std::string colon(
":" ), equals(
"=" );
110 <<
"In readDecayFile, reading:" << dec_name.c_str() << endl;
114 fin.open( dec_name.c_str() );
117 <<
"Could not open " << dec_name.c_str() << endl;
122 parser.
read( dec_name );
130 for ( itok = 0; itok < parser.
getNToken(); itok++ ) {
133 if ( token ==
"End" )
139 <<
"Could not find an 'End' in " << dec_name.c_str() << endl;
141 <<
"Will terminate execution." << endl;
145 std::string model, parent, sdaug;
155 std::vector<EvtModelAlias> modelAliasList;
158 token = parser.
getToken( itoken++ );
161 if ( token ==
"noPhotos" ) {
165 <<
"As requested, PHOTOS will be turned off." << endl;
166 }
else if ( token ==
"yesPhotos" ) {
170 <<
"As requested, PHOTOS will be turned on for all decays." 172 }
else if ( token ==
"normalPhotos" ) {
176 <<
"As requested, PHOTOS will be turned on only when requested." 178 }
else if ( token ==
"Alias" ) {
182 newname = parser.
getToken( itoken++ );
183 oldname = parser.
getToken( itoken++ );
187 if (
id ==
EvtId( -1, -1 ) ) {
189 <<
"Unknown particle name:" << oldname.c_str()
192 <<
"Will terminate execution!" << endl;
200 }
else if ( token ==
"ModelAlias" ) {
201 std::vector<std::string> modelArgList;
203 std::string aliasName = parser.
getToken( itoken++ );
204 std::string modelName = parser.
getToken( itoken++ );
206 std::string nameTemp;
208 nameTemp = parser.
getToken( itoken++ );
209 if ( nameTemp !=
";" ) {
210 modelArgList.push_back( nameTemp );
212 }
while ( nameTemp !=
";" );
213 EvtModelAlias newAlias( aliasName, modelName, modelArgList );
214 modelAliasList.push_back( newAlias );
215 }
else if ( token ==
"ChargeConj" ) {
217 std::string abarname;
219 aname = parser.
getToken( itoken++ );
220 abarname = parser.
getToken( itoken++ );
225 if ( a ==
EvtId( -1, -1 ) ) {
227 <<
"Unknown particle name:" << aname.c_str() <<
" on line " 230 <<
"Will terminate execution!" << endl;
234 if ( abar ==
EvtId( -1, -1 ) ) {
236 <<
"Unknown particle name:" << abarname.c_str()
239 <<
"Will terminate execution!" << endl;
245 }
else if ( token ==
"JetSetPar" ) {
247 std::string pythiaCommand = parser.
getToken( itoken++ );
252 int i1 = pythiaCommand.find_first_of(
"(" );
253 int i2 = pythiaCommand.find_first_of(
")" );
254 int i3 = pythiaCommand.find_first_of(
"=" );
256 std::string pythiaModule = pythiaCommand.substr( 0, i1 );
257 std::string pythiaParam = pythiaCommand.substr( i1 + 1, i2 - i1 - 1 );
258 std::string pythiaValue = pythiaCommand.substr( i3 + 1 );
260 command[
"MODULE"] = pythiaModule;
261 command[
"PARAM"] = pythiaParam;
262 command[
"VALUE"] = pythiaValue;
264 command[
"GENERATOR"] =
"Both";
265 command[
"VERSION"] =
"PYTHIA6";
267 extGenCommands->
addCommand(
"PYTHIA", command );
269 }
else if ( modelist.
isCommand( token ) ) {
272 cnfgstr = parser.
getToken( itoken++ );
276 }
else if ( token ==
"PythiaGenericParam" ||
277 token ==
"PythiaAliasParam" || token ==
"PythiaBothParam" ) {
286 std::string pythiaCommand = parser.
getToken( itoken++ );
287 std::string pythiaModule(
"" ), pythiaParam(
"" ), pythiaValue(
"" );
292 std::vector<std::string> pComVect1 =
295 if ( pComVect1.size() == 2 ) {
296 pythiaModule = pComVect1[0];
298 std::string pCom2 = pComVect1[1];
300 std::vector<std::string> pComVect2 = this->
splitString( pCom2,
303 if ( pComVect2.size() == 2 ) {
304 pythiaParam = pComVect2[0];
305 pythiaValue = pComVect2[1];
312 if ( token ==
"PythiaGenericParam" ) {
313 command[
"GENERATOR"] =
"Generic";
314 }
else if ( token ==
"PythiaAliasParam" ) {
315 command[
"GENERATOR"] =
"Alias";
317 command[
"GENERATOR"] =
"Both";
320 command[
"MODULE"] = pythiaModule;
321 command[
"PARAM"] = pythiaParam;
322 command[
"VALUE"] = pythiaValue;
324 command[
"VERSION"] =
"PYTHIA8";
325 extGenCommands->
addCommand(
"PYTHIA", command );
327 }
else if ( token ==
"CDecay" ) {
333 if ( ipar ==
EvtId( -1, -1 ) ) {
335 <<
"Unknown particle name:" << name.c_str() <<
" on line " 338 <<
"Will terminate execution!" << endl;
347 <<
"Redefined decay of " << name.c_str() <<
" in CDecay" 357 }
else if ( token ==
"Define" ) {
368 }
else if ( token ==
"Particle" ) {
370 pname = parser.
getToken( itoken++ );
374 double newMass = atof( parser.
getToken( itoken++ ).c_str() );
378 newWidth = atof( parser.
getToken( itoken++ ).c_str() );
386 <<
"Changing particle properties of " << pname.c_str()
387 <<
" Mass=" << newMass <<
" Width=" << newWidth << endl;
389 }
else if ( token ==
"ChangeMassMin" ) {
391 pname = parser.
getToken( itoken++ );
392 double tmass = atof( parser.
getToken( itoken++ ).c_str() );
398 <<
"Refined minimum mass for " 399 <<
EvtPDL::name( thisPart ).c_str() <<
" to be " << tmass
402 }
else if ( token ==
"ChangeMassMax" ) {
404 pname = parser.
getToken( itoken++ );
405 double tmass = atof( parser.
getToken( itoken++ ).c_str() );
410 <<
"Refined maximum mass for " 411 <<
EvtPDL::name( thisPart ).c_str() <<
" to be " << tmass
414 }
else if ( token ==
"IncludeBirthFactor" ) {
416 pname = parser.
getToken( itoken++ );
418 if ( parser.
getToken( itoken++ ) ==
"yes" )
425 <<
"Include birth factor for " 429 <<
"No longer include birth factor for " 433 }
else if ( token ==
"IncludeDecayFactor" ) {
435 pname = parser.
getToken( itoken++ );
437 if ( parser.
getToken( itoken++ ) ==
"yes" )
444 <<
"Include decay factor for " 448 <<
"No longer include decay factor for " 451 }
else if ( token ==
"LSNONRELBW" ) {
453 pname = parser.
getToken( itoken++ );
455 std::string tstr =
"NONRELBW";
459 <<
"Change lineshape to non-rel BW for " 461 }
else if ( token ==
"LSFLAT" ) {
463 pname = parser.
getToken( itoken++ );
465 std::string tstr =
"FLAT";
469 <<
"Change lineshape to flat for " 471 }
else if ( token ==
"LSMANYDELTAFUNC" ) {
473 pname = parser.
getToken( itoken++ );
475 std::string tstr =
"MANYDELTAFUNC";
479 <<
"Change lineshape to spikes for " 482 }
else if ( token ==
"BlattWeisskopf" ) {
484 pname = parser.
getToken( itoken++ );
485 double tnum = atof( parser.
getToken( itoken++ ).c_str() );
490 <<
"Redefined Blatt-Weisskopf factor " 491 <<
EvtPDL::name( thisPart ).c_str() <<
" to be " << tnum
493 }
else if ( token ==
"BlattWeisskopfBirth" ) {
495 pname = parser.
getToken( itoken++ );
496 double tnum = atof( parser.
getToken( itoken++ ).c_str() );
501 <<
"Redefined Blatt-Weisskopf birth factor " 502 <<
EvtPDL::name( thisPart ).c_str() <<
" to be " << tnum
504 }
else if ( token ==
"SetLineshapePW" ) {
506 pname = parser.
getToken( itoken++ );
508 std::string pnameD1 = parser.
getToken( itoken++ );
510 std::string pnameD2 = parser.
getToken( itoken++ );
512 int pw = atoi( parser.
getToken( itoken++ ).c_str() );
515 <<
"Redefined Partial wave for " << pname.c_str() <<
" to " 516 << pnameD1.c_str() <<
" " << pnameD2.c_str() <<
" (" << pw
522 }
else if ( token ==
"Decay" ) {
523 std::string temp_fcn_new_model;
527 double brfrsum = 0.0;
529 parent = parser.
getToken( itoken++ );
532 if ( ipar ==
EvtId( -1, -1 ) ) {
534 <<
"Unknown particle name:" << parent.c_str() <<
" on line " 537 <<
"Will terminate execution!" << endl;
543 <<
"Redefined decay of " << parent.c_str() << endl;
548 token = parser.
getToken( itoken++ );
550 if ( token !=
"Enddecay" ) {
552 while ( token.c_str()[i++] != 0 ) {
553 if ( isalpha( token.c_str()[i] ) ) {
555 <<
"Expected to find a branching fraction or Enddecay " 556 <<
"but found:" << token.c_str() <<
" on line " 559 <<
"Possibly to few arguments to model " 560 <<
"on previous line!" << endl;
562 <<
"Will terminate execution!" << endl;
567 brfr = atof( token.c_str() );
573 if ( !( isname || ismodel ) ) {
575 for (
size_t iAlias = 0; iAlias < modelAliasList.size();
577 if ( modelAliasList[iAlias].matchAlias(
585 if ( !( isname || ismodel ) ) {
587 << parser.
getToken( itoken ).c_str()
588 <<
" is neither a particle name nor " 589 <<
"the name of a model. " << endl;
591 <<
"It was encountered on line " 593 <<
" of the decay file." << endl;
595 <<
"Please fix it. Thank you." << endl;
597 <<
"Be sure to check that the " 598 <<
"correct case has been used. \n";
600 <<
"Terminating execution. \n";
610 sdaug = parser.
getToken( itoken++ );
612 if ( daught[n_daugh - 1] ==
EvtId( -1, -1 ) ) {
614 <<
"Unknown particle name:" << sdaug.c_str()
618 <<
"Will terminate execution!" << endl;
623 model = parser.
getToken( itoken++ );
630 if ( model ==
"PHOTOS" ) {
632 model = parser.
getToken( itoken++ );
634 if ( model ==
"VERBOSE" ) {
636 model = parser.
getToken( itoken++ );
638 if ( model ==
"SUMMARY" ) {
640 model = parser.
getToken( itoken++ );
642 }
while ( model ==
"PHOTOS" || model ==
"VERBOSE" ||
643 model ==
"SUMMARY" );
646 int foundAnAlias = -1;
647 for (
size_t iAlias = 0; iAlias < modelAliasList.size();
649 if ( modelAliasList[iAlias].matchAlias( model ) ) {
650 foundAnAlias = iAlias;
655 if ( foundAnAlias == -1 ) {
656 if ( !modelist.
isModel( model ) ) {
658 <<
"Expected to find a model name," 659 <<
"found:" << model.c_str() <<
" on line " 662 <<
"Will terminate execution!" << endl;
666 model = modelAliasList[foundAnAlias].getName();
669 temp_fcn_new_model = model;
670 temp_fcn_new = modelist.
getFcn( model );
682 std::vector<std::string> temp_fcn_new_args;
687 if ( foundAnAlias == -1 ) {
691 temp_fcn_new_args.push_back(
695 <<
"Reading arguments and found:" 696 << name.c_str() <<
" on line:" 700 <<
"Will terminate execution!" << endl;
705 int ismodel = modelist.
isModel( name );
708 <<
"Expected ';' but found:" << name.c_str()
713 <<
"Most probable error is omitted ';'." 716 <<
"Will terminate execution!" << endl;
719 }
while ( name !=
";" );
721 std::vector<std::string> copyMe =
722 modelAliasList[foundAnAlias].getArgList();
723 temp_fcn_new_args = copyMe;
731 temp_fcn_new_args.size(),
733 temp_fcn_new_model, brfr );
735 double massmin = 0.0;
749 }
while ( token !=
"Enddecay" );
756 else if ( token ==
"CopyDecay" ) {
760 newname = parser.
getToken( itoken++ );
761 oldname = parser.
getToken( itoken++ );
766 if ( oldipar ==
EvtId( -1, -1 ) ) {
768 <<
"Unknown particle name:" << oldname.c_str()
771 <<
"Will terminate execution!" << endl;
774 if ( newipar ==
EvtId( -1, -1 ) ) {
776 <<
"Unknown particle name:" << newname.c_str()
779 <<
"Will terminate execution!" << endl;
784 <<
"Redefining decay of " << newname << endl;
791 else if ( token ==
"RemoveDecay" ) {
792 parent = parser.
getToken( itoken++ );
795 if ( ipar ==
EvtId( -1, -1 ) ) {
797 <<
"Unknown particle name:" << parent.c_str() <<
" on line " 800 <<
"Will terminate execution!" << endl;
806 <<
"No decays to delete for " << parent.c_str() << endl;
809 <<
"Deleting selected decays of " << parent.c_str() << endl;
815 if ( token !=
"Enddecay" ) {
819 sdaug = parser.
getToken( itoken++ );
821 if ( daught[n_daugh - 1] ==
EvtId( -1, -1 ) ) {
823 <<
"Unknown particle name:" << sdaug.c_str()
827 <<
"Will terminate execution!" << endl;
832 if ( token !=
";" ) {
834 <<
"Expected ';' but found:" << token <<
" on line:" 837 <<
"Most probable error is omitted ';'." << endl;
839 <<
"Will terminate execution!" << endl;
842 token = parser.
getToken( itoken++ );
844 std::vector<std::string> temp_fcn_new_args;
845 std::string temp_fcn_new_model(
"PHSP" );
848 temp_fcn_new_model, 0. );
851 }
while ( token !=
"Enddecay" );
853 }
else if ( token !=
"End" ) {
855 <<
"Found unknown command:'" << token.c_str() <<
"' on line " 858 <<
"Will terminate execution!" << endl;
862 }
while ( ( token !=
"End" ) && itoken != parser.
getNToken() );
867 EvtId temp( ii, ii );
877 for ( jj = 0; jj < nModTot; jj++ ) {
878 double tmass =
_decaytable[ii].getDecay( jj ).getMassMin();
879 if ( tmass < minMass )
885 <<
"Given allowed decays, resetting minMass " 902 parser.
open( dec_name );
905 std::string decayParent =
"";
907 std::vector<EvtModelAlias> modelAliasList;
908 bool endReached =
false;
915 if ( usage ==
"always" ) {
919 <<
"As requested, PHOTOS will be turned on for all decays." 921 }
else if ( usage ==
"never" ) {
925 <<
"As requested, PHOTOS will be turned off." 931 <<
"As requested, PHOTOS will be turned on only when requested." 945 }
else if ( parser.
getTagTitle() ==
"modelAlias" ) {
946 std::vector<std::string> modelArgList;
951 std::istringstream paramStream( paramStr );
955 if ( paramStr ==
"" ) {
959 while ( paramName !=
"" ) {
964 modelArgList.push_back( param );
969 while ( std::getline( paramStream, param,
' ' ) ) {
970 modelArgList.push_back( param );
974 modelAliasList.push_back( newAlias );
976 }
else if ( parser.
getTagTitle() ==
"chargeConj" ) {
988 }
else if ( parser.
getTagTitle() ==
"conjDecay" ) {
1000 <<
"Redefined decay of " << particle.c_str()
1001 <<
" in ConjDecay" << endl;
1015 }
else if ( parser.
getTagTitle() ==
"particle" ) {
1022 "includeBirthFactor" );
1024 "includeDecayFactor" );
1025 std::string lineShape = parser.
readAttribute(
"lineShape" );
1027 "blattWeisskopfFactor" );
1029 "blattWeisskopfBirth" );
1037 <<
"Refined mass for " 1038 <<
EvtPDL::name( thisPart ).c_str() <<
" to be " << mass
1041 if ( width != -1 ) {
1044 <<
"Refined width for " 1048 if ( minMass != -1 ) {
1051 <<
"Refined minimum mass for " 1055 if ( maxMass != -1 ) {
1058 <<
"Refined maximum mass for " 1062 if ( !birthFactor.empty() ) {
1068 <<
"Include birth factor for " 1072 <<
"No longer include birth factor for " 1077 if ( !decayFactor.empty() ) {
1083 <<
"Include decay factor for " 1087 <<
"No longer include decay factor for " 1092 if ( !lineShape.empty() ) {
1096 <<
"Change lineshape to " << lineShape <<
" for " 1099 if ( blattWeisskopfD != -1 ) {
1103 <<
"Redefined Blatt-Weisskopf factor " 1105 << blattWeisskopfD << endl;
1107 if ( blattWeisskopfB != -1 ) {
1111 <<
"Redefined Blatt-Weisskopf birth factor " 1113 << blattWeisskopfB << endl;
1115 }
else if ( parser.
getTagTitle() ==
"lineShapePW" ) {
1134 <<
"Redefined Partial wave for " << parent.c_str()
1135 <<
" to " << daug1.c_str() <<
" " << daug2.c_str()
1136 <<
" (" << pw <<
")" << endl;
1146 <<
"Redefined decay of " << decayParent.c_str() << endl;
1150 }
else if ( parser.
getTagTitle() ==
"copyDecay" ) {
1162 <<
"Redefining decay of " << particle << endl;
1167 }
else if ( parser.
getTagTitle() ==
"removeDecay" ) {
1174 <<
"No decays to delete for " << decayParent.c_str()
1178 <<
"Deleting selected decays of " << decayParent.c_str()
1182 }
else if ( parser.
getTagTitle() ==
"pythiaParam" ) {
1188 command[
"VERSION"] =
"PYTHIA8";
1189 extGenCommands->
addCommand(
"PYTHIA", command );
1191 }
else if ( parser.
getTagTitle() ==
"pythia6Param" ) {
1197 command[
"VERSION"] =
"PYTHIA6";
1198 extGenCommands->
addCommand(
"PYTHIA", command );
1215 <<
" found in XML decay file near line " 1226 std::string temp_fcn_new_model;
1227 std::vector<std::string> temp_fcn_new_args;
1231 std::istringstream daugStream( daugStr );
1234 std::istringstream paramStream( paramStr );
1240 while ( std::getline( daugStream, daugh,
' ' ) ) {
1245 int modelAlias = -1;
1246 for (
size_t iAlias = 0; iAlias < modelAliasList.size();
1248 if ( modelAliasList[iAlias].matchAlias( model ) ) {
1249 modelAlias = iAlias;
1254 if ( modelAlias == -1 ) {
1255 if ( !modelist.
isModel( model ) ) {
1257 <<
"Expected to find a model name near line " 1259 <<
"found:" << model.c_str() << endl;
1261 <<
"Will terminate execution!" << endl;
1265 model = modelAliasList[modelAlias].getName();
1268 temp_fcn_new_model = model;
1269 temp_fcn_new = modelist.
getFcn( model );
1279 if ( modelAlias == -1 ) {
1281 if ( paramStr ==
"" ) {
1283 std::string paramName = temp_fcn_new->
getParamName( 0 );
1284 while ( paramName !=
"" ) {
1289 temp_fcn_new_args.push_back(
1293 <<
"Reading arguments near line " 1295 <<
" and found:" << param.c_str() << endl;
1297 <<
"Will terminate execution!" << endl;
1305 while ( std::getline( paramStream, param,
' ' ) ) {
1306 temp_fcn_new_args.push_back(
1310 <<
"Reading arguments near line " 1312 <<
" and found:" << param.c_str() << endl;
1314 <<
"Will terminate execution!" << endl;
1320 std::vector<std::string> copyMe =
1321 modelAliasList[modelAlias].getArgList();
1322 temp_fcn_new_args = copyMe;
1328 temp_fcn_new_args.size(),
1330 temp_fcn_new_model, brfr );
1332 double massMin = 0.0;
1350 <<
" found in XML decay file near line " 1360 std::istringstream daugStream( daugStr );
1363 while ( std::getline( daugStream, daugh,
' ' ) ) {
1369 std::vector<std::string> temp_fcn_new_args;
1370 std::string temp_fcn_new_model(
"PHSP" );
1373 temp_fcn_new_model, 0. );
1375 }
else if ( parser.
getTagTitle() !=
"/removeDecay" ) {
1378 <<
" found in XML decay file near line " 1385 if ( !endReached ) {
1387 <<
"Either the decay file ended prematurely or the file is badly formed.\n" 1388 <<
"Error occured near line" << parser.
getLineNumber() << endl;
1394 EvtId temp( ii, ii );
1404 for ( jj = 0; jj < nModTot; jj++ ) {
1405 double tmass =
_decaytable[ii].getDecay( jj ).getMassMin();
1406 if ( tmass < minMass )
1412 <<
"Given allowed decays, resetting minMass " 1422 return ( valStr ==
"true" || valStr ==
"1" || valStr ==
"on" ||
1430 <<
"Unknown particle name:" << particle.c_str() << endl;
1432 <<
"Will terminate execution!" << endl;
1439 int aliasInt =
id.getAlias();
1451 theModel =
_decaytable[aliasInt].getDecayModel( modeInt );
1475 int nModes = this->
getNModes(
id.getAlias() );
1491 EvtId* daugs,
int narg, std::string* args )
1494 EvtId daugs_scratch[50];
1514 for ( j = 0; j < ndaug; j++ ) {
1515 daugs_scratch[j] = daugs[j];
1525 for ( k = 0; k < ndaug; k++ ) {
1530 daugs_scratch[k] =
EvtId( -1, -1 );
1537 right = right && ( nmatch == ndaug );
1562 for ( i = 0; i < ndaug; i++ ) {
1572 for ( i = 0; i < nmode; i++ ) {
1576 if ( thedecaymodel->
getDSum() == dsum ) {
1577 int nd = thedecaymodel->
getNDaug();
1579 if ( ndaug == nd ) {
1580 for ( j = 0; j < ndaug; j++ ) {
1581 daugs_scratch[j] = daugs[j];
1584 for ( j = 0; j < nd; j++ ) {
1585 for ( k = 0; k < ndaug; k++ ) {
1586 if (
EvtId( daugs_scratch[k] ) ==
1587 thedecaymodel->
getDaug( j ) ) {
1588 daugs_scratch[k] =
EvtId( -1, -1 );
1594 if ( ( nmatch == ndaug ) &&
1607 std::string& splitter )
1610 std::vector<std::string> result;
1612 if ( !theString.empty() && !splitter.empty() ) {
1613 for ( std::string::size_type offset = 0;; ) {
1614 std::string::size_type found = theString.find( splitter, offset );
1616 if ( found != std::string::npos ) {
1617 std::string tmpString = theString.substr( offset, found - offset );
1618 if ( tmpString.size() > 0 ) {
1619 result.push_back( tmpString );
1621 offset = found + splitter.size();
1623 std::string tmpString =
1624 theString.substr( offset, theString.size() - offset );
1625 if ( tmpString.size() > 0 ) {
1626 result.push_back( tmpString );
static EvtExtGeneratorCommandsTable * getInstance()
std::vector< std::string > splitString(std::string &theString, std::string &splitter)
static void setAlwaysRadCorr()
static void reSetMass(EvtId i, double mass)
static std::string name(EvtId i)
static void define(const std::string &name, std::string d)
virtual int nRealDaughters()
static void reSetMassMin(EvtId i, double mass)
static EvtDecayTable * getInstance()
std::string getName() const
virtual std::string getParamDefault(int i)
static void reSetWidth(EvtId i, double width)
virtual std::string getParamName(int i)
EvtDecayBase * getFcn(std::string model_name)
std::ostream & EvtGenReport(EvtGenSeverity severity, const char *facility=0)
double readAttributeDouble(std::string attribute, double defaultValue=-1.)
int read(const std::string filename)
static void setPWForDecay(EvtId i, int spin, EvtId d1, EvtId d2)
void addCommand(std::string extGenerator, Command command)
EvtDecayBase * getDecay(int ipar, int imode)
static void reSetBlatt(EvtId i, double blatt)
static void includeDecayFactor(EvtId i, bool yesno)
static double getMeanMass(EvtId i)
bool open(std::string filename)
std::string getTagTitle()
static void alias(EvtId num, const std::string &newname)
bool readAttributeBool(std::string attribute, bool defaultValue=false)
static std::string get(const std::string &name, int &ierr)
static void reSetBlattBirth(EvtId i, double blatt)
bool stringToBoolean(std::string valStr)
EvtDecayBase * getDecayFunc(EvtParticle *p)
int inChannelList(EvtId parent, int ndaug, EvtId *daugs)
std::string getParentTagTitle()
void saveDecayInfo(EvtId ipar, int ndaug, EvtId *daug, int narg, std::vector< std::string > &args, std::string name, double brfr)
int getNModes(int aliasInt)
static double getMinMass(EvtId i)
EvtDecayBase * findDecayModel(int aliasInt, int modeInt)
std::map< std::string, std::string > Command
static EvtModel & instance()
static void changeLS(EvtId i, std::string &newLS)
static EvtId getId(const std::string &name)
std::vector< EvtParticleDecayList > _decaytable
int findChannel(EvtId parent, std::string model, int ndaug, EvtId *daugs, int narg, std::string *args)
std::string getModelName() const
static void setNormalRadCorr()
static double getWidth(EvtId i)
void readXMLDecayFile(const std::string dec_name, bool verbose=true)
int readAttributeInt(std::string attribute, int defaultValue=-1)
static void aliasChgConj(EvtId a, EvtId abar)
static void reSetMassMax(EvtId i, double mass)
void readDecayFile(const std::string dec_name, bool verbose=true)
void storeCommand(std::string cmd, std::string cnfgstr)
static void setPWForBirthL(EvtId i, int spin, EvtId par, EvtId othD)
int isCommand(std::string cmd)
int getLineofToken(int i)
void checkParticle(std::string particle)
static EvtId chargeConj(EvtId id)
int isModel(std::string name)
bool hasPythia(int aliasInt)
static double getMaxMass(EvtId i)
static void includeBirthFactor(EvtId i, bool yesno)
static void setNeverRadCorr()
const std::string & getToken(int i)
std::string readAttribute(std::string attribute, std::string defaultValue="")
EvtId getDaug(int i) const