StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
HardDiffraction.h
1 // HardDiffraction.h is a part of the PYTHIA event generator.
2 // Copyright (C) 2020 Torbjorn Sjostrand.
3 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
4 // Please respect the MCnet Guidelines, see GUIDELINES for details.
5 
6 // Author: Christine Rasmussen.
7 
8 // Header file for the HardDiffraction class.
9 
10 #ifndef Pythia8_HardDiffraction_H
11 #define Pythia8_HardDiffraction_H
12 
13 #include "Pythia8/Basics.h"
14 #include "Pythia8/BeamParticle.h"
15 #include "Pythia8/BeamRemnants.h"
16 #include "Pythia8/Info.h"
17 #include "Pythia8/MultipartonInteractions.h"
18 #include "Pythia8/PhysicsBase.h"
19 #include "Pythia8/PythiaStdlib.h"
20 #include "Pythia8/Settings.h"
21 #include "Pythia8/SpaceShower.h"
22 #include "Pythia8/TimeShower.h"
23 
24 namespace Pythia8 {
25 
26 //==========================================================================
27 
28 // HardDiffraction class.
29 // This class handles hard diffraction, together with PartonLevel.
30 
31 class HardDiffraction : public PhysicsBase {
32 
33 public:
34 
35  // Constructor and destructor.
36  HardDiffraction() : isGammaA(), isGammaB(), isGammaGamma(), usePomInPhoton(),
37  pomFlux(), iBeam(), idA(), idB(), rescale(), normPom(), sigTotRatio(),
38  a1(), a2(), a3(), A1(), A2(), A3(), a0(), ap(), b0(), mA(), mB(), s(),
39  s1(), s2(), s3(), s4(), xPomA(), xPomB(), tPomA(), tPomB(), thetaPomA(),
40  thetaPomB(), tmpPomPtr() {};
41  ~HardDiffraction() {}
42 
43  // Initialise constant and the beams to be considered.
44  void init(BeamParticle* beamAPtrIn, BeamParticle* beamBPtrIn);
45 
46  // Main routine to check if event is from diffractive PDF.
47  bool isDiffractive(int iBeamIn = 1, int partonIn = 0,
48  double xIn = 0., double Q2In = 0., double xfIncIn = 0.);
49 
50  // Get diffractive values.
51  double getXPomeronA() {return xPomA;}
52  double getXPomeronB() {return xPomB;}
53  double getTPomeronA() {return tPomA;}
54  double getTPomeronB() {return tPomB;}
55  double getThetaPomeronA() {return thetaPomA;}
56  double getThetaPomeronB() {return thetaPomB;}
57 
58 private:
59 
60  // Constants: could only be changed in the code itself.
61  static const double TINYPDF;
62  static const double POMERONMASS;
63  static const double RHOMASS;
64  static const double PROTONMASS;
65  static const double DIFFMASSMARGIN;
66 
67  // Initialization and event data.
68  bool isGammaA, isGammaB, isGammaGamma, usePomInPhoton;
69  int pomFlux, iBeam, idA, idB;
70  double rescale, normPom, sigTotRatio,
71  a1, a2, a3, A1, A2, A3, a0, ap, b0,
72  mA, mB, s, s1, s2, s3, s4,
73  xPomA, xPomB, tPomA, tPomB, thetaPomA, thetaPomB;
74 
75  // Pointer to temporary Pomeron PDF.
76  BeamParticle* tmpPomPtr;
77 
78  // Return Pomeron flux inside proton, integrated over t.
79  double xfPom(double xIn = 0.);
80 
81  // Pick a t value for a given x.
82  double pickTNow(double xIn = 0.);
83 
84  // Return Pomeron flux inside proton, differential in t.
85  double xfPomWithT(double xIn = 0., double tIn = 0.);
86 
87  // Make t range available as a pair.
88  pair<double, double> tRange(double xIn = 0.);
89 
90  // Calculate scattering angle from given x and t.
91  double getThetaNow(double xIn = 0., double tIn = 0.);
92 
93 };
94 
95 //==========================================================================
96 
97 } // end namespace Pythia8
98 
99 #endif // Pythia8_HardDiffraction_H