herwig is hosted by Hepforge, IPPP Durham
Herwig 7.3.0
MEDiffraction.h
1// -*- C++ -*-
2#ifndef HERWIG_MEDiffraction_H
3#define HERWIG_MEDiffraction_H
4//
5// This is the declaration of the MEDiffraction class.
6//
7
8#include "Herwig/MatrixElement/HwMEBase.h"
9#include "Herwig/Shower/UEBase.h"
10
11namespace Herwig {
12
13using namespace ThePEG;
14
23class MEDiffraction: public HwMEBase {
24
25public:
26
28
35 virtual unsigned int orderInAlphaS() const;
36
41 virtual unsigned int orderInAlphaEW() const;
42
50 virtual double me2() const;
51
56 double correctionweight() const;
57
61 virtual Energy2 scale() const;
62
70 virtual void setKinematics();
71
76 virtual int nDim() const;
77
86 virtual bool generateKinematics(const double * r);
87
92 virtual CrossSection dSigHatDR() const;
93
97 virtual void getDiagrams() const;
98
108
117 colourGeometries(tcDiagPtr diag) const;
119
123 /* virtual bool wantCMS() const { return false; } */
124
125public:
126
134
140 void persistentInput(PersistentIStream & is, int version);
142
149 static void Init();
150
151protected:
152
160 virtual void doinit();
161
165 virtual void doinitrun();
167
174 virtual IBPtr clone() const;
175
180 virtual IBPtr fullclone() const;
182
183private:
184
185 /* The matrix element squared */
186 double theme2;
187
188 /* Use only delta as excited state */
189 bool deltaOnly;
190
191 /* Only produce single-diffractive events */
192 // Default = off
193 bool singleDiffractionOnly = 0;
194
195 /* Direction of the excited proton */
196 unsigned int diffDirection;
197
198 /* Number of clusters the dissociated proton decays into */
199 unsigned int dissociationDecay;
200
201 /* The mass of the consitutent quark */
202 Energy mq() const {return Energy(0.325*GeV);}
203
204 /* The mass of the constituent diquark */
205 Energy mqq() const {return Energy(0.650*GeV);}
206
207 /* The proton-pomeron slope */
208 double theprotonPomeronSlope;
209
210 /* The soft pomeron intercept */
211 double thesoftPomeronIntercept;
212
213 /* The soft pomeron slope */
214 double thesoftPomeronSlope;
215
216
220 pair<pair<Energy2,Energy2>,Energy2> diffractiveMassAndMomentumTransfer() const;
221
222
226 Energy2 randomM2() const;
227
231 Energy2 randomt(Energy2 M2) const;
232
237 Energy2 doublediffrandomt(Energy2 M12, Energy2 M22) const;
238
239
243 pair<Lorentz5Momentum,Lorentz5Momentum> twoBodyDecayMomenta(Lorentz5Momentum pp) const;
244
248 InvEnergy2 protonPomeronSlope() const;
249
253 double softPomeronIntercept() const;
254
255 //M12 and M22 are masses squared of
256 //outgoing particles
257
262 Energy2 tminfun(Energy2 s, Energy2 M12, Energy2 M22) const;
263
268 Energy2 tmaxfun(Energy2 s , Energy2 M12, Energy2 M22) const;
269
273 //lowest possible mass given the constituent masses of quark and diquark
274 Energy2 M2min() const{return sqr(getParticleData(2212)->mass()+mq()+mqq());}
275
279 Energy2 M2max() const{
280 return sqr(generator()->maximumCMEnergy()-getParticleData(2212)->mass());
281 }//TODO:modify to get proper parameters
282
283 InvEnergy2 softPomeronSlope() const;
284
285
286
287 /* Kallen function */
288 template<typename A, typename B, typename C>
289 auto kallen(A a, B b, C c) const -> decltype(a*a)
290 {
291 return a*a + b*b + c*c - 2.0*(a*b + b*c + c*a);
292 }
293
294
295
301
302 bool isInRunPhase;
303
304
305 /* The proton mass */
306 Energy theProtonMass;
307
312 UEBasePtr MPIHandler_;
313
314};
315
316}
317
318#endif /* HERWIG_MEDiffraction_H */
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35
The MEDiffraction class provides a simple colour singlet exchange matrix element to be used in the so...
Definition: MEDiffraction.h:23
pair< pair< Energy2, Energy2 >, Energy2 > diffractiveMassAndMomentumTransfer() const
Sample the diffractive mass squared M2 and the momentum transfer t.
Energy2 M2max() const
Returns the maximal possible value of diffractive mass.
virtual unsigned int orderInAlphaS() const
Return the order in in which this matrix element is given.
Energy2 tmaxfun(Energy2 s, Energy2 M12, Energy2 M22) const
Returns the maximal possible value of momentum transfer t given the center of mass energy and diffrac...
void persistentOutput(PersistentOStream &os) const
Function used to write out object persistently.
virtual void doinit()
Initialize this object after the setup phase before saving an EventGenerator to disk.
virtual int nDim() const
The number of internal degrees of freedom used in the matrix element.
virtual Energy2 scale() const
Return the scale associated with the last set phase space point.
virtual IBPtr clone() const
Make a simple clone of this object.
Energy2 tminfun(Energy2 s, Energy2 M12, Energy2 M22) const
Returns the minimal possible value of momentum transfer t given the center of mass energy and diffrac...
virtual Selector< DiagramIndex > diagrams(const DiagramVector &dv) const
Get diagram selector.
Energy2 randomt(Energy2 M2) const
Random value for t according to exp(diffSlope*t)
virtual void setKinematics()
Set the typed and momenta of the incoming and outgoing partons to be used in subsequent calls to me()...
double correctionweight() const
Correction weight to reweight the cross section to the diffractive cross section.
virtual double me2() const
The matrix element for the kinematical configuration previously provided by the last call to setKinem...
virtual unsigned int orderInAlphaEW() const
Return the order in in which this matrix element is given.
virtual CrossSection dSigHatDR() const
Return the matrix element squared differential in the variables given by the last call to generateKin...
UEBasePtr MPIHandler_
a MPIHandler to administer the creation of several (semihard) partonic interactions.
virtual bool generateKinematics(const double *r)
Generate internal degrees of freedom given nDim() uniform random numbers in the interval .
Energy2 M2min() const
Returns the minimal possible value of diffractive mass.
virtual void doinitrun()
Initialize this object.
MEDiffraction & operator=(const MEDiffraction &)=delete
The assignment operator is private and must never be called.
Energy2 doublediffrandomt(Energy2 M12, Energy2 M22) const
Random value for t according to exp(diffSlope*t) for double diffraction.
Energy2 randomM2() const
Random value for the diffractive mass squared M2 according to (M2/s0)^(-intercept)
virtual Selector< const ColourLines * > colourGeometries(tcDiagPtr diag) const
Return a Selector with possible colour geometries for the selected diagram weighted by their relative...
virtual IBPtr fullclone() const
Make a clone of this object, possibly modifying the cloned object to make it sane.
static void Init()
The standard Init function used to initialize the interfaces.
void persistentInput(PersistentIStream &is, int version)
Function used to read in object persistently.
InvEnergy2 protonPomeronSlope() const
Returns the proton-pomeron slope.
pair< Lorentz5Momentum, Lorentz5Momentum > twoBodyDecayMomenta(Lorentz5Momentum pp) const
Returns the momenta of the two-body decay of momentum pp.
virtual void getDiagrams() const
Add all possible diagrams with the add() function.
double softPomeronIntercept() const
Returns the soft pomeron intercept.
PDPtr getParticleData(PID) const
tEGPtr generator() const
vector< DiagPtr > DiagramVector
-*- C++ -*-
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr auto sqr(const T &x) -> decltype(x *x)