11 #ifndef Pythia8_Event_H
12 #define Pythia8_Event_H
14 #include "Pythia8/Basics.h"
15 #include "Pythia8/ParticleData.h"
16 #include "Pythia8/PythiaStdlib.h"
23 class ParticleDataEntry;
24 class ResonanceWidths;
37 Particle() : idSave(0), statusSave(0), mother1Save(0), mother2Save(0),
38 daughter1Save(0), daughter2Save(0), colSave(0), acolSave(0),
39 pSave(Vec4(0.,0.,0.,0.)), mSave(0.), scaleSave(0.), polSave(9.),
40 hasVertexSave(false), vProdSave(Vec4(0.,0.,0.,0.)), tauSave(0.),
41 pdePtr(0), evtPtr(0) { }
42 Particle(
int idIn,
int statusIn = 0,
int mother1In = 0,
43 int mother2In = 0,
int daughter1In = 0,
int daughter2In = 0,
44 int colIn = 0,
int acolIn = 0,
double pxIn = 0.,
double pyIn = 0.,
45 double pzIn = 0.,
double eIn = 0.,
double mIn = 0.,
46 double scaleIn = 0.,
double polIn = 9.)
47 : idSave(idIn), statusSave(statusIn), mother1Save(mother1In),
48 mother2Save(mother2In), daughter1Save(daughter1In),
49 daughter2Save(daughter2In), colSave(colIn), acolSave(acolIn),
50 pSave(Vec4(pxIn, pyIn, pzIn, eIn)), mSave(mIn), scaleSave(scaleIn),
51 polSave(polIn), hasVertexSave(false), vProdSave(Vec4(0.,0.,0.,0.)),
52 tauSave(0.), pdePtr(0), evtPtr(0) { }
53 Particle(
int idIn,
int statusIn,
int mother1In,
int mother2In,
54 int daughter1In,
int daughter2In,
int colIn,
int acolIn,
55 Vec4 pIn,
double mIn = 0.,
double scaleIn = 0.,
double polIn = 9.)
56 : idSave(idIn), statusSave(statusIn), mother1Save(mother1In),
57 mother2Save(mother2In), daughter1Save(daughter1In),
58 daughter2Save(daughter2In), colSave(colIn), acolSave(acolIn),
59 pSave(pIn), mSave(mIn), scaleSave(scaleIn), polSave(polIn),
60 hasVertexSave(false), vProdSave(Vec4(0.,0.,0.,0.)), tauSave(0.),
61 pdePtr(0), evtPtr(0) { }
62 Particle(
const Particle& pt) : idSave(pt.idSave),
63 statusSave(pt.statusSave), mother1Save(pt.mother1Save),
64 mother2Save(pt.mother2Save), daughter1Save(pt.daughter1Save),
65 daughter2Save(pt.daughter2Save), colSave(pt.colSave),
66 acolSave(pt.acolSave), pSave(pt.pSave), mSave(pt.mSave),
67 scaleSave(pt.scaleSave), polSave(pt.polSave),
68 hasVertexSave(pt.hasVertexSave), vProdSave(pt.vProdSave),
69 tauSave(pt.tauSave), pdePtr(pt.pdePtr), evtPtr(pt.evtPtr) { }
70 Particle& operator=(
const Particle& pt) {
if (
this != &pt) {
71 idSave = pt.idSave; statusSave = pt.statusSave;
72 mother1Save = pt.mother1Save; mother2Save = pt.mother2Save;
73 daughter1Save = pt.daughter1Save; daughter2Save = pt.daughter2Save;
74 colSave = pt.colSave; acolSave = pt.acolSave; pSave = pt.pSave;
75 mSave = pt.mSave; scaleSave = pt.scaleSave; polSave = pt.polSave;
76 hasVertexSave = pt.hasVertexSave; vProdSave = pt.vProdSave;
77 tauSave = pt.tauSave; pdePtr = pt.pdePtr; evtPtr = pt.evtPtr; }
81 virtual ~Particle() {}
84 void setEvtPtr(
Event* evtPtrIn) { evtPtr = evtPtrIn; setPDEPtr();}
85 void setPDEPtr(ParticleDataEntry* pdePtrIn = 0);
88 void id(
int idIn) {idSave = idIn; setPDEPtr();}
89 void status(
int statusIn) {statusSave = statusIn;}
90 void statusPos() {statusSave = abs(statusSave);}
91 void statusNeg() {statusSave = -abs(statusSave);}
92 void statusCode(
int statusIn) {statusSave =
93 (statusSave > 0) ? abs(statusIn) : -abs(statusIn);}
94 void mother1(
int mother1In) {mother1Save = mother1In;}
95 void mother2(
int mother2In) {mother2Save = mother2In;}
96 void mothers(
int mother1In = 0,
int mother2In = 0)
97 {mother1Save = mother1In; mother2Save = mother2In;}
98 void daughter1(
int daughter1In) {daughter1Save = daughter1In;}
99 void daughter2(
int daughter2In) {daughter2Save = daughter2In;}
100 void daughters(
int daughter1In = 0,
int daughter2In = 0)
101 {daughter1Save = daughter1In; daughter2Save = daughter2In;}
102 void col(
int colIn) {colSave = colIn;}
103 void acol(
int acolIn) {acolSave = acolIn;}
104 void cols(
int colIn = 0,
int acolIn = 0) {colSave = colIn;
106 void p(Vec4 pIn) {pSave = pIn;}
107 void p(
double pxIn,
double pyIn,
double pzIn,
double eIn)
108 {pSave.p(pxIn, pyIn, pzIn, eIn);}
109 void px(
double pxIn) {pSave.px(pxIn);}
110 void py(
double pyIn) {pSave.py(pyIn);}
111 void pz(
double pzIn) {pSave.pz(pzIn);}
112 void e(
double eIn) {pSave.e(eIn);}
113 void m(
double mIn) {mSave = mIn;}
114 void scale(
double scaleIn) {scaleSave = scaleIn;}
115 void pol(
double polIn) {polSave = polIn;}
116 void vProd(Vec4 vProdIn) {vProdSave = vProdIn; hasVertexSave =
true;}
117 void vProd(
double xProdIn,
double yProdIn,
double zProdIn,
double tProdIn)
118 {vProdSave.p(xProdIn, yProdIn, zProdIn, tProdIn); hasVertexSave =
true;}
119 void xProd(
double xProdIn) {vProdSave.px(xProdIn); hasVertexSave =
true;}
120 void yProd(
double yProdIn) {vProdSave.py(yProdIn); hasVertexSave =
true;}
121 void zProd(
double zProdIn) {vProdSave.pz(zProdIn); hasVertexSave =
true;}
122 void tProd(
double tProdIn) {vProdSave.e(tProdIn); hasVertexSave =
true;}
123 void vProdAdd(Vec4 vProdIn) {vProdSave += vProdIn; hasVertexSave =
true;}
124 void tau(
double tauIn) {tauSave = tauIn;}
127 int id()
const {
return idSave;}
128 int status()
const {
return statusSave;}
129 int mother1()
const {
return mother1Save;}
130 int mother2()
const {
return mother2Save;}
131 int daughter1()
const {
return daughter1Save;}
132 int daughter2()
const {
return daughter2Save;}
133 int col()
const {
return colSave;}
134 int acol()
const {
return acolSave;}
135 Vec4 p()
const {
return pSave;}
136 double px()
const {
return pSave.px();}
137 double py()
const {
return pSave.py();}
138 double pz()
const {
return pSave.pz();}
139 double e()
const {
return pSave.e();}
140 double m()
const {
return mSave;}
141 double scale()
const {
return scaleSave;}
142 double pol()
const {
return polSave;}
143 bool hasVertex()
const {
return hasVertexSave;}
144 Vec4 vProd()
const {
return vProdSave;}
145 double xProd()
const {
return vProdSave.px();}
146 double yProd()
const {
return vProdSave.py();}
147 double zProd()
const {
return vProdSave.pz();}
148 double tProd()
const {
return vProdSave.e();}
149 double tau()
const {
return tauSave;}
152 int idAbs()
const {
return abs(idSave);}
153 int statusAbs()
const {
return abs(statusSave);}
154 bool isFinal()
const {
return (statusSave > 0);}
156 bool isRescatteredIncoming()
const {
return
157 (statusSave == -34 || statusSave == -45 ||
158 statusSave == -46 || statusSave == -54);}
161 double m2()
const {
return (mSave >= 0.) ? mSave*mSave
163 double mCalc()
const {
return pSave.mCalc();}
164 double m2Calc()
const {
return pSave.m2Calc();}
165 double eCalc()
const {
return sqrt(abs(m2() + pSave.pAbs2()));}
166 double pT()
const {
return pSave.pT();}
167 double pT2()
const {
return pSave.pT2();}
168 double mT()
const {
double temp = m2() + pSave.pT2();
169 return (temp >= 0.) ? sqrt(temp) : -sqrt(-temp);}
170 double mT2()
const {
return m2() + pSave.pT2();}
171 double pAbs()
const {
return pSave.pAbs();}
172 double pAbs2()
const {
return pSave.pAbs2();}
173 double eT()
const {
return pSave.eT();}
174 double eT2()
const {
return pSave.eT2();}
175 double theta()
const {
return pSave.theta();}
176 double phi()
const {
return pSave.phi();}
177 double thetaXZ()
const {
return pSave.thetaXZ();}
178 double pPos()
const {
return pSave.pPos();}
179 double pNeg()
const {
return pSave.pNeg();}
182 double y(
double mCut)
const;
183 double y(
double mCut, RotBstMatrix& M)
const;
184 Vec4 vDec()
const {
return (tauSave > 0. && mSave > 0.)
185 ? vProdSave + tauSave * pSave / mSave : vProdSave;}
186 double xDec()
const {
return (tauSave > 0. && mSave > 0.)
187 ? vProdSave.px() + tauSave * pSave.px() / mSave : vProdSave.px();}
188 double yDec()
const {
return (tauSave > 0. && mSave > 0.)
189 ? vProdSave.py() + tauSave * pSave.py() / mSave : vProdSave.py();}
190 double zDec()
const {
return (tauSave > 0. && mSave > 0.)
191 ? vProdSave.pz() + tauSave * pSave.pz() / mSave : vProdSave.pz();}
192 double tDec()
const {
return (tauSave > 0. && mSave > 0.)
193 ? vProdSave.e() + tauSave * pSave.e() / mSave : vProdSave.e();}
196 virtual int index()
const;
197 int iTopCopy()
const;
198 int iBotCopy()
const;
199 int iTopCopyId(
bool simplify =
false)
const;
200 int iBotCopyId(
bool simplify =
false)
const;
201 vector<int> motherList()
const;
202 vector<int> daughterList()
const;
203 vector<int> daughterListRecursive()
const;
204 vector<int> sisterList(
bool traceTopBot =
false)
const;
205 bool isAncestor(
int iAncestor)
const;
206 int statusHepMC()
const;
207 bool isFinalPartonLevel()
const;
211 string name()
const {
212 return (pdePtr != 0) ? pdePtr->name(idSave) :
" ";}
213 string nameWithStatus(
int maxLen = 20)
const;
214 int spinType()
const {
215 return (pdePtr != 0) ? pdePtr->spinType() : 0;}
216 int chargeType()
const {
217 return (pdePtr != 0) ? pdePtr->chargeType(idSave) : 0;}
218 double charge()
const {
219 return (pdePtr != 0) ? pdePtr->charge(idSave) : 0;}
220 bool isCharged()
const {
221 return (pdePtr != 0) ? (pdePtr->chargeType(idSave) != 0) :
false;}
222 bool isNeutral()
const {
223 return (pdePtr != 0) ? (pdePtr->chargeType(idSave) == 0) :
false;}
224 int colType()
const {
225 return (pdePtr != 0) ? pdePtr->colType(idSave) : 0;}
227 return (pdePtr != 0) ? pdePtr->m0() : 0.;}
228 double mWidth()
const {
229 return (pdePtr != 0) ? pdePtr->mWidth() : 0.;}
230 double mMin()
const {
231 return (pdePtr != 0) ? pdePtr->mMin() : 0.;}
232 double mMax()
const {
233 return (pdePtr != 0) ? pdePtr->mMax() : 0.;}
234 double mSel()
const {
235 return (pdePtr != 0) ? pdePtr->mSel() : 0.;}
236 double constituentMass()
const {
237 return (pdePtr != 0) ? pdePtr->constituentMass() : 0.;}
238 double tau0()
const {
239 return (pdePtr != 0) ? pdePtr->tau0() : 0.;}
240 bool mayDecay()
const {
241 return (pdePtr != 0) ? pdePtr->mayDecay() :
false;}
242 bool canDecay()
const {
243 return (pdePtr != 0) ? pdePtr->canDecay() :
false;}
244 bool doExternalDecay()
const {
245 return (pdePtr != 0) ? pdePtr->doExternalDecay() :
false;}
246 bool isResonance()
const {
247 return (pdePtr != 0) ? pdePtr->isResonance() :
false;}
248 bool isVisible()
const {
249 return (pdePtr != 0) ? pdePtr->isVisible() :
false;}
250 bool isLepton()
const {
251 return (pdePtr != 0) ? pdePtr->isLepton() :
false;}
252 bool isQuark()
const {
253 return (pdePtr != 0) ? pdePtr->isQuark() :
false;}
254 bool isGluon()
const {
255 return (pdePtr != 0) ? pdePtr->isGluon() :
false;}
256 bool isDiquark()
const {
257 return (pdePtr != 0) ? pdePtr->isDiquark() :
false;}
258 bool isParton()
const {
259 return (pdePtr != 0) ? pdePtr->isParton() :
false;}
260 bool isHadron()
const {
261 return (pdePtr != 0) ? pdePtr->isHadron() :
false;}
262 ParticleDataEntry& particleDataEntry()
const {
return *pdePtr;}
265 void rescale3(
double fac) {pSave.rescale3(fac);}
266 void rescale4(
double fac) {pSave.rescale4(fac);}
267 void rescale5(
double fac) {pSave.rescale4(fac); mSave *= fac;}
268 void rot(
double thetaIn,
double phiIn) {pSave.rot(thetaIn, phiIn);
269 if (hasVertexSave) vProdSave.rot(thetaIn, phiIn);}
270 void bst(
double betaX,
double betaY,
double betaZ) {
271 pSave.bst(betaX, betaY, betaZ);
272 if (hasVertexSave) vProdSave.bst(betaX, betaY, betaZ);}
273 void bst(
double betaX,
double betaY,
double betaZ,
double gamma) {
274 pSave.bst(betaX, betaY, betaZ, gamma);
275 if (hasVertexSave) vProdSave.bst(betaX, betaY, betaZ, gamma);}
276 void bst(
const Vec4& pBst) {pSave.bst(pBst);
277 if (hasVertexSave) vProdSave.bst(pBst);}
278 void bst(
const Vec4& pBst,
double mBst) {pSave.bst(pBst, mBst);
279 if (hasVertexSave) vProdSave.bst(pBst, mBst);}
280 void bstback(
const Vec4& pBst) {pSave.bstback(pBst);
281 if (hasVertexSave) vProdSave.bstback(pBst);}
282 void bstback(
const Vec4& pBst,
double mBst) {pSave.bstback(pBst, mBst);
283 if (hasVertexSave) vProdSave.bstback(pBst, mBst);}
284 void rotbst(
const RotBstMatrix& M,
bool boostVertex =
true) {pSave.rotbst(M);
285 if (hasVertexSave && boostVertex) vProdSave.rotbst(M);}
286 void offsetHistory(
int minMother,
int addMother,
int minDaughter,
288 void offsetCol(
int addCol);
293 static const double TINY;
296 int idSave, statusSave, mother1Save, mother2Save, daughter1Save,
297 daughter2Save, colSave, acolSave;
299 double mSave, scaleSave, polSave;
308 ParticleDataEntry* pdePtr;
318 double m(
const Particle&,
const Particle&);
319 double m2(
const Particle&,
const Particle&);
332 Junction() : remainsSave(true), kindSave(0), colSave(), endColSave(),
335 Junction(
int kindIn,
int col0In,
int col1In,
int col2In)
336 : remainsSave(true), kindSave(kindIn), colSave(), endColSave(),
338 colSave[0] = col0In; colSave[1] = col1In; colSave[2] = col2In;
339 for (
int j = 0; j < 3; ++j) {
340 endColSave[j] = colSave[j]; } }
341 Junction(
const Junction& ju) : remainsSave(ju.remainsSave),
342 kindSave(ju.kindSave), colSave(), endColSave(), statusSave() {
343 for (
int j = 0; j < 3; ++j) {
344 colSave[j] = ju.colSave[j]; endColSave[j] = ju.endColSave[j];
345 statusSave[j] = ju.statusSave[j]; } }
346 Junction& operator=(
const Junction& ju) {
if (
this != &ju) {
347 remainsSave = ju.remainsSave; kindSave = ju.kindSave;
348 for (
int j = 0; j < 3; ++j) { colSave[j] = ju.colSave[j];
349 endColSave[j] = ju.endColSave[j]; statusSave[j] = ju.statusSave[j]; } }
353 void remains(
bool remainsIn) {remainsSave = remainsIn;}
354 void col(
int j,
int colIn) {colSave[j] = colIn; endColSave[j] = colIn;}
355 void cols(
int j,
int colIn,
int endColIn) {colSave[j] = colIn;
356 endColSave[j] = endColIn;}
357 void endCol(
int j,
int endColIn) {endColSave[j] = endColIn;}
358 void status(
int j,
int statusIn) {statusSave[j] = statusIn;}
361 bool remains()
const {
return remainsSave;}
362 int kind()
const {
return kindSave;}
363 int col(
int j)
const {
return colSave[j];}
364 int endCol(
int j)
const {
return endColSave[j];}
365 int status(
int j)
const {
return statusSave[j];}
371 int kindSave, colSave[3], endColSave[3], statusSave[3];
384 Event(
int capacity = 100) : startColTag(100), maxColTag(100),
385 savedSize(0), savedJunctionSize(0), savedPartonLevelSize(0),
386 scaleSave(0.), scaleSecondSave(0.),
387 headerList(
"----------------------------------------"),
388 particleDataPtr(0) { entry.reserve(capacity); }
390 Event(
const Event& oldEvent) {*
this = oldEvent;}
393 void init(
string headerIn =
"", ParticleData* particleDataPtrIn = 0,
394 int startColTagIn = 100) {
395 headerList.replace(0, headerIn.length() + 2, headerIn +
" ");
396 particleDataPtr = particleDataPtrIn; startColTag = startColTagIn;}
399 void clear() {entry.resize(0); maxColTag = startColTag;
400 savedPartonLevelSize = 0; scaleSave = 0.; scaleSecondSave = 0.;
402 void free() {vector<Particle>().swap(entry); maxColTag = startColTag;
403 savedPartonLevelSize = 0; scaleSave = 0.; scaleSecondSave = 0.;
407 void reset() {clear(); append(90, -11, 0, 0, 0., 0., 0., 0., 0.);}
410 Particle& operator[](
int i) {
return entry.at(i);}
411 const Particle& operator[](
int i)
const {
return entry.at(i);}
414 Particle& front() {
return entry.front();}
415 Particle& at(
int i) {
return entry.at(i);}
416 Particle& back() {
return entry.back();}
419 vector<Pythia8::Particle>::iterator begin() {
return entry.begin(); }
420 vector<Pythia8::Particle>::iterator end() {
return entry.end(); }
421 vector<Pythia8::Particle>::const_iterator begin()
const
422 {
return entry.begin(); }
423 vector<Pythia8::Particle>::const_iterator end()
const
424 {
return entry.end(); }
427 int size()
const {
return entry.size();}
430 int append(Particle entryIn) {
431 entry.push_back(entryIn); setEvtPtr();
432 if (entryIn.col() > maxColTag) maxColTag = entryIn.col();
433 if (entryIn.acol() > maxColTag) maxColTag = entryIn.acol();
434 return entry.size() - 1;
436 int append(
int id,
int status,
int mother1,
int mother2,
int daughter1,
437 int daughter2,
int col,
int acol,
double px,
double py,
double pz,
438 double e,
double m = 0.,
double scaleIn = 0.,
double polIn = 9.) {
439 entry.push_back( Particle(
id, status, mother1, mother2, daughter1,
440 daughter2, col, acol, px, py, pz, e, m, scaleIn, polIn) ); setEvtPtr();
441 if (col > maxColTag) maxColTag = col;
442 if (acol > maxColTag) maxColTag = acol;
443 return entry.size() - 1;
445 int append(
int id,
int status,
int mother1,
int mother2,
int daughter1,
446 int daughter2,
int col,
int acol, Vec4 p,
double m = 0.,
447 double scaleIn = 0.,
double polIn = 9.) {
448 entry.push_back( Particle(
id, status, mother1, mother2, daughter1,
449 daughter2, col, acol, p, m, scaleIn, polIn) ); setEvtPtr();
450 if (col > maxColTag) maxColTag = col;
451 if (acol > maxColTag) maxColTag = acol;
452 return entry.size() - 1;
456 int append(
int id,
int status,
int col,
int acol,
double px,
double py,
457 double pz,
double e,
double m = 0.,
double scaleIn = 0.,
458 double polIn = 9.) { entry.push_back( Particle(
id, status, 0, 0, 0, 0,
459 col, acol, px, py, pz, e, m, scaleIn, polIn) ); setEvtPtr();
460 if (col > maxColTag) maxColTag = col;
461 if (acol > maxColTag) maxColTag = acol;
462 return entry.size() - 1;
464 int append(
int id,
int status,
int col,
int acol, Vec4 p,
double m = 0.,
465 double scaleIn = 0.,
double polIn = 9.) {entry.push_back( Particle(
id,
466 status, 0, 0, 0, 0, col, acol, p, m, scaleIn, polIn) ); setEvtPtr();
467 if (col > maxColTag) maxColTag = col;
468 if (acol > maxColTag) maxColTag = acol;
469 return entry.size() - 1;
473 void setEvtPtr(
int iSet = -1) {
if (iSet < 0) iSet = entry.size() - 1;
474 entry[iSet].setEvtPtr(
this);}
477 int copy(
int iCopy,
int newStatus = 0);
480 void list(
bool showScaleAndVertex =
false,
481 bool showMothersAndDaughters =
false,
int precision = 3)
const;
484 void popBack(
int nRemove = 1) {
if (nRemove ==1) entry.pop_back();
485 else {
int newSize = max( 0, size() - nRemove);
486 entry.resize(newSize);} }
490 void remove(
int iFirst,
int iLast,
bool shiftHistory =
true);
494 void restorePtrs() {
for (
int i = 0; i < size(); ++i) setEvtPtr(i); }
497 void saveSize() {savedSize = entry.size();}
498 void restoreSize() {entry.resize(savedSize);}
499 int savedSizeValue() {
return savedSize;}
502 void initColTag(
int colTag = 0) {maxColTag = max( colTag,startColTag);}
503 int lastColTag()
const {
return maxColTag;}
504 int nextColTag() {
return ++maxColTag;}
507 void scale(
double scaleIn) {scaleSave = scaleIn;}
508 double scale()
const {
return scaleSave;}
511 void scaleSecond(
double scaleSecondIn) {scaleSecondSave = scaleSecondIn;}
512 double scaleSecond()
const {
return scaleSecondSave;}
516 vector<int> daughterList(
int i)
const {
return entry[i].daughterList();}
519 int nFinal(
bool chargedOnly =
false)
const {
521 for (
int i = 0; i < size(); ++i)
522 if (entry[i].isFinal() && (!chargedOnly || entry[i].isCharged()))
527 double dyAbs(
int i1,
int i2)
const {
528 return abs( entry[i1].y() - entry[i2].y() ); }
529 double detaAbs(
int i1,
int i2)
const {
530 return abs( entry[i1].eta() - entry[i2].eta() ); }
531 double dphiAbs(
int i1,
int i2)
const {
532 double dPhiTmp = abs( entry[i1].phi() - entry[i2].phi() );
533 if (dPhiTmp > M_PI) dPhiTmp = 2. * M_PI - dPhiTmp;
535 double RRapPhi(
int i1,
int i2)
const {
536 return sqrt( pow2(dyAbs(i1, i2)) + pow2(dphiAbs(i1, i2)) ); }
537 double REtaPhi(
int i1,
int i2)
const {
538 return sqrt( pow2(detaAbs(i1, i2)) + pow2(dphiAbs(i1, i2)) ); }
541 void rot(
double theta,
double phi)
542 {
for (
int i = 0; i < size(); ++i) entry[i].rot(theta, phi);}
543 void bst(
double betaX,
double betaY,
double betaZ)
544 {
for (
int i = 0; i < size(); ++i) entry[i].bst(betaX, betaY, betaZ);}
545 void bst(
double betaX,
double betaY,
double betaZ,
double gamma)
546 {
for (
int i = 0; i < size(); ++i) entry[i].bst(betaX, betaY, betaZ,
548 void bst(
const Vec4& vec)
549 {
for (
int i = 0; i < size(); ++i) entry[i].bst(vec);}
550 void rotbst(
const RotBstMatrix& M,
bool boostVertices =
true)
551 {
for (
int i = 0; i < size(); ++i) entry[i].rotbst(M, boostVertices);}
554 void clearJunctions() {junction.resize(0);}
557 int appendJunction(
int kind,
int col0,
int col1,
int col2)
558 { junction.push_back( Junction( kind, col0, col1, col2) );
559 return junction.size() - 1;}
560 int appendJunction(Junction junctionIn) {junction.push_back(junctionIn);
561 return junction.size() - 1;}
562 int sizeJunction()
const {
return junction.size();}
563 bool remainsJunction(
int i)
const {
return junction[i].remains();}
564 void remainsJunction(
int i,
bool remainsIn) {junction[i].remains(remainsIn);}
565 int kindJunction(
int i)
const {
return junction[i].kind();}
566 int colJunction(
int i,
int j)
const {
return junction[i].col(j);}
567 void colJunction(
int i,
int j,
int colIn) {junction[i].col(j, colIn);}
568 int endColJunction(
int i,
int j)
const {
return junction[i].endCol(j);}
569 void endColJunction(
int i,
int j,
int endColIn)
570 {junction[i].endCol(j, endColIn);}
571 int statusJunction(
int i,
int j)
const {
return junction[i].status(j);}
572 void statusJunction(
int i,
int j,
int statusIn)
573 {junction[i].status(j, statusIn);}
574 Junction& getJunction(
int i) {
return junction[i];}
575 const Junction& getJunction(
int i)
const {
return junction[i];}
576 void eraseJunction(
int i);
579 void saveJunctionSize() {savedJunctionSize = junction.size();}
580 void restoreJunctionSize() {junction.resize(savedJunctionSize);}
583 void listJunctions()
const;
586 void savePartonLevelSize() {savedPartonLevelSize = entry.size();}
595 friend class Particle;
598 static const int IPERLINE;
605 vector<Pythia8::Particle> entry;
609 vector<Pythia8::Junction> junction;
615 int savedSize, savedJunctionSize, savedPartonLevelSize;
618 double scaleSave, scaleSecondSave;
625 ParticleData* particleDataPtr;
633 #endif // end Pythia8_Event_H