00001 #ifndef _TRACKER_SiHitDigitizer_H_ 00002 #define _TRACKER_SiHitDigitizer_H_ 00003 00004 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00005 00006 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h" 00007 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h" 00008 #include "Geometry/CommonDetUnit/interface/GeomDetType.h" 00009 #include "SimDataFormats/TrackingHit/interface/PSimHit.h" 00010 #include "SimTracker/SiStripDigitizer/interface/SiChargeCollectionDrifter.h" 00011 #include "SimTracker/SiStripDigitizer/interface/SiChargeDivider.h" 00012 #include "SimTracker/SiStripDigitizer/interface/SiInduceChargeOnStrips.h" 00013 #include "SimTracker/SiStripDigitizer/interface/SiPileUpSignals.h" 00014 00015 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" 00016 00017 #include <map> 00018 00019 namespace CLHEP { 00020 class HepRandomEngine; 00021 } 00022 00023 class SiStripDetType; 00027 class SiHitDigitizer{ 00028 public: 00029 00030 SiHitDigitizer(const edm::ParameterSet& conf,CLHEP::HepRandomEngine&); 00031 00032 ~SiHitDigitizer(); 00033 00034 void setChargeDivider(SiChargeDivider* cd){ 00035 if (theSiChargeDivider) delete theSiChargeDivider; 00036 theSiChargeDivider = cd; 00037 } 00038 void setChargeCollectionDrifter(SiChargeCollectionDrifter* cd){ 00039 if (theSiChargeCollectionDrifter) delete theSiChargeCollectionDrifter; 00040 theSiChargeCollectionDrifter = cd; 00041 } 00042 void setInduceChargeOnStrips(SiInduceChargeOnStrips* cd){ 00043 if (theSiInduceChargeOnStrips) delete theSiInduceChargeOnStrips; 00044 theSiInduceChargeOnStrips = cd; 00045 } 00046 00047 void setParticleDataTable(const ParticleDataTable * pdt); 00048 00049 void processHit(const PSimHit&, const StripGeomDetUnit&, GlobalVector,float, 00050 std::vector<double>&, unsigned int&, unsigned int&); 00051 00052 private: 00053 SiChargeDivider* theSiChargeDivider; 00054 SiChargeCollectionDrifter* theSiChargeCollectionDrifter; 00055 SiInduceChargeOnStrips* theSiInduceChargeOnStrips; 00056 00057 edm::ParameterSet conf_; 00058 CLHEP::HepRandomEngine& rndEngine; 00059 double depletionVoltage; 00060 double appliedVoltage; 00061 double chargeMobility; 00062 double temperature; 00063 bool noDiffusion; 00064 double chargeDistributionRMS; 00065 double gevperelectron; 00066 LocalVector DriftDirection(const StripGeomDetUnit*,GlobalVector,float); 00067 typedef GloballyPositioned<double> Frame; 00068 00069 }; 00070 00071 #endif