Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:10:41

0001 /** \unpacker for gem
0002  *  \author J. Lee, Yechan Kang - UoS
0003  */
0004 #include "EventFilter/GEMRawToDigi/interface/GEMRawToDigi.h"
0005 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0006 
0007 std::unique_ptr<GEMAMC13> GEMRawToDigi::convertWordToGEMAMC13(const uint64_t* word) {
0008   vfatError_ = false;
0009   amcError_ = false;
0010 
0011   auto amc13 = std::make_unique<GEMAMC13>();
0012 
0013   amc13->setCDFHeader(*word);
0014   amc13->setAMC13Header(*(++word));
0015 
0016   // Readout out AMC headers
0017   for (uint8_t i = 0; i < amc13->nAMC(); ++i)
0018     amc13->addAMCheader(*(++word));
0019 
0020   // Readout out AMC payloads
0021   for (uint8_t i = 0; i < amc13->nAMC(); ++i) {
0022     auto amc = GEMAMC();
0023     amc.setAMCheader1(*(++word));
0024     amc.setAMCheader2(*(++word));
0025     amc.setGEMeventHeader(*(++word));
0026 
0027     // Fill GEB
0028     for (uint8_t j = 0; j < amc.davCnt(); ++j) {
0029       auto oh = GEMOptoHybrid();
0030       oh.setVersion(amc.formatVer());
0031       oh.setChamberHeader(*(++word));
0032 
0033       // Fill vfat
0034       for (uint16_t k = 0; k < oh.vfatWordCnt() / 3; k++) {
0035         auto vfat = GEMVFAT();
0036         vfat.read_fw(*(++word));
0037         vfat.read_sw(*(++word));
0038         vfat.read_tw(*(++word));
0039         oh.addVFAT(vfat);
0040 
0041       }  // end of vfat loop
0042 
0043       oh.setChamberTrailer(*(++word));
0044       amc.addGEB(oh);
0045 
0046     }  // end of geb loop
0047 
0048     amc.setGEMeventTrailer(*(++word));
0049     amc.setAMCTrailer(*(++word));
0050     amc13->addAMCpayload(amc);
0051 
0052   }  // end of amc loop
0053 
0054   amc13->setAMC13Trailer(*(++word));
0055   amc13->setCDFTrailer(*(++word));
0056 
0057   return amc13;
0058 }