00001 00002 #ifndef MaterialEffects_h 00003 #define MaterialEffects_h 00004 00028 //Framework Headers 00029 //#include "FWCore/ParameterSet/interface/ParameterSet.h" 00030 00031 // Geometry Headers 00032 #include "DataFormats/GeometryVector/interface/GlobalVector.h" 00033 00034 #include <vector> 00035 class FSimEvent; 00036 class TrackerLayer; 00037 class ParticlePropagator; 00038 class PairProductionSimulator; 00039 class BremsstrahlungSimulator; 00040 class EnergyLossSimulator; 00041 class NuclearInteractionSimulator; 00042 class RandomEngine; 00043 class MultipleScatteringSimulator; 00044 class MuonBremsstrahlungSimulator; 00045 00046 namespace edm { 00047 class ParameterSet; 00048 } 00049 00050 class MaterialEffects 00051 { 00052 00053 public: 00054 00056 MaterialEffects(const edm::ParameterSet& matEff, 00057 const RandomEngine* engine); 00058 00060 ~MaterialEffects(); 00061 00064 void interact(FSimEvent& simEvent, 00065 const TrackerLayer& layer, 00066 ParticlePropagator& PP, 00067 unsigned i); 00068 00070 void save(); 00071 00073 inline double thickness() const { return theThickness; } 00074 00076 inline double energyLoss() const { return theEnergyLoss; } 00077 00079 inline MultipleScatteringSimulator* multipleScatteringSimulator() const { 00080 return MultipleScattering; 00081 } 00082 00084 inline EnergyLossSimulator* energyLossSimulator() const { 00085 return EnergyLoss; 00086 } 00087 00089 inline MuonBremsstrahlungSimulator* muonBremsstrahlungSimulator() const { 00090 return MuonBremsstrahlung; 00091 } 00092 00093 private: 00094 00096 double radLengths(const TrackerLayer& layer, 00097 ParticlePropagator& myTrack); 00098 00100 GlobalVector normalVector(const TrackerLayer& layer, 00101 ParticlePropagator& myTrack ) const; 00102 00103 private: 00104 00105 PairProductionSimulator* PairProduction; 00106 BremsstrahlungSimulator* Bremsstrahlung; 00108 MuonBremsstrahlungSimulator* MuonBremsstrahlung; 00109 MultipleScatteringSimulator* MultipleScattering; 00110 EnergyLossSimulator* EnergyLoss; 00111 NuclearInteractionSimulator* NuclearInteraction; 00112 00113 // Cuts for material effects 00114 double pTmin; 00115 GlobalVector theNormalVector; 00116 double theThickness; 00117 double theEnergyLoss; 00118 double theTECFudgeFactor; 00119 00120 // debugging 00121 // double myEta; 00122 00123 // The random engine 00124 const RandomEngine* random; 00125 00126 }; 00127 00128 #endif