CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes | Static Private Attributes
sistrip::FEDEmulatorModule Class Reference
Inheritance diagram for sistrip::FEDEmulatorModule:
edm::EDProducer edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 FEDEmulatorModule (const edm::ParameterSet &)
 
 ~FEDEmulatorModule () override
 
- Public Member Functions inherited from edm::EDProducer
 EDProducer ()
 
SerialTaskQueueglobalLuminosityBlocksQueue ()
 
SerialTaskQueueglobalRunsQueue ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducer () override
 
- Public Member Functions inherited from edm::ProducerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
std::vector< edm::ProductResolverIndex > const & indiciesForPutProducts (BranchType iBranchType) const
 
 ProducerBase ()
 
std::vector< edm::ProductResolverIndex > const & putTokenIndexToProductResolverIndex () const
 
void registerProducts (ProducerBase *, ProductRegistry *, ModuleDescription const &)
 
std::function< void(BranchDescription const &)> registrationCallback () const
 used by the fwk to register list of products More...
 
void resolvePutIndicies (BranchType iBranchType, ModuleToResolverIndicies const &iIndicies, std::string const &moduleLabel)
 
 ~ProducerBase () noexcept(false) override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESProxyIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::vector< ModuleDescription const * > &modules, ProductRegistry const &preg, std::map< std::string, ModuleDescription const * > const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
bool registeredToConsumeMany (TypeID const &, BranchType) const
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

std::unique_ptr< SiStripRawProcessingAlgorithmsalgorithms_
 object for zero-suppression More...
 
bool byModule_
 
sistrip::FEDEmulator fedEmulator_
 
edm::InputTag spyReorderedDigisTag_
 
edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > spyReorderedDigisToken_
 
edm::InputTag spyVirginRawDigisTag_
 
edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > spyVirginRawDigisToken_
 
SpyUtilities utility_
 

Static Private Attributes

static const char * messageLabel_ = "SiStripFEDEmulatorModule"
 

Additional Inherited Members

- Public Types inherited from edm::EDProducer
typedef EDProducer ModuleType
 
- Public Types inherited from edm::ProducerBase
using ModuleToResolverIndicies = std::unordered_multimap< std::string, std::tuple< edm::TypeID const *, const char *, edm::ProductResolverIndex >>
 
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from edm::EDProducer
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
static bool wantsGlobalLuminosityBlocks ()
 
static bool wantsGlobalRuns ()
 
static bool wantsStreamLuminosityBlocks ()
 
static bool wantsStreamRuns ()
 
- Protected Member Functions inherited from edm::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ProductType , BranchType B = InEvent>
void consumesMany ()
 
void consumesMany (const TypeToGet &id)
 
template<BranchType B>
void consumesMany (const TypeToGet &id)
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 

Detailed Description

Definition at line 57 of file SiStripFEDEmulatorModule.cc.

Constructor & Destructor Documentation

sistrip::FEDEmulatorModule::FEDEmulatorModule ( const edm::ParameterSet iConfig)
explicit

Definition at line 94 of file SiStripFEDEmulatorModule.cc.

References byModule_, fedEmulator_, sistrip::FEDEmulator::initialise(), spyReorderedDigisTag_, spyReorderedDigisToken_, spyVirginRawDigisTag_, and spyVirginRawDigisToken_.

