test
CMS 3D CMS Logo

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