00001 #ifndef GctFormatTranslateMCLegacy_h_
00002 #define GctFormatTranslateMCLegacy_h_
00003
00004 #include "EventFilter/GctRawToDigi/src/GctFormatTranslateBase.h"
00005
00018
00019
00020
00021
00022 class GctFormatTranslateMCLegacy : public GctFormatTranslateBase
00023 {
00024 public:
00025
00026
00027
00029
00031 explicit GctFormatTranslateMCLegacy(bool hltMode = false, bool unpackSharedRegions = false);
00032
00033 virtual ~GctFormatTranslateMCLegacy();
00034
00036 virtual GctBlockHeader generateBlockHeader(const unsigned char * data) const;
00037
00039 virtual bool convertBlock(const unsigned char * d, const GctBlockHeader& hdr);
00040
00041
00042
00043
00044
00045
00047
00048 void writeGctOutEmAndEnergyBlock(unsigned char * d,
00049 const L1GctEmCandCollection* iso,
00050 const L1GctEmCandCollection* nonIso,
00051 const L1GctEtTotalCollection* etTotal,
00052 const L1GctEtHadCollection* etHad,
00053 const L1GctEtMissCollection* etMiss);
00054
00056
00057 void writeGctOutJetBlock(unsigned char * d,
00058 const L1GctJetCandCollection* cenJets,
00059 const L1GctJetCandCollection* forJets,
00060 const L1GctJetCandCollection* tauJets,
00061 const L1GctHFRingEtSumsCollection* hfRingSums,
00062 const L1GctHFBitCountsCollection* hfBitCounts);
00063
00065 void writeRctEmCandBlocks(unsigned char * d, const L1CaloEmCollection * rctEm);
00066
00068 void writeAllRctCaloRegionBlock(unsigned char * d, const L1CaloRegionCollection * rctCalo);
00069
00070
00071 protected:
00072
00073
00074
00075
00076 virtual BlockLengthMap& blockLengthMap() { return m_blockLength; }
00077 virtual const BlockLengthMap& blockLengthMap() const { return m_blockLength; }
00078
00079 virtual BlockNameMap& blockNameMap() { return m_blockName; }
00080 virtual const BlockNameMap& blockNameMap() const { return m_blockName; }
00081
00082 virtual BlkToRctCrateMap& rctEmCrateMap() { return m_rctEmCrate; }
00083 virtual const BlkToRctCrateMap& rctEmCrateMap() const { return m_rctEmCrate; }
00084
00085 virtual BlkToRctCrateMap& rctJetCrateMap() { return m_rctJetCrate; }
00086 virtual const BlkToRctCrateMap& rctJetCrateMap() const { return m_rctJetCrate; }
00087
00088 virtual BlockIdToEmCandIsoBoundMap& internEmIsoBounds() { return m_internEmIsoBounds; }
00089 virtual const BlockIdToEmCandIsoBoundMap& internEmIsoBounds() const { return m_internEmIsoBounds; }
00090
00091
00092
00094 virtual uint32_t generateRawHeader(const uint32_t blockId,
00095 const uint32_t nSamples,
00096 const uint32_t bxId,
00097 const uint32_t eventId) const;
00098
00099
00100 private:
00101
00102
00103
00105 typedef void (GctFormatTranslateMCLegacy::*PtrToUnpackFn)(const unsigned char *, const GctBlockHeader&);
00107 typedef std::map<unsigned int, PtrToUnpackFn> BlockIdToUnpackFnMap;
00109 struct EmuToSfpData
00110 {
00111
00112 unsigned short eIsoRank[4];
00113 unsigned short eIsoCardId[4];
00114 unsigned short eIsoRegionId[4];
00115 unsigned short eNonIsoRank[4];
00116 unsigned short eNonIsoCardId[4];
00117 unsigned short eNonIsoRegionId[4];
00118 unsigned short mipBits[7][2];
00119 unsigned short qBits[7][2];
00120
00121 unsigned short sfp[2][4];
00122 };
00123
00124
00125
00126
00128 static BlockLengthMap m_blockLength;
00129
00131 static BlockNameMap m_blockName;
00132
00134 static BlkToRctCrateMap m_rctEmCrate;
00135
00137 static BlkToRctCrateMap m_rctJetCrate;
00138
00141 static BlockIdToEmCandIsoBoundMap m_internEmIsoBounds;
00142
00144 static BlockIdToUnpackFnMap m_blockUnpackFn;
00145
00146
00147
00148
00149
00150
00151
00152
00154 void blockToGctEmCandsAndEnergySums(const unsigned char * d, const GctBlockHeader& hdr);
00155
00157 void blockToGctJetCandsAndCounts(const unsigned char * d, const GctBlockHeader& hdr);
00158
00160 void blockToRctEmCand(const unsigned char * d, const GctBlockHeader& hdr);
00161
00163 void blockToFibres(const unsigned char * d, const GctBlockHeader& hdr);
00164
00166 void blockToFibresAndToRctEmCand(const unsigned char * d, const GctBlockHeader& hdr);
00167
00169 void blockToAllRctCaloRegions(const unsigned char * d, const GctBlockHeader& hdr);
00170
00171
00172
00173
00174
00175
00177
00178 template <typename Collection>
00179 bool findBx0OffsetInCollection(unsigned& bx0Offset, const Collection* coll);
00180
00181 };
00182
00183 #endif