Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-07-13 08:21:04

0001 
0002 #ifndef G4HepEmGammaInteractionConversion_HH
0003 #define G4HepEmGammaInteractionConversion_HH
0004 
0005 #include "G4HepEmMacros.hh"
0006 
0007 #include <cmath>
0008 
0009 class  G4HepEmTLData;
0010 class  G4HepEmRandomEngine;
0011 struct G4HepEmData;
0012 struct G4HepEmElemData;
0013 
0014 class G4HepEmGammaInteractionConversion {
0015 private:
0016   G4HepEmGammaInteractionConversion() = delete;
0017 
0018 public:
0019   static void Perform(G4HepEmTLData* tlData, struct G4HepEmData* hepEmData);
0020 
0021   G4HepEmHostDevice
0022   static void SampleKinEnergies(struct G4HepEmData* hepEmData, double thePrimEkin, double theLogEkin,
0023                                 int theMCIndx, double& eKinEnergy, double& pKinEnergy, G4HepEmRandomEngine* rnge);
0024 
0025 
0026   G4HepEmHostDevice
0027   static void SampleDirections(const double* orgGammaDir, double* secElDir, double* secPosDir,
0028                                const double secElEkin, const double secPosEkin, G4HepEmRandomEngine* rnge);
0029 
0030 
0031   // Target atom selector for the above bremsstrahlung intercations in case of
0032   // materials composed from multiple elements.
0033   G4HepEmHostDevice
0034   static int SelectTargetAtom(const struct G4HepEmGammaData* gmData, const int imat, const double ekin,
0035                               const double lekin, const double urndn);
0036 
0037   G4HepEmHostDevice
0038   static double SampleEnergyRateNoLPM(const double normCond, const double epsMin, const double epsRange,
0039                                       const double deltaFactor, const double invF10, const double invF20,
0040                                       const double fz, G4HepEmRandomEngine* rnge);
0041 
0042   G4HepEmHostDevice
0043   static double SampleEnergyRateWithLPM(const double normCond, const double epsMin, const double epsRange,
0044                                         const double deltaFactor, const double invF10, const double invF20,
0045                                         const double fz, G4HepEmRandomEngine* rnge, const double eGamma,
0046                                         const double lpmEnergy, const struct G4HepEmElemData* elemData);
0047 
0048   G4HepEmHostDevice
0049   static void ComputePhi12(const double delta, double &phi1, double &phi2);
0050 
0051 
0052   // Compute the value of the screening function 3*PHI1(delta) - PHI2(delta):
0053   G4HepEmHostDevice
0054   static double ScreenFunction1(const double delta);
0055 
0056   // Compute the value of the screening function 1.5*PHI1(delta) +0.5*PHI2(delta):
0057   G4HepEmHostDevice
0058   static double ScreenFunction2(const double delta);
0059 
0060   // Same as ScreenFunction1 and ScreenFunction2 but computes them at once
0061   G4HepEmHostDevice
0062   static void ScreenFunction12(const double delta, double &f1, double &f2);
0063 };
0064 
0065 #endif  // G4HepEmGammaInteractionConversion_HH