CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Static Public Member Functions | Private Attributes
GEMRawToDigiModule Class Reference
Inheritance diagram for GEMRawToDigiModule:
edm::global::EDProducer< edm::RunCache< GEMROMapping > > edm::global::EDProducerBase edm::ProducerBase edm::EDConsumerBase edm::ProductRegistryHelper

Public Member Functions

 GEMRawToDigiModule (const edm::ParameterSet &pset)
 Constructor. More...
 
std::shared_ptr< GEMROMappingglobalBeginRun (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< GEMROMapping > >
 EDProducer ()=default
 
 EDProducer (const EDProducer &)=delete
 
bool hasAbilityToProduceInBeginLumis () const final
 
bool hasAbilityToProduceInBeginProcessBlocks () const final
 
bool hasAbilityToProduceInBeginRuns () const final
 
bool hasAbilityToProduceInEndLumis () const final
 
bool hasAbilityToProduceInEndProcessBlocks () const final
 
bool hasAbilityToProduceInEndRuns () const final
 
EDProduceroperator= (const EDProducer &)=delete
 
bool wantsGlobalLuminosityBlocks () const final
 
bool wantsGlobalRuns () const final
 
bool wantsInputProcessBlocks () const final
 
bool wantsProcessBlocks () 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)
 
 ~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
 
std::vector< ESProxyIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex >
const & 
esGetTokenRecordIndicesVector (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::array< std::vector< ModuleDescription const * > *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, 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 selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProxyIndices const &)
 
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
< FEDRawDataCollection
fed_token
 
unsigned int fedIdEnd_
 
unsigned int fedIdStart_
 
bool ge21Off_
 
edm::ESGetToken< GEMeMap,
GEMeMapRcd
gemEMapToken_
 
std::unique_ptr< GEMRawToDigigemRawToDigi_
 
bool keepDAQStatus_
 
bool readMultiBX_
 
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::ProducerBase
ProducesCollector producesCollector ()
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
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<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
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)
 
void resetItemsToGetFrom (BranchType iType)
 

Detailed Description

for gem on CSCDigiToRawModule

Author
J. Lee - UoS

Definition at line 32 of file GEMRawToDigiModule.cc.

Constructor & Destructor Documentation

GEMRawToDigiModule::GEMRawToDigiModule ( const edm::ParameterSet pset)

Constructor.

Definition at line 56 of file GEMRawToDigiModule.cc.

References fedIdEnd_, fedIdStart_, ge21Off_, gemEMapToken_, keepDAQStatus_, FEDNumbering::MAXGEMFEDID, FEDNumbering::MINGE21FEDID, FEDNumbering::MINGEMFEDID, and useDBEMap_.

57  : fed_token(consumes<FEDRawDataCollection>(pset.getParameter<edm::InputTag>("InputLabel"))),
58  useDBEMap_(pset.getParameter<bool>("useDBEMap")),
59  keepDAQStatus_(pset.getParameter<bool>("keepDAQStatus")),
60  readMultiBX_(pset.getParameter<bool>("readMultiBX")),
61  ge21Off_(pset.getParameter<bool>("ge21Off")),
62  fedIdStart_(pset.getParameter<unsigned int>("fedIdStart")),
63  fedIdEnd_(pset.getParameter<unsigned int>("fedIdEnd")),
64  gemRawToDigi_(std::make_unique<GEMRawToDigi>()) {
65  produces<GEMDigiCollection>();
66  if (keepDAQStatus_) {
67  produces<GEMAMC13StatusCollection>("AMC13Status");
68  produces<GEMAMCStatusCollection>("AMCStatus");
69  produces<GEMOHStatusCollection>("OHStatus");
70  produces<GEMVFATStatusCollection>("VFATStatus");
71  }
72  if (useDBEMap_) {
73  gemEMapToken_ = esConsumes<GEMeMap, GEMeMapRcd, edm::Transition::BeginRun>();
74  }
77  } else if (ge21Off_) {
78  edm::LogError("InvalidSettings") << "Turning GE2/1 off requires changing the FEDIDs the GEM unpacker looks at. If "
79  "you wish to set the FEDIDs yourself, don't use the ge21Off switch.";
80  }
81 }
edm::ESGetToken< GEMeMap, GEMeMapRcd > gemEMapToken_
Log< level::Error, false > LogError
edm::EDGetTokenT< FEDRawDataCollection > fed_token
T getParameter(std::string const &) const
Definition: ParameterSet.h:303
std::unique_ptr< GEMRawToDigi > gemRawToDigi_

Member Function Documentation

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

Definition at line 83 of file GEMRawToDigiModule.cc.

