herwig is hosted by Hepforge, IPPP Durham
Herwig  7.2.1
FFMassiveInvertedTildeKinematics.h
1 // -*- C++ -*-
2 //
3 // FFMassiveInvertedTildeKinematics.h is a part of Herwig - A multi-purpose Monte Carlo event generator
4 // Copyright (C) 2002-2019 The Herwig Collaboration
5 //
6 // Herwig is licenced under version 3 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef HERWIG_FFMassiveInvertedTildeKinematics_H
10 #define HERWIG_FFMassiveInvertedTildeKinematics_H
11 //
12 // This is the declaration of the FFMassiveInvertedTildeKinematics class.
13 //
14 
15 #include "Herwig/MatrixElement/Matchbox/Phasespace/InvertedTildeKinematics.h"
16 
17 namespace Herwig {
18 
19 using namespace ThePEG;
20 
30 
31 public:
32 
39 
45 
46 public:
47 
56  virtual bool doMap(const double *);
57 
61  virtual Energy lastPt() const;
62 
66  virtual double lastZ() const;
67 
71  virtual Energy ptMax() const;
72 
77  virtual pair<double,double> zBounds(Energy pt, Energy hardPt = ZERO) const;
78 
83  /*virtual*/ bool ptzAllowed(pair<Energy,double> ptz, vector<double>* values ) const;
84 
88  virtual pair<Energy,double> generatePtZ(double& jac, const double * r, vector<double>* values) const;
89 
90 public:
91 
95  template <class T>
96  inline T rootOfKallen (T a, T b, T c) const {
97  return sqrt( a*a + b*b + c*c - 2.*( a*b+a*c+b*c ) ); }
98 
99  // TODO: remove in both
106  ThreeVector<double> rotateToZ (Lorentz5Momentum& pTarget, Lorentz5Momentum& p1) {
107  ThreeVector<double> oldAxis = pTarget.vect().unit();
108  double ct = oldAxis.z(); double st = sqrt( 1.-sqr(ct) ); // cos,sin(theta)
109  double cp = oldAxis.x()/st; double sp = oldAxis.y()/st; // cos,sin(phi)
110  pTarget.setZ( pTarget.vect().mag() ); pTarget.setX( 0.*GeV ); pTarget.setY( 0.*GeV );
111  Lorentz5Momentum p1old = p1;
112  p1.setX( sp*p1old.x() - cp*p1old.y() );
113  p1.setY( ct*cp*p1old.x() + ct*sp*p1old.y() - st*p1old.z() );
114  p1.setZ( st*cp*p1old.x() + st*sp*p1old.y() + ct*p1old.z() );
115  return oldAxis;
116  }
117 
118 public:
119 
126  void persistentOutput(PersistentOStream & os) const;
127 
133  void persistentInput(PersistentIStream & is, int version);
135 
142  static void Init();
143 
144 protected:
145 
152  virtual IBPtr clone() const;
153 
158  virtual IBPtr fullclone() const;
160 
161 
162 // If needed, insert declarations of virtual function defined in the
163 // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs).
164 
165 
166 private:
167 
173 
174 
175 };
176 
177 }
178 
179 #endif /* HERWIG_FFMassiveInvertedTildeKinematics_H */
ThreeVector< double > rotateToZ(Lorentz5Momentum &pTarget, Lorentz5Momentum &p1)
stolen from FFMassiveKinematics.h Perform a rotation on both momenta such that the first one will poi...
T rootOfKallen(T a, T b, T c) const
Triangular / Kallen function.
double sqrt(int x)
InvertedTildeKinematics is the base class for the inverted &#39;tilde&#39; kinematics being used for subtract...
ThePEG::Ptr< InterfacedBase >::pointer IBPtr
constexpr auto sqr(const T &x) -> decltype(x *x)
ThreeVector< double > unit() const
FFMassiveInvertedTildeKinematics inverts the final-final tilde kinematics.
-*- C++ -*-
constexpr ZeroUnit ZERO