CMS 3D CMS Logo

List of all members | Public Member Functions | Static Public Member Functions | Private Member Functions | Private Attributes
l1t::L1TDigiToRaw Class Reference
Inheritance diagram for l1t::L1TDigiToRaw:
edm::stream::EDProducer<>

Public Member Functions

 L1TDigiToRaw (const edm::ParameterSet &)
 
 ~L1TDigiToRaw () override
 
- Public Member Functions inherited from edm::stream::EDProducer<>
 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
 
const EDProduceroperator= (const EDProducer &)=delete
 

Static Public Member Functions

static void fillDescriptions (edm::ConfigurationDescriptions &descriptions)
 

Private Member Functions

void beginLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
void beginRun (edm::Run const &, edm::EventSetup const &) override
 
void endLuminosityBlock (edm::LuminosityBlock const &, edm::EventSetup const &) override
 
void endRun (edm::Run const &, edm::EventSetup const &) override
 
void produce (edm::Event &, const edm::EventSetup &) override
 

Private Attributes

bool ctp7_mode_
 
int evtType_
 
int fedId_
 
unsigned fwId_
 
std::unique_ptr< PackingSetupsetup_
 
int slinkHeaderSize_
 
int slinkTrailerSize_
 
std::unique_ptr< PackerTokenstokens_
 

Additional Inherited Members

- Public Types inherited from edm::stream::EDProducer<>
using CacheTypes = CacheContexts< T... >
 
using GlobalCache = typename CacheTypes::GlobalCache
 
using HasAbility = AbilityChecker< T... >
 
using InputProcessBlockCache = typename CacheTypes::InputProcessBlockCache
 
using LuminosityBlockCache = typename CacheTypes::LuminosityBlockCache
 
using LuminosityBlockContext = LuminosityBlockContextT< LuminosityBlockCache, RunCache, GlobalCache >
 
using LuminosityBlockSummaryCache = typename CacheTypes::LuminosityBlockSummaryCache
 
using RunCache = typename CacheTypes::RunCache
 
using RunContext = RunContextT< RunCache, GlobalCache >
 
using RunSummaryCache = typename CacheTypes::RunSummaryCache
 

Detailed Description

Definition at line 47 of file L1TDigiToRaw.cc.

Constructor & Destructor Documentation

◆ L1TDigiToRaw()

L1TDigiToRaw::L1TDigiToRaw ( const edm::ParameterSet config)
explicit

Definition at line 81 of file L1TDigiToRaw.cc.

References gpuPixelDoublets::cc, evtType_, fwId_, l1t::PackingSetupFactory::get(), l1t::PackingSetupFactory::make(), setup_, slinkHeaderSize_, slinkTrailerSize_, AlCaHLTBitMon_QueryRunRegistry::string, and tokens_.

82  : fedId_(config.getParameter<int>("FedId")), ctp7_mode_(config.getUntrackedParameter<bool>("CTP7")) {
83  // Register products
84  produces<FEDRawDataCollection>();
85 
86  fwId_ = config.getParameter<unsigned int>("FWId");
87  evtType_ = config.getUntrackedParameter<int>("eventType", 1);
88 
89  auto cc = edm::ConsumesCollector(consumesCollector());
90 
91  setup_ = PackingSetupFactory::get()->make(config.getParameter<std::string>("Setup"));
92  tokens_ = setup_->registerConsumes(config, cc);
93 
94  slinkHeaderSize_ = config.getUntrackedParameter<int>("lenSlinkHeader", 8);
95  slinkTrailerSize_ = config.getUntrackedParameter<int>("lenSlinkTrailer", 8);
96  }
std::unique_ptr< PackerTokens > tokens_
Definition: L1TDigiToRaw.cc:74
std::unique_ptr< PackingSetup > setup_
Definition: L1TDigiToRaw.cc:73
uint32_t cc[maxCellsPerHit]
Definition: gpuFishbone.h:49
Definition: config.py:1
std::unique_ptr< PackingSetup > make(const std::string &) const
static const PackingSetupFactory * get()

◆ ~L1TDigiToRaw()

L1TDigiToRaw::~L1TDigiToRaw ( )
override

Definition at line 98 of file L1TDigiToRaw.cc.

98 {}

Member Function Documentation

◆ beginLuminosityBlock()

void l1t::L1TDigiToRaw::beginLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 61 of file L1TDigiToRaw.cc.

61 {};

◆ beginRun()