References edm::ConfigurationDescriptions::add(), edm::ParameterSetDescription::add(), submitPVResolutionJobs::desc, HLT_FULL_cff::InputTag, FEDNumbering::MAXGEMFEDID, and FEDNumbering::MINGEMFEDID.

83  {
85  desc.add<edm::InputTag>("InputLabel", edm::InputTag("rawDataCollector"));
86  desc.add<bool>("useDBEMap", false);
87  desc.add<bool>("keepDAQStatus", false);
88  desc.add<bool>("readMultiBX", false);
89  desc.add<bool>("ge21Off", false);
90  desc.add<unsigned int>("fedIdStart", FEDNumbering::MINGEMFEDID);
91  desc.add<unsigned int>("fedIdEnd", FEDNumbering::MAXGEMFEDID);
92  descriptions.add("muonGEMDigisDefault", desc);
93 }
ParameterDescriptionBase * add(U const &iLabel, T const &value)
void add(std::string const &label, ParameterSetDescription const &psetDescription)
std::shared_ptr< GEMROMapping > GEMRawToDigiModule::globalBeginRun ( edm::Run const &  ,
edm::EventSetup const &  iSetup 
) const
override

Definition at line 95 of file GEMRawToDigiModule.cc.

References gemEMapToken_, edm::EventSetup::getData(), and useDBEMap_.

95  {
96  auto gemROmap = std::make_shared<GEMROMapping>();
97  if (useDBEMap_) {
98  const auto& eMap = iSetup.getData(gemEMapToken_);
99  auto gemEMap = std::make_unique<GEMeMap>(eMap);
100  gemEMap->convert(*gemROmap);
101  gemEMap.reset();
102  } else {
103  // no EMap in DB, using dummy
104  auto gemEMap = std::make_unique<GEMeMap>();
105  gemEMap->convertDummy(*gemROmap);
106  gemEMap.reset();
107  }
108  return gemROmap;
109 }
edm::ESGetToken< GEMeMap, GEMeMapRcd > gemEMapToken_
void GEMRawToDigiModule::globalEndRun ( edm::Run const &  ,
edm::EventSetup const &   
) const
inlineoverride

Definition at line 40 of file GEMRawToDigiModule.cc.

40 {};
void GEMRawToDigiModule::produce ( edm::StreamID  iID,
edm::Event iEvent,
edm::EventSetup const &  iSetup 
) const
overridevirtual

Implements edm::global::EDProducerBase.

Definition at line 111 of file GEMRawToDigiModule.cc.

References amc, edm::EventBase::bunchCrossing(), GEMDigi::bx(), makePileupJSON::bx, officialStyle::chan, FEDRawData::data(), GEMROMapping::chamDC::detId, GEMROMapping::vfatDC::detId, edm::EventID::event(), fed_token, l1tstage2_dqm_sourceclient-live_cfg::fedId, fedIdEnd_, fedIdStart_, gemRawToDigi_, edm::Event::getByToken(), edm::Event::getRun(), edm::EventBase::id(), edm::Run::index(), GEMAMC13Status::inValidAMC(), GEMOHStatus::inValidVFAT(), GEMAMC13Status::isBad(), GEMOHStatus::isBad(), keepDAQStatus_, GEMROMapping::vfatDC::localPhi, LogDebug, GEMeMap::maxChan_, eostools::move(), GEMVFAT::nChannels, edm::EventBase::orbitNumber(), edm::Event::put(), readMultiBX_, FEDRawData::size(), GEMROMapping::stripNum::stNum, GEMDigi::strip(), GEMROMapping::vfatDC::vfatType, and GEMROMapping::chamDC::vfatVer.

