Go to the documentation of this file.00001 #ifndef SiStripDigitizer_h
00002 #define SiStripDigitizer_h
00003
00004 #include <map>
00005 #include <memory>
00006 #include <string>
00007 #include <vector>
00008
00009 #include "SimGeneral/MixingModule/interface/DigiAccumulatorMixMod.h"
00010 #include "FWCore/Framework/interface/ESHandle.h"
00011
00012 class TrackerTopology;
00013
00014 namespace CLHEP {
00015 class HepRandomEngine;
00016 }
00017
00018 namespace edm {
00019 class EDProducer;
00020 class Event;
00021 class EventSetup;
00022 class ParameterSet;
00023 template<typename T> class Handle;
00024 }
00025
00026 class MagneticField;
00027 class PileUpEventPrincipal;
00028 class PSimHit;
00029 class SiStripDigitizerAlgorithm;
00030 class StripGeomDetUnit;
00031 class TrackerGeometry;
00032
00041 class SiStripDigitizer : public DigiAccumulatorMixMod {
00042 public:
00043 explicit SiStripDigitizer(const edm::ParameterSet& conf, edm::EDProducer& mixMod);
00044
00045 virtual ~SiStripDigitizer();
00046
00047 virtual void initializeEvent(edm::Event const& e, edm::EventSetup const& c) override;
00048 virtual void accumulate(edm::Event const& e, edm::EventSetup const& c) override;
00049 virtual void accumulate(PileUpEventPrincipal const& e, edm::EventSetup const& c) override;
00050 virtual void finalizeEvent(edm::Event& e, edm::EventSetup const& c) override;
00051
00052 private:
00053 void accumulateStripHits(edm::Handle<std::vector<PSimHit> >, const TrackerTopology *tTopo, size_t globalSimHitIndex );
00054
00055 typedef std::vector<std::string> vstring;
00056 typedef std::map<unsigned int, std::vector<std::pair<const PSimHit*, int> >,std::less<unsigned int> > simhit_map;
00057 typedef simhit_map::iterator simhit_map_iterator;
00058
00059 const std::string gainLabel;
00060 const std::string hitsProducer;
00061 const vstring trackerContainers;
00062 const std::string ZSDigi;
00063 const std::string SCDigi;
00064 const std::string VRDigi;
00065 const std::string PRDigi;
00066 const std::string geometryType;
00067 const bool useConfFromDB;
00068 const bool zeroSuppression;
00069 const bool makeDigiSimLinks_;
00070
00078 std::map<std::string,size_t> crossingSimHitIndexOffset_;
00079
00080 std::unique_ptr<SiStripDigitizerAlgorithm> theDigiAlgo;
00081 std::map<uint32_t, std::vector<int> > theDetIdList;
00082 edm::ESHandle<TrackerGeometry> pDD;
00083 edm::ESHandle<MagneticField> pSetup;
00084 std::map<unsigned int, StripGeomDetUnit*> detectorUnits;
00085
00086 CLHEP::HepRandomEngine* rndEngine;
00087 };
00088
00089 #endif