CMS 3D CMS Logo

CSCGasCollisions.h
Go to the documentation of this file.
1 #ifndef MU_END_CSC_GAS_COLLISIONS_H
2 #define MU_END_CSC_GAS_COLLISIONS_H
3 
19 
20 #include <string>
21 #include <vector>
22 
23 namespace CLHEP {
24  class HepRandomEngine;
25 }
26 
28 public:
30  virtual ~CSCGasCollisions();
31 
32  void setParticleDataTable(const ParticleDataTable *pdt);
33 
34  void simulate(const PSimHit &,
35  std::vector<LocalPoint> &clusters,
36  std::vector<int> &electrons,
37  CLHEP::HepRandomEngine *);
38 
39  bool dumpGasCollisions(void) const { return dumpGasCollisions_; }
40  bool saveGasCollisions(void) const { return saveGasCollisions_; }
41 
42  static const int N_GAMMA = 21;
43  static const int N_ENERGY = 63;
44  static const int N_ENTRIES = N_GAMMA * N_ENERGY;
45  static const int MAX_STEPS = 400;
46 
47 private:
48  void readCollisionTable();
49  void fillCollisionsForThisGamma(float, std::vector<float> &) const;
50  float lnEnergyLoss(float, const std::vector<float> &) const;
51  double generateStep(double avCollisions, CLHEP::HepRandomEngine *) const;
52  float generateEnergyLoss(double avCollisions,
53  double anmin,
54  double anmax,
55  const std::vector<float> &collisions,
56  CLHEP::HepRandomEngine *) const;
57 
58  void ionize(double energyTransferred, LocalPoint startHere) const;
59 
60  void writeSummary(int n_try, int n_steps, double sum_steps, float dedx, const PSimHit &simhit) const;
61 
62  const std::string me; // class name
63  double gasDensity; // Density of CSC gas mix
64  // The question of what is reasonable for deCut is complex. But it seems clear
65  // that this simulation is not credible if any delta electrons generated here
66  // have ranges more than a few mm, or equivalently, energies above a few keV.
67  // deCut = 1000 = 1 keV
68  // deCut = 10000 = 10 keV
69  double deCut; // Delta electron cutoff in eV (Match GEANT!)
70  double eion; // ionization threshold (eV) (min. E for ionizatiom)
71  double ework; // effective work function (av. energy to create one ion pair)
72  double clusterExtent; // Precision of localization of ion clus. Typically 10
73  // microns.
74 
75  std::vector<float> theGammaBins;
76  std::vector<float> theEnergyBins;
77  std::vector<float> theCollisionTable;
78 
79  CSCCrossGap *theCrossGap; // Owned by CSCGasCollisions
81  bool saveGasCollisions_; // write file of collisions details (not yet
82  // implemented in cmssw)
83  bool dumpGasCollisions_; // flag to write summary
84 };
85 
86 #endif
float generateEnergyLoss(double avCollisions, double anmin, double anmax, const std::vector< float > &collisions, CLHEP::HepRandomEngine *) const
HepPDT::ParticleDataTable ParticleDataTable
void writeSummary(int n_try, int n_steps, double sum_steps, float dedx, const PSimHit &simhit) const
static const int N_ENERGY
float lnEnergyLoss(float, const std::vector< float > &) const
CSCGasCollisions(const edm::ParameterSet &pset)
std::vector< float > theGammaBins
const std::string me
bool dumpGasCollisions(void) const
const ParticleDataTable * theParticleDataTable
double generateStep(double avCollisions, CLHEP::HepRandomEngine *) const
static const int N_GAMMA
static const int MAX_STEPS
void setParticleDataTable(const ParticleDataTable *pdt)
static const int N_ENTRIES
void fillCollisionsForThisGamma(float, std::vector< float > &) const
std::vector< float > theCollisionTable
std::vector< float > theEnergyBins
void ionize(double energyTransferred, LocalPoint startHere) const
CSCCrossGap * theCrossGap
void simulate(const PSimHit &, std::vector< LocalPoint > &clusters, std::vector< int > &electrons, CLHEP::HepRandomEngine *)
virtual ~CSCGasCollisions()
bool saveGasCollisions(void) const