111  {
112  auto outGEMDigis = std::make_unique<GEMDigiCollection>();
113  auto outAMC13Status = std::make_unique<GEMAMC13StatusCollection>();
114  auto outAMCStatus = std::make_unique<GEMAMCStatusCollection>();
115  auto outOHStatus = std::make_unique<GEMOHStatusCollection>();
116  auto outVFATStatus = std::make_unique<GEMVFATStatusCollection>();
117 
118  // Take raw from the event
120  iEvent.getByToken(fed_token, fed_buffers);
121 
122  auto gemROMap = runCache(iEvent.getRun().index());
123 
124  for (unsigned int fedId = fedIdStart_; fedId <= fedIdEnd_; ++fedId) {
125  const FEDRawData& fedData = fed_buffers->FEDData(fedId);
126 
127  int nWords = fedData.size() / sizeof(uint64_t);
128  LogDebug("GEMRawToDigiModule") << "fedId:" << fedId << " words: " << nWords;
129  GEMAMC13Status st_amc13(fedData);
130  if (st_amc13.isBad()) {
131  LogDebug("GEMRawToDigiModule") << st_amc13;
132  if (keepDAQStatus_) {
133  outAMC13Status.get()->insertDigi(fedId, st_amc13);
134  }
135  continue;
136  }
137 
138  const uint64_t* word = reinterpret_cast<const uint64_t*>(fedData.data());
139  auto amc13 = gemRawToDigi_->convertWordToGEMAMC13(word);
140  LogDebug("GEMRawToDigiModule") << "Event bx:" << iEvent.bunchCrossing() << " lv1Id:" << iEvent.id().event()
141  << " orbitNumber:" << iEvent.orbitNumber();
142  LogDebug("GEMRawToDigiModule") << "AMC13 bx:" << amc13->bunchCrossing() << " lv1Id:" << int(amc13->lv1Id())
143  << " orbitNumber:" << amc13->orbitNumber();
144 
145  // Read AMC data
146  for (const auto& amc : *(amc13->getAMCpayloads())) {
147  uint8_t amcNum = amc.amcNum();
148  GEMROMapping::sectorEC amcEC{fedId, amcNum};
149  if (!gemROMap->isValidAMC(amcEC)) {
150  st_amc13.inValidAMC();
151  continue;
152  }
153 
154  GEMAMCStatus st_amc(amc13.get(), amc);
155  if (st_amc.isBad()) {
156  LogDebug("GEMRawToDigiModule") << st_amc;
157  if (keepDAQStatus_) {
158  outAMCStatus.get()->insertDigi(fedId, st_amc);
159  }
160  continue;
161  }
162 
163  uint16_t amcBx = amc.bunchCrossing();
164  LogDebug("GEMRawToDigiModule") << "AMC no.:" << int(amc.amcNum()) << " bx:" << int(amc.bunchCrossing())
165  << " lv1Id:" << int(amc.lv1Id()) << " orbitNumber:" << int(amc.orbitNumber());
166 
167  // Read GEB data
168  for (const auto& optoHybrid : *amc.gebs()) {
169  uint8_t gebId = optoHybrid.inputID();
170  GEMROMapping::chamEC geb_ec{fedId, amcNum, gebId};
171 
172  bool isValidChamber = gemROMap->isValidChamber(geb_ec);
173  if (!isValidChamber) {
174  st_amc.inValidOH();
175  continue;
176  }
177  GEMROMapping::chamDC geb_dc = gemROMap->chamberPos(geb_ec);
178  GEMDetId gemChId = geb_dc.detId;
179 
180  GEMOHStatus st_oh(optoHybrid);
181  if (st_oh.isBad()) {
182  LogDebug("GEMRawToDigiModule") << st_oh;
183  if (keepDAQStatus_) {
184  outOHStatus.get()->insertDigi(gemChId, st_oh);
185  }
186  }
187 
188  //Read vfat data
189  for (auto vfat : *optoHybrid.vFATs()) {
190  // set vfat fw version
191  vfat.setVersion(geb_dc.vfatVer);
192  uint16_t vfatId = vfat.vfatId();
193  GEMROMapping::vfatEC vfat_ec{vfatId, gemChId};
194 
195  if (!gemROMap->isValidChipID(vfat_ec)) {
196  st_oh.inValidVFAT();
197  continue;
198  }
199 
200  GEMROMapping::vfatDC vfat_dc = gemROMap->vfatPos(vfat_ec);
201  vfat.setPhi(vfat_dc.localPhi);
202  GEMDetId gemId = vfat_dc.detId;
203 
204  GEMVFATStatus st_vfat(amc, vfat, vfat.phi(), readMultiBX_);
205  if (st_vfat.isBad()) {
206  LogDebug("GEMRawToDigiModule") << st_vfat;
207  if (keepDAQStatus_) {
208  outVFATStatus.get()->insertDigi(gemId, st_vfat);
209  }
210  continue;
211  }
212 
213  int bx(vfat.bc() - amcBx);
214 
215  for (int chan = 0; chan < GEMVFAT::nChannels; ++chan) {
216  uint8_t chan0xf = 0;
217  if (chan < 64)
218  chan0xf = ((vfat.lsData() >> chan) & 0x1);
219  else
220  chan0xf = ((vfat.msData() >> (chan - 64)) & 0x1);
221 
222  // no hits
223  if (chan0xf == 0)
224  continue;
225 
226  GEMROMapping::channelNum chMap{vfat_dc.vfatType, chan};
227  GEMROMapping::stripNum stMap = gemROMap->hitPos(chMap);
228 
229  int stripId = stMap.stNum + vfat.phi() * GEMeMap::maxChan_;
230 
231  GEMDigi digi(stripId, bx);
232 
233  LogDebug("GEMRawToDigiModule")
234  << "fed: " << fedId << " amc:" << int(amcNum) << " geb:" << int(gebId) << " vfat id:" << int(vfatId)
235  << ",type:" << vfat_dc.vfatType << " id:" << gemId << " ch:" << chMap.chNum << " st:" << digi.strip()
236  << " bx:" << digi.bx();
237 
238  outGEMDigis.get()->insertDigi(gemId, digi);
239 
240  } // end of channel loop
241 
242  if (keepDAQStatus_) {
243  outVFATStatus.get()->insertDigi(gemId, st_vfat);
244  }
245 
246  } // end of vfat loop
247 
248  if (keepDAQStatus_) {
249  outOHStatus.get()->insertDigi(gemChId, st_oh);
250  }
251 
252  } // end of optohybrid loop
253 
254  if (keepDAQStatus_) {
255  outAMCStatus.get()->insertDigi(fedId, st_amc);
256  }
257 
258  } // end of amc loop
259 
260  if (keepDAQStatus_) {
261  outAMC13Status.get()->insertDigi(fedId, st_amc13);
262  }
263 
264  } // end of amc13
265 
266  iEvent.put(std::move(outGEMDigis));
267 
268  if (keepDAQStatus_) {
269  iEvent.put(std::move(outAMC13Status), "AMC13Status");
270  iEvent.put(std::move(outAMCStatus), "AMCStatus");
271  iEvent.put(std::move(outOHStatus), "OHStatus");
272  iEvent.put(std::move(outVFATStatus), "VFATStatus");
273  }
274 }
EventNumber_t event() const
Definition: EventID.h:40
OrphanHandle< PROD > put(std::unique_ptr< PROD > product)
Put a new product.
Definition: Event.h:133
bool getByToken(EDGetToken token, Handle< PROD > &result) const
Definition: Event.h:539
tuple chan
lumi = TPaveText(lowX+0.38, lowY+0.061, lowX+0.45, lowY+0.161, &quot;NDC&quot;) lumi.SetBorderSize( 0 ) lumi...
int bunchCrossing() const
Definition: EventBase.h:64
Run const & getRun() const
Definition: Event.cc:112
static const int maxChan_
Definition: GEMeMap.h:72
size_t size() const
Lenght of the data buffer in bytes.
Definition: FEDRawData.h:45
static const int nChannels
Definition: GEMVFAT.h:116
edm::EDGetTokenT< FEDRawDataCollection > fed_token
uint64_t word
double amc
Definition: hdecay.h:20
def move
Definition: eostools.py:511
RunIndex index() const
Definition: Run.cc:26
int orbitNumber() const
Definition: EventBase.h:65
unsigned long long uint64_t
Definition: Time.h:13
std::unique_ptr< GEMRawToDigi > gemRawToDigi_
edm::EventID id() const
Definition: EventBase.h:59
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:24
#define LogDebug(id)

