![]() |
![]() |
00001 #include "FWCore/Framework/interface/EDProducer.h" 00002 #include "DataFormats/Common/interface/Handle.h" 00003 #include "FWCore/Framework/interface/ESHandle.h" 00004 #include "SimMuon/RPCDigitizer/src/RPCSimSetUp.h" 00005 #include "SimMuon/RPCDigitizer/src/RPCDigiProducer.h" 00006 #include "SimMuon/RPCDigitizer/src/RPCDigitizer.h" 00007 #include "Geometry/Records/interface/MuonGeometryRecord.h" 00008 #include "SimDataFormats/CrossingFrame/interface/CrossingFrame.h" 00009 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" 00010 #include "DataFormats/Common/interface/Handle.h" 00011 #include "FWCore/Framework/interface/ESHandle.h" 00012 #include "Geometry/Records/interface/MuonGeometryRecord.h" 00013 #include "MagneticField/Records/interface/IdealMagneticFieldRecord.h" 00014 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" 00015 #include "FWCore/ServiceRegistry/interface/Service.h" 00016 #include "FWCore/Utilities/interface/RandomNumberGenerator.h" 00017 #include "FWCore/Framework/interface/Event.h" 00018 #include "FWCore/Framework/interface/EventSetup.h" 00019 #include "FWCore/ParameterSet/interface/ParameterSet.h" 00020 #include "SimDataFormats/TrackingHit/interface/PSimHitContainer.h" 00021 #include "SimMuon/RPCDigitizer/src/RPCSynchronizer.h" 00022 #include <sstream> 00023 #include <string> 00024 00025 #include <map> 00026 #include <vector> 00027 00028 #include "FWCore/Framework/interface/MakerMacros.h" 00029 #include "DataFormats/MuonDetId/interface/RPCDetId.h" 00030 00031 //Random Number 00032 #include "FWCore/ServiceRegistry/interface/Service.h" 00033 #include "FWCore/Utilities/interface/RandomNumberGenerator.h" 00034 #include "FWCore/Utilities/interface/Exception.h" 00035 #include "CLHEP/Random/RandomEngine.h" 00036 00037 00038 00039 RPCDigiProducer::RPCDigiProducer(const edm::ParameterSet& ps) { 00040 00041 produces<RPCDigiCollection>(); 00042 produces<RPCDigitizerSimLinks>("RPCDigiSimLink"); 00043 00044 //Name of Collection used for create the XF 00045 mix_ = ps.getParameter<std::string>("mixLabel"); 00046 collection_for_XF = ps.getParameter<std::string>("InputCollection"); 00047 00048 edm::Service<edm::RandomNumberGenerator> rng; 00049 if ( ! rng.isAvailable()) { 00050 throw cms::Exception("Configuration") 00051 << "RPCDigitizer requires the RandomNumberGeneratorService\n" 00052 "which is not present in the configuration file. You must add the service\n" 00053 "in the configuration file or remove the modules that require it."; 00054 } 00055 00056 00057 CLHEP::HepRandomEngine& engine = rng->getEngine(); 00058 00059 theRPCSimSetUp = new RPCSimSetUp(ps); 00060 theDigitizer = new RPCDigitizer(ps,engine); 00061 00062 00063 } 00064 00065 RPCDigiProducer::~RPCDigiProducer() { 00066 delete theDigitizer; 00067 delete theRPCSimSetUp; 00068 } 00069 00070 void RPCDigiProducer::beginRun(const edm::Run& r, const edm::EventSetup& eventSetup){ 00071 00072 edm::ESHandle<RPCGeometry> hGeom; 00073 eventSetup.get<MuonGeometryRecord>().get( hGeom ); 00074 const RPCGeometry *pGeom = &*hGeom; 00075 00076 edm::ESHandle<RPCStripNoises> noiseRcd; 00077 eventSetup.get<RPCStripNoisesRcd>().get(noiseRcd); 00078 00079 edm::ESHandle<RPCClusterSize> clsRcd; 00080 eventSetup.get<RPCClusterSizeRcd>().get(clsRcd); 00081 00082 theRPCSimSetUp->setRPCSetUp(noiseRcd->getVNoise(), clsRcd->getCls()); 00083 // theRPCSimSetUp->setRPCSetUp(noiseRcd->getVNoise(), noiseRcd->getCls()); 00084 00085 theDigitizer->setGeometry( pGeom ); 00086 theRPCSimSetUp->setGeometry( pGeom ); 00087 theDigitizer->setRPCSimSetUp( theRPCSimSetUp ); 00088 } 00089 00090 void RPCDigiProducer::produce(edm::Event& e, const edm::EventSetup& eventSetup) { 00091 00092 edm::Handle<CrossingFrame<PSimHit> > cf; 00093 e.getByLabel(mix_, collection_for_XF, cf); 00094 00095 std::auto_ptr<MixCollection<PSimHit> > 00096 hits( new MixCollection<PSimHit>(cf.product()) ); 00097 00098 // Create empty output 00099 std::auto_ptr<RPCDigiCollection> pDigis(new RPCDigiCollection()); 00100 std::auto_ptr<RPCDigitizerSimLinks> RPCDigitSimLink(new RPCDigitizerSimLinks() ); 00101 00102 // run the digitizer 00103 theDigitizer->doAction(*hits, *pDigis, *RPCDigitSimLink); 00104 00105 // store them in the event 00106 e.put(pDigis); 00107 e.put(RPCDigitSimLink,"RPCDigiSimLink"); 00108 } 00109