95  : spyReorderedDigisTag_(iConfig.getParameter<edm::InputTag>("SpyReorderedDigisTag")),
96  spyVirginRawDigisTag_(iConfig.getParameter<edm::InputTag>("SpyVirginRawDigisTag")),
97  byModule_(iConfig.getParameter<bool>("ByModule")),
99  spyReorderedDigisToken_ = consumes<edm::DetSetVector<SiStripRawDigi> >(spyReorderedDigisTag_);
100  spyVirginRawDigisToken_ = consumes<edm::DetSetVector<SiStripRawDigi> >(spyVirginRawDigisTag_);
101 
103 
104  if (!byModule_) { //if not by module
105  //the medians will be produced by fed id/channel
106  produces<std::map<uint32_t, std::vector<uint32_t> > >("Medians");
107  produces<edm::DetSetVector<SiStripRawDigi> >("PedestalsOrdered");
108  produces<edm::DetSetVector<SiStripProcessedRawDigi> >("NoisesOrdered");
109  produces<edm::DetSetVector<SiStripRawDigi> >("PedSubtrDigisOrdered");
110  produces<edm::DetSetVector<SiStripRawDigi> >("CMSubtrDigisOrdered");
111  } else { //by module
112  produces<edm::DetSetVector<SiStripRawDigi> >("ModulePedestals");
113  produces<edm::DetSetVector<SiStripProcessedRawDigi> >("ModuleNoises");
114  produces<edm::DetSetVector<SiStripRawDigi> >("PedSubtrModuleDigis");
115  produces<std::map<uint32_t, std::vector<uint32_t> > >("ModuleMedians");
116  produces<edm::DetSetVector<SiStripRawDigi> >("CMSubtrModuleDigis");
117  produces<edm::DetSetVector<SiStripDigi> >("ZSModuleDigis");
118  } //end of by module check
119 
120  } //end of FEDEmulatorModule constructor
T getParameter(std::string const &) const
static std::unique_ptr< SiStripRawProcessingAlgorithms > create(const edm::ParameterSet &)
edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > spyReorderedDigisToken_
void initialise(const bool byModule)
std::unique_ptr< SiStripRawProcessingAlgorithms > algorithms_
object for zero-suppression
edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > spyVirginRawDigisToken_
sistrip::FEDEmulatorModule::~FEDEmulatorModule ( )
override

Definition at line 122 of file SiStripFEDEmulatorModule.cc.

122 {}

Member Function Documentation

void sistrip::FEDEmulatorModule::produce ( edm::Event iEvent,
const edm::EventSetup iSetup 
)
overrideprivate

Definition at line 125 of file SiStripFEDEmulatorModule.cc.

References algorithms_, FedChannelConnection::apvPairNumber(), edm::DetSetVector< T >::begin(), byModule_, gather_cfg::cout, FedChannelConnection::detId(), MillePedeFileConverter_cfg::e, edm::DetSet< T >::empty(), edm::DetSetVector< T >::end(), SiStripFedCabling::fedConnection(), fedEmulator_, sistrip::SpyUtilities::fedIndex(), edm::Event::getByToken(), sistrip::SpyUtilities::getCabling(), sistrip::SpyUtilities::getNoiseHandle(), sistrip::SpyUtilities::getPedestalHandle(), sistrip::FEDEmulator::initialiseModule(), genParticles_cff::map, eostools::move(), FedChannelConnection::nApvPairs(), edm::Handle< T >::product(), edm::Event::put(), sistrip::FEDEmulator::retrieveNoises(), sistrip::FEDEmulator::retrievePedestals(), edm::DetSetVector< T >::size(), spyReorderedDigisToken_, spyVirginRawDigisToken_, sistrip::STRIPS_PER_FEDCH, sistrip::FEDEmulator::subtractCM(), sistrip::FEDEmulator::subtractPedestals(), utility_, cms::Exception::what(), and sistrip::FEDEmulator::zeroSuppress().

Referenced by JSONExport.JsonExport::export(), HTMLExport.HTMLExport::export(), and HTMLExport.HTMLExportStatic::export().

