CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Attributes
CSCDigiProducer Class Reference

#include <CSCDigiProducer.h>

Inheritance diagram for CSCDigiProducer:
edm::stream::EDProducer<>

Public Types

typedef CSCDigitizer::DigiSimLinks DigiSimLinks
 
- Public Types inherited from edm::stream::EDProducer<>
typedef CacheContexts< T... > CacheTypes
 
typedef CacheTypes::GlobalCache GlobalCache
 
typedef AbilityChecker< T... > HasAbility
 
typedef CacheTypes::LuminosityBlockCache LuminosityBlockCache
 
typedef LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCacheLuminosityBlockContext
 
typedef CacheTypes::LuminosityBlockSummaryCache LuminosityBlockSummaryCache
 
typedef CacheTypes::RunCache RunCache
 
typedef RunContextT< RunCache, GlobalCacheRunContext
 
typedef CacheTypes::RunSummaryCache RunSummaryCache
 

Public Member Functions

 CSCDigiProducer (const edm::ParameterSet &ps)
 
void produce (edm::Event &e, const edm::EventSetup &c) override
 
 ~CSCDigiProducer () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 EDProducer ()=default
 
bool hasAbilityToProduceInLumis () const final
 
bool hasAbilityToProduceInRuns () const final
 

Private Attributes

edm::EDGetTokenT< CrossingFrame< PSimHit > > cf_token
 
std::string geometryType
 
CSCDigitizer theDigitizer
 
CSCStripConditionstheStripConditions
 

Detailed Description

Definition at line 12 of file CSCDigiProducer.h.

Member Typedef Documentation

Definition at line 14 of file CSCDigiProducer.h.

Constructor & Destructor Documentation

CSCDigiProducer::CSCDigiProducer ( const edm::ParameterSet ps)
explicit

Definition at line 27 of file CSCDigiProducer.cc.

References cf_token, Exception, geometryType, edm::ParameterSet::getParameter(), edm::Service< T >::isAvailable(), CSCDigitizer::setStripConditions(), AlCaHLTBitMon_QueryRunRegistry::string, muonCSCDigis_cfi::stripConditions, theDigitizer, and theStripConditions.

27  : theDigitizer(ps), theStripConditions(nullptr) {
28  produces<CSCWireDigiCollection>("MuonCSCWireDigi");
29  produces<CSCStripDigiCollection>("MuonCSCStripDigi");
30  produces<CSCComparatorDigiCollection>("MuonCSCComparatorDigi");
31  produces<DigiSimLinks>("MuonCSCWireDigiSimLinks");
32  produces<DigiSimLinks>("MuonCSCStripDigiSimLinks");
33  std::string stripConditions(ps.getParameter<std::string>("stripConditions"));
34  geometryType = ps.getParameter<std::string>("GeometryType");
35  edm::ParameterSet stripPSet = ps.getParameter<edm::ParameterSet>("strips");
36  if (stripConditions == "Configurable") {
38  } else if (stripConditions == "Database") {
40  } else {
41  throw cms::Exception("CSCDigiProducer") << "Bad option for strip conditions: " << stripConditions;
42  }
44 
46  if (!rng.isAvailable()) {
47  throw cms::Exception("Configuration") << "CSCDigitizer requires the RandomNumberGeneratorService\n"
48  "which is not present in the configuration file. You must add the "
49  "service\n"
50  "in the configuration file or remove the modules that require it.";
51  }
52 
53  std::string mix_ = ps.getParameter<std::string>("mixLabel");
54  std::string collection_ = ps.getParameter<std::string>("InputCollection");
55  cf_token = consumes<CrossingFrame<PSimHit>>(edm::InputTag(mix_, collection_));
56 }
T getParameter(std::string const &) const
CSCDigitizer theDigitizer
CSCStripConditions * theStripConditions
std::string geometryType
edm::EDGetTokenT< CrossingFrame< PSimHit > > cf_token
bool isAvailable() const
Definition: Service.h:40
void setStripConditions(CSCStripConditions *cond)
CSCDigiProducer::~CSCDigiProducer ( )
override

Definition at line 58 of file CSCDigiProducer.cc.

References theStripConditions.

58 { delete theStripConditions; }
CSCStripConditions * theStripConditions

Member Function Documentation

void CSCDigiProducer::produce ( edm::Event e,
const edm::EventSetup c 
)
override

Produces the EDM products,

Definition at line 60 of file CSCDigiProducer.cc.

References cf_token, CSCDigitizer::doAction(), edm::EventID::event(), geometryType, edm::EventSetup::get(), edm::Event::getByToken(), edm::EventSetup::getData(), edm::RandomNumberGenerator::getEngine(), hfClusterShapes_cfi::hits, edm::EventBase::id(), CSCStripConditions::initializeEvent(), eostools::move(), edm::Handle< T >::product(), edm::Event::put(), edm::EventID::run(), CSCDigitizer::setGeometry(), CSCDigitizer::setMagneticField(), CSCDigitizer::setParticleDataTable(), edm::Event::streamID(), theDigitizer, and theStripConditions.

