CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ME0DigiPreRecoProducer.cc
Go to the documentation of this file.
12 
16 
19 
20 #include <sstream>
21 #include <string>
22 #include <map>
23 #include <vector>
24 
25 namespace CLHEP {
26  class HepRandomEngine;
27 }
28 
30  : digiPreRecoModelString_(ps.getParameter<std::string>("digiPreRecoModelString"))
31 {
32  produces<ME0DigiPreRecoCollection>();
33 
35  if (!rng.isAvailable()){
36  throw cms::Exception("Configuration")
37  << "ME0DigiPreRecoProducer::ME0PreRecoDigiProducer() - RandomNumberGeneratorService is not present in configuration file.\n"
38  << "Add the service in the configuration file or remove the modules that require it.";
39  }
41  LogDebug("ME0DigiPreRecoProducer") << "Using ME0" + digiPreRecoModelString_ + "Model";
42 
43  std::string mix_(ps.getParameter<std::string>("mixLabel"));
44  std::string collection_(ps.getParameter<std::string>("inputCollection"));
45 
46  cf_token = consumes<CrossingFrame<PSimHit> >(edm::InputTag(mix_, collection_));
47 }
48 
49 
51 {
52  delete me0DigiPreRecoModel_;
53 }
54 
55 
57 {
58  // set geometry
60  eventSetup.get<MuonGeometryRecord>().get(hGeom);
63 }
64 
65 
67 {
69  CLHEP::HepRandomEngine* engine = &rng->getEngine(e.streamID());
70 
72  e.getByToken(cf_token, cf);
73 
74  std::auto_ptr<MixCollection<PSimHit> > hits( new MixCollection<PSimHit>(cf.product()) );
75 
76  // Create empty output
77  std::auto_ptr<ME0DigiPreRecoCollection> digis(new ME0DigiPreRecoCollection());
78 
79  // arrange the hits by eta partition
80  std::map<uint32_t, edm::PSimHitContainer> hitMap;
81  for(auto &hit: *hits){
82  hitMap[hit.detUnitId()].push_back(hit);
83  }
84 
85  // simulate signal and noise for each eta partition
86  const auto & etaPartitions(me0DigiPreRecoModel_->getGeometry()->etaPartitions());
87 
88  for(auto &roll: etaPartitions){
89  const ME0DetId detId(roll->id());
90  const uint32_t rawId(detId.rawId());
91  const auto & simHits(hitMap[rawId]);
92 
93  LogDebug("ME0DigiPreRecoProducer")
94  << "ME0DigiPreRecoProducer: found " << simHits.size() << " hit(s) in eta partition" << rawId;
95 
96  me0DigiPreRecoModel_->simulateSignal(roll, simHits, engine);
97  me0DigiPreRecoModel_->simulateNoise(roll, engine);
98  me0DigiPreRecoModel_->fillDigis(rawId, *digis);
99  }
100 
101  // store them in the event
102  e.put(digis);
103 }
104 
#define LogDebug(id)
virtual void setup()=0
T getParameter(std::string const &) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:446
virtual void beginRun(const edm::Run &, const edm::EventSetup &) override
void fillDigis(int rollDetId, ME0DigiPreRecoCollection &)
ME0DigiPreRecoModel * me0DigiPreRecoModel_
ME0DigiPreRecoProducer(const edm::ParameterSet &ps)
void setGeometry(const ME0Geometry *geom)
MuonDigiCollection< ME0DetId, ME0DigiPreReco > ME0DigiPreRecoCollection
OrphanHandle< PROD > put(std::auto_ptr< PROD > product)
Put a new product.
Definition: Event.h:113
virtual void simulateNoise(const ME0EtaPartition *, CLHEP::HepRandomEngine *engine)=0
const ME0Geometry * getGeometry()
virtual void simulateSignal(const ME0EtaPartition *, const edm::PSimHitContainer &, CLHEP::HepRandomEngine *engine)=0
virtual void produce(edm::Event &, const edm::EventSetup &) override
edm::EDGetTokenT< CrossingFrame< PSimHit > > cf_token
const std::vector< ME0EtaPartition const * > & etaPartitions() const
Return a vector of all ME0 eta partitions.
Definition: ME0Geometry.cc:57
T const * product() const
Definition: Handle.h:81
const T & get() const
Definition: EventSetup.h:55
tuple simHits
Definition: trackerHits.py:16
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &) const =0
Use this engine in event methods.
StreamID streamID() const
Definition: Event.h:72
T get(const Candidate &c)
Definition: component.h:55
Definition: Run.h:41