125  {
126  //update cabling and pedestals
127  const SiStripFedCabling* lCabling = utility_.getCabling(iSetup);
130 
131  //initialise the algorithms object for the zero suppression
132  algorithms_->initialize(iSetup);
133 
134  //retrieve the digis
136  try { //to get the digis from the event
137  if (!byModule_) {
138  iEvent.getByToken(spyReorderedDigisToken_, lDigisHandle);
139  } else { //digis supplied by module
140  iEvent.getByToken(spyVirginRawDigisToken_, lDigisHandle);
141  } //end of by module check
142  } catch (const cms::Exception& e) {
143  std::cout << e.what();
144  return;
145  } //end of get digis try
146 
147  const edm::DetSetVector<SiStripRawDigi>* lInputDigis = lDigisHandle.product();
148 
149  unsigned int lNDigis = lInputDigis->size();
150 
151  //define output containers
152  //reserve space, will push_back elements
153  std::vector<edm::DetSetVector<SiStripRawDigi>::detset> pedsData;
154  pedsData.reserve(lNDigis);
155  std::vector<edm::DetSetVector<SiStripProcessedRawDigi>::detset> noiseData;
156  noiseData.reserve(lNDigis);
157  std::vector<edm::DetSetVector<SiStripRawDigi>::detset> pedSubtrData;
158  pedSubtrData.reserve(lNDigis);
159  std::vector<edm::DetSetVector<SiStripRawDigi>::detset> cmSubtrData;
160  cmSubtrData.reserve(lNDigis);
161  //zero suppressed contained - no fixed size (could be empty) so no need to reserve elements.
162  std::vector<edm::DetSet<SiStripDigi> > zsData;
163 
164  //this is a map: no reserve/resize
165  std::map<uint32_t, std::vector<uint32_t> > medsData;
166 
167  edm::DetSetVector<SiStripRawDigi>::const_iterator inputChannel = lInputDigis->begin();
168 
169  for (; inputChannel != lInputDigis->end(); ++inputChannel) { //loop on input channels
170  uint32_t lDetId = inputChannel->detId(); //either fedIndex or detId
171 
172  pedsData.push_back(edm::DetSetVector<SiStripRawDigi>::detset(lDetId));
173  noiseData.push_back(edm::DetSetVector<SiStripProcessedRawDigi>::detset(lDetId));
174  pedSubtrData.push_back(edm::DetSetVector<SiStripRawDigi>::detset(lDetId));
175  cmSubtrData.push_back(edm::DetSetVector<SiStripRawDigi>::detset(lDetId));
176 
177  unsigned int lNStrips = inputChannel->size();
178 
179  //define output digi containers
180  std::vector<SiStripRawDigi>& pedsDetSetData = pedsData.back().data;
181  pedsDetSetData.reserve(lNStrips);
182  std::vector<SiStripProcessedRawDigi>& noiseDetSetData = noiseData.back().data;
183  noiseDetSetData.reserve(lNStrips);
184  std::vector<SiStripRawDigi>& pedSubtrDetSetData = pedSubtrData.back().data;
185  pedSubtrDetSetData.reserve(lNStrips);
186  std::vector<SiStripRawDigi>& cmSubtrDetSetData = cmSubtrData.back().data;
187  cmSubtrDetSetData.reserve(lNStrips);
188  //zero suppressed - slightly different procedure as not fixed size
189  edm::DetSet<SiStripDigi> zsDetSetData(lDetId);
190 
191  //determine the number of APV pairs in the channel
192  uint32_t lNPairs = static_cast<uint32_t>(lNStrips * 1. / sistrip::STRIPS_PER_FEDCH);
193  uint32_t lPair = 0;
194 
195  std::vector<uint32_t> medsDetSetData;
196  medsDetSetData.reserve(lNPairs * 2); //2*number of pairs per module. If not by module, lNPairs = 1...
197 
198  if (!byModule_) { //the input is not stored by module
199  //need to retrieve the proper detId from cabling
200  uint16_t lFedId = 0;
201  uint16_t lFedChannel = 0;
202  sistrip::SpyUtilities::fedIndex(lDetId, lFedId, lFedChannel);
203 
204  const FedChannelConnection& lConnection = lCabling->fedConnection(lFedId, lFedChannel);
205  lDetId = lConnection.detId();
206  lNPairs = lConnection.nApvPairs();
207  lPair = lConnection.apvPairNumber();
208  } //end of by module check
209 
210  fedEmulator_.initialiseModule(lDetId, lNPairs, lPair);
211 
212  //get the pedestal values
213  //stored by module in the database
214  fedEmulator_.retrievePedestals(lPedsHandle);
215  fedEmulator_.retrieveNoises(lNoiseHandle);
216 
217  //last option: fill medians from these ped subtr data
218  //if want something else, need to call a method to fill
219  //the data member medians_ of the class fedEmulator.
221  inputChannel, pedsDetSetData, noiseDetSetData, pedSubtrDetSetData, medsDetSetData, true);
222 
223  fedEmulator_.subtractCM(pedSubtrDetSetData, cmSubtrDetSetData);
224 
225  //fill the median map
226  medsData[inputChannel->detId()] = medsDetSetData;
227 
228  //zero suppress the digis
229  fedEmulator_.zeroSuppress(cmSubtrDetSetData, zsDetSetData, algorithms_);
230  if (!zsDetSetData.empty())
231  zsData.push_back(zsDetSetData);
232 
233  } //loop on input channels
234 
235  std::unique_ptr<edm::DetSetVector<SiStripRawDigi> > lPeds(new edm::DetSetVector<SiStripRawDigi>(pedsData, true));
236  std::unique_ptr<edm::DetSetVector<SiStripProcessedRawDigi> > lNoises(
237  new edm::DetSetVector<SiStripProcessedRawDigi>(noiseData, true));
238 
239  std::unique_ptr<edm::DetSetVector<SiStripRawDigi> > lOutputPedSubtr(
240  new edm::DetSetVector<SiStripRawDigi>(pedSubtrData, true));
241 
242  std::unique_ptr<edm::DetSetVector<SiStripRawDigi> > lOutputCMSubtr(
243  new edm::DetSetVector<SiStripRawDigi>(cmSubtrData, true));
244 
245  std::unique_ptr<std::map<uint32_t, std::vector<uint32_t> > > lMedians(
246  new std::map<uint32_t, std::vector<uint32_t> >(medsData));
247 
248  //zero suppressed digis
249  std::unique_ptr<edm::DetSetVector<SiStripDigi> > lOutputZS(new edm::DetSetVector<SiStripDigi>(zsData));
250 
251  if (!byModule_) {
252  iEvent.put(std::move(lMedians), "Medians");
253  iEvent.put(std::move(lPeds), "PedestalsOrdered");
254  iEvent.put(std::move(lNoises), "NoisesOrdered");
255  iEvent.put(std::move(lOutputPedSubtr), "PedSubtrDigisOrdered");
256  iEvent.put(std::move(lOutputCMSubtr), "CMSubtrDigisOrdered");
257  } else {
258  iEvent.put(std::move(lPeds), "ModulePedestals");
259  iEvent.put(std::move(lNoises), "ModuleNoises");
260  iEvent.put(std::move(lOutputPedSubtr), "PedSubtrModuleDigis");
261  iEvent.put(std::move(lMedians), "ModuleMedians");
262  iEvent.put(std::move(lOutputCMSubtr), "CMSubtrModuleDigis");
263  iEvent.put(std::move(lOutputZS), "ZSModuleDigis");
264  }
265 
266  } //produce method
static void fedIndex(uint32_t aFedIndex, uint16_t &aFedId, uint16_t &aFedChannel)
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:131
FedChannelConnection fedConnection(uint16_t fed_id, uint16_t fed_ch) const
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:525
void subtractPedestals(const edm::DetSetVector< SiStripRawDigi >::const_iterator &inputChannel, std::vector< SiStripRawDigi > &pedsDetSetData, std::vector< SiStripProcessedRawDigi > &noiseDetSetData, std::vector< SiStripRawDigi > &pedSubtrDetSetData, std::vector< uint32_t > &medsDetSetData, const bool fillApvsForCM)
edm::ESHandle< SiStripNoises > getNoiseHandle(const edm::EventSetup &eventSetup)
uint16_t apvPairNumber() const
edm::ESHandle< SiStripPedestals > getPedestalHandle(const edm::EventSetup &eventSetup)
char const * what() const override
Definition: Exception.cc:103
void retrieveNoises(const edm::ESHandle< SiStripNoises > &aHandle)
edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > spyReorderedDigisToken_
const uint32_t & detId() const
Class containning control, module, detector and connection information, at the level of a FED channel...
void initialiseModule(const uint32_t aDetId, const uint32_t aNPairs, const uint32_t aPair)
void subtractCM(const std::vector< SiStripRawDigi > &pedSubtrDetSetData, std::vector< SiStripRawDigi > &cmSubtrDetSetData)
iterator end()
Return the off-the-end iterator.
Definition: DetSetVector.h:325
size_type size() const
Return the number of contained DetSets.
Definition: DetSetVector.h:259
static const uint16_t STRIPS_PER_FEDCH
T const * product() const
Definition: Handle.h:69
std::unique_ptr< SiStripRawProcessingAlgorithms > algorithms_
object for zero-suppression
void zeroSuppress(const std::vector< SiStripRawDigi > &cmSubtrDetSetData, edm::DetSet< SiStripDigi > &zsDetSetData, const std::unique_ptr< SiStripRawProcessingAlgorithms > &algorithms)
const SiStripFedCabling * getCabling(const edm::EventSetup &)
Updates the cabling object from the DB.
const uint16_t & nApvPairs() const
Contains cabling info at the device level, including DetId, APV pair numbers, hardware addresses...
iterator begin()
Return an iterator to the first DetSet.
Definition: DetSetVector.h:314
void retrievePedestals(const edm::ESHandle< SiStripPedestals > &aHandle)
collection_type::const_iterator const_iterator
Definition: DetSetVector.h:102
def move(src, dest)
Definition: eostools.py:511
edm::EDGetTokenT< edm::DetSetVector< SiStripRawDigi > > spyVirginRawDigisToken_

