11 #ifndef Pythia8_ParticleData_H 12 #define Pythia8_ParticleData_H 14 #include "Pythia8/Basics.h" 15 #include "Pythia8/Info.h" 16 #include "Pythia8/PythiaStdlib.h" 17 #include "Pythia8/Settings.h" 18 #include "Pythia8/StandardModel.h" 26 class ResonanceWidths;
29 class SUSYResonanceWidths;
40 DecayChannel(
int onModeIn = 0,
double bRatioIn = 0.,
int meModeIn = 0,
41 int prod0 = 0,
int prod1 = 0,
int prod2 = 0,
int prod3 = 0,
42 int prod4 = 0,
int prod5 = 0,
int prod6 = 0,
int prod7 = 0)
43 : onModeSave(onModeIn), bRatioSave(bRatioIn), currentBRSave(0.),
44 onShellWidthSave(0.), openSecPos(1.), openSecNeg(1.),
45 meModeSave(meModeIn), nProd(0), prod(), hasChangedSave(true) {
46 prod[0] = prod0; prod[1] = prod1; prod[2] = prod2; prod[3] = prod3;
47 prod[4] = prod4; prod[5] = prod5; prod[6] = prod6; prod[7] = prod7;
48 for (
int j = 0; j < 8; ++j)
if (prod[j] != 0 && j == nProd) ++nProd; }
52 onModeSave = oldDC.onModeSave; bRatioSave = oldDC.bRatioSave;
53 currentBRSave = oldDC.currentBRSave;
54 onShellWidthSave = oldDC.onShellWidthSave; openSecPos = oldDC.openSecPos;
55 openSecNeg = oldDC.openSecNeg; meModeSave = oldDC.meModeSave;
56 nProd = oldDC.nProd;
for (
int j = 0; j < 8; ++j) prod[j] = oldDC.prod[j];
57 hasChangedSave = oldDC.hasChangedSave; }
61 onModeSave = oldDC.onModeSave; bRatioSave = oldDC.bRatioSave;
62 currentBRSave = oldDC.currentBRSave;
63 onShellWidthSave = oldDC.onShellWidthSave; openSecPos = oldDC.openSecPos;
64 openSecNeg = oldDC.openSecNeg; meModeSave = oldDC.meModeSave;
65 nProd = oldDC.nProd;
for (
int j = 0; j < 8; ++j) prod[j] = oldDC.prod[j];
66 hasChangedSave = oldDC.hasChangedSave; }
return *
this; }
69 void onMode(
int onModeIn) {onModeSave = onModeIn; hasChangedSave =
true;}
70 void bRatio(
double bRatioIn,
bool countAsChanged =
true) {
71 bRatioSave = bRatioIn;
if (countAsChanged) hasChangedSave =
true;}
72 void rescaleBR(
double fac) {bRatioSave *= fac; hasChangedSave =
true;}
73 void meMode(
int meModeIn) {meModeSave = meModeIn; hasChangedSave =
true;}
74 void multiplicity(
int multIn) {nProd = multIn; hasChangedSave =
true;}
75 void product(
int i,
int prodIn) {prod[i] = prodIn; nProd = 0;
76 for (
int j = 0; j < 8; ++j)
if (prod[j] != 0 && j == nProd) ++nProd;
77 hasChangedSave =
true;}
78 void setHasChanged(
bool hasChangedIn) {hasChangedSave = hasChangedIn;}
81 int onMode()
const {
return onModeSave;}
82 double bRatio()
const {
return bRatioSave;}
83 int meMode()
const {
return meModeSave;}
84 int multiplicity()
const {
return nProd;}
85 int product(
int i)
const {
return (i >= 0 && i < nProd) ? prod[i] : 0;}
86 bool hasChanged()
const {
return hasChangedSave;}
90 bool contains(
int id1,
int id2)
const;
91 bool contains(
int id1,
int id2,
int id3)
const;
95 void currentBR(
double currentBRIn) {currentBRSave = currentBRIn;}
96 double currentBR()
const {
return currentBRSave;}
100 onShellWidthSave = onShellWidthIn;}
102 void onShellWidthFactor(
double factor) {onShellWidthSave *= factor;}
106 if (idSgn > 0) openSecPos = openSecIn;
else openSecNeg = openSecIn;}
107 double openSec(
int idSgn)
const {
108 return (idSgn > 0) ? openSecPos : openSecNeg;}
114 double bRatioSave, currentBRSave, onShellWidthSave, openSecPos,
116 int meModeSave, nProd, prod[8];
131 int spinTypeIn = 0,
int chargeTypeIn = 0,
int colTypeIn = 0,
132 double m0In = 0.,
double mWidthIn = 0.,
double mMinIn = 0.,
133 double mMaxIn = 0.,
double tau0In = 0.,
bool varWidthIn =
false)
134 : idSave(abs(idIn)), nameSave(nameIn), antiNameSave(
"void"),
135 spinTypeSave(spinTypeIn), chargeTypeSave(chargeTypeIn),
136 colTypeSave(colTypeIn), m0Save(m0In), mWidthSave (mWidthIn),
137 mMinSave(mMinIn), mMaxSave(mMaxIn), tau0Save(tau0In),
138 constituentMassSave(), hasAntiSave(false), isResonanceSave(),
139 mayDecaySave(), tauCalcSave(true), varWidthSave(varWidthIn),
140 doExternalDecaySave(), isVisibleSave(), doForceWidthSave(),
141 hasChangedSave(true), hasChangedMMinSave(false),
142 hasChangedMMaxSave(false), modeBWnow(), modeTau0now(), atanLow(),
143 atanDif(), mThr(), currentBRSum(), resonancePtr(0), particleDataPtr() {
146 int spinTypeIn = 0,
int chargeTypeIn = 0,
int colTypeIn = 0,
147 double m0In = 0.,
double mWidthIn = 0.,
double mMinIn = 0.,
148 double mMaxIn = 0.,
double tau0In = 0.,
bool varWidthIn =
false)
149 : idSave(abs(idIn)), nameSave(nameIn), antiNameSave(antiNameIn),
150 spinTypeSave(spinTypeIn), chargeTypeSave(chargeTypeIn),
151 colTypeSave(colTypeIn), m0Save(m0In), mWidthSave (mWidthIn),
152 mMinSave(mMinIn), mMaxSave(mMaxIn), tau0Save(tau0In),
153 constituentMassSave(), hasAntiSave(
true), isResonanceSave(),
154 mayDecaySave(), tauCalcSave(
true), varWidthSave(varWidthIn),
155 doExternalDecaySave(), isVisibleSave(), doForceWidthSave(),
156 hasChangedSave(
true), hasChangedMMinSave(
false),
157 hasChangedMMaxSave(
false), modeBWnow(), modeTau0now(), atanLow(),
158 atanDif(), mThr(), currentBRSum(), resonancePtr(0), particleDataPtr() {
159 setDefaults();
if (
toLower(antiNameIn) ==
"void") hasAntiSave =
false;}
163 nameSave = oldPDE.nameSave; antiNameSave = oldPDE.antiNameSave;
164 spinTypeSave = oldPDE.spinTypeSave; chargeTypeSave = oldPDE.chargeTypeSave;
165 colTypeSave = oldPDE.colTypeSave; m0Save = oldPDE.m0Save;
166 mWidthSave = oldPDE.mWidthSave; mMinSave = oldPDE.mMinSave;
167 mMaxSave = oldPDE.mMaxSave; tau0Save = oldPDE.tau0Save;
168 varWidthSave = oldPDE.varWidthSave;
169 constituentMassSave = oldPDE.constituentMassSave;
170 hasAntiSave = oldPDE.hasAntiSave; isResonanceSave = oldPDE.isResonanceSave;
171 mayDecaySave = oldPDE.mayDecaySave; tauCalcSave = oldPDE.tauCalcSave;
172 doExternalDecaySave = oldPDE.doExternalDecaySave; isVisibleSave
173 = oldPDE.isVisibleSave; doForceWidthSave = oldPDE.doForceWidthSave;
174 hasChangedSave = oldPDE.hasChangedSave; hasChangedMMinSave
175 = oldPDE.hasChangedMMinSave; hasChangedMMaxSave
176 = oldPDE.hasChangedMMaxSave; modeTau0now = oldPDE.modeTau0now; modeBWnow
177 = oldPDE.modeBWnow; atanLow = oldPDE.atanLow; atanDif = oldPDE.atanDif;
179 for (
int i = 0; i < int(oldPDE.channels.size()); ++i) {
180 DecayChannel oldDC = oldPDE.channels[i]; channels.push_back(oldDC); }
181 currentBRSum = oldPDE.currentBRSum; resonancePtr = oldPDE.resonancePtr;
182 particleDataPtr = oldPDE.particleDataPtr; }
186 if (
this != &oldPDE) { idSave = oldPDE.idSave;
187 nameSave = oldPDE.nameSave; antiNameSave = oldPDE.antiNameSave;
188 spinTypeSave = oldPDE.spinTypeSave; chargeTypeSave = oldPDE.chargeTypeSave;
189 colTypeSave = oldPDE.colTypeSave; m0Save = oldPDE.m0Save;
190 mWidthSave = oldPDE.mWidthSave; mMinSave = oldPDE.mMinSave;
191 mMaxSave = oldPDE.mMaxSave; tau0Save = oldPDE.tau0Save;
192 varWidthSave = oldPDE.varWidthSave;
193 constituentMassSave = oldPDE.constituentMassSave;
194 hasAntiSave = oldPDE.hasAntiSave; isResonanceSave = oldPDE.isResonanceSave;
195 mayDecaySave = oldPDE.mayDecaySave; tauCalcSave = oldPDE.tauCalcSave;
196 doExternalDecaySave = oldPDE.doExternalDecaySave; isVisibleSave
197 = oldPDE.isVisibleSave; doForceWidthSave = oldPDE.doForceWidthSave;
198 hasChangedSave = oldPDE.hasChangedSave; hasChangedMMinSave
199 = oldPDE.hasChangedMMinSave; hasChangedMMaxSave
200 = oldPDE.hasChangedMMaxSave; modeBWnow = oldPDE.modeBWnow; atanLow
201 = oldPDE.atanLow; atanDif = oldPDE.atanDif; mThr = oldPDE.mThr;
202 for (
int i = 0; i < int(oldPDE.channels.size()); ++i) {
203 DecayChannel oldDC = oldPDE.channels[i]; channels.push_back(oldDC); }
204 currentBRSum = oldPDE.currentBRSum; resonancePtr = 0;
205 particleDataPtr = 0; }
return *
this; }
215 particleDataPtr = particleDataPtrIn;}
218 void setAll(
string nameIn,
string antiNameIn,
int spinTypeIn = 0,
219 int chargeTypeIn = 0,
int colTypeIn = 0,
double m0In = 0.,
220 double mWidthIn = 0.,
double mMinIn = 0.,
double mMaxIn = 0.,
221 double tau0In = 0.,
double varWidthIn =
false)
222 {nameSave = nameIn; antiNameSave = antiNameIn; hasAntiSave =
true;
223 if (
toLower(antiNameIn) ==
"void") hasAntiSave =
false;
224 spinTypeSave = spinTypeIn; chargeTypeSave = chargeTypeIn;
225 colTypeSave = colTypeIn; m0Save = m0In; mWidthSave = mWidthIn;
226 setMMin(mMinIn); setMMax(mMaxIn); tau0Save = tau0In;
227 varWidthSave = varWidthIn; setDefaults(); hasChangedSave =
true;}
231 void setName(
string nameIn) {nameSave = nameIn; hasChangedSave =
true;}
232 void setAntiName(
string antiNameIn) {antiNameSave = antiNameIn;
233 hasAntiSave = (
toLower(antiNameIn) !=
"void"); hasChangedSave =
true;}
234 void setNames(
string nameIn,
string antiNameIn) {nameSave = nameIn;
235 antiNameSave = antiNameIn; hasAntiSave = (
toLower(antiNameIn) !=
"void");
236 hasChangedSave =
true;}
237 void setSpinType(
int spinTypeIn) {spinTypeSave = spinTypeIn;
238 hasChangedSave =
true;}
239 void setChargeType(
int chargeTypeIn) {chargeTypeSave = chargeTypeIn;
240 hasChangedSave =
true;}
241 void setColType(
int colTypeIn) {colTypeSave = colTypeIn;
242 hasChangedSave =
true;}
243 void setM0(
double m0In) {m0Save = m0In; setConstituentMass();
244 hasChangedSave =
true;}
245 void setMWidth(
double mWidthIn,
bool countAsChanged =
true) {
246 mWidthSave = mWidthIn;
if (countAsChanged) hasChangedSave =
true;}
247 void setMMin(
double mMinIn) {mMinSave = mMinIn; hasChangedSave =
true;
248 hasChangedMMinSave=
true;}
249 void setMMax(
double mMaxIn) {mMaxSave = mMaxIn; hasChangedSave =
true;
250 hasChangedMMaxSave=
true;}
253 void setMMaxNoChange(
double mMaxIn) {mMaxSave = mMaxIn;}
254 void setTau0(
double tau0In,
bool countAsChanged =
true)
255 {tau0Save = tau0In;
if (countAsChanged) hasChangedSave =
true;}
256 void setVarWidth(
bool varWidthIn) {varWidthSave = varWidthIn;}
257 void setIsResonance(
bool isResonanceIn) {isResonanceSave = isResonanceIn;
258 hasChangedSave =
true;}
259 void setMayDecay(
bool mayDecayIn,
bool countAsChanged =
true) {
260 mayDecaySave = mayDecayIn;
if (countAsChanged) hasChangedSave =
true;}
261 void setTauCalc(
bool tauCalcIn,
bool countAsChanged =
true) {
262 tauCalcSave = tauCalcIn;
if (countAsChanged) hasChangedSave =
true;}
263 void setDoExternalDecay(
bool doExternalDecayIn)
264 {doExternalDecaySave = doExternalDecayIn; hasChangedSave =
true;}
265 void setIsVisible(
bool isVisibleIn) {isVisibleSave = isVisibleIn;
266 hasChangedSave =
true;}
267 void setDoForceWidth(
bool doForceWidthIn) {doForceWidthSave = doForceWidthIn;
268 hasChangedSave =
true;}
269 void setHasChanged(
bool hasChangedIn) {hasChangedSave = hasChangedIn;
270 for (
int i = 0; i < int(channels.size()); ++i)
271 channels[i].setHasChanged(hasChangedIn);
272 if (!hasChangedIn) {hasChangedMMinSave=
false; hasChangedMMaxSave=
false;}}
275 int id()
const {
return idSave; }
277 return hasAntiSave ? -idSave : idSave; }
278 bool hasAnti()
const {
return hasAntiSave; }
279 string name(
int idIn = 1)
const {
280 return (idIn > 0) ? nameSave : antiNameSave; }
281 int spinType()
const {
return spinTypeSave; }
282 int chargeType(
int idIn = 1)
const {
283 return (idIn > 0) ? chargeTypeSave : -chargeTypeSave; }
284 double charge(
int idIn = 1)
const {
285 return (idIn > 0) ? chargeTypeSave / 3. : -chargeTypeSave / 3.; }
286 int colType(
int idIn = 1)
const {
287 if (colTypeSave == 2)
return colTypeSave;
288 return (idIn > 0) ? colTypeSave : -colTypeSave; }
289 double m0()
const {
return m0Save; }
290 double mWidth()
const {
return mWidthSave; }
291 double mMin()
const {
return mMinSave; }
292 double mMax()
const {
return mMaxSave; }
293 double m0Min()
const {
294 return (modeBWnow == 0) ? m0Save : mMinSave; }
295 double m0Max()
const {
296 return (modeBWnow == 0) ? m0Save : mMaxSave; }
297 double tau0()
const {
return tau0Save; }
298 bool isResonance()
const {
return isResonanceSave; }
299 bool varWidth()
const {
return varWidthSave; }
300 bool mayDecay()
const {
return mayDecaySave; }
301 bool tauCalc()
const {
return tauCalcSave; }
302 bool doExternalDecay()
const {
return doExternalDecaySave; }
303 bool isVisible()
const {
return isVisibleSave; }
304 bool doForceWidth()
const {
return doForceWidthSave; }
305 bool hasChanged()
const {
if (hasChangedSave)
return true;
306 for (
int i = 0; i < int(channels.size()); ++i)
307 if (channels[i].hasChanged())
return true;
309 bool hasChangedMMin()
const {
return hasChangedMMinSave; }
310 bool hasChangedMMax()
const {
return hasChangedMMaxSave; }
314 double constituentMass()
const {
return constituentMassSave; }
316 double mRun(
double mH)
const;
320 bool canDecay()
const {
return (channels.size() > 0)
322 bool isLepton()
const {
return (idSave > 10 && idSave < 19);}
323 bool isQuark()
const {
return (idSave != 0 && idSave < 9);}
324 bool isGluon()
const {
return (idSave == 21);}
325 bool isDiquark()
const {
return (idSave > 1000 && idSave < 10000
326 && (idSave/10)%10 == 0);}
327 bool isParton()
const {
return ( idSave == 21
328 || (idSave != 0 && idSave < 6)
329 || (idSave > 1000 && idSave < 5510 && (idSave/10)%10 == 0) );}
330 bool isHadron()
const;
331 bool isMeson()
const;
332 bool isBaryon()
const;
333 bool isOnium()
const;
337 && idSave < 9960000; }
338 int heaviestQuark(
int idIn = 1)
const;
339 int baryonNumberType(
int idIn = 1)
const;
340 int nQuarksInCode(
int idQIn)
const;
347 int prod0 = 0,
int prod1 = 0,
int prod2 = 0,
int prod3 = 0,
348 int prod4 = 0,
int prod5 = 0,
int prod6 = 0,
int prod7 = 0) {
350 prod1, prod2, prod3, prod4, prod5, prod6, prod7) ); }
357 const DecayChannel& channel(
int i)
const {
return channels[i];}
360 void rescaleBR(
double newSumBR = 1.);
363 bool preparePick(
int idSgn,
double mHat = 0.,
int idInFlav = 0);
369 void resInit(
Info* infoPtrIn);
370 double resWidth(
int idSgn,
double mHat,
int idIn = 0,
371 bool openOnly =
false,
bool setBR =
false);
372 double resWidthOpen(
int idSgn,
double mHat,
int idIn = 0);
373 double resWidthStore(
int idSgn,
double mHat,
int idIn = 0);
374 double resOpenFrac(
int idSgn);
375 double resWidthRescaleFactor();
376 double resWidthChan(
double mHat,
int idAbs1 = 0,
int idAbs2 = 0);
381 static const int INVISIBLENUMBER, INVISIBLETABLE[80], KNOWNNOWIDTH[3];
382 static const double MAXTAU0FORDECAY,MINMASSRESONANCE, NARROWMASS,
383 CONSTITUENTMASSTABLE[10];
387 string nameSave, antiNameSave;
388 int spinTypeSave, chargeTypeSave, colTypeSave;
389 double m0Save, mWidthSave, mMinSave, mMaxSave, tau0Save,
391 bool hasAntiSave, isResonanceSave, mayDecaySave, tauCalcSave, varWidthSave,
392 doExternalDecaySave, isVisibleSave, doForceWidthSave, hasChangedSave,
393 hasChangedMMinSave, hasChangedMMaxSave;
396 int modeBWnow, modeTau0now;
397 double atanLow, atanDif, mThr;
400 vector<DecayChannel> channels;
412 void setConstituentMass();
425 ParticleData() : setRapidDecayVertex(), modeBreitWigner(), maxEnhanceBW(),
426 mQRun(), Lambda5Run(), intermediateTau0(), infoPtr(0), settingsPtr(0),
427 rndmPtr(0), coupSMPtr(0), particlePtr(0), isInit(false),
428 readingFailedSave(false) {}
432 modeBreitWigner = oldPD.modeBreitWigner; maxEnhanceBW = oldPD.maxEnhanceBW;
433 for (
int i = 0; i < 7; ++i) mQRun[i] = oldPD.mQRun[i];
434 Lambda5Run = oldPD.Lambda5Run;
435 infoPtr = 0; settingsPtr = 0; rndmPtr = 0; coupSMPtr = 0;
436 for ( map<int, ParticleDataEntry>::const_iterator pde = oldPD.pdt.begin();
437 pde != oldPD.pdt.end(); pde++) {
int idTmp = pde->first;
438 pdt[idTmp] = pde->second; pdt[idTmp].initPtr(
this); }
439 particlePtr = 0; isInit = oldPD.isInit;
440 readingFailedSave = oldPD.readingFailedSave; }
444 modeBreitWigner = oldPD.modeBreitWigner; maxEnhanceBW = oldPD.maxEnhanceBW;
445 for (
int i = 0; i < 7; ++i) mQRun[i] = oldPD.mQRun[i];
446 Lambda5Run = oldPD.Lambda5Run;
447 infoPtr = 0; settingsPtr = 0; rndmPtr = 0; coupSMPtr = 0;
448 for ( map<int, ParticleDataEntry>::const_iterator pde = oldPD.pdt.begin();
449 pde != oldPD.pdt.end(); pde++) {
int idTmp = pde->first;
450 pdt[idTmp] = pde->second; pdt[idTmp].initPtr(
this); }
451 particlePtr = 0; isInit = oldPD.isInit;
452 readingFailedSave = oldPD.readingFailedSave; }
return *
this; }
456 settingsPtr = infoPtr->
settingsPtr; rndmPtr = infoPtr->rndmPtr;
457 coupSMPtr = infoPtr->coupSMPtr;}
460 bool init(
string startFile =
"../share/Pythia8/xmldoc/ParticleData.xml") {
461 initCommon();
return readXML(startFile);}
465 initCommon();
return copyXML(particleDataIn);}
468 bool init(istream& is) { initCommon();
return readXML(is);}
471 bool reInit(
string startFile,
bool xmlFormat =
true) { initCommon();
472 return (xmlFormat) ? readXML(startFile) : readFF(startFile);}
475 void initWidths(vector<ResonanceWidths*> resonancePtrs);
478 bool readXML(
string inFile,
bool reset =
true) ;
479 void listXML(
string outFile);
480 bool readXML(istream& is,
bool reset=
true);
486 bool loadXML(
string inFile,
bool reset =
true) ;
487 bool loadXML(istream& is,
bool reset=
true);
488 bool processXML(
bool reset =
true) ;
491 bool readFF(
string inFile,
bool reset =
true) ;
492 bool readFF(istream& is,
bool reset =
true);
493 void listFF(
string outFile);
496 bool readString(
string lineIn,
bool warn =
true) ;
502 void listAll(ostream& stream) {list(stream,
false,
true);}
503 void listAll() {listAll(cout);}
504 void listChanged(
bool changedRes =
false) {list(
true, changedRes);}
505 void list(ostream& stream,
bool chargedOnly =
false,
bool changedRes =
true);
506 void list(
bool changedOnly =
false,
bool changedRes =
true) {
507 list(cout, changedOnly, changedRes); }
510 void list(
int idList) {vector<int> idListTemp;
511 idListTemp.push_back(idList); list( idListTemp);}
512 void list(vector<int> idList);
517 if (subrun == -999)
return readStringHistory;
518 else if (readStringSubrun.find(subrun) != readStringSubrun.end())
519 return readStringSubrun[subrun];
520 else return vector<string>();
524 void checkTable(
int verbosity = 1) ;
527 void addParticle(
int idIn,
string nameIn =
" ",
int spinTypeIn = 0,
528 int chargeTypeIn = 0,
int colTypeIn = 0,
double m0In = 0.,
529 double mWidthIn = 0.,
double mMinIn = 0.,
double mMaxIn = 0.,
530 double tau0In = 0.,
bool varWidthIn =
false) {
532 colTypeIn, m0In, mWidthIn, mMinIn, mMaxIn, tau0In, varWidthIn);
533 pdt[abs(idIn)].initPtr(
this); }
534 void addParticle(
int idIn,
string nameIn,
string antiNameIn,
535 int spinTypeIn = 0,
int chargeTypeIn = 0,
int colTypeIn = 0,
536 double m0In = 0.,
double mWidthIn = 0.,
double mMinIn = 0.,
537 double mMaxIn = 0.,
double tau0In = 0.,
bool varWidthIn =
false) {
539 chargeTypeIn, colTypeIn, m0In, mWidthIn, mMinIn, mMaxIn, tau0In,
541 pdt[abs(idIn)].initPtr(
this); }
544 void setAll(
int idIn,
string nameIn,
string antiNameIn,
545 int spinTypeIn = 0,
int chargeTypeIn = 0,
int colTypeIn = 0,
546 double m0In = 0.,
double mWidthIn = 0.,
double mMinIn = 0.,
547 double mMaxIn = 0.,
double tau0In = 0.,
bool varWidthIn =
false) {
549 if ( ptr ) ptr->
setAll( nameIn, antiNameIn, spinTypeIn, chargeTypeIn,
550 colTypeIn, m0In, mWidthIn, mMinIn, mMaxIn, tau0In, varWidthIn); }
554 map<int,ParticleDataEntry>::const_iterator found = pdt.find( abs(idIn) );
555 if ( found == pdt.end() )
return false;
556 if ( idIn > 0 || found->second.hasAnti() )
return true;
562 map<int,ParticleDataEntry>::iterator found = pdt.find( abs(idIn) );
563 if( found == pdt.end() )
return nullptr;
564 if ( idIn > 0 || found->second.hasAnti() )
return &((*found).second);
570 map<int,ParticleDataEntry>::const_iterator found = pdt.find( abs(idIn) );
571 if( found == pdt.end() )
return nullptr;
572 if ( idIn > 0 || found->second.hasAnti() )
return &((*found).second);
577 int nextId(
int idIn)
const;
580 map<int, ParticleDataEntry>::iterator
begin() {
return pdt.begin(); }
581 map<int, ParticleDataEntry>::iterator end() {
return pdt.end(); }
584 void name(
int idIn,
string nameIn) {
586 if ( ptr ) ptr->
setName(nameIn); }
587 void antiName(
int idIn,
string antiNameIn) {
589 if ( ptr ) ptr->setAntiName(antiNameIn); }
590 void names(
int idIn,
string nameIn,
string antiNameIn) {
592 if ( ptr ) ptr->setNames(nameIn, antiNameIn); }
593 void spinType(
int idIn,
int spinTypeIn) {
595 if ( ptr ) ptr->setSpinType(spinTypeIn); }
596 void chargeType(
int idIn,
int chargeTypeIn) {
598 if ( ptr ) ptr->setChargeType(chargeTypeIn); }
599 void colType(
int idIn,
int colTypeIn) {
601 if ( ptr ) ptr->setColType(colTypeIn); }
602 void m0(
int idIn,
double m0In) {
604 if ( ptr ) ptr->setM0(m0In); }
605 void mWidth(
int idIn,
double mWidthIn) {
607 if ( ptr ) ptr->setMWidth(mWidthIn); }
608 void mMin(
int idIn,
double mMinIn) {
610 if ( ptr ) ptr->setMMin(mMinIn); }
611 void mMax(
int idIn,
double mMaxIn) {
613 if ( ptr ) ptr->setMMax(mMaxIn); }
614 void tau0(
int idIn,
double tau0In) {
616 if ( ptr ) ptr->setTau0(tau0In); }
617 void isResonance(
int idIn,
bool isResonanceIn) {
619 if ( ptr ) ptr->setIsResonance(isResonanceIn); }
620 void mayDecay(
int idIn,
bool mayDecayIn) {
622 if ( ptr ) ptr->setMayDecay(mayDecayIn); }
623 void tauCalc(
int idIn,
bool tauCalcIn) {
625 if ( ptr ) ptr->setTauCalc(tauCalcIn); }
626 void doExternalDecay(
int idIn,
bool doExternalDecayIn) {
628 if ( ptr ) ptr->setDoExternalDecay(doExternalDecayIn); }
629 void varWidth(
int idIn,
bool varWidthIn) {
631 if ( ptr ) ptr->setVarWidth(varWidthIn); }
632 void isVisible(
int idIn,
bool isVisibleIn) {
634 if ( ptr ) ptr->setIsVisible(isVisibleIn); }
635 void doForceWidth(
int idIn,
bool doForceWidthIn) {
637 if ( ptr ) ptr->setDoForceWidth(doForceWidthIn); }
638 void hasChanged(
int idIn,
bool hasChangedIn) {
640 if ( ptr ) ptr->setHasChanged(hasChangedIn); }
645 return ( ptr ) ? ptr->hasAnti() :
false; }
646 int antiId(
int idIn)
const {
647 if (idIn < 0)
return -idIn;
649 return ( ptr ) ? ptr->antiId() : 0; }
650 string name(
int idIn)
const {
652 return ( ptr ) ? ptr->name(idIn) :
" "; }
653 int spinType(
int idIn)
const {
655 return ( ptr ) ? ptr->spinType() : 0; }
656 int chargeType(
int idIn)
const {
658 return ( ptr ) ? ptr->chargeType(idIn) : 0; }
659 double charge(
int idIn)
const {
661 return ( ptr ) ? ptr->charge(idIn) : 0; }
662 int colType(
int idIn)
const {
664 return ( ptr ) ? ptr->colType(idIn) : 0 ; }
665 double m0(
int idIn)
const {
667 return ( ptr ) ? ptr->m0() : 0. ; }
668 double mWidth(
int idIn)
const {
670 return ( ptr ) ? ptr->mWidth() : 0. ; }
671 double mMin(
int idIn)
const {
673 return ( ptr ) ? ptr->mMin() : 0. ; }
674 double m0Min(
int idIn)
const {
676 return ( ptr ) ? ptr->m0Min() : 0. ; }
677 double mMax(
int idIn)
const {
679 return ( ptr ) ? ptr->mMax() : 0. ; }
680 double m0Max(
int idIn)
const {
682 return ( ptr ) ? ptr->m0Max() : 0. ; }
683 double tau0(
int idIn)
const {
685 return ( ptr ) ? ptr->tau0() : 0. ; }
686 bool isResonance(
int idIn)
const {
688 return ( ptr ) ? ptr->isResonance() : false ; }
689 bool mayDecay(
int idIn)
const {
691 return ( ptr ) ? ptr->mayDecay() : false ; }
692 bool tauCalc(
int idIn)
const {
694 return ( ptr ) ? ptr->tauCalc() : false ; }
695 bool doExternalDecay(
int idIn)
const {
697 return ( ptr ) ? ptr->doExternalDecay() : false ; }
698 bool isVisible(
int idIn)
const {
700 return ( ptr ) ? ptr->isVisible() : false ; }
701 bool doForceWidth(
int idIn)
const {
703 return ( ptr ) ? ptr->doForceWidth() : false ; }
704 bool hasChanged(
int idIn)
const {
706 return ( ptr ) ? ptr->hasChanged() : false ; }
707 bool hasChangedMMin(
int idIn)
const {
709 return ( ptr ) ? ptr->hasChangedMMin() : false ; }
710 bool hasChangedMMax(
int idIn)
const {
712 return ( ptr ) ? ptr->hasChangedMMax() : false ; }
718 bool varWidth(
int idIn)
const {
720 return ( ptr ) ? ptr->varWidth() :
false; }
721 double constituentMass(
int idIn)
const {
723 return ( ptr ) ? ptr->constituentMass() : 0. ; }
724 double mSel(
int idIn)
const {
726 return ( ptr ) ? ptr->
mSel() : 0. ; }
727 double mRun(
int idIn,
double mH)
const {
729 return ( ptr ) ? ptr->
mRun(mH) : 0. ; }
734 return ( ptr ) ? ptr->canDecay() : false ; }
735 bool isLepton(
int idIn)
const {
737 return ( ptr ) ? ptr->isLepton() : false ; }
738 bool isQuark(
int idIn)
const {
740 return ( ptr ) ? ptr->isQuark() : false ; }
741 bool isGluon(
int idIn)
const {
743 return ( ptr ) ? ptr->isGluon() : false ; }
744 bool isDiquark(
int idIn)
const {
746 return ( ptr ) ? ptr->isDiquark() : false ; }
747 bool isParton(
int idIn)
const {
749 return ( ptr ) ? ptr->isParton() : false ; }
750 bool isHadron(
int idIn)
const {
752 return ( ptr ) ? ptr->
isHadron() : false ; }
753 bool isMeson(
int idIn)
const {
755 return ( ptr ) ? ptr->
isMeson() : false ; }
756 bool isBaryon(
int idIn)
const {
758 return ( ptr ) ? ptr->
isBaryon() : false ; }
759 bool isOnium(
int idIn)
const {
761 return ( ptr ) ? ptr->
isOnium() : false ; }
762 bool isOctetHadron(
int idIn)
const {
765 int heaviestQuark(
int idIn)
const {
768 int baryonNumberType(
int idIn)
const {
771 int nQuarksInCode(
int idIn,
int idQIn)
const {
784 void resInit(
int idIn) {
786 if ( ptr ) ptr->resInit(infoPtr);}
787 double resWidth(
int idIn,
double mHat,
int idInFlav = 0,
788 bool openOnly =
false,
bool setBR =
false) {
790 return ( ptr ) ? ptr->resWidth(idIn, mHat,
791 idInFlav, openOnly, setBR) : 0.;}
792 double resWidthOpen(
int idIn,
double mHat,
int idInFlav = 0) {
794 return ( ptr ) ? ptr->resWidthOpen(idIn, mHat, idInFlav) : 0.;}
795 double resWidthStore(
int idIn,
double mHat,
int idInFlav = 0) {
797 return ( ptr ) ? ptr->resWidthStore(idIn, mHat, idInFlav) : 0.;}
798 double resOpenFrac(
int id1In,
int id2In = 0,
int id3In = 0);
799 double resWidthRescaleFactor(
int idIn) {
801 return ( ptr ) ? ptr->resWidthRescaleFactor() : 0.;}
802 double resWidthChan(
int idIn,
double mHat,
int idAbs1 = 0,
805 return ( ptr ) ? ptr->resWidthChan( mHat, idAbs1, idAbs2) : 0.;}
810 return ( ptr ) ? ptr : &pdt[0]; }
818 bool setRapidDecayVertex;
820 double maxEnhanceBW, mQRun[7], Lambda5Run, intermediateTau0;
838 map<int, ParticleDataEntry> pdt;
844 bool isInit, readingFailedSave;
850 bool boolString(
string tag) {
string tagLow =
toLower(tag);
851 return ( tagLow ==
"true" || tagLow ==
"1" || tagLow ==
"on" 852 || tagLow ==
"yes" || tagLow ==
"ok" ); }
855 string attributeValue(
string line,
string attribute);
856 bool boolAttributeValue(
string line,
string attribute);
857 int intAttributeValue(
string line,
string attribute);
858 double doubleAttributeValue(
string line,
string attribute);
861 vector<string> xmlFileSav;
864 vector<string> readStringHistory;
865 map<int, vector<string> > readStringSubrun;
ParticleDataEntry * findParticle(int idIn)
Query existence of an entry and return an iterator.
Definition: ParticleData.h:561
The ResonanceWidths is the base class. Also used for generic resonaces.
Definition: ResonanceWidths.h:34
void openSec(int idSgn, double openSecIn)
Input/output for fraction of secondary open widths; used by resonances.
Definition: ParticleData.h:105
This class holds info on a single particle species.
Definition: ParticleData.h:125
ParticleDataEntry & operator=(const ParticleDataEntry &oldPDE)
Assignment operator.
Definition: ParticleData.h:185
bool canDecay(int idIn) const
Give back other quantities.
Definition: ParticleData.h:732
void onMode(int onModeIn)
Member functions for input.
Definition: ParticleData.h:69
bool isParticle(int idIn) const
Query existence of an entry.
Definition: ParticleData.h:553
ParticleData()
Constructor.
Definition: ParticleData.h:425
const ParticleDataEntry * findParticle(int idIn) const
Query existence of an entry and return a const iterator.
Definition: ParticleData.h:569
void clearChannels()
Reset to empty decay table.
Definition: ParticleData.h:343
double mSel() const
Definition: ParticleData.cc:383
int nQuarksInCode(int idQIn) const
Definition: ParticleData.cc:270
void list(int idList)
Print out specified particles.
Definition: ParticleData.h:510
void currentBR(double currentBRIn)
Definition: ParticleData.h:95
string toLower(const string &name, bool trim=true)
Definition: PythiaStdlib.cc:17
double mRun(double mH) const
Function to calculate running mass at given mass scale.
Definition: ParticleData.cc:439
void setResonancePtr(int idIn, ResonanceWidths *resonancePtrIn)
Access methods stored in ResonanceWidths.
Definition: ParticleData.h:781
ParticleDataEntry(int idIn=0, string nameIn=" ", int spinTypeIn=0, int chargeTypeIn=0, int colTypeIn=0, double m0In=0., double mWidthIn=0., double mMinIn=0., double mMaxIn=0., double tau0In=0., bool varWidthIn=false)
Constructors: for antiparticle exists or not.
Definition: ParticleData.h:130
int heaviestQuark(int idIn=1) const
Extract the heaviest (= largest id) quark in a hadron.
Definition: ParticleData.cc:226
bool isMeson() const
Definition: ParticleData.cc:181
void setResonancePtr(ResonanceWidths *resonancePtrIn)
Access methods stored in ResonanceWidths.
Definition: ParticleData.cc:532
DecayChannel(const DecayChannel &oldDC)
Copy constructor.
Definition: ParticleData.h:51
This class holds info on a single decay channel.
Definition: ParticleData.h:35
bool contains(int id1) const
Check for presence of particles anywhere in decay list.
Definition: ParticleData.cc:29
bool reInit(string startFile, bool xmlFormat=true)
Overwrite existing database by reading from specific file.
Definition: ParticleData.h:471
ParticleDataEntry(const ParticleDataEntry &oldPDE)
Copy constructor.
Definition: ParticleData.h:162
void addParticle(int idIn, string nameIn=" ", int spinTypeIn=0, int chargeTypeIn=0, int colTypeIn=0, double m0In=0., double mWidthIn=0., double mMinIn=0., double mMaxIn=0., double tau0In=0., bool varWidthIn=false)
Add new entry.
Definition: ParticleData.h:527
bool hasAnti(int idIn) const
Give back current values.
Definition: ParticleData.h:643
bool init(string startFile="../share/Pythia8/xmldoc/ParticleData.xml")
Read in database from specific file.
Definition: ParticleData.h:460
bool readingFailed()
Keep track whether any readings have failed, invalidating run setup.
Definition: ParticleData.h:499
ParticleData & operator=(const ParticleData &oldPD)
Assignment operator.
Definition: ParticleData.h:443
void setName(string nameIn)
Definition: ParticleData.h:231
DecayChannel(int onModeIn=0, double bRatioIn=0., int meModeIn=0, int prod0=0, int prod1=0, int prod2=0, int prod3=0, int prod4=0, int prod5=0, int prod6=0, int prod7=0)
Constructor.
Definition: ParticleData.h:40
bool init(const ParticleData &particleDataIn)
Read in database from saved file stored in memory.
Definition: ParticleData.h:464
void rescaleBR(int idIn, double newSumBR=1.)
Change branching ratios.
Definition: ParticleData.h:776
void addChannel(int onMode=0, double bRatio=0., int meMode=0, int prod0=0, int prod1=0, int prod2=0, int prod3=0, int prod4=0, int prod5=0, int prod6=0, int prod7=0)
Add a decay channel to the decay table.
Definition: ParticleData.h:346
Definition: StandardModel.h:135
vector< string > getReadHistory(int subrun=-999)
Definition: ParticleData.h:516
ParticleDataEntry * particleDataEntryPtr(int idIn)
Return pointer to entry.
Definition: ParticleData.h:808
void onShellWidth(double onShellWidthIn)
Input/output for nominal partial width; used by resonances.
Definition: ParticleData.h:99
int baryonNumberType(int idIn=1) const
Calculate three times baryon number, i.e. net quark - antiquark number.
Definition: ParticleData.cc:249
bool useBreitWigner(int idIn) const
Give back special mass-related quantities.
Definition: ParticleData.h:715
ParticleData(const ParticleData &oldPD)
Copy constructor.
Definition: ParticleData.h:431
bool useBreitWigner() const
Give back other quantities.
Definition: ParticleData.h:319
void initPtrs(Info *infoPtrIn)
Initialize pointers.
Definition: ParticleData.h:455
void setAll(string nameIn, string antiNameIn, int spinTypeIn=0, int chargeTypeIn=0, int colTypeIn=0, double m0In=0., double mWidthIn=0., double mMinIn=0., double mMaxIn=0., double tau0In=0., double varWidthIn=false)
Reset all the properties of an existing particle.
Definition: ParticleData.h:218
int id() const
Give back current values.
Definition: ParticleData.h:275
bool getIsInit()
Check initialisation status.
Definition: ParticleData.h:813
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
bool isBaryon() const
Definition: ParticleData.cc:197
void listAll(ostream &stream)
Print out table of whole database, or of only part of it.
Definition: ParticleData.h:502
int sizeChannels() const
Decay table size.
Definition: ParticleData.h:353
void setMMinNoChange(double mMinIn)
Special options specifically when cutting wings of Breit-Wigners.
Definition: ParticleData.h:252
bool isHadron() const
Definition: ParticleData.cc:165
DecayChannel & operator=(const DecayChannel &oldDC)
Assignment operator.
Definition: ParticleData.h:60
bool isOnium() const
Find out if a particle is quarkonia.
Definition: ParticleData.cc:211
This class holds a map of all ParticleDataEntries.
Definition: ParticleData.h:420
void setAll(int idIn, string nameIn, string antiNameIn, int spinTypeIn=0, int chargeTypeIn=0, int colTypeIn=0, double m0In=0., double mWidthIn=0., double mMinIn=0., double mMaxIn=0., double tau0In=0., bool varWidthIn=false)
Reset all the properties of an entry in one go.
Definition: ParticleData.h:544
Settings * settingsPtr
Pointer to the settings database.
Definition: Info.h:83
DecayChannel & channel(int i)
Gain access to a channel in the decay table.
Definition: ParticleData.h:356
bool init(istream &is)
Read in database from an istream.
Definition: ParticleData.h:468
void name(int idIn, string nameIn)
Change current values one at a time (or set if not set before).
Definition: ParticleData.h:584
void rescaleBR(double newSumBR=1.)
Rescale sum of branching ratios to unity.
Definition: ParticleData.cc:460
map< int, ParticleDataEntry >::iterator begin()
Define iterators over entries.
Definition: ParticleData.h:580
int onMode() const
Member functions for output.
Definition: ParticleData.h:81
Definition: Settings.h:195
void initPtr(ParticleData *particleDataPtrIn)
Store pointer to whole particle data table/database.
Definition: ParticleData.h:214
bool isOctetHadron() const
Intermediate octet ccbar or bbar states in colour-octet model.
Definition: ParticleData.h:336