00001 #include "EventFilter/GctRawToDigi/src/GctFormatTranslateBase.h"
00002
00003
00004 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00005
00006
00007 const std::string GctFormatTranslateBase::INVALID_BLOCK_HEADER_STR = "UNKNOWN/INVALID BLOCK HEADER";
00008
00009
00010
00011
00012 GctFormatTranslateBase::GctFormatTranslateBase(bool hltMode, bool unpackSharedRegions):
00013 m_collections(0),
00014 m_hltMode(hltMode),
00015 m_unpackSharedRegions(unpackSharedRegions),
00016 m_srcCardRouting(),
00017 m_packingBxId(0),
00018 m_packingEventId(0)
00019 {
00020 }
00021
00022 GctFormatTranslateBase::~GctFormatTranslateBase() { }
00023
00024 const std::string& GctFormatTranslateBase::getBlockDescription(const GctBlockHeader& header) const
00025 {
00026 if(!header.valid()) { return INVALID_BLOCK_HEADER_STR; }
00027 return blockNameMap().find(header.blockId())->second;
00028 }
00029
00030
00031
00032
00033 L1GctJetCandCollection * const GctFormatTranslateBase::gctJets(const unsigned cat) const
00034 {
00035 switch(cat)
00036 {
00037 case TAU_JETS: return colls()->gctTauJets();
00038 case FORWARD_JETS: return colls()->gctForJets();
00039 default: return colls()->gctCenJets();
00040 }
00041 }
00042
00043 void GctFormatTranslateBase::writeRawHeader(unsigned char * data, uint32_t blockId, uint32_t nSamples) const
00044 {
00045 uint32_t hdr = generateRawHeader(blockId, nSamples, packingBxId(), packingEventId());
00046 uint32_t * p = reinterpret_cast<uint32_t*>(const_cast<unsigned char *>(data));
00047 *p = hdr;
00048 }
00049
00050 bool GctFormatTranslateBase::checkBlock(const GctBlockHeader& hdr) const
00051 {
00052
00053 if ( !hdr.valid() )
00054 {
00055 LogDebug("GCT") << "Block unpack error: cannot unpack the following unknown/invalid block:\n" << hdr;
00056 return false;
00057 }
00058
00059
00060 if ( hdr.nSamples() >= 0xf ) {
00061 LogDebug("GCT") << "Block unpack error: cannot unpack a block with 15 or more time samples:\n" << hdr;
00062 return false;
00063 }
00064 return true;
00065 }
00066
00067
00068
00069
00070 L1CaloRegion GctFormatTranslateBase::makeL1CaloRegionBackPortHack(const uint16_t raw,
00071 const unsigned ieta,
00072 const unsigned iphi,
00073 const int16_t bx)
00074 {
00075 unsigned et = raw & 0x3ff;
00076 bool overflow = (raw & 0x400) != 0;
00077 bool tauVeto = (raw & 0x800) != 0;
00078 L1CaloRegion l1CaloRegion(et, overflow, tauVeto, false, false, ieta, iphi);
00079 l1CaloRegion.setBx(bx);
00080 return l1CaloRegion;
00081 }