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