CMS 3D CMS Logo

SiStripRawToDigiModule.cc
Go to the documentation of this file.
1 
4 
16 #include <cstdlib>
17 
18 namespace sistrip {
19 
21  rawToDigi_(nullptr),
22  cabling_(nullptr),
23  cacheId_(0),
24  extractCm_(false),
25  doFullCorruptBufferChecks_(false),
26  doAPVEmulatorCheck_(true)
27  {
28  if ( edm::isDebugEnabled() ) {
29  LogTrace("SiStripRawToDigi")
30  << "[sistrip::RawToDigiModule::" << __func__ << "]"
31  << " Constructing object...";
32  }
33 
34  token_ = consumes<FEDRawDataCollection>(pset.getParameter<edm::InputTag>("ProductLabel"));
35  int16_t appended_bytes = pset.getParameter<int>("AppendedBytes");
36  int16_t trigger_fed_id = pset.getParameter<int>("TriggerFedId");
37  bool legacy_unpacker = pset.getParameter<bool>("LegacyUnpacker");
38  bool use_daq_register = pset.getParameter<bool>("UseDaqRegister");
39  bool using_fed_key = pset.getParameter<bool>("UseFedKey");
40  bool unpack_bad_channels = pset.getParameter<bool>("UnpackBadChannels");
41  bool mark_missing_feds = pset.getParameter<bool>("MarkModulesOnMissingFeds");
42 
43  int16_t fed_buffer_dump_freq = pset.getUntrackedParameter<int>("FedBufferDumpFreq",0);
44  int16_t fed_event_dump_freq = pset.getUntrackedParameter<int>("FedEventDumpFreq",0);
45  bool quiet = pset.getUntrackedParameter<bool>("Quiet",true);
46  extractCm_ = pset.getParameter<bool>("UnpackCommonModeValues");
47  doFullCorruptBufferChecks_ = pset.getParameter<bool>("DoAllCorruptBufferChecks");
48  doAPVEmulatorCheck_ = pset.getParameter<bool>("DoAPVEmulatorCheck");
49 
50  uint32_t errorThreshold = pset.getParameter<unsigned int>("ErrorThreshold");
51 
52  rawToDigi_ = new sistrip::RawToDigiUnpacker( appended_bytes, fed_buffer_dump_freq, fed_event_dump_freq, trigger_fed_id, using_fed_key, unpack_bad_channels, mark_missing_feds, errorThreshold);
53  rawToDigi_->legacy(legacy_unpacker);
54  rawToDigi_->quiet(quiet);
55  rawToDigi_->useDaqRegister( use_daq_register );
56  rawToDigi_->extractCm(extractCm_);
57  rawToDigi_->doFullCorruptBufferChecks(doFullCorruptBufferChecks_);
58  rawToDigi_->doAPVEmulatorCheck(doAPVEmulatorCheck_);
59 
60  produces< SiStripEventSummary >();
61  produces< edm::DetSetVector<SiStripRawDigi> >("ScopeMode");
62  produces< edm::DetSetVector<SiStripRawDigi> >("VirginRaw");
63  produces< edm::DetSetVector<SiStripRawDigi> >("ProcessedRaw");
64  produces< edm::DetSetVector<SiStripDigi> >("ZeroSuppressed");
65  produces<DetIdCollection>();
66  if ( extractCm_ ) produces< edm::DetSetVector<SiStripRawDigi> >("CommonMode");
67 
68  }
69 
71  if ( rawToDigi_ ) { delete rawToDigi_; }
72  if ( cabling_ ) { cabling_ = nullptr; }
73  if ( edm::isDebugEnabled() ) {
74  LogTrace("SiStripRawToDigi")
75  << "[sistrip::RawToDigiModule::" << __func__ << "]"
76  << " Destructing object...";
77  }
78  }
79 
81  updateCabling( setup );
82  }
83 
91 
92  updateCabling( setup );
93 
94  // Retrieve FED raw data (by label, which is "source" by default)
96  event.getByToken( token_, buffers );
97 
98  // Populate SiStripEventSummary object with "trigger FED" info
99  auto summary = std::make_unique<SiStripEventSummary>();
100  rawToDigi_->triggerFed( *buffers, *summary, event.id().event() );
101 
102  // Create containers for digis
109 
110  // Create digis
111  if ( rawToDigi_ ) { rawToDigi_->createDigis( *cabling_,*buffers,*summary,*sm,*vr,*pr,*zs,*ids,*cm ); }
112 
113  // Create unique_ptr's of digi products
114  std::unique_ptr< edm::DetSetVector<SiStripRawDigi> > sm_dsv(sm);
115  std::unique_ptr< edm::DetSetVector<SiStripRawDigi> > vr_dsv(vr);
116  std::unique_ptr< edm::DetSetVector<SiStripRawDigi> > pr_dsv(pr);
117  std::unique_ptr< edm::DetSetVector<SiStripDigi> > zs_dsv(zs);
118  std::unique_ptr< DetIdCollection > det_ids(ids);
119  std::unique_ptr< edm::DetSetVector<SiStripRawDigi> > cm_dsv(cm);
120 
121  // Add to event
122  event.put(std::move(summary));
123  event.put(std::move(sm_dsv), "ScopeMode");
124  event.put(std::move(vr_dsv), "VirginRaw");
125  event.put(std::move(pr_dsv), "ProcessedRaw");
126  event.put(std::move(zs_dsv), "ZeroSuppressed");
127  event.put(std::move(det_ids));
128  if ( extractCm_ ) event.put(std::move(cm_dsv), "CommonMode");
129 
130  }
131 
133 
134  uint32_t cache_id = setup.get<SiStripFedCablingRcd>().cacheIdentifier();
135 
136  if ( cacheId_ != cache_id ) {
137 
139  setup.get<SiStripFedCablingRcd>().get( c );
140  cabling_ = c.product();
141 
142  if ( edm::isDebugEnabled() ) {
143  if ( !cacheId_ ) {
144  std::stringstream ss;
145  ss << "[sistrip::RawToDigiModule::" << __func__ << "]"
146  << " Updating cabling for first time..." << std::endl
147  << " Terse print out of FED cabling:" << std::endl;
148  cabling_->terse(ss);
149  LogTrace("SiStripRawToDigi") << ss.str();
150  }
151  }
152 
153  if ( edm::isDebugEnabled() ) {
154  std::stringstream sss;
155  sss << "[sistrip::RawToDigiModule::" << __func__ << "]"
156  << " Summary of FED cabling:" << std::endl;
158  setup.get<TrackerTopologyRcd>().get(tTopo);
159  cabling_->summary(sss, tTopo.product());
160  LogTrace("SiStripRawToDigi") << sss.str();
161  }
162  cacheId_ = cache_id;
163  }
164  }
165 
166 }
167 
void triggerFed(const FEDRawDataCollection &, SiStripEventSummary &, const uint32_t &event)
trigger info
T getParameter(std::string const &) const
EventNumber_t event() const
Definition: EventID.h:41
bool isDebugEnabled()
T getUntrackedParameter(std::string const &, T const &) const
RawToDigiModule(const edm::ParameterSet &)
void terse(std::stringstream &) const
edm::EDGetTokenT< FEDRawDataCollection > token_
def setup(process, global_tag, zero_tesla=False)
Definition: GeneralSetup.py:1
void produce(edm::Event &, const edm::EventSetup &) override
#define nullptr
sistrip classes
void updateCabling(const edm::EventSetup &)
#define LogTrace(id)
const T & get() const
Definition: EventSetup.h:55
void beginRun(const edm::Run &, const edm::EventSetup &) override
edm::EventID id() const
Definition: EventBase.h:60
void summary(std::stringstream &ss, const TrackerTopology *trackerTopo) const
LEFT FOR COMPATIBILITY. SHOULD BE REPLACED BY PRINTSUMMARY.
void createDigis(const SiStripFedCabling &, const FEDRawDataCollection &, SiStripEventSummary &, RawDigis &scope_mode, RawDigis &virgin_raw, RawDigis &proc_raw, Digis &zero_suppr, DetIdCollection &, RawDigis &common_mode)
creates digis
edm::EDCollection< DetId > DetIdCollection
RawToDigiUnpacker * rawToDigi_
const SiStripFedCabling * cabling_
T const * product() const
Definition: ESHandle.h:86
def move(src, dest)
Definition: eostools.py:510
Definition: event.py:1
Definition: Run.h:43