9 #ifndef Pythia8_MiniStringFragmentation_H 10 #define Pythia8_MiniStringFragmentation_H 12 #include "Pythia8/Basics.h" 13 #include "Pythia8/Event.h" 14 #include "Pythia8/FragmentationFlavZpT.h" 15 #include "Pythia8/FragmentationSystems.h" 16 #include "Pythia8/Info.h" 17 #include "Pythia8/ParticleData.h" 18 #include "Pythia8/PythiaStdlib.h" 19 #include "Pythia8/PhysicsBase.h" 20 #include "Pythia8/Settings.h" 36 setVertices(), constantTau(), smearOn(), nTryMass(), hadronVertex(),
37 bLund(), xySmear(), kappaVtx(), mc(), mb(), isClosed(), mSum(), m2Sum() {}
45 bool isDiff =
false,
bool systemRecoil =
true);
50 static const int NTRYDIFFRACTIVE, NTRYLASTRESORT, NTRYFLAV;
58 bool setVertices, constantTau, smearOn;
59 int nTryMass, hadronVertex;
60 double bLund, xySmear, kappaVtx, mc, mb;
63 bool isClosed, isJunctionSystem;
70 vector<StringVertex> ministringVertices;
73 bool reduce2SimpleJunction(
Event& event);
76 void reduce2SimpleString(
Event& event);
79 bool minijunction2two(
int nTry,
Event& event);
82 bool ministring2two(
int nTry,
Event& event,
bool findLowMass =
false);
86 bool findLowMass =
false,
bool systemRecoil =
true);
90 int iFirst,
int iLast);
95 struct SaveJunctionState {
99 : msf(msfIn), iParton(msfIn.iParton), event(eventIn),
100 oldSize(eventIn.
size()) {}
103 for (
int i = 1; i < int(iParton.size()); ++i) {
105 if (iParton[i] < 0) {
106 savedMomenta[iParton[i-1]] =
event[iParton[i-1]].p();
110 savedMomenta[iParton[iParton.size()-1]] =
111 event[iParton[iParton.size()-1]].p();
115 ~SaveJunctionState() {
116 if ( savedMomenta.empty() ||
event.size() <= oldSize )
return;
119 for (
auto & mom : savedMomenta )
event[mom.first].p(mom.second);
120 int iFirst = oldSize;
121 int iLast =
event.
size() - 1;
122 int imother = iParton.size() -1;
124 for (
int ip : iParton ) {
126 event[ip].statusNeg();
127 event[ip].daughters(iFirst, iLast);
130 event[iFirst].mothers(iParton[1], iParton[imother]);
131 event[iLast].mothers(iParton[1], iParton[imother]);
138 map<int,Vec4> savedMomenta{};
Definition: PhysicsBase.h:27
The Event class holds all info on the generated event.
Definition: Event.h:453
MiniStringFragmentation()
Constructor.
Definition: MiniStringFragmentation.h:35
The StringPT class is used to select select transverse momenta.
Definition: FragmentationFlavZpT.h:322
Definition: FragmentationSystems.h:136
The StringZ class is used to sample the fragmentation function f(z).
Definition: FragmentationFlavZpT.h:264
void init(StringFlav *flavSelPtrIn, StringPT *pTSelPtrIn, StringZ *zSelPtrIn)
Initialize and save pointers.
Definition: MiniStringFragmentation.cc:35
int size() const
Event record size.
Definition: Event.h:504
The ColConfig class describes the colour configuration of the whole event.
Definition: FragmentationSystems.h:60
Definition: FragmentationFlavZpT.h:41
bool fragment(int iSub, ColConfig &colConfig, Event &event, bool isDiff=false, bool systemRecoil=true)
Do the fragmentation: driver routine.
Definition: MiniStringFragmentation.cc:68
Header for classes to set beam momentum and interaction vertex spread.
Definition: Analysis.h:20
The StringFlav class is used to select quark and hadron flavours.
Definition: FragmentationFlavZpT.h:84
Definition: MiniStringFragmentation.h:30