CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
HcalDigiToRawuHTR Class Reference
Inheritance diagram for HcalDigiToRawuHTR:
edm::global::EDProducer<> edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 HcalDigiToRawuHTR (const edm::ParameterSet &)
 
virtual void produce (edm::StreamID, edm::Event &, const edm::EventSetup &) const override
 
 ~HcalDigiToRawuHTR ()
 
- Public Member Functions inherited from edm::global::EDProducer<>
 EDProducer ()=default
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
virtual ~EDProducerBase ()
 
- 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 ()
 
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, std::unordered_multimap< std::string, edm::ProductResolverIndex > const &iIndicies, std::string const &moduleLabel)
 
virtual ~ProducerBase () noexcept(false)
 
- 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
 
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
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
virtual ~EDConsumerBase () noexcept(false)
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 
- Static Public Member Functions inherited from edm::global::EDProducerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 

Private Attributes

int _verbosity
 
std::string electronicsMapLabel_
 
bool premix_
 
edm::EDGetTokenT< HBHEDigiCollectiontok_HBHEDigiCollection_
 
edm::EDGetTokenT< HFDigiCollectiontok_HFDigiCollection_
 
edm::EDGetTokenT< HcalDataFrameContainer< QIE10DataFrame > > tok_QIE10DigiCollection_
 
edm::EDGetTokenT< HcalDataFrameContainer< QIE11DataFrame > > tok_QIE11DigiCollection_
 
edm::EDGetTokenT< HcalTrigPrimDigiCollectiontok_TPDigiCollection_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase ModuleType
 
- Public Types inherited from edm::ProducerBase
typedef ProductRegistryHelper::TypeLabelList TypeLabelList
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- 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 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 41 of file HcalDigiToRawuHTR.cc.

Constructor & Destructor Documentation

HcalDigiToRawuHTR::HcalDigiToRawuHTR ( const edm::ParameterSet iConfig)
explicit

Definition at line 63 of file HcalDigiToRawuHTR.cc.

63  :
64  _verbosity(iConfig.getUntrackedParameter<int>("Verbosity", 0)),
65  electronicsMapLabel_(iConfig.getParameter<std::string>("ElectronicsMap")),
68  tok_HBHEDigiCollection_(consumes<HBHEDigiCollection >(iConfig.getParameter<edm::InputTag>("HBHEqie8"))),
69  tok_HFDigiCollection_(consumes<HFDigiCollection>(iConfig.getParameter<edm::InputTag>("HFqie8"))),
70  tok_TPDigiCollection_(consumes<HcalTrigPrimDigiCollection>(iConfig.getParameter<edm::InputTag>("TP"))),
71  premix_(iConfig.getParameter<bool>("premix"))
72 {
73  produces<FEDRawDataCollection>("");
74 }
T getParameter(std::string const &) const
T getUntrackedParameter(std::string const &, T const &) const
edm::EDGetTokenT< HBHEDigiCollection > tok_HBHEDigiCollection_
EDGetTokenT< ProductType > consumes(edm::InputTag const &tag)
edm::EDGetTokenT< HcalDataFrameContainer< QIE10DataFrame > > tok_QIE10DigiCollection_
std::string electronicsMapLabel_
edm::EDGetTokenT< HFDigiCollection > tok_HFDigiCollection_
edm::EDGetTokenT< HcalTrigPrimDigiCollection > tok_TPDigiCollection_
edm::EDGetTokenT< HcalDataFrameContainer< QIE11DataFrame > > tok_QIE11DigiCollection_
HcalDigiToRawuHTR::~HcalDigiToRawuHTR ( )

Definition at line 76 of file HcalDigiToRawuHTR.cc.

76 {}

Member Function Documentation

void HcalDigiToRawuHTR::fillDescriptions ( edm::ConfigurationDescriptions descriptions)
static

Definition at line 267 of file HcalDigiToRawuHTR.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), edm::ConfigurationDescriptions::addDefault(), edm::ParameterSetDescription::addUntracked(), DEFINE_FWK_MODULE, and AlCaHLTBitMon_QueryRunRegistry::string.

