CMS 3D CMS Logo

OmtfUnpacker.cc
Go to the documentation of this file.
1 // system include files
2 #include <iostream>
3 #include <iomanip>
4 #include <sstream>
5 #include <bitset>
6 #include <string>
7 
8 // user include files
14 
18 
24 
27 
34 
40 
45 
46 namespace omtf {
47 
49  public:
51 
52  ~OmtfUnpacker() override {}
53 
54  static void fillDescriptions(edm::ConfigurationDescriptions& descriptions);
55 
56  void produce(edm::Event& ev, const edm::EventSetup& es) override;
57 
58  void beginRun(const edm::Run& run, const edm::EventSetup& es) override;
59 
60  private:
61  unsigned long theEventCounter;
62 
64 
69 
72 
74  };
75 
77  theOutputTag = pset.getParameter<std::string>("outputTag");
78 
79  produces<RPCDigiCollection>(theOutputTag);
80  produces<CSCCorrelatedLCTDigiCollection>(theOutputTag);
81  produces<l1t::RegionalMuonCandBxCollection>(theOutputTag);
82  produces<L1MuDTChambPhContainer>(theOutputTag);
83  produces<L1MuDTChambThContainer>(theOutputTag);
84 
85  theSkipDt = pset.getParameter<bool>("skipDt");
86  theSkipRpc = pset.getParameter<bool>("skipRpc");
87  theSkipCsc = pset.getParameter<bool>("skipCsc");
88  theSkipMuon = pset.getParameter<bool>("skipMuon");
89 
90  theFedDataToken = consumes<FEDRawDataCollection>(pset.getParameter<edm::InputTag>("inputLabel"));
91  }
92 
95  desc.add<edm::InputTag>("inputLabel", edm::InputTag("rawDataCollector"));
96  desc.add<bool>("skipRpc", false);
97  desc.add<bool>("skipCsc", false);
98  desc.add<bool>("skipDt", false);
99  desc.add<bool>("skipMuon", false);
100  desc.add<bool>("useRpcConnectionFile", false);
101  desc.add<std::string>("rpcConnectionFile", "");
102  desc.add<std::string>("outputTag", "");
103  descriptions.add("omtfUnpacker", desc);
104  }
105 
107  //
108  // rpc unpacker
109  //
110  if (!theSkipRpc) {
111  if (theConfig.getParameter<bool>("useRpcConnectionFile")) {
113  } else {
114  theRpcUnpacker.init(es);
115  }
116  }
117 
118  //
119  // csc unpacker
120  //
121  if (!theSkipCsc)
123  }
124 
127  theEventCounter++;
128  if (debug)
129  LogDebug("OmtfUnpacker::produce") << "Beginning To Unpack Event: " << theEventCounter;
130 
131  edm::Handle<FEDRawDataCollection> allFEDRawData;
132  event.getByToken(theFedDataToken, allFEDRawData);
133 
134  auto producedRPCDigis = std::make_unique<RPCDigiCollection>();
135  auto producedCscLctDigis = std::make_unique<CSCCorrelatedLCTDigiCollection>();
136  auto producedMuonDigis = std::make_unique<l1t::RegionalMuonCandBxCollection>();
137  producedMuonDigis->setBXRange(-3, 4);
138  auto producedDTPhDigis = std::make_unique<L1MuDTChambPhContainer>();
139  auto producedDTThDigis = std::make_unique<L1MuDTChambThContainer>();
140  std::vector<L1MuDTChambPhDigi> phi_Container;
141  std::vector<L1MuDTChambThDigi> the_Container;
142 
143  for (int fedId = 1380; fedId <= 1381; ++fedId) {
144  const FEDRawData& rawData = allFEDRawData->FEDData(fedId);
145  unsigned int nWords = rawData.size() / sizeof(Word64);
146  LogTrace("") << "FED : " << fedId << " words: " << nWords;
147  if (nWords == 0)
148  continue;
149 
150  //
151  // FED header
152  //
153  const Word64* header = reinterpret_cast<const Word64*>(rawData.data());
154  FEDHeader fedHeader(reinterpret_cast<const unsigned char*>(header));
155  if (!fedHeader.check()) {
156  LogTrace("") << " ** PROBLEM **, header.check() failed, break";
157  break;
158  }
159  if (fedHeader.sourceID() != fedId) {
160  LogTrace("") << " ** PROBLEM **, fedHeader.sourceID() != fedId"
161  << "fedId = " << fedId << " sourceID=" << fedHeader.sourceID();
162  }
163  int triggerBX = fedHeader.bxID();
164  if (debug) {
165  std::ostringstream str;
166  str << " header: " << *reinterpret_cast<const std::bitset<64>*>(header) << std::endl;
167  str << " header triggerType: " << fedHeader.triggerType() << std::endl;
168  str << " header lvl1ID: " << fedHeader.lvl1ID() << std::endl;
169  str << " header bxID: " << fedHeader.bxID() << std::endl;
170  str << " header sourceID: " << fedHeader.sourceID() << std::endl;
171  str << " header version: " << fedHeader.version() << std::endl;
172  str << " header more : " << fedHeader.moreHeaders() << std::endl;
173  str << " triggerBx " << triggerBX << std::endl;
174  LogTrace("") << str.str();
175  }
176 
177  //
178  // FED trailer
179  //
180  const Word64* trailer = reinterpret_cast<const Word64*>(rawData.data()) + (nWords - 1);
181  trailer++;
182  bool moreTrailers = true;
183  while (moreTrailers) {
184  trailer--;
185  FEDTrailer fedTrailer(reinterpret_cast<const unsigned char*>(trailer));
186  if (!fedTrailer.check()) {
187  if (debug)
188  LogTrace("") << " ** PROBLEM **, trailer.check() failed, break";
189  break;
190  }
191  if (fedTrailer.fragmentLength() != nWords) {
192  if (debug)
193  LogTrace("") << " ** PROBLEM **, fedTrailer.fragmentLength()!= nWords, break";
194  break;
195  }
196  moreTrailers = fedTrailer.moreTrailers();
197  if (debug) {
198  std::ostringstream str;
199  str << " trailer: " << *reinterpret_cast<const std::bitset<64>*>(trailer) << std::endl;
200  str << " trailer lenght: " << fedTrailer.fragmentLength() << std::endl;
201  str << " trailer crc: " << fedTrailer.crc() << std::endl;
202  str << " trailer evtStatus: " << fedTrailer.evtStatus() << std::endl;
203  str << " trailer ttsBits: " << fedTrailer.ttsBits() << std::endl;
204  LogTrace("") << str.str();
205  }
206  }
207 
208  //
209  // dump all FED data for debug
210  //
211  if (debug) {
212  std::ostringstream str;
213  for (const Word64* word = header + 1; word != trailer; word++) {
214  str << " data: " << *reinterpret_cast<const std::bitset<64>*>(word) << std::endl;
215  }
216  LogTrace("") << str.str();
217  }
218 
219  //
220  // AMC13 header
221  //
222  const Word64* headerAmc13raw = header + 1;
223  amc13::Header headerAmc13(headerAmc13raw);
224  if (debug) {
225  std::ostringstream str;
226  str << " headerAMC13: " << *reinterpret_cast<const std::bitset<64>*>(headerAmc13raw) << std::endl;
227  str << " amc13 check: " << headerAmc13.check() << std::endl;
228  str << " amc13 format: " << headerAmc13.getFormatVersion() << std::endl;
229  str << " amc13 nAMCs: " << headerAmc13.getNumberOfAMCs() << std::endl;
230  str << " amc13 orbit: " << headerAmc13.getOrbitNumber() << std::endl;
231  LogTrace("") << str.str();
232  }
233  //unsigned int nAMCs = headerAmc13.getNumberOfAMCs();
234  //for (unsigned int iAMC = 0; iAMC <nAMCs; iAMC++) {
235  // const Word64* raw = header+1 +(iAMC+1);
236  //}
237 
238  //
239  // AMC13 trailer
240  //
241  const Word64* trailerAmc13raw = trailer - 1;
242  amc13::Trailer trailerAmc13(trailerAmc13raw);
243  if (debug) {
244  std::ostringstream str;
245  str << " trailerAMC13: " << *reinterpret_cast<const std::bitset<64>*>(trailerAmc13raw) << std::endl;
246  str << " crc: " << trailerAmc13.getCRC() << std::endl;
247  str << " block: " << trailerAmc13.getBlock() << std::endl;
248  str << " LV1ID: " << trailerAmc13.getLV1ID() << std::endl;
249  str << " BX: " << trailerAmc13.getBX() << std::endl;
250  LogTrace("") << str.str();
251  }
252 
253  //
254  // get AMC13 payload (-> AMC's data)
255  //
256  amc13::Packet packetAmc13;
257  if (!packetAmc13.parse(header, header + 1, nWords - 2, fedHeader.lvl1ID(), fedHeader.bxID(), true, false)) {
258  edm::LogError("OMTF") << "Could not extract AMC13 Packet.";
259  return;
260  }
261  //LogTrace("") <<"AMC13 Packet: "<< packetAmc13.blocks() << " size "<<packetAmc13.size() << std::endl;
262 
263  //
264  // loop over AMC's
265  //
266  unsigned int blockNum = 0;
267  for (auto amc : packetAmc13.payload()) {
268  amc::BlockHeader bh = amc.blockHeader();
269  if (debug) {
270  std::ostringstream str;
271  str << " ----------- #" << blockNum++ << std::endl;
272  str << " blockheader: " << std::bitset<64>(bh.raw()) << std::endl;
273  str << " boardID: " << bh.getBoardID() << std::endl;
274  str << " amcNumber: " << bh.getAMCNumber() << std::endl;
275  str << " size: " << bh.getSize(); // << std::endl;
276  LogTrace("") << str.str();
277  }
278 
279  //
280  // AMC header
281  //
282  amc::Header headerAmc = amc.header();
283  if (debug) {
284  std::ostringstream str;
285  str << " AMC header[0]: " << std::bitset<64>(headerAmc.raw()[0]) << std::endl;
286  str << " AMC header[1]: " << std::bitset<64>(headerAmc.raw()[1]) << std::endl;
287  str << " AMC number: " << headerAmc.getAMCNumber(); // << std::endl;
288  LogTrace("") << str.str();
289  }
290 
291  //
292  // AMC trailer
293  //
294  //amc::Trailer trailerAmc = amc.trailer(); //this is the expected way but does not work
295  amc::Trailer trailerAmc(amc.data().get() + amc.size() -
296  1); //FIXME: the above is prefered but this works (CMSSW900)
297  if (debug) {
298  std::ostringstream str;
299  str << " AMC trailer: " << std::bitset<64>(trailerAmc.raw()) << std::endl;
300  str << " getLV1ID: " << trailerAmc.getLV1ID() << std::endl;
301  str << " size: " << trailerAmc.getSize() << std::endl;
302  LogTrace("") << str.str();
303  }
304 
305  //
306  // AMC payload
307  //
308  const auto& payload64 = amc.data();
309  const Word64* word = payload64.get();
310  for (unsigned int iWord = 1; iWord <= amc.size(); iWord++, word++) {
311  if (iWord <= 2)
312  continue; // two header words for each AMC
313  if (iWord == amc.size())
314  continue; // trailer for each AMC
315 
316  LogTrace("") << " payload: " << *reinterpret_cast<const std::bitset<64>*>(word);
317  DataWord64::Type recordType = DataWord64::type(*word);
318 
319  unsigned int fedId = fedHeader.sourceID();
320  unsigned int amcId = bh.getAMCNumber() / 2 + 1; // in OMTF convertsion 1-6
321  //
322  // RPC data
323  //
324  if (DataWord64::rpc == recordType && !theSkipRpc) {
325  theRpcUnpacker.unpack(triggerBX, fedId, amcId, RpcDataWord64(*word), producedRPCDigis.get());
326  }
327 
328  //
329  // CSC data
330  //
331  if (DataWord64::csc == recordType && !theSkipCsc) {
332  theCscUnpacker.unpack(fedId, amcId, CscDataWord64(*word), producedCscLctDigis.get());
333  }
334 
335  //
336  // DT data
337  //
338  if (DataWord64::dt == recordType && !theSkipDt) {
339  theDtUnpacker.unpack(fedId, amcId, DtDataWord64(*word), phi_Container, the_Container);
340  }
341 
342  //
343  // OMTF (muon) data
344  //
345  if (DataWord64::omtf == recordType && !theSkipMuon) {
346  theMuonUnpacker.unpack(fedId, amcId, MuonDataWord64(*word), producedMuonDigis.get());
347  }
348  }
349  }
350  }
351  event.put(std::move(producedRPCDigis), theOutputTag);
352  event.put(std::move(producedCscLctDigis), theOutputTag);
353  event.put(std::move(producedMuonDigis), theOutputTag);
354  producedDTPhDigis->setContainer(phi_Container);
355  event.put(std::move(producedDTPhDigis), theOutputTag);
356  producedDTThDigis->setContainer(the_Container);
357  event.put(std::move(producedDTThDigis), theOutputTag);
358  }
359 
360 } // namespace omtf
361 
362 using namespace omtf;
FEDNumbering.h
omtf::DtUnpacker::unpack
void unpack(unsigned int fed, unsigned int amc, const DtDataWord64 &raw, std::vector< L1MuDTChambPhDigi > &phi_Container, std::vector< L1MuDTChambThDigi > &the_Container)
Definition: OmtfDtUnpacker.cc:9
omtf::OmtfUnpacker::theSkipCsc
bool theSkipCsc
Definition: OmtfUnpacker.cc:73
CSCCorrelatedLCTDigiCollection.h
edm::ParameterSetDescription::add
ParameterDescriptionBase * add(U const &iLabel, T const &value)
Definition: ParameterSetDescription.h:95
amc13::Header
Definition: AMC13Spec.h:15
OmtfMuonUnpacker.h
amc13::Packet::parse
bool parse(const uint64_t *start, const uint64_t *data, unsigned int size, unsigned int lv1, unsigned int bx, bool legacy_mc=false, bool mtf7_mode=false)
Definition: AMC13Spec.cc:60
MessageLogger.h
omtf::OmtfUnpacker::~OmtfUnpacker
~OmtfUnpacker() override
Definition: OmtfUnpacker.cc:52
omtf::OmtfUnpacker
Definition: OmtfUnpacker.cc:48
amc13::Trailer::getBlock
unsigned int getBlock() const
Definition: AMC13Spec.h:48
ESHandle.h
amc::Trailer
Definition: AMCSpec.h:102
omtf::OmtfUnpacker::OmtfUnpacker
OmtfUnpacker(const edm::ParameterSet &pset)
Definition: OmtfUnpacker.cc:76
edm::Run
Definition: Run.h:45
edm::MessageDrop::debugEnabled
bool debugEnabled
Definition: MessageDrop.h:103
omtf::OmtfUnpacker::theSkipRpc
bool theSkipRpc
Definition: OmtfUnpacker.cc:73
edm::EDGetTokenT< FEDRawDataCollection >
amc::Header
Definition: AMCSpec.h:59
amc13::Header::check
bool check() const
Definition: AMC13Spec.cc:19
omtf::OmtfUnpacker::produce
void produce(edm::Event &ev, const edm::EventSetup &es) override
Definition: OmtfUnpacker.cc:125
FEDTrailer::crc
uint16_t crc() const
Cyclic Redundancy Code of the event fragment including header and trailer.
Definition: FEDTrailer.cc:15
edm::ParameterSetDescription
Definition: ParameterSetDescription.h:52
l1tstage2_dqm_sourceclient-live_cfg.rawData
rawData
Definition: l1tstage2_dqm_sourceclient-live_cfg.py:156
omtf::OmtfUnpacker::theCscUnpacker
CscUnpacker theCscUnpacker
Definition: OmtfUnpacker.cc:66
OmtfCscDataWord64.h
omtf::OmtfUnpacker::beginRun
void beginRun(const edm::Run &run, const edm::EventSetup &es) override
Definition: OmtfUnpacker.cc:106
omtf::Word64
uint64_t Word64
Definition: OmtfDataWord64.h:11
omtf::DataWord64::csc
Definition: OmtfDataWord64.h:16
EDProducer.h
omtf::OmtfUnpacker::theDtUnpacker
DtUnpacker theDtUnpacker
Definition: OmtfUnpacker.cc:67
omtf::OmtfUnpacker::theSkipMuon
bool theSkipMuon
Definition: OmtfUnpacker.cc:73
omtf::DataWord64::omtf
Definition: OmtfDataWord64.h:16
FEDTrailer::evtStatus
uint8_t evtStatus() const
Event fragment status information.
Definition: FEDTrailer.cc:17
L1MuDTChambThContainer.h
FEDRawData.h
amc13::Header::getNumberOfAMCs
unsigned int getNumberOfAMCs() const
Definition: AMC13Spec.h:25
omtf::CscUnpacker::unpack
void unpack(unsigned int fed, unsigned int amc, const CscDataWord64 &raw, CSCCorrelatedLCTDigiCollection *prod)
Definition: OmtfCscUnpacker.cc:15
edm::Handle
Definition: AssociativeIterator.h:50
amc13::Trailer
Definition: AMC13Spec.h:42
omtf::CscUnpacker::init
void init()
Definition: OmtfCscUnpacker.cc:13
singleTopDQM_cfi.setup
setup
Definition: singleTopDQM_cfi.py:37
amc13::Packet::payload
std::vector< amc::Packet > payload() const
Definition: AMC13Spec.h:92
FEDRawData
Definition: FEDRawData.h:19
AMC13Spec.h
FEDTrailer::check
bool check() const
Check that the trailer is OK.
Definition: FEDTrailer.cc:45
word
uint64_t word
Definition: CTPPSTotemDataFormatter.cc:29
omtf::DtUnpacker
Definition: OmtfDtUnpacker.h:14
edm::FileInPath
Definition: FileInPath.h:64
MakerMacros.h
debug
#define debug
Definition: HDRShower.cc:19
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
edm::ConfigurationDescriptions::add
void add(std::string const &label, ParameterSetDescription const &psetDescription)
Definition: ConfigurationDescriptions.cc:57
omtf::MuonUnpacker::unpack
void unpack(unsigned int fed, unsigned int amc, const MuonDataWord64 &raw, l1t::RegionalMuonCandBxCollection *muColl)
Definition: OmtfMuonUnpacker.cc:9
omtf::OmtfUnpacker::theMuonUnpacker
MuonUnpacker theMuonUnpacker
Definition: OmtfUnpacker.cc:68
amc13::Packet
Definition: AMC13Spec.h:69
str
#define str(s)
Definition: TestProcessor.cc:48
omtf::OmtfUnpacker::fillDescriptions
static void fillDescriptions(edm::ConfigurationDescriptions &descriptions)
Definition: OmtfUnpacker.cc:93
OmtfDtUnpacker.h
omtf::OmtfUnpacker::theSkipDt
bool theSkipDt
Definition: OmtfUnpacker.cc:73
amc13::Trailer::getCRC
unsigned int getCRC() const
Definition: AMC13Spec.h:47
FEDRawDataCollection::FEDData
const FEDRawData & FEDData(int fedid) const
retrieve data for fed
Definition: FEDRawDataCollection.cc:19
edm::ConfigurationDescriptions
Definition: ConfigurationDescriptions.h:28
amc::BlockHeader::raw
uint64_t raw() const
Definition: AMCSpec.h:23
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
omtf::DataWord64::dt
Definition: OmtfDataWord64.h:16
HLT_2018_cff.InputTag
InputTag
Definition: HLT_2018_cff.py:79016
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
OmtfRpcDataWord64.h
edm::ParameterSet
Definition: ParameterSet.h:36
edm::LogError
Definition: MessageLogger.h:183
FEDTrailer
Definition: FEDTrailer.h:14
Event.h
omtf::MuonDataWord64
Definition: OmtfMuonDataWord64.h:8
omtf::CscUnpacker
Definition: OmtfCscUnpacker.h:18
omtf::RpcUnpacker
Definition: OmtfRpcUnpacker.h:21
OmtfDtDataWord64.h
FEDTrailer::moreTrailers
bool moreTrailers() const
Definition: FEDTrailer.cc:21
omtf::DtDataWord64
Definition: OmtfDtDataWord64.h:9
FEDRawDataCollection.h
omtf::DataWord64::type
Type type(const T &)
omtf::RpcDataWord64
Definition: OmtfRpcDataWord64.h:9
edm::stream::EDProducer
Definition: EDProducer.h:38
edm::EventSetup
Definition: EventSetup.h:57
amc::Header::raw
std::vector< uint64_t > raw() const
Definition: AMCSpec.h:79
l1tstage2_dqm_sourceclient-live_cfg.fedId
fedId
Definition: l1tstage2_dqm_sourceclient-live_cfg.py:82
amc13::Header::getOrbitNumber
unsigned int getOrbitNumber() const
Definition: AMC13Spec.h:26
L1MuDTChambPhContainer.h
amc13::Trailer::getLV1ID
unsigned int getLV1ID() const
Definition: AMC13Spec.h:49
InputTag.h
amc::BlockHeader::getAMCNumber
unsigned int getAMCNumber() const
Definition: AMCSpec.h:28
amc13::Trailer::getBX
unsigned int getBX() const
Definition: AMC13Spec.h:50
omtf::OmtfUnpacker::theOutputTag
std::string theOutputTag
Definition: OmtfUnpacker.cc:71
edm::ParameterSet::getParameter
T getParameter(std::string const &) const
omtf::OmtfUnpacker::theEventCounter
unsigned long theEventCounter
Definition: OmtfUnpacker.cc:61
amc13::Header::getFormatVersion
unsigned int getFormatVersion() const
Definition: AMC13Spec.h:24
omtf::OmtfUnpacker::theFedDataToken
edm::EDGetTokenT< FEDRawDataCollection > theFedDataToken
Definition: OmtfUnpacker.cc:63
eostools.move
def move(src, dest)
Definition: eostools.py:511
writedatasetfile.run
run
Definition: writedatasetfile.py:27
OmtfCscUnpacker.h
omtf::OmtfUnpacker::theConfig
edm::ParameterSet theConfig
Definition: OmtfUnpacker.cc:70
omtf::DataWord64::Type
Type
Definition: OmtfDataWord64.h:16
amc::Header::getAMCNumber
unsigned int getAMCNumber() const
Definition: AMCSpec.h:71
amc::BlockHeader::getBoardID
unsigned int getBoardID() const
Definition: AMCSpec.h:29
ev
bool ev
Definition: Hydjet2Hadronizer.cc:95
edm::MessageDrop::instance
static MessageDrop * instance()
Definition: MessageDrop.cc:60
OmtfDataWord64.h
EventSetup.h
amc::BlockHeader::getSize
unsigned int getSize() const
Definition: AMCSpec.h:30
RegionalMuonCand.h
RPCDigiCollection.h
amc
Definition: AMCSpec.h:8
omtf::RpcUnpacker::init
void init(const edm::EventSetup &es)
Definition: OmtfRpcUnpacker.cc:29
omtf::CscDataWord64
Definition: OmtfCscDataWord64.h:9
RecoTauValidation_cfi.header
header
Definition: RecoTauValidation_cfi.py:292
AMCSpec.h
LogTrace
#define LogTrace(id)
Definition: MessageLogger.h:671
RegionalMuonCandFwd.h
ParameterSet.h
OmtfMuonDataWord64.h
omtf::OmtfUnpacker::theRpcUnpacker
RpcUnpacker theRpcUnpacker
Definition: OmtfUnpacker.cc:65
FEDTrailer::ttsBits
uint8_t ttsBits() const
Current value of the Trigger Throttling System bits.
Definition: FEDTrailer.cc:19
event
Definition: event.py:1
FEDHeader
Definition: FEDHeader.h:14
edm::Event
Definition: Event.h:73
omtf::DataWord64::rpc
Definition: OmtfDataWord64.h:16
FEDHeader.h
omtf::RpcUnpacker::unpack
void unpack(int triggerBX, unsigned int fed, unsigned int amc, const RpcDataWord64 &raw, RPCDigiCollection *prod)
Definition: OmtfRpcUnpacker.cc:43
omtf
Definition: OmtfCscDataWord64.h:7
edm::InputTag
Definition: InputTag.h:15
OmtfRpcUnpacker.h
edm::FileInPath::fullPath
std::string fullPath() const
Definition: FileInPath.cc:163
muonDTDigis_cfi.pset
pset
Definition: muonDTDigis_cfi.py:27
omtf::MuonUnpacker
Definition: OmtfMuonUnpacker.h:16
FEDTrailer::fragmentLength
uint32_t fragmentLength() const
The length of the event fragment counted in 64-bit words including header and trailer.
Definition: FEDTrailer.cc:13
amc::BlockHeader
Definition: AMCSpec.h:13
FEDTrailer.h