Member Data Documentation

std::unique_ptr<SiStripRawProcessingAlgorithms> sistrip::FEDEmulatorModule::algorithms_
private

object for zero-suppression

Definition at line 79 of file SiStripFEDEmulatorModule.cc.

Referenced by produce().

bool sistrip::FEDEmulatorModule::byModule_
private

Definition at line 73 of file SiStripFEDEmulatorModule.cc.

Referenced by FEDEmulatorModule(), and produce().

sistrip::FEDEmulator sistrip::FEDEmulatorModule::fedEmulator_
private

Definition at line 75 of file SiStripFEDEmulatorModule.cc.

Referenced by FEDEmulatorModule(), and produce().

const char * sistrip::FEDEmulatorModule::messageLabel_ = "SiStripFEDEmulatorModule"
staticprivate

Definition at line 77 of file SiStripFEDEmulatorModule.cc.

edm::InputTag sistrip::FEDEmulatorModule::spyReorderedDigisTag_
private

Definition at line 67 of file SiStripFEDEmulatorModule.cc.

Referenced by FEDEmulatorModule().

edm::EDGetTokenT<edm::DetSetVector<SiStripRawDigi> > sistrip::FEDEmulatorModule::spyReorderedDigisToken_
private

Definition at line 69 of file SiStripFEDEmulatorModule.cc.

Referenced by FEDEmulatorModule(), and produce().

edm::InputTag sistrip::FEDEmulatorModule::spyVirginRawDigisTag_
private

Definition at line 68 of file SiStripFEDEmulatorModule.cc.

Referenced by FEDEmulatorModule().

edm::EDGetTokenT<edm::DetSetVector<SiStripRawDigi> > sistrip::FEDEmulatorModule::spyVirginRawDigisToken_
private

Definition at line 70 of file SiStripFEDEmulatorModule.cc.

Referenced by FEDEmulatorModule(), and produce().

SpyUtilities sistrip::FEDEmulatorModule::utility_
private

Definition at line 82 of file SiStripFEDEmulatorModule.cc.

Referenced by produce().