Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:24:16

0001 // -*- C++ -*-
0002 #ifndef HERWIG_VVKinematics_H
0003 #define HERWIG_VVKinematics_H
0004 //
0005 // This is the declaration of the VVKinematics class.
0006 //
0007 
0008 #include "ThePEG/Vectors/Lorentz5Vector.h"
0009 
0010 namespace Herwig {
0011 using namespace ThePEG;
0012 
0013 /** \ingroup VVKinematics
0014  *  The bornVVKinematics class is used to store information on the 
0015  *  the kinematics of the real emission processes needed for the 
0016  *  evaluation of matrix elements in the real part of the NLO process.
0017  */
0018 class bornVVKinematics {
0019 
0020 public:
0021 
0022   /**
0023    * Default constructor 
0024    */
0025   bornVVKinematics();
0026 
0027   /**
0028    * Meaningful constructor: takes the momenta 
0029    * and Bjorken x values of the partons involved
0030    * in the 2->2 scattering of the leading order
0031    * / virtual process and calculates all interesting
0032    * Mandelstam and Born variables.
0033    */
0034   bornVVKinematics(vector<Lorentz5Momentum> Momenta, double x1, double x2);
0035 
0036 public:
0037 
0038   /**
0039    * Read-only access to all of the above member variables.
0040    */
0041 
0042   /**
0043    * @name Leading order momentum fractions and associated etabar's:
0044    */
0045   //@{
0046   /**
0047    * Leading order momentum fraction for first particle
0048    */
0049   double x1b()   const { return x1b_; }
0050 
0051   /**
0052    * Leading order etabar for first particle
0053    */
0054   double eta1b() const { return eta1b_; } 
0055 
0056   /**
0057    * Leading order momentum fraction for second particle
0058    */
0059   double x2b()   const { return x2b_; }
0060 
0061   /**
0062    * Leading order etabar for second particle
0063    */
0064   double eta2b() const { return eta2b_; }
0065   //@}
0066 
0067   /**
0068    * @name The Born momenta according to the notation of the FMNR papers,
0069    * in the diboson centre of mass frame:
0070    */
0071   //@{
0072   /**
0073    * Momentum \f$p_1\f$
0074    */
0075   Lorentz5Momentum p1b() const { return p1b_; }
0076   
0077   /**
0078    * Momentum \f$p_2\f$
0079    */
0080   Lorentz5Momentum p2b() const { return p2b_; }
0081   
0082   /**
0083    * Momentum \f$k_1\f$
0084    */
0085   Lorentz5Momentum k1b() const { return k1b_; }
0086   
0087   /**
0088    * Momentum \f$k_2\f$
0089    */
0090   Lorentz5Momentum k2b() const { return k2b_; }
0091   //@}
0092 
0093   /**
0094    * @name The diboson invariant mass / shat, that and uhat:
0095    */
0096   //@{
0097   /**
0098    * \f$\hat s\f$
0099    */
0100   Energy2 sb() const { return sb_; }
0101 
0102   /**
0103    * \f$\hat t\f$
0104    */
0105   Energy2 tb() const { return tb_; }
0106 
0107   /**
0108    * \f$\hat u\f$
0109    */
0110   Energy2 ub() const { return ub_; }
0111   //@}
0112 
0113   /**
0114    * The diboson rapidity:
0115    * Note Yb_ = + lastY() if flipped = false 
0116    * but  Yb_ = - lastY() if flipped = true.
0117    * Yb_ is always defined with the quark travelling in the +z direction!
0118    */
0119   double Yb() const { return Yb_; }
0120 
0121   /**
0122    * @name Masses of the final state bosons:
0123    */
0124   //@{
0125   /**
0126    *  Mass squared og the first boson
0127    */
0128   Energy2 k12b() const { return k12b_; }
0129 
0130   /**
0131    *  Mass squared og the second boson
0132    */
0133   Energy2 k22b() const { return k22b_; }
0134   //@}
0135 
0136   /**
0137    * Polar and azimuthal angles of the dibosons in their rest frame:
0138    */
0139   double theta1b() const { return theta1b_; }
0140 
0141   /**
0142    * A check to make sure that the momenta calculated from 
0143    * the energies and angles are equal to those of meMomenta().
0144    */
0145   void sanityCheck() const;
0146 
0147  private:
0148 
0149   /**
0150    * Invariants required for the evaluation of 2-> 2 next-to-leading 
0151    * order quantities (Frixione et al. NPB.383 WZ production at colliders). 
0152    */
0153 
0154   /**
0155    * @name Leading order momentum fractions and associated etabar's:
0156    */
0157   //@{
0158   /**
0159    * Leading order momentum fraction for first particle
0160    */
0161   double x1b_;
0162 
0163   /**
0164    * Leading order etabar for first particle
0165    */
0166   double eta1b_;
0167 
0168   /**
0169    * Leading order momentum fraction for second particle
0170    */
0171   double x2b_;
0172 
0173   /**
0174    * Leading order etabar for second particle
0175    */
0176   double eta2b_;
0177   //@}
0178 
0179   /**
0180    * @name The Born momenta according to the notation of the FMNR papers,
0181    * in the diboson centre of mass frame:
0182    */
0183   //@{
0184   /**
0185    * Momentum \f$p_1\f$
0186    */
0187   Lorentz5Momentum p1b_;
0188   
0189   /**
0190    * Momentum \f$p_2\f$
0191    */
0192   Lorentz5Momentum p2b_;
0193   
0194   /**
0195    * Momentum \f$k_1\f$
0196    */
0197   Lorentz5Momentum k1b_;
0198   
0199   /**
0200    * Momentum \f$k_2\f$
0201    */
0202   Lorentz5Momentum k2b_;
0203   //@}
0204 
0205   /**
0206    * @name The diboson invariant mass / shat, that and uhat:
0207    */
0208   //@{
0209   /**
0210    * \f$\hat s\f$
0211    */
0212   Energy2 sb_;
0213 
0214   /**
0215    * \f$\hat t\f$
0216    */
0217   Energy2 tb_;
0218 
0219   /**
0220    * \f$\hat u\f$
0221    */
0222   Energy2 ub_;
0223   //@}
0224 
0225   /**
0226    * The diboson rapidity:
0227    * Note Yb_ = + lastY() if flipped = false 
0228    * but  Yb_ = - lastY() if flipped = true.
0229    * Yb_ is always defined with the quark travelling in the +z direction!
0230    */
0231   double Yb_;
0232 
0233   /**
0234    * @name Masses of the final state bosons:
0235    */
0236   //@{
0237   /**
0238    *  Mass squared og the first boson
0239    */
0240   Energy2 k12b_;
0241 
0242   /**
0243    *  Mass squared og the second boson
0244    */
0245   Energy2 k22b_;
0246   //@}
0247 
0248   /**
0249    * Polar angle of the dibosons in their rest frame:
0250    */
0251   double theta1b_;     
0252 };
0253 
0254 
0255 
0256 /** \ingroup VVKinematics
0257  *  The realVVKinematics class is used to store information on the 
0258  *  the kinematics of the real emission processes needed for the 
0259  *  evaluation of matrix elements in the real part of the NLO process.
0260  */
0261 class realVVKinematics {
0262 
0263 public:
0264 
0265   /**
0266    * Default constructor 
0267    */
0268   realVVKinematics();
0269 
0270   /**
0271    * Meaningful constructor: takes the Born variables
0272    * from the leading order /virtual 2->2 process and 
0273    * the raw \f$\tilde{x}, y\f$ radiative variables and turns
0274    * these into a set of 2->3 momenta with associated 
0275    * Mandelstam variables, Bjorken x values etc. 
0276    * @param bornVariables The object for the Born kinematics
0277    * @param xt The \f$\tilde{x}\f$ radiative variable.
0278    * @param y  The angular radiative variable (the cosine 
0279    * of the  polar angle of the emitted gluon in the partonic  
0280    * @param theta2 The angle \f$\theta_2\f$
0281    * CMS frame). 
0282    */
0283   realVVKinematics(bornVVKinematics bornVariables,double xt, double y, double theta2);
0284 
0285   /**
0286    * A check to make sure that the momenta calculated from 
0287    * the energies and angles are equal to those of meMomenta().
0288    */
0289   void sanityCheck() const;
0290      
0291 public:
0292 
0293   /**
0294    * Read-only access to all of the above member variables.
0295    */
0296 
0297   /**
0298    * The bornVVKinematics underlying the 2->3 kinematics
0299    */
0300   bornVVKinematics bornVariables() const { return bornVariables_; }
0301 
0302   /**
0303    * The lower bound on the x integration:
0304    */
0305   double xbar() const { return xbar_; }
0306 
0307   /**
0308    * @name The `raw' radiative variables.
0309    */
0310   //@{
0311   /**
0312    *  The \f$\tilde{x}\f$ radiative variable
0313    */
0314   double xt() const { return xt_; }
0315 
0316   /**
0317    *  The \f$y\f$ radiative variable
0318    */
0319   double y() const { return y_; }
0320 
0321   /**
0322    *  The \f$x_r\f$ radiative variable
0323    */
0324   double xr() const { return xr_; }
0325   //@}
0326 
0327   /**
0328    * The momentum fraction of the parton incident from the +z direction.
0329    */
0330   double x1r() const { return x1r_; }
0331 
0332   /**
0333    * The momentum fraction of the parton incident from the -z direction.
0334    */
0335   double x2r() const { return x2r_; }
0336 
0337   /**
0338    * Invariants required for the evaluation of next-to-leading order
0339    * quantities (Frixione et al. NPB.383 WZ production at colliders). 
0340    */
0341 
0342   /**
0343    * @name First the Born variables:
0344    */
0345   //@{
0346   /**
0347    *  \f$s_2\f$ variable from Frixione et al. NPB.383,3
0348    */
0349   Energy2 s2r() const { return s2r_; }
0350 
0351   /**
0352    *  \f$k_1^2\f$ mass of first vector boson
0353    */
0354   Energy2 k12r() const { return k12r_; }
0355 
0356   /**
0357    *  \f$k_2^2\f$ mass of second vector boson
0358    */
0359   Energy2 k22r() const { return k22r_; }
0360 
0361   /**
0362    * \f$\theta_1\f$ angle from Frixione et al. NPB.383,3
0363    */
0364   double  theta1r() const { return theta1r_; }
0365 
0366   /**
0367    * \f$\theta_2\f$ angle from Frixione et al. NPB.383,3
0368    */
0369   double  theta2r() const { return theta2r_; }
0370   //@}
0371 
0372   /**
0373    * @name Then the rest:
0374    */
0375   //@{
0376   /**
0377    *  \f$p_T^2\f$ in the lab frame
0378    */
0379   Energy2 pT2_in_lab() const { return tkr_*ukr_/sr_; }
0380 
0381   /**
0382    * \f$s\f$ from Frixione et al. NPB.383,3
0383    */
0384   Energy2 sr() const { return sr_; }
0385 
0386   /**
0387    * \f$t_k\f$ from Frixione et al. NPB.383,3
0388    */
0389   Energy2 tkr() const { return tkr_; }   
0390 
0391   /**
0392    * \f$u_k\f$ from Frixione et al. NPB.383,3
0393    */
0394   Energy2 ukr() const { return ukr_; }
0395 
0396   /**
0397    * \f$\cos\psi\f$ from Frixione et al. NPB.383,3
0398    */
0399   double  cpsir() const { return cpsir_; }
0400 
0401   /**
0402    * \f$\cos\psi'\f$ from Frixione et al. NPB.383,3
0403    */
0404   double  cpsipr() const { return cpsiprr_; }
0405 
0406   /**
0407    * \f$\beta_x\f$ from Frixione et al. NPB.383,3
0408    */
0409   double  betaxr() const { return betaxr_; }
0410 
0411   /**
0412    * \f$v_1\f$ variable from Frixione et al. NPB.383,3
0413    */
0414   double  v1r() const { return v1r_; }
0415 
0416   /**
0417    * \f$v_2\f$ variable from Frixione et al. NPB.383,3
0418    */
0419   double  v2r() const { return v2r_; }
0420 
0421   /**
0422    * \f$q_1\f$ variable from Frixione et al. NPB.383,3
0423    */
0424   Energy2 q1r() const { return q1r_; }
0425 
0426   /**
0427    * \f$q_2\f$ variable from Frixione et al. NPB.383,3
0428    */
0429   Energy2 q2r() const { return q2r_; } 
0430 
0431   /**
0432    * \f$\hat q_1\f$ variable from Frixione et al. NPB.383,3
0433    */
0434   Energy2 q1hatr() const { return q1hatr_; }
0435 
0436   /**
0437    * \f$\hat q_2\f$ variable from Frixione et al. NPB.383,3
0438    */
0439   Energy2 q2hatr() const { return q2hatr_; }
0440 
0441   /**
0442    * \f$\hat w_1\f$ variable from Frixione et al. NPB.383,3
0443    */
0444   Energy2 w1r() const { return w1r_; }
0445 
0446   /**
0447    * \f$\hat w_2\f$ variable from Frixione et al. NPB.383,3
0448    */
0449   Energy2 w2r() const { return w2r_; }
0450 
0451   /**
0452    *  4-momentum \f$p_1\f$ from Frixione et al. NPB.383,3
0453    */
0454   Lorentz5Momentum p1r() const { return p1r_; }
0455 
0456   /**
0457    *  4-momentum \f$p_2\f$ from Frixione et al. NPB.383,3
0458    */
0459   Lorentz5Momentum p2r() const { return p2r_; }
0460 
0461   /**
0462    *  4-momentum \f$k\f$ from Frixione et al. NPB.383,3
0463    */
0464   Lorentz5Momentum kr()  const { return kr_ ; }
0465 
0466   /**
0467    *  4-momentum \f$k_1\f$ from Frixione et al. NPB.383,3
0468    */
0469   Lorentz5Momentum k1r() const { return k1r_; }
0470 
0471   /**
0472    *  4-momentum \f$k_2\f$ from Frixione et al. NPB.383,3
0473    */
0474   Lorentz5Momentum k2r() const { return k2r_; }
0475 
0476   /**
0477    *  Set 4-momentum \f$p_1\f$ from Frixione et al. NPB.383,3
0478    */
0479   void p1r(Lorentz5Momentum p1r) { p1r_ = p1r; }
0480 
0481   /**
0482    *  Set 4-momentum \f$p_2\f$ from Frixione et al. NPB.383,3
0483    */
0484   void p2r(Lorentz5Momentum p2r) { p2r_ = p2r; }
0485 
0486   /**
0487    *  Set 4-momentum \f$k\f$ from Frixione et al. NPB.383,3
0488    */
0489   void kr (Lorentz5Momentum kr ) { kr_  = kr ; }
0490 
0491   /**
0492    *  Set 4-momentum \f$k_1\f$ from Frixione et al. NPB.383,3
0493    */
0494   void k1r(Lorentz5Momentum k1r) { k1r_ = k1r; }
0495 
0496   /**
0497    *  Set 4-momentum \f$k_2\f$ from Frixione et al. NPB.383,3
0498    */
0499   void k2r(Lorentz5Momentum k2r) { k2r_ = k2r; }
0500   //@}
0501  
0502 private:
0503 
0504   /**
0505    * The bornVVKinematics object underlying the 2->3 kinematics.
0506    */
0507   bornVVKinematics bornVariables_;
0508 
0509   /**
0510    * The lower bound on the x integration.
0511    */
0512   double xbar_;
0513 
0514   // The `raw' radiative variables.
0515   /**
0516    * @name The `raw' radiative variables.
0517    */
0518   //@{
0519   /**
0520    *  The \f$\tilde{x}\f$ radiative variable
0521    */
0522   double xt_;
0523 
0524   /**
0525    *  The \f$y\f$ radiative variable
0526    */
0527   double y_;
0528 
0529   /**
0530    *  The \f$x_r\f$ radiative variable
0531    */
0532   double xr_;
0533   //@}
0534 
0535   /**
0536    * The momentum fraction of the parton incident from the +z direction.
0537    */
0538   double x1r_;
0539 
0540   /**
0541    * The momentum fraction of the parton incident from the -z direction.
0542    */
0543   double x2r_;
0544 
0545   /**
0546    * Invariants required for the evaluation of next-to-leading order
0547    * quantities (Frixione et al. NPB.383 WZ production at colliders). 
0548    */
0549 
0550   /**
0551    * @name First the Born variables:
0552    */
0553   //@{
0554   /**
0555    *  \f$s_2\f$ variable from Frixione et al. NPB.383,3
0556    */
0557   Energy2 s2r_;
0558 
0559   /**
0560    *  \f$k_1^2\f$ mass of first vector boson
0561    */
0562   Energy2 k12r_;
0563 
0564   /**
0565    *  \f$k_2^2\f$ mass of second vector boson
0566    */
0567   Energy2 k22r_;
0568 
0569   /**
0570    * \f$\theta_1\f$ angle from Frixione et al. NPB.383,3
0571    */
0572   double  theta1r_;
0573 
0574   /**
0575    * \f$\theta_2\f$ angle from Frixione et al. NPB.383,3
0576    */
0577   double  theta2r_;
0578   //@}
0579 
0580   /**
0581    * @name Then the rest:
0582    */
0583   //@{
0584   /**
0585    * \f$s\f$ from Frixione et al. NPB.383,3
0586    */
0587   Energy2 sr_;
0588 
0589   /**
0590    * \f$t_k\f$ from Frixione et al. NPB.383,3
0591    */
0592   Energy2 tkr_;
0593 
0594   /**
0595    * \f$u_k\f$ from Frixione et al. NPB.383,3
0596    */
0597   Energy2 ukr_;
0598 
0599   /**
0600    * \f$\cos\psi\f$ from Frixione et al. NPB.383,3
0601    */
0602   double  cpsir_;
0603 
0604   /**
0605    * \f$\cos\psi'\f$ from Frixione et al. NPB.383,3
0606    */
0607   double  cpsiprr_;
0608 
0609   /**
0610    * \f$\beta_x\f$ from Frixione et al. NPB.383,3
0611    */
0612   double  betaxr_;
0613 
0614   /**
0615    * \f$v_1\f$ variable from Frixione et al. NPB.383,3
0616    */
0617   double  v1r_;
0618 
0619   /**
0620    * \f$v_2\f$ variable from Frixione et al. NPB.383,3
0621    */
0622   double  v2r_;
0623 
0624   /**
0625    * \f$q_1\f$ variable from Frixione et al. NPB.383,3
0626    */
0627   Energy2 q1r_;
0628 
0629   /**
0630    * \f$q_2\f$ variable from Frixione et al. NPB.383,3
0631    */
0632   Energy2 q2r_;
0633 
0634   /**
0635    * \f$\hat q_1\f$ variable from Frixione et al. NPB.383,3
0636    */
0637   Energy2 q1hatr_;
0638 
0639   /**
0640    * \f$\hat q_2\f$ variable from Frixione et al. NPB.383,3
0641    */
0642   Energy2 q2hatr_;
0643 
0644   /**
0645    * \f$\hat w_1\f$ variable from Frixione et al. NPB.383,3
0646    */
0647   Energy2 w1r_;
0648 
0649   /**
0650    * \f$\hat w_2\f$ variable from Frixione et al. NPB.383,3
0651    */
0652   Energy2 w2r_;
0653 
0654   /**
0655    *  4-momentum \f$p_1\f$ from Frixione et al. NPB.383,3
0656    */
0657   Lorentz5Momentum p1r_;
0658 
0659   /**
0660    *  4-momentum \f$p_2\f$ from Frixione et al. NPB.383,3
0661    */
0662   Lorentz5Momentum p2r_;
0663 
0664   /**
0665    *  4-momentum \f$k\f$ from Frixione et al. NPB.383,3
0666    */
0667   Lorentz5Momentum kr_;
0668 
0669   /**
0670    *  4-momentum \f$k_1\f$ from Frixione et al. NPB.383,3
0671    */
0672   Lorentz5Momentum k1r_;
0673 
0674   /**
0675    *  4-momentum \f$k_2\f$ from Frixione et al. NPB.383,3
0676    */
0677   Lorentz5Momentum k2r_;
0678   //@}
0679 
0680 };
0681 
0682 }
0683 
0684 #endif /* HERWIG_VVKinematics_H */