CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
GEMDigiToRawModule Class Reference

#include <GEMDigiToRawModule.h>

Inheritance diagram for GEMDigiToRawModule:
edm::global::EDProducer< edm::RunCache< GEMROmap > > edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 GEMDigiToRawModule (const edm::ParameterSet &pset)
 Constructor. More...
 
std::shared_ptr< GEMROmapglobalBeginRun (edm::Run const &, edm::EventSetup const &) const override
 
void globalEndRun (edm::Run const &, edm::EventSetup const &) const override
 
void produce (edm::StreamID, edm::Event &, edm::EventSetup const &) const override
 
- Public Member Functions inherited from edm::global::EDProducer< edm::RunCache< GEMROmap > >
 EDProducer ()=default
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsStreamLuminosityBlocks () const final
 
bool wantsStreamRuns () const final
 
- Public Member Functions inherited from edm::global::EDProducerBase
 EDProducerBase ()
 
ModuleDescription const & moduleDescription () const
 
 ~EDProducerBase () 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)
 
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
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) 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

edm::EDGetTokenT< GEMDigiCollectiondigi_token
 
int event_type_
 
bool useDBEMap_
 

Additional Inherited Members

- Public Types inherited from edm::global::EDProducerBase
typedef EDProducerBase 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
 
- 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

on CSCDigiToRawModule

Author
J. Lee - UoS

Definition at line 27 of file GEMDigiToRawModule.h.

Constructor & Destructor Documentation

GEMDigiToRawModule::GEMDigiToRawModule ( const edm::ParameterSet pset)

Constructor.

Definition at line 23 of file GEMDigiToRawModule.cc.

23  :
24  event_type_(pset.getParameter<int>("eventType")),
25  digi_token(consumes<GEMDigiCollection>( pset.getParameter<edm::InputTag>("gemDigi") )),
26  useDBEMap_(pset.getParameter<bool>("useDBEMap"))
27 {
28  produces<FEDRawDataCollection>();
29 }
T getParameter(std::string const &) const
edm::EDGetTokenT< GEMDigiCollection > digi_token

Member Function Documentation

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

Definition at line 31 of file GEMDigiToRawModule.cc.

References edm::ConfigurationDescriptions::add(), and edm::ParameterSetDescription::add().