void l1t::L1TDigiToRaw::beginRun ( edm::Run const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 59 of file L1TDigiToRaw.cc.

59 {};

◆ endLuminosityBlock()

void l1t::L1TDigiToRaw::endLuminosityBlock ( edm::LuminosityBlock const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 62 of file L1TDigiToRaw.cc.

62 {};

◆ endRun()

void l1t::L1TDigiToRaw::endRun ( edm::Run const &  ,
edm::EventSetup const &   
)
inlineoverrideprivate

Definition at line 60 of file L1TDigiToRaw.cc.

60 {};

◆ fillDescriptions()

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

Definition at line 239 of file L1TDigiToRaw.cc.

References edm::ConfigurationDescriptions::add(), submitPVResolutionJobs::desc, l1t::PackingSetupFactory::fillDescription(), l1t::PackingSetupFactory::get(), ProducerED_cfi::InputTag, and AlCaHLTBitMon_QueryRunRegistry::string.

239  {
241  desc.add<unsigned int>("FWId", -1);
242  desc.add<int>("FedId");
243  desc.addUntracked<int>("eventType", 1);
244  desc.add<std::string>("Setup");
245  desc.addOptional<edm::InputTag>("InputLabel", edm::InputTag(""));
246  desc.addOptional<edm::InputTag>("InputLabel2", edm::InputTag(""));
247  desc.addUntracked<int>("lenSlinkHeader", 8);
248  desc.addUntracked<int>("lenSlinkTrailer", 8);
249  desc.addUntracked<bool>("CTP7", false);
250 
252 
253  descriptions.add("l1tDigiToRaw", desc);
254  }
void add(std::string const &label, ParameterSetDescription const &psetDescription)
static const PackingSetupFactory * get()
void fillDescription(edm::ParameterSetDescription &) const

◆ produce()

void L1TDigiToRaw::produce ( edm::Event event,
const edm::EventSetup setup 
)
overrideprivate

Definition at line 101 of file L1TDigiToRaw.cc.

References groupFilesInBlocks::block, gather_cfg::blocks, evf::compute_crc(), l1t::CTP7, ctp7_mode_, FEDRawData::data(), evtType_, fedId_, EcalFEDMonitor_cfi::FEDRawDataCollection, fwId_, RecoTauValidation_cfi::header, mps_fire::i, B2GTnPMonitor_cfi::item, svgfig::load(), LogDebug, eostools::move(), jetsAK4_Puppi_cff::payload, FEDRawData::resize(), alignCSCRings::s, FEDTrailer::set(), setup_, findQualityFiles::size, slinkHeaderSize_, slinkTrailerSize_, jetUpdater_cfi::sort, and tokens_.

101  {
102  using namespace edm;
103 
104  LogDebug("L1T") << "Packing data with FED ID " << fedId_;
105 
107 
108  auto bxId = event.bunchCrossing();
109  // Note: L1ID != event ID
110  // See e.g. triggerCount vs. eventNumber
111  // in EventFilter/FEDInterface/interface/FED1024.h
112  // But the trigger count is not stored in cmssw event class
113  auto evtId = event.id().event();
114  auto orbit = event.eventAuxiliary().orbitNumber();
115  LogDebug("L1T") << "Forming FED with metadata bxId=" << bxId << ", l1ID=" << evtId << ", orbit=" << orbit;
116 
117  // Create all the AMC payloads to pack into the AMC13
118  for (const auto& item : setup_->getPackers(fedId_, fwId_)) {
119  auto amc_no = item.first.first;
120  auto board = item.first.second;
121  auto packers = item.second;
122 
123  Blocks block_load;
124  for (const auto& packer : packers) {
125  LogDebug("L1T") << "Adding packed blocks";
126  packer->setBoard(board);
127  auto blocks = packer->pack(event, tokens_.get());
128  block_load.insert(block_load.end(), blocks.begin(), blocks.end());
129  }
130 
131  std::sort(block_load.begin(), block_load.end());
132 
133  LogDebug("L1T") << "Concatenating blocks";
134 
135  std::vector<uint32_t> load32;
136  // CTP7 stores this info in AMC user header
137  if (not ctp7_mode_) {
138  // TODO Infrastructure firmware version. Currently not used.
139  // Would change the way the payload has to be unpacked.
140  load32.push_back(0);
141  load32.push_back(fwId_);
142  }
143  for (const auto& block : block_load) {
144  LogDebug("L1T") << "Adding block " << block.header().getID() << " with size " << block.payload().size();
145  auto load = block.payload();
146 
147 #ifdef EDM_ML_DEBUG
148  std::stringstream s("");
149  s << "Block content:" << std::endl << std::hex << std::setfill('0');
150  for (const auto& word : load)
151  s << std::setw(8) << word << std::endl;
152  LogDebug("L1T") << s.str();
153 #endif
154 
155  if (block.header().getType() == CTP7) {
156  // Header is two words for CTP7, first word is just a magic
157  load32.push_back(0xA110CA7E);
158  }
159  load32.push_back(block.header().raw());
160  load32.insert(load32.end(), load.begin(), load.end());
161  }
162 
163  LogDebug("L1T") << "Converting payload";
164 
165  std::vector<uint64_t> load64;
166  for (unsigned int i = 0; i < load32.size(); i += 2) {
167  uint64_t word = load32[i];
168  if (i + 1 < load32.size()) {
169  word |= static_cast<uint64_t>(load32[i + 1]) << 32;
170  } else {
171  word |= static_cast<uint64_t>(0xffffffff) << 32;
172  }
173  load64.push_back(word);
174  }
175 
176  LogDebug("L1T") << "Creating AMC packet";
177 
178  unsigned amc_user_header = 0;
179  if (ctp7_mode_)
180  amc_user_header = fwId_;
181  amc13.add(amc_no, board, evtId, orbit, bxId, load64, amc_user_header);
182  }
183 
184  std::unique_ptr<FEDRawDataCollection> raw_coll(new FEDRawDataCollection());
185  FEDRawData& fed_data = raw_coll->FEDData(fedId_);
186 
187  unsigned int size = slinkHeaderSize_ + slinkTrailerSize_ + amc13.size() * 8;
188  fed_data.resize(size);
189  unsigned char* payload = fed_data.data();
190  unsigned char* payload_start = payload;
191 
193  header.set(payload, evtType_, evtId, bxId, fedId_);
194 
196 
198  payload += amc13.size() * 8;
199 
200  FEDTrailer trailer(payload);
201  trailer.set(payload, size / 8, evf::compute_crc(payload_start, size), 0, 0);
202 
203  event.put(std::move(raw_coll));
204  }
size
Write out results.
std::unique_ptr< PackerTokens > tokens_
Definition: L1TDigiToRaw.cc:74
std::unique_ptr< PackingSetup > setup_
Definition: L1TDigiToRaw.cc:73
uint64_t word
void resize(size_t newsize)
Definition: FEDRawData.cc:28
unsigned short compute_crc(unsigned char *buffer, unsigned int bufSize)
Definition: CRC16.h:46
std::vector< Block > Blocks
Definition: Block.h:99
unsigned long long uint64_t
Definition: Time.h:13
def load(fileName)
Definition: svgfig.py:547
HLT enums.
const unsigned char * data() const
Return a const pointer to the beginning of the data buffer.
Definition: FEDRawData.cc:24
def move(src, dest)
Definition: eostools.py:511
Definition: event.py:1
#define LogDebug(id)

Member Data Documentation

◆ ctp7_mode_

bool l1t::L1TDigiToRaw::ctp7_mode_
private

Definition at line 76 of file L1TDigiToRaw.cc.

Referenced by produce().

◆ evtType_

int l1t::L1TDigiToRaw::evtType_
private

Definition at line 62 of file L1TDigiToRaw.cc.

Referenced by L1TDigiToRaw(), and produce().

◆ fedId_

int l1t::L1TDigiToRaw::fedId_
private

Definition at line 66 of file L1TDigiToRaw.cc.

Referenced by produce().

◆ fwId_

unsigned l1t::L1TDigiToRaw::fwId_
private

Definition at line 67 of file L1TDigiToRaw.cc.

Referenced by L1TDigiToRaw(), and produce().

◆ setup_

std::unique_ptr<PackingSetup> l1t::L1TDigiToRaw::setup_
private

◆ slinkHeaderSize_

int l1t::L1TDigiToRaw::slinkHeaderSize_
private

Definition at line 70 of file L1TDigiToRaw.cc.

Referenced by L1TDigiToRaw(), and produce().

◆ slinkTrailerSize_

int l1t::L1TDigiToRaw::slinkTrailerSize_
private

Definition at line 71 of file L1TDigiToRaw.cc.

Referenced by L1TDigiToRaw(), and produce().

◆ tokens_

std::unique_ptr<PackerTokens> l1t::L1TDigiToRaw::tokens_
private

Definition at line 74 of file L1TDigiToRaw.cc.

Referenced by L1TDigiToRaw(), and produce().