Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:11:16

0001 #ifndef BREMSSTRAHLUNGSIMULATOR_H
0002 #define BREMSSTRAHLUNGSIMULATOR_H
0003 
0004 #include "FastSimulation/MaterialEffects/interface/MaterialEffectsSimulator.h"
0005 
0006 /** 
0007  * This class computes the number, energy and angles of Bremsstrahlung 
0008  * photons emitted by electrons and positrons (under the form of a 
0009  * ParticlePropagator, i.e., a RawParticle) in the tracker layer, 
0010  * and returns the RawParticle modified after radiation as well as 
0011  * a list of photons (i.e., a list of RawParticles as well).
0012  * The fraction of radiation lengths traversed by the particle 
0013  * in this tracker layer is determined in MaterialEffectsSimulator.
0014  *
0015  * This version (a la PDG) of a dE/dx generator replaces the buggy 
0016  * GEANT3 Fortran -> C++ former version (up to FAMOS_0_8_0_pre7).
0017  *
0018  * \author Patrick Janot
0019  * $Date: 25-Dec-2003
0020  */
0021 
0022 class ParticlePropagator;
0023 class RandomEngineAndDistribution;
0024 
0025 class BremsstrahlungSimulator : public MaterialEffectsSimulator {
0026 public:
0027   /// Constructor
0028   BremsstrahlungSimulator(double photonEnergyCut, double photonFractECut);
0029 
0030   /// Default destructor
0031   ~BremsstrahlungSimulator() override {}
0032 
0033 private:
0034   /// The minimum photon energy to be radiated, in GeV
0035   double photonEnergy;
0036 
0037   /// The minimum photon fractional energy (wrt that of the electron)
0038   double photonFractE;
0039 
0040   /// The fractional photon energy cut (determined from the above two)
0041   double xmin;
0042 
0043   /// Generate numbers according to a Poisson distribution of mean ymu.
0044   unsigned int poisson(double ymu, RandomEngineAndDistribution const*);
0045 
0046   /// Generate Bremsstrahlung photons
0047   void compute(ParticlePropagator& Particle, RandomEngineAndDistribution const*) override;
0048 
0049   /// Compute Brem photon energy and angles, if any.
0050   XYZTLorentzVector brem(ParticlePropagator& p, RandomEngineAndDistribution const*) const;
0051 
0052   /// A universal angular distribution - still from GEANT.
0053   double gbteth(const double ener, const double partm, const double efrac, RandomEngineAndDistribution const*) const;
0054 };
0055 #endif