60  {
61  edm::LogVerbatim("CSCDigitizer") << "[CSCDigiProducer::produce] starting event " << ev.id().event() << " of run "
62  << ev.id().run();
64  CLHEP::HepRandomEngine *engine = &rng->getEngine(ev.streamID());
65 
67  ev.getByToken(cf_token, cf);
68 
69  std::unique_ptr<MixCollection<PSimHit>> hits(new MixCollection<PSimHit>(cf.product()));
70 
71  // Create empty output
72 
73  std::unique_ptr<CSCWireDigiCollection> pWireDigis(new CSCWireDigiCollection());
74  std::unique_ptr<CSCStripDigiCollection> pStripDigis(new CSCStripDigiCollection());
75  std::unique_ptr<CSCComparatorDigiCollection> pComparatorDigis(new CSCComparatorDigiCollection());
76  std::unique_ptr<DigiSimLinks> pWireDigiSimLinks(new DigiSimLinks());
77  std::unique_ptr<DigiSimLinks> pStripDigiSimLinks(new DigiSimLinks());
78 
79  //@@ DOES NOTHING IF NO HITS. Remove this for when there's real neutrons
80  if (hits->size() > 0) {
81  // find the geometry & conditions for this event
83  eventSetup.get<MuonGeometryRecord>().get(geometryType, hGeom);
84  const CSCGeometry *pGeom = &*hGeom;
85 
87 
88  // find the magnetic field
90  eventSetup.get<IdealMagneticFieldRecord>().get(magfield);
91 
92  theDigitizer.setMagneticField(&*magfield);
93 
94  // set the particle table
96  eventSetup.getData(pdt);
98 
100 
101  // run the digitizer
103  *hits, *pWireDigis, *pStripDigis, *pComparatorDigis, *pWireDigiSimLinks, *pStripDigiSimLinks, engine);
104  }
105 
106  // store them in the event
107  ev.put(std::move(pWireDigis), "MuonCSCWireDigi");
108  ev.put(std::move(pStripDigis), "MuonCSCStripDigi");
109  ev.put(std::move(pComparatorDigis), "MuonCSCComparatorDigi");
110  ev.put(std::move(pWireDigiSimLinks), "MuonCSCWireDigiSimLinks");
111  ev.put(std::move(pStripDigiSimLinks), "MuonCSCStripDigiSimLinks");
112 }
CSCDigitizer::DigiSimLinks DigiSimLinks
CSCDigitizer theDigitizer
MuonDigiCollection< CSCDetId, CSCStripDigi > CSCStripDigiCollection
CSCStripConditions * theStripConditions
bool ev
virtual CLHEP::HepRandomEngine & getEngine(StreamID const &)=0
Use this engine in event methods.
virtual void initializeEvent(const edm::EventSetup &es)
std::string geometryType
MuonDigiCollection< CSCDetId, CSCComparatorDigi > CSCComparatorDigiCollection
edm::EDGetTokenT< CrossingFrame< PSimHit > > cf_token
MuonDigiCollection< CSCDetId, CSCWireDigi > CSCWireDigiCollection
T const * product() const
Definition: Handle.h:74
void setParticleDataTable(const ParticleDataTable *pdt)
void doAction(MixCollection< PSimHit > &simHits, CSCWireDigiCollection &wireDigis, CSCStripDigiCollection &stripDigis, CSCComparatorDigiCollection &comparators, DigiSimLinks &wireDigiSimLinks, DigiSimLinks &stripDigiSimLinks, CLHEP::HepRandomEngine *)
Definition: CSCDigitizer.cc:39
void setGeometry(const CSCGeometry *geom)
sets geometry
Definition: CSCDigitizer.h:61
void setMagneticField(const MagneticField *field)
sets the magnetic field
def move(src, dest)
Definition: eostools.py:511

Member Data Documentation

edm::EDGetTokenT<CrossingFrame<PSimHit> > CSCDigiProducer::cf_token
private

Definition at line 26 of file CSCDigiProducer.h.

Referenced by CSCDigiProducer(), and produce().

std::string CSCDigiProducer::geometryType
private

Definition at line 25 of file CSCDigiProducer.h.

Referenced by CSCDigiProducer(), and produce().

CSCDigitizer CSCDigiProducer::theDigitizer
private

Definition at line 23 of file CSCDigiProducer.h.

Referenced by CSCDigiProducer(), and produce().

CSCStripConditions* CSCDigiProducer::theStripConditions
private

Definition at line 24 of file CSCDigiProducer.h.

Referenced by CSCDigiProducer(), produce(), and ~CSCDigiProducer().