267  {
268  //The following says we do not know what parameters are allowed so do no validation
269  // Please change this to state exactly what you do use, even if it is no parameters
271  desc.addUntracked<int>("Verbosity", 0);
272  desc.add<std::string>("ElectronicsMap", "");
273  desc.add<edm::InputTag>("QIE10", edm::InputTag("simHcalDigis", "HFQIE10DigiCollection"));
274  desc.add<edm::InputTag>("QIE11", edm::InputTag("simHcalDigis", "HBHEQIE11DigiCollection"));
275  desc.add<edm::InputTag>("HBHEqie8", edm::InputTag("simHcalDigis"));
276  desc.add<edm::InputTag>("HFqie8", edm::InputTag("simHcalDigis"));
277  desc.add<edm::InputTag>("TP", edm::InputTag("simHcalTriggerPrimitiveDigis"));
278  desc.add<bool>("premix", false);
279  descriptions.add("hcalDigiToRawuHTR",desc);
280  descriptions.addDefault(desc);
281 }
ParameterDescriptionBase * addUntracked(U const &iLabel, T const &value)
void addDefault(ParameterSetDescription const &psetDescription)
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
void HcalDigiToRawuHTR::produce ( edm::StreamID  id,
edm::Event iEvent,
const edm::EventSetup iSetup 
) const
overridevirtual

Definition at line 78 of file HcalDigiToRawuHTR.cc.

References _verbosity, UHTRpacker::addChannel(), edm::SortedCollection< T, SORT >::begin(), edm::EventBase::bunchCrossing(), evf::compute_crc(), QIE11DataFrame::detid(), QIE10DataFrame::detid(), runTauDisplay::eid, electronicsMapLabel_, edm::SortedCollection< T, SORT >::end(), edm::EventID::event(), UHTRpacker::exist(), l1t::stage2::layer2::fedId, UHTRpacker::finalizeHeadTail(), edm::EventSetup::get(), edm::Event::getByToken(), edm::EventBase::id(), edm::HandleBase::isValid(), HcalElectronicsMap::lookup(), HcalElectronicsMap::lookupTrigger(), genParticles_cff::map, FEDNumbering::MINHCALuTCAFEDID, eostools::move(), UHTRpacker::newUHTR(), edm::EventBase::orbitNumber(), premix_, hcalTTPDigis_cfi::presamples, QIE11DataFrame::presamples(), QIE10DataFrame::presamples(), edm::ESHandle< T >::product(), edm::Event::put(), FEDTrailer::set(), FEDHeader::set(), edm::DataFrameContainer::size(), tok_HBHEDigiCollection_, tok_HFDigiCollection_, tok_QIE10DigiCollection_, tok_QIE11DigiCollection_, tok_TPDigiCollection_, EcalDeadCellTriggerPrimitiveFilter_cfi::tpDigiCollection, and UHTRpacker::uhtrs.

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

