00001 #ifndef Tracker_SiLinearChargeDivider_H 00002 #define Tracker_SiLinearChargeDivider_H 00003 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 00006 #include "SimTracker/SiStripDigitizer/interface/SiChargeDivider.h" 00007 #include "SimTracker/Common/interface/SiG4UniversalFluctuation.h" 00008 #include "SimDataFormats/TrackingHit/interface/PSimHit.h" 00009 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" 00010 #include "Geometry/CommonTopologies/interface/StripTopology.h" 00011 00012 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" 00013 00014 namespace CLHEP{ 00015 class HepRandomEngine; 00016 } 00017 00022 class SiLinearChargeDivider : public SiChargeDivider{ 00023 public: 00024 00025 SiLinearChargeDivider(const edm::ParameterSet& conf, CLHEP::HepRandomEngine&); 00026 00027 virtual ~SiLinearChargeDivider(); 00028 00029 SiChargeDivider::ionization_type divide(const PSimHit&, const LocalVector&, double, const StripGeomDetUnit& det); 00030 float driftXPos(const Local3DPoint&, const LocalVector&, double); 00031 00032 void setParticleDataTable(const ParticleDataTable * pdt); 00033 00034 private: 00035 edm::ParameterSet conf_; 00036 CLHEP::HepRandomEngine& rndEngine; 00037 float PeakShape(const PSimHit&, const StripGeomDetUnit& det); 00038 float DeconvolutionShape( const PSimHit&, const StripGeomDetUnit& det); 00039 float TimeResponse( const PSimHit&, const StripGeomDetUnit& det); 00040 void fluctuateEloss(int particleId, float momentum, float eloss, float length, int NumberOfSegmentation, float elossVector[]); 00041 bool peakMode; 00042 bool fluctuateCharge; 00043 double timeResPeak, timeResDeco; 00044 int chargedivisionsPerStrip; 00045 double deltaCut ; 00046 double cosmicShift; 00047 SiG4UniversalFluctuation* fluctuate; 00048 const ParticleDataTable * theParticleDataTable; 00049 00050 }; 00051 00052 #endif