Member Data Documentation

edm::EDGetTokenT<FEDRawDataCollection> GEMRawToDigiModule::fed_token
private

Definition at line 46 of file GEMRawToDigiModule.cc.

Referenced by produce().

unsigned int GEMRawToDigiModule::fedIdEnd_
private

Definition at line 49 of file GEMRawToDigiModule.cc.

Referenced by GEMRawToDigiModule(), and produce().

unsigned int GEMRawToDigiModule::fedIdStart_
private

Definition at line 49 of file GEMRawToDigiModule.cc.

Referenced by GEMRawToDigiModule(), and produce().

bool GEMRawToDigiModule::ge21Off_
private

Definition at line 48 of file GEMRawToDigiModule.cc.

Referenced by GEMRawToDigiModule().

edm::ESGetToken<GEMeMap, GEMeMapRcd> GEMRawToDigiModule::gemEMapToken_
private

Definition at line 47 of file GEMRawToDigiModule.cc.

Referenced by GEMRawToDigiModule(), and globalBeginRun().

std::unique_ptr<GEMRawToDigi> GEMRawToDigiModule::gemRawToDigi_
private

Definition at line 50 of file GEMRawToDigiModule.cc.

Referenced by produce().

bool GEMRawToDigiModule::keepDAQStatus_
private

Definition at line 48 of file GEMRawToDigiModule.cc.

Referenced by GEMRawToDigiModule(), and produce().

bool GEMRawToDigiModule::readMultiBX_
private

Definition at line 48 of file GEMRawToDigiModule.cc.

Referenced by produce().

bool GEMRawToDigiModule::useDBEMap_
private

Definition at line 48 of file GEMRawToDigiModule.cc.

Referenced by GEMRawToDigiModule(), and globalBeginRun().