78  {
79 
80  using namespace edm;
81 
84  const HcalElectronicsMap* readoutMap = item.product();
85 
86  //collection to be inserted into event
87  std::unique_ptr<FEDRawDataCollection> fed_buffers(new FEDRawDataCollection());
88 
89  //
90  // Extracting All the Collections containing useful Info
91  edm::Handle<QIE10DigiCollection> qie10DigiCollection;
92  edm::Handle<QIE11DigiCollection> qie11DigiCollection;
93  edm::Handle<HBHEDigiCollection> hbheDigiCollection;
94  edm::Handle<HFDigiCollection> hfDigiCollection;
96  iEvent.getByToken(tok_QIE10DigiCollection_,qie10DigiCollection);
97  iEvent.getByToken(tok_QIE11DigiCollection_,qie11DigiCollection);
98  iEvent.getByToken(tok_HBHEDigiCollection_,hbheDigiCollection);
99  iEvent.getByToken(tok_HFDigiCollection_,hfDigiCollection);
100  iEvent.getByToken(tok_TPDigiCollection_,tpDigiCollection);
101 
102  // first argument is the fedid (minFEDID+crateId)
103  map<int,unique_ptr<HCalFED> > fedMap;
104 
105  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
106  // QIE10 precision data
107  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
108  UHTRpacker uhtrs;
109  // loop over each digi and allocate memory for each
110  if( qie10DigiCollection.isValid() ){
111  const QIE10DigiCollection& qie10dc=*(qie10DigiCollection);
112  for (unsigned int j=0; j < qie10dc.size(); j++){
113  QIE10DataFrame qiedf = static_cast<QIE10DataFrame>(qie10dc[j]);
114  DetId detid = qiedf.detid();
115  HcalElectronicsId eid(readoutMap->lookup(detid));
116  int crateId = eid.crateId();
117  int slotId = eid.slot();
118  int uhtrIndex = ((slotId&0xF)<<8) | (crateId&0xFF);
119  int presamples = qiedf.presamples();
120 
121  /* Defining a custom index that will encode only
122  the information about the crate and slot of a
123  given channel: crate: bits 0-7
124  slot: bits 8-12 */
125 
126  if( ! uhtrs.exist( uhtrIndex ) ){
127  uhtrs.newUHTR( uhtrIndex , presamples );
128  }
129  uhtrs.addChannel(uhtrIndex,qiedf,readoutMap,_verbosity);
130  }
131  }
132  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
133  // QIE11 precision data
134  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
135  //UHTRpacker uhtrs;
136  // loop over each digi and allocate memory for each
137  if( qie11DigiCollection.isValid() ){
138  const QIE11DigiCollection& qie11dc=*(qie11DigiCollection);
139  for (unsigned int j=0; j < qie11dc.size(); j++){
140  QIE11DataFrame qiedf = static_cast<QIE11DataFrame>(qie11dc[j]);
141  DetId detid = qiedf.detid();
142  HcalElectronicsId eid(readoutMap->lookup(detid));
143  int crateId = eid.crateId();
144  int slotId = eid.slot();
145  int uhtrIndex = ((slotId&0xF)<<8) | (crateId&0xFF);
146  int presamples = qiedf.presamples();
147 
148  if( ! uhtrs.exist(uhtrIndex) ){
149  uhtrs.newUHTR( uhtrIndex , presamples );
150  }
151  uhtrs.addChannel(uhtrIndex,qiedf,readoutMap,_verbosity);
152  }
153  }
154  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
155  // HF (QIE8) precision data
156  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
157  // loop over each digi and allocate memory for each
158  if(hfDigiCollection.isValid()){
159  const HFDigiCollection& qie8hfdc=*(hfDigiCollection);
160  for(HFDigiCollection::const_iterator qiedf=qie8hfdc.begin();qiedf!=qie8hfdc.end();qiedf++){
161  DetId detid = qiedf->id();
162 
163  HcalElectronicsId eid(readoutMap->lookup(detid));
164  int crateId = eid.crateId();
165  int slotId = eid.slot();
166  int uhtrIndex = (crateId&0xFF) | ((slotId&0xF)<<8) ;
167  int presamples = qiedf->presamples();
168 
169  if( ! uhtrs.exist(uhtrIndex) ){
170  uhtrs.newUHTR( uhtrIndex , presamples );
171  }
172  uhtrs.addChannel(uhtrIndex,qiedf,readoutMap,premix_,_verbosity);
173  }
174  }
175  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
176  // HBHE (QIE8) precision data
177  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
178  // loop over each digi and allocate memory for each
179  if(hbheDigiCollection.isValid()){
180  const HBHEDigiCollection& qie8hbhedc=*(hbheDigiCollection);
181  for(HBHEDigiCollection::const_iterator qiedf=qie8hbhedc.begin();qiedf!=qie8hbhedc.end();qiedf++){
182  DetId detid = qiedf->id();
183 
184  HcalElectronicsId eid(readoutMap->lookup(detid));
185  int crateId = eid.crateId();
186  int slotId = eid.slot();
187  int uhtrIndex = (crateId&0xFF) | ((slotId&0xF)<<8) ;
188  int presamples = qiedf->presamples();
189 
190  if( ! uhtrs.exist(uhtrIndex) ){
191  uhtrs.newUHTR( uhtrIndex , presamples );
192  }
193  uhtrs.addChannel(uhtrIndex,qiedf,readoutMap,premix_,_verbosity);
194  }
195  }
196  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
197  // TP data
198  // - - - - - - - - - - - - - - - - - - - - - - - - - - -
199  // loop over each digi and allocate memory for each
200  if(tpDigiCollection.isValid()){
202  for(HcalTrigPrimDigiCollection::const_iterator qiedf=qietpdc.begin();qiedf!=qietpdc.end();qiedf++){
203  DetId detid = qiedf->id();
204  HcalElectronicsId eid(readoutMap->lookupTrigger(detid));
205 
206  int crateId = eid.crateId();
207  int slotId = eid.slot();
208  int uhtrIndex = (crateId&0xFF) | ((slotId&0xF)<<8);
209  int ilink = eid.fiberIndex();
210  int itower = eid.fiberChanId();
211  int channelid = (itower&0xF) | ((ilink&0xF)<<4);
212  int presamples = qiedf->presamples();
213 
214  if( ! uhtrs.exist(uhtrIndex) ){
215  uhtrs.newUHTR( uhtrIndex , presamples );
216  }
217  uhtrs.addChannel(uhtrIndex,qiedf,channelid,_verbosity);
218  }
219  }
220  // -----------------------------------------------------
221  // -----------------------------------------------------
222  // loop over each uHTR and format data
223  // -----------------------------------------------------
224  // -----------------------------------------------------
225  // loop over each uHTR and format data
226  int idxuhtr =-1;
227  for( UHTRpacker::UHTRMap::iterator uhtr = uhtrs.uhtrs.begin() ; uhtr != uhtrs.uhtrs.end() ; ++uhtr){
228 
229  idxuhtr ++;
230 
231  uint64_t crateId = (uhtr->first)&0xFF;
232  uint64_t slotId = (uhtr->first&0xF00)>>8;
233 
234  uhtrs.finalizeHeadTail(&(uhtr->second),_verbosity);
235  int fedId = FEDNumbering::MINHCALuTCAFEDID + crateId;
236  if( fedMap.find(fedId) == fedMap.end() ){
237  /* QUESTION: where should the orbit number come from? */
238  fedMap[fedId] = std::unique_ptr<HCalFED>(new HCalFED(fedId,iEvent.id().event(),iEvent.orbitNumber(),iEvent.bunchCrossing()));
239  }
240  fedMap[fedId]->addUHTR(uhtr->second,crateId,slotId);
241  }// end loop over uhtr containers
242 
243  /* ------------------------------------------------------
244  ------------------------------------------------------
245  putting together the FEDRawDataCollection
246  ------------------------------------------------------
247  ------------------------------------------------------ */
248  for( map<int,unique_ptr<HCalFED> >::iterator fed = fedMap.begin() ; fed != fedMap.end() ; ++fed ){
249 
250  int fedId = fed->first;
251 
252  auto & rawData = fed_buffers->FEDData(fedId);
253  fed->second->formatFEDdata(rawData);
254 
255  FEDHeader hcalFEDHeader(rawData.data());
256  hcalFEDHeader.set(rawData.data(), 1, iEvent.id().event(), iEvent.bunchCrossing(), fedId);
257  FEDTrailer hcalFEDTrailer(rawData.data()+(rawData.size()-8));
258  hcalFEDTrailer.set(rawData.data()+(rawData.size()-8), rawData.size()/8, evf::compute_crc(rawData.data(),rawData.size()), 0, 0);
259 
260  }// end loop over FEDs with data
261 
262  iEvent.put(std::move(fed_buffers));
263 
264 }
DetId detid() const
Get the detector id.
EventNumber_t event() const
Definition: EventID.h:41
edm::EDGetTokenT< HBHEDigiCollection > tok_HBHEDigiCollection_
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:122
void finalizeHeadTail(uhtrData *uhtr, bool verbosity)
Definition: PackerHelp.h:476
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:460
int presamples() const
for backward compatibility
uhtrData * newUHTR(int uhtrIndex, int ps=0, int orn=0, int bcn=0, uint64_t evt=0)
Definition: PackerHelp.h:435
std::vector< HFDataFrame >::const_iterator const_iterator
int bunchCrossing() const
Definition: EventBase.h:66
edm::EDGetTokenT< HcalDataFrameContainer< QIE10DataFrame > > tok_QIE10DigiCollection_
std::string electronicsMapLabel_
static void set(unsigned char *header, int evt_ty, int lvl1_ID, int bx_ID, int source_ID, int version=0, bool H=false)
Set all fields in the header.
Definition: FEDHeader.cc:40
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
Definition: CRC16.h:67
edm::EDGetTokenT< HFDigiCollection > tok_HFDigiCollection_
edm::DataFrame::id_type id() const
DetId detid() const
Get the detector id.
int orbitNumber() const
Definition: EventBase.h:67
bool isValid() const
Definition: HandleBase.h:74
const_iterator end() const
UHTRMap uhtrs
Definition: PackerHelp.h:314
Definition: DetId.h:18
unsigned long long uint64_t
Definition: Time.h:15
const T & get() const
Definition: EventSetup.h:55
void addChannel(int uhtrIndex, edm::SortedCollection< HFDataFrame >::const_iterator &qiedf, const HcalElectronicsMap *readoutMap, bool premix, int verbosity=0)
Definition: PackerHelp.h:499
int presamples() const
for backward compatibility
bool exist(int uhtrIndex)
Definition: PackerHelp.h:345
edm::EventID id() const
Definition: EventBase.h:60
HLT enums.
const DetId lookupTrigger(HcalElectronicsId fId) const
brief lookup the trigger logical detid associated with the given electronics id
T const * product() const
Definition: ESHandle.h:86
Readout chain identification for Hcal.
edm::EDGetTokenT< HcalTrigPrimDigiCollection > tok_TPDigiCollection_
const DetId lookup(HcalElectronicsId fId) const
lookup the logical detid associated with the given electronics id
def move(src, dest)
Definition: eostools.py:510
const_iterator begin() const
edm::EDGetTokenT< HcalDataFrameContainer< QIE11DataFrame > > tok_QIE11DigiCollection_

Member Data Documentation

int HcalDigiToRawuHTR::_verbosity
private

Definition at line 51 of file HcalDigiToRawuHTR.cc.

Referenced by produce().

std::string HcalDigiToRawuHTR::electronicsMapLabel_
private

Definition at line 52 of file HcalDigiToRawuHTR.cc.

Referenced by produce().

bool HcalDigiToRawuHTR::premix_
private

Definition at line 60 of file HcalDigiToRawuHTR.cc.

Referenced by produce().

edm::EDGetTokenT<HBHEDigiCollection> HcalDigiToRawuHTR::tok_HBHEDigiCollection_
private

Definition at line 56 of file HcalDigiToRawuHTR.cc.

Referenced by produce().

edm::EDGetTokenT<HFDigiCollection> HcalDigiToRawuHTR::tok_HFDigiCollection_
private

Definition at line 57 of file HcalDigiToRawuHTR.cc.

Referenced by produce().

edm::EDGetTokenT<HcalDataFrameContainer<QIE10DataFrame> > HcalDigiToRawuHTR::tok_QIE10DigiCollection_
private

Definition at line 54 of file HcalDigiToRawuHTR.cc.

Referenced by produce().

edm::EDGetTokenT<HcalDataFrameContainer<QIE11DataFrame> > HcalDigiToRawuHTR::tok_QIE11DigiCollection_
private

Definition at line 55 of file HcalDigiToRawuHTR.cc.

Referenced by produce().

edm::EDGetTokenT<HcalTrigPrimDigiCollection> HcalDigiToRawuHTR::tok_TPDigiCollection_
private

Definition at line 58 of file HcalDigiToRawuHTR.cc.

Referenced by produce().