File indexing completed on 2024-04-06 12:11:16
0001 #ifndef MUONBREMSSTRAHLUNGSIMULATOR_H
0002 #define MUONBREMSSTRAHLUNGSIMULATOR_H
0003
0004 #include "FastSimulation/MaterialEffects/interface/MaterialEffectsSimulator.h"
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #include <string>
0023
0024 class TF1;
0025
0026 class ParticlePropagator;
0027 class RandomEngineAndDistribution;
0028
0029 class MuonBremsstrahlungSimulator : public MaterialEffectsSimulator {
0030 public:
0031
0032 MuonBremsstrahlungSimulator(
0033 double A, double Z, double density, double radLen, double photonEnergyCut, double photonFractECut);
0034
0035
0036 ~MuonBremsstrahlungSimulator() override {}
0037
0038
0039 inline const XYZTLorentzVector& deltaP_BremMuon() const { return deltaPMuon; }
0040
0041
0042 inline const XYZTLorentzVector& deltaP_BremPhoton() const { return brem_photon; }
0043
0044 private:
0045 TF1* f1;
0046
0047 int npar;
0048
0049
0050 double photonEnergy;
0051 double bremProba;
0052
0053 double photonFractE;
0054
0055
0056 double xmin, xmax, rand;
0057 double d;
0058
0059
0060 unsigned int poisson(double ymu);
0061
0062
0063 void compute(ParticlePropagator& Particle, RandomEngineAndDistribution const*) override;
0064
0065
0066 XYZTLorentzVector brem(ParticlePropagator& p, RandomEngineAndDistribution const*) const;
0067
0068
0069 double gbteth(const double ener, const double partm, const double efrac, RandomEngineAndDistribution const*) const;
0070
0071
0072 XYZTLorentzVector deltaPMuon;
0073
0074 XYZTLorentzVector brem_photon;
0075 };
0076 #endif