Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:06:24

0001 // HardDiffraction.h is a part of the PYTHIA event generator.
0002 // Copyright (C) 2024 Torbjorn Sjostrand.
0003 // PYTHIA is licenced under the GNU GPL v2 or later, see COPYING for details.
0004 // Please respect the MCnet Guidelines, see GUIDELINES for details.
0005 
0006 // Author: Christine Rasmussen.
0007 
0008 // Header file for the HardDiffraction class.
0009 
0010 #ifndef Pythia8_HardDiffraction_H
0011 #define Pythia8_HardDiffraction_H
0012 
0013 #include "Pythia8/Basics.h"
0014 #include "Pythia8/BeamParticle.h"
0015 #include "Pythia8/BeamRemnants.h"
0016 #include "Pythia8/Info.h"
0017 #include "Pythia8/MultipartonInteractions.h"
0018 #include "Pythia8/PhysicsBase.h"
0019 #include "Pythia8/PythiaStdlib.h"
0020 #include "Pythia8/Settings.h"
0021 #include "Pythia8/SpaceShower.h"
0022 #include "Pythia8/TimeShower.h"
0023 
0024 namespace Pythia8 {
0025 
0026 //==========================================================================
0027 
0028 // HardDiffraction class.
0029 // This class handles hard diffraction, together with PartonLevel.
0030 
0031 class HardDiffraction : public PhysicsBase {
0032 
0033 public:
0034 
0035   // Constructor and destructor.
0036   HardDiffraction() : isGammaA(), isGammaB(), isGammaGamma(), usePomInPhoton(),
0037     pomFlux(), iBeam(), idA(), idB(), rescale(), normPom(), sigTotRatio(),
0038     a1(), a2(), a3(), A1(), A2(), A3(), a0(), ap(), b0(), mA(), mB(), s(),
0039     s1(), s2(), s3(), s4(), xPomA(), xPomB(), tPomA(), tPomB(), thetaPomA(),
0040     thetaPomB(), tmpPomPtr() {};
0041   ~HardDiffraction() {}
0042 
0043   // Initialise constant and the beams to be considered.
0044   void init(BeamParticle* beamAPtrIn,  BeamParticle* beamBPtrIn);
0045 
0046   // Main routine to check if event is from diffractive PDF.
0047   bool isDiffractive(int iBeamIn = 1, int partonIn = 0,
0048     double xIn = 0., double Q2In = 0., double xfIncIn = 0.);
0049 
0050   // Get diffractive values.
0051   double getXPomeronA()     {return xPomA;}
0052   double getXPomeronB()     {return xPomB;}
0053   double getTPomeronA()     {return tPomA;}
0054   double getTPomeronB()     {return tPomB;}
0055   double getThetaPomeronA() {return thetaPomA;}
0056   double getThetaPomeronB() {return thetaPomB;}
0057 
0058 private:
0059 
0060   // Constants: could only be changed in the code itself.
0061   static const double TINYPDF;
0062   static const double POMERONMASS;
0063   static const double RHOMASS;
0064   static const double PROTONMASS;
0065   static const double DIFFMASSMARGIN;
0066 
0067   // Initialization and event data.
0068   bool isGammaA, isGammaB, isGammaGamma, usePomInPhoton;
0069   int    pomFlux, iBeam, idA, idB;
0070   double rescale, normPom, sigTotRatio,
0071          a1, a2, a3, A1, A2, A3, a0, ap, b0,
0072          mA, mB, s, s1, s2, s3, s4,
0073          xPomA, xPomB, tPomA, tPomB, thetaPomA, thetaPomB;
0074 
0075   // Pointer to temporary Pomeron PDF.
0076   BeamParticle*   tmpPomPtr;
0077 
0078   // Return Pomeron flux inside proton, integrated over t.
0079   double xfPom(double xIn = 0.);
0080 
0081   // Pick a t value for a given x.
0082   double pickTNow(double xIn = 0.);
0083 
0084   // Return Pomeron flux inside proton, differential in t.
0085   double xfPomWithT(double xIn = 0., double tIn = 0.);
0086 
0087   // Make t range available as a pair.
0088   pair<double, double> tRange(double xIn = 0.);
0089 
0090   // Calculate scattering angle from  given x and t.
0091   double getThetaNow(double xIn = 0., double tIn = 0.);
0092 
0093 };
0094 
0095 //==========================================================================
0096 
0097 } // end namespace Pythia8
0098 
0099 #endif // Pythia8_HardDiffraction_H