00001 #ifndef MU_END_WIRE_HIT_SIM_H 00002 #define MU_END_WIRE_HIT_SIM_H 00003 00010 #include <vector> 00011 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" 00012 #include "SimMuon/CSCDigitizer/src/CSCDetectorHit.h" 00013 #include "DataFormats/GeometryVector/interface/LocalPoint.h" 00014 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h" 00015 #include "CLHEP/Random/RandomEngine.h" 00016 00017 class CSCDriftSim; 00018 class CSCLayer; 00019 class CSCG3Hit; 00020 class CSCGasCollisions; 00021 class CSCLayerGeometry; 00022 00023 00024 class CSCWireHitSim 00025 { 00026 public: 00027 explicit CSCWireHitSim(CSCDriftSim* driftSim); 00028 ~CSCWireHitSim(); 00029 00030 // makes wire hits from the given g3hits 00031 std::vector<CSCDetectorHit> & simulate(const CSCLayer * layer, 00032 const edm::PSimHitContainer & simHits); 00033 00034 void setParticleDataTable(const ParticleDataTable * pdt); 00035 00036 void setRandomEngine(CLHEP::HepRandomEngine& engine); 00037 00038 private: 00039 // Helper functions 00040 std::vector<Local3DPoint> getIonizationClusters(const PSimHit & hit, 00041 const CSCLayer *); 00042 CSCDetectorHit driftElectronsToWire(); 00043 00044 // member data 00045 CSCDriftSim* theDriftSim; 00046 CSCGasCollisions* theGasIonizer; 00047 std::vector<CSCDetectorHit> theNewWireHits; 00048 }; 00049 00050 #endif