herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
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 
11 namespace Herwig {
12 
13 using namespace ThePEG;
14 
23 class MEDiffraction: public HwMEBase {
24 
25 public:
26 
27  MEDiffraction();
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 
107  virtual Selector<DiagramIndex> diagrams(const DiagramVector & dv) const;
108 
117  colourGeometries(tcDiagPtr diag) const;
119 
123  /* virtual bool wantCMS() const { return false; } */
124 
125 public:
126 
133  void persistentOutput(PersistentOStream & os) const;
134 
140  void persistentInput(PersistentIStream & is, int version);
142 
149  static void Init();
150 
151 protected:
152 
160  virtual void doinit();
161 
165  virtual void doinitrun();
167 
174  virtual IBPtr clone() const;
175 
180  virtual IBPtr fullclone() const;
182 
183 private:
184 
185  /* The matrix element squared */
186  double theme2;
187 
188  /* Use only delta as excited state */
189  bool deltaOnly;
190 
191 
192  /* Direction of the excited proton */
193  unsigned int diffDirection;
194 
195  /* Number of clusters the dissociated proton decays into */
196  unsigned int dissociationDecay;
197 
198  /* The mass of the consitutent quark */
199  Energy mq() const {return Energy(0.325*GeV);}
200 
201  /* The mass of the constituent diquark */
202  Energy mqq() const {return Energy(0.650*GeV);}
203 
204  /* The proton-pomeron slope */
205  double theprotonPomeronSlope;
206 
207  /* The soft pomeron intercept */
208  double thesoftPomeronIntercept;
209 
210  /* The soft pomeron slope */
211  double thesoftPomeronSlope;
212 
213 
217  pair<pair<Energy2,Energy2>,Energy2> diffractiveMassAndMomentumTransfer() const;
218 
219 
223  Energy2 randomM2() const;
224 
228  Energy2 randomt(Energy2 M2) const;
229 
234  Energy2 doublediffrandomt(Energy2 M12, Energy2 M22) const;
235 
236 
240  pair<Lorentz5Momentum,Lorentz5Momentum> twoBodyDecayMomenta(Lorentz5Momentum pp) const;
241 
245  InvEnergy2 protonPomeronSlope() const;
246 
250  double softPomeronIntercept() const;
251 
252  //M12 and M22 are masses squared of
253  //outgoing particles
254 
259  Energy2 tminfun(Energy2 s, Energy2 M12, Energy2 M22) const;
260 
265  Energy2 tmaxfun(Energy2 s , Energy2 M12, Energy2 M22) const;
266 
270  //lowest possible mass given the constituent masses of quark and diquark
271  Energy2 M2min() const{return sqr(getParticleData(2212)->mass()+mq()+mqq());}
272 
276  Energy2 M2max() const{
277  return sqr(generator()->maximumCMEnergy()-getParticleData(2212)->mass());
278  }//TODO:modify to get proper parameters
279 
280  InvEnergy2 softPomeronSlope() const;
281 
282 
283 
284  /* Kallen function */
285  template<typename A, typename B, typename C>
286  auto kallen(A a, B b, C c) const -> decltype(a*a)
287  {
288  return a*a + b*b + c*c - 2.0*(a*b + b*c + c*a);
289  }
290 
291 
292 
297  MEDiffraction & operator=(const MEDiffraction &) = delete;
298 
299  bool isInRunPhase;
300 
301 
302  /* The proton mass */
303  Energy theProtonMass;
304 
309  UEBasePtr MPIHandler_;
310 
311 };
312 
313 }
314 
315 #endif /* HERWIG_MEDiffraction_H */
UEBasePtr MPIHandler_
a MPIHandler to administer the creation of several (semihard) partonic interactions.
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr auto sqr(const T &x) -> decltype(x *x)
The MEDiffraction class provides a simple colour singlet exchange matrix element to be used in the so...
Definition: MEDiffraction.h:23
Energy2 M2min() const
Returns the minimal possible value of diffractive mass.
vector< DiagPtr > DiagramVector
-*- C++ -*-
Energy2 M2max() const
Returns the maximal possible value of diffractive mass.
The HwMEBase class serves a number of purposes.
Definition: HwMEBase.h:35