32 {
34  desc.add<edm::InputTag>("gemDigi", edm::InputTag("simMuonGEMDigis"));
35  desc.add<int>("eventType", 0);
36  desc.add<bool>("useDBEMap", false);
37  descriptions.add("gemPacker", desc);
38 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::shared_ptr< GEMROmap > GEMDigiToRawModule::globalBeginRun ( edm::Run const &  ,
edm::EventSetup const &  iSetup 
) const
override

Definition at line 40 of file GEMDigiToRawModule.cc.

References edm::EventSetup::get(), edm::ESHandle< T >::product(), and useDBEMap_.

41 {
42  auto gemORmap = std::make_shared<GEMROmap>();
43  if (useDBEMap_){
44  edm::ESHandle<GEMELMap> gemEMapRcd;
45  iSetup.get<GEMELMapRcd>().get(gemEMapRcd);
46  auto gemEMap = std::make_unique<GEMELMap>(*(gemEMapRcd.product()));
47  gemEMap->convert(*gemORmap);
48  gemEMap.reset();
49  }
50  else {
51  // no EMap in DB, using dummy
52  auto gemEMap = std::make_unique<GEMELMap>();
53  gemEMap->convertDummy(*gemORmap);
54  gemEMap.reset();
55  }
56  return gemORmap;
57 }
T const * product() const
Definition: ESHandle.h:86
void GEMDigiToRawModule::globalEndRun ( edm::Run const &  ,
edm::EventSetup const &   
) const
inlineoverride

Definition at line 35 of file GEMDigiToRawModule.h.

35 {};
void GEMDigiToRawModule::produce ( edm::StreamID  iID,
edm::Event iEvent,
edm::EventSetup const &   
) const
overridevirtual

<1010:4 Control bits, shoud be 1010

<Bunch Crossing number, 12 bits

<1100:4, Control bits, shoud be 1100

<Event Counter, 8 bits

<Control Flags: 4 bits, Hamming Error/AFULL/SEUlogic/SUEI2C

<1110:4 Control bits, shoud be 1110

<Calculated chip position

<Shows if block is good (control bits, chip ID and CRC checks)

<channels from 1to64

<channels from 65to128

<Check Sum value, 16 bits

<Check Sum value recalculated, 16 bits

Implements edm::global::EDProducerBase.

Definition at line 59 of file GEMDigiToRawModule.cc.

References GEMELMap::amcBX_, GEMROmap::eCoord::amcId, edm::EventBase::bunchCrossing(), GEMDigi::bx(), officialStyle::chan, GEMROmap::channelNum::chNum, FEDRawData::data(), digi_token, RecoEcal_EventContent_cff::ec, edm::EventID::event(), event_type_, nanoDQM_cfi::Flag, GEMROmap::eCoord::gebId, GEMROmap::dCoord::gemDetId, edm::Event::getByToken(), edm::Event::getRun(), mps_fire::i, edm::EventBase::id(), edm::Run::index(), GEMROmap::dCoord::iPhi, LogDebug, GEMELMap::maxChan_, GEMELMap::maxVFatGE11_, GEMELMap::maxVFatGE21_, FEDNumbering::MINGEMFEDID, eostools::move(), GetRecoTauVFromDQM_MC_cff::next, edm::Event::put(), FEDRawData::resize(), GEMDetId::station(), GEMROmap::stripNum::stNum, GEMDigi::strip(), GEMROmap::eCoord::vfatId, GEMROmap::dCoord::vfatType, and w.

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

60 {
61  auto fedRawDataCol = std::make_unique<FEDRawDataCollection>();
62 
63  // Take digis from the event
65  iEvent.getByToken( digi_token, gemDigis );
66 
67  auto gemROMap = runCache(iEvent.getRun().index());
68 
69  std::vector<std::unique_ptr<AMC13Event>> amc13Events;
70  // currently only one FEDRaw
71  amc13Events.reserve(1);
72  {
73  auto amc13Event = std::make_unique<AMC13Event>();
74 
75  uint16_t amcId = 0;
76  uint16_t gebId = 0;
77  std::unique_ptr<AMCdata> amcData;
78  std::unique_ptr<GEBdata> gebData;
79 
80  int mapsize =0;
81  const std::map<GEMROmap::eCoord,GEMROmap::dCoord> *roMapED = gemROMap->getRoMap();
82  for (auto ro=roMapED->begin(); ro!=roMapED->end(); ++ro){
83  mapsize++;
84  GEMROmap::eCoord ec = ro->first;
85  GEMROmap::dCoord dc = ro->second;
86 
87  if (amcId != ec.amcId){
88  amcId = ec.amcId;
89  amcData = std::make_unique<AMCdata>();
90  amcData->setBID(amcId);
91  amcData->setBX(GEMELMap::amcBX_);
92  }
93 
94  if (gebId != ec.gebId){
95  gebId = ec.gebId;
96  gebData = std::make_unique<GEBdata>();
97  gebData->setInputID(gebId);
98  }
99 
100  uint16_t vfatId = ec.vfatId;
101  GEMDetId gemId = dc.gemDetId;
102 
103  for (uint16_t bc = 0; bc < 2*GEMELMap::amcBX_; ++bc){
104  bool hasDigi = false;
105 
106  uint8_t b1010 =0xA;
107  uint16_t BC =bc;
108  uint8_t b1100 =0xC;
109  uint8_t EC =0;
110  uint8_t Flag =0;
111  uint8_t b1110 =0xE;
112  int SlotNumber =0;
113  bool isBlockGood=false;
114  uint64_t lsData =0;
115  uint64_t msData =0;
116  uint16_t crc =0;
117  uint16_t crc_calc =0;
118 
119  GEMDigiCollection::Range range = gemDigis->get(gemId);
120  for (GEMDigiCollection::const_iterator digiIt = range.first; digiIt!=range.second; ++digiIt){
121 
122  const GEMDigi & digi = (*digiIt);
123  if (digi.bx() != bc-GEMELMap::amcBX_) continue;
124 
125  int maxVFat = GEMELMap::maxVFatGE11_;
126  if (gemId.station() == 2) maxVFat = GEMELMap::maxVFatGE21_;
127 
128  int localStrip = digi.strip() - ((dc.iPhi-1)%maxVFat)*GEMELMap::maxChan_;
129  // skip strips not in current vFat
130  if (localStrip < 1 || localStrip > GEMELMap::maxChan_) continue;
131 
132  hasDigi = true;
133 
134  GEMROmap::stripNum stMap = {dc.vfatType, localStrip};
135  GEMROmap::channelNum chMap = gemROMap->hitPosition(stMap);
136 
137  int chan = chMap.chNum;
138  uint64_t oneBit = 0x1;
139  if (chan < 64) lsData = lsData | (oneBit << chan);
140  else msData = msData | (oneBit << (chan-64));
141 
142  LogDebug("GEMDigiToRawModule") <<" vfatId "<<ec.vfatId
143  <<" gemDetId "<< gemId
144  <<" chan "<< chMap.chNum
145  <<" strip "<< stMap.stNum
146  <<" bx "<< digi.bx();
147 
148  }
149 
150  if (!hasDigi) continue;
151  // only make vfat with hits
152  auto vfatData = std::make_unique<VFATdata>(b1010, BC, b1100, EC, Flag, b1110, vfatId, lsData, msData,
153  crc, crc_calc, SlotNumber, isBlockGood);
154  gebData->addVFAT(*vfatData);
155  }
156 
157  bool saveGeb = false;
158  bool saveAMC = false;
159  auto nx = std::next(ro);
160  // last vfat, save
161  if (nx == roMapED->end()){
162  saveGeb = true;
163  saveAMC = true;
164  }
165  else {
166  // check if next vfat is in new geb or amc
167  GEMROmap::eCoord ecNext = nx->first;
168  if (ecNext.gebId != gebId) saveGeb = true;
169  if (ecNext.amcId != amcId) saveAMC = true;
170  }
171 
172  if (!gebData->vFATs()->empty() && saveGeb){
173  gebData->setVwh(gebData->vFATs()->size()*3);
174  amcData->addGEB(*gebData);
175  }
176  if (!amcData->gebs()->empty() && saveAMC){
177  amcData->setGDcount(amcData->gebs()->size());
178  amc13Event->addAMCpayload(*amcData);
179  }
180  }
181 
182  // CDFHeader
183  uint8_t cb5 = 0x5;// control bit, should be 0x5 bits 60-63
184  uint8_t Evt_ty = event_type_;
185  uint32_t LV1_id = iEvent.id().event();
186  uint16_t BX_id = iEvent.bunchCrossing();
187  uint16_t Source_id = FEDNumbering::MINGEMFEDID;
188  amc13Event->setCDFHeader(cb5, Evt_ty, LV1_id, BX_id, Source_id);
189 
190  // AMC13header
191  uint8_t CalTyp = 1;
192  uint8_t nAMC = amc13Event->getAMCpayloads()->size(); // currently only one AMC13Event
193  uint32_t OrN = 2;
194  uint8_t cb0 = 0b0000;// control bit, should be 0b0000
195  amc13Event->setAMC13header(CalTyp, nAMC, OrN, cb0);
196 
197  for (unsigned short i = 0; i < amc13Event->nAMC(); ++i){
198  uint32_t AMC_size = 0;
199  uint8_t Blk_No = 0;
200  uint8_t AMC_No = 0;
201  uint16_t BoardID = 0;
202  amc13Event->addAMCheader(AMC_size, Blk_No, AMC_No, BoardID);
203  }
204 
205  //AMC13 trailer
206  uint32_t CRC_amc13 = 0;
207  uint8_t Blk_NoT = 0;
208  uint8_t LV1_idT = 0;
209  uint16_t BX_idT = BX_id;
210  amc13Event->setAMC13trailer(CRC_amc13, Blk_NoT, LV1_idT, BX_idT);
211  //CDF trailer
212  uint8_t cbA = 0xA; // control bit, should be 0xA bits 60-63
213  uint32_t EvtLength = 0;
214  uint16_t CRC_cdf = 0;
215  amc13Event->setCDFTrailer(cbA, EvtLength, CRC_cdf);
216  amc13Events.emplace_back(std::move(amc13Event));
217  }// finished making amc13Event data
218 
219  // read out amc13Events into fedRawData
220  for (const auto & amc13e : amc13Events){
221  std::vector<uint64_t> words;
222  words.emplace_back(amc13e->getCDFHeader());
223  words.emplace_back(amc13e->getAMC13header());
224 
225  for (const auto & w: *amc13e->getAMCheaders())
226  words.emplace_back(w);
227 
228  for (const auto & amc : *amc13e->getAMCpayloads()){
229  words.emplace_back(amc.getAMCheader1());
230  words.emplace_back(amc.getAMCheader2());
231  words.emplace_back(amc.getGEMeventHeader());
232 
233  for (const auto & geb: *amc.gebs()){
234  words.emplace_back(geb.getChamberHeader());
235 
236  for (const auto & vfat: *geb.vFATs()){
237  words.emplace_back(vfat.get_fw());
238  words.emplace_back(vfat.get_sw());
239  words.emplace_back(vfat.get_tw());
240  }
241 
242  words.emplace_back(geb.getChamberTrailer());
243  }
244 
245  words.emplace_back(amc.getGEMeventTrailer());
246  words.emplace_back(amc.getAMCTrailer());
247  }
248 
249  words.emplace_back(amc13e->getAMC13trailer());
250  words.emplace_back(amc13e->getCDFTrailer());
251 
252  FEDRawData & fedRawData = fedRawDataCol->FEDData(amc13e->source_id());
253 
254  int dataSize = (words.size()) * sizeof(uint64_t);
255  fedRawData.resize(dataSize);
256 
257  uint64_t * w = reinterpret_cast<uint64_t* >(fedRawData.data());
258  for (const auto & word: words) *(w++) = word;
259 
260  LogDebug("GEMDigiToRawModule") <<" words " << words.size();
261  }
262 
263  iEvent.put(std::move(fedRawDataCol));
264 }
#define LogDebug(id)
EventNumber_t event() const
Definition: EventID.h:41
edm::EDGetTokenT< GEMDigiCollection > digi_token
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:136
const double w
Definition: UKUtility.cc:23
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:519
int bunchCrossing() const
Definition: EventBase.h:66
Run const & getRun() const
Definition: Event.cc:114
static const int maxVFatGE21_
Definition: GEMELMap.h:60
uint16_t gebId
Definition: GEMROmap.h:11
static const int maxChan_
Definition: GEMELMap.h:61
void resize(size_t newsize)
Definition: FEDRawData.cc:32
GEMDetId gemDetId
Definition: GEMROmap.h:30
int station() const
Station id : the station is the pair of chambers at same disk.
Definition: GEMDetId.h:64
RunIndex index() const
Definition: Run.cc:24
static const int amcBX_
Definition: GEMELMap.h:62
int bx() const
Definition: GEMDigi.h:27
unsigned long long uint64_t
Definition: Time.h:15
static const int maxVFatGE11_
Definition: GEMELMap.h:59
uint16_t vfatId
Definition: GEMROmap.h:12
std::vector< GEMDigi >::const_iterator const_iterator
chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, "NDC") lumi.SetBorderSize( 0 ) lumi...
edm::EventID id() const
Definition: EventBase.h:60
uint16_t amcId
Definition: GEMROmap.h:10
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:28
std::pair< const_iterator, const_iterator > Range
int strip() const
Definition: GEMDigi.h:26
Definition: AMCSpec.h:8
def move(src, dest)
Definition: eostools.py:510

Member Data Documentation

edm::EDGetTokenT<GEMDigiCollection> GEMDigiToRawModule::digi_token
private

Definition at line 43 of file GEMDigiToRawModule.h.

Referenced by produce().

int GEMDigiToRawModule::event_type_
private

Definition at line 42 of file GEMDigiToRawModule.h.

Referenced by produce().

bool GEMDigiToRawModule::useDBEMap_
private

Definition at line 44 of file GEMDigiToRawModule.h.

Referenced by globalBeginRun().