File indexing completed on 2024-04-06 12:10:40
0001 #ifndef GctFormatTranslateMCLegacy_h_
0002 #define GctFormatTranslateMCLegacy_h_
0003
0004 #include "EventFilter/GctRawToDigi/src/GctFormatTranslateBase.h"
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 class GctFormatTranslateMCLegacy : public GctFormatTranslateBase {
0021 public:
0022
0023
0024
0025
0026
0027 explicit GctFormatTranslateMCLegacy(bool hltMode = false, bool unpackSharedRegions = false);
0028
0029 ~GctFormatTranslateMCLegacy() override;
0030
0031
0032 GctBlockHeader generateBlockHeader(const unsigned char* data) const override;
0033
0034
0035 bool convertBlock(const unsigned char* d, const GctBlockHeader& hdr) override;
0036
0037
0038
0039
0040
0041
0042
0043 void writeGctOutEmAndEnergyBlock(unsigned char* d,
0044 const L1GctEmCandCollection* iso,
0045 const L1GctEmCandCollection* nonIso,
0046 const L1GctEtTotalCollection* etTotal,
0047 const L1GctEtHadCollection* etHad,
0048 const L1GctEtMissCollection* etMiss);
0049
0050
0051
0052 void writeGctOutJetBlock(unsigned char* d,
0053 const L1GctJetCandCollection* cenJets,
0054 const L1GctJetCandCollection* forJets,
0055 const L1GctJetCandCollection* tauJets,
0056 const L1GctHFRingEtSumsCollection* hfRingSums,
0057 const L1GctHFBitCountsCollection* hfBitCounts,
0058 const L1GctHtMissCollection* htMiss);
0059
0060
0061 void writeRctEmCandBlocks(unsigned char* d, const L1CaloEmCollection* rctEm);
0062
0063
0064 void writeAllRctCaloRegionBlock(unsigned char* d, const L1CaloRegionCollection* rctCalo);
0065
0066 protected:
0067
0068
0069
0070 const BlockLengthMap& blockLengthMap() const final {
0071 return m_blockLength;
0072 }
0073
0074 const BlockNameMap& blockNameMap() const final { return m_blockName; }
0075
0076 const BlkToRctCrateMap& rctEmCrateMap() const final {
0077 return m_rctEmCrate;
0078 }
0079
0080 const BlkToRctCrateMap& rctJetCrateMap() const final {
0081 return m_rctJetCrate;
0082 }
0083
0084 const BlockIdToEmCandIsoBoundMap& internEmIsoBounds() const final {
0085 return m_internEmIsoBounds;
0086 }
0087
0088
0089
0090 uint32_t generateRawHeader(const uint32_t blockId,
0091 const uint32_t nSamples,
0092 const uint32_t bxId,
0093 const uint32_t eventId) const override;
0094
0095 private:
0096
0097
0098
0099 typedef void (GctFormatTranslateMCLegacy::*PtrToUnpackFn)(const unsigned char*, const GctBlockHeader&);
0100
0101 typedef std::map<unsigned int, PtrToUnpackFn> BlockIdToUnpackFnMap;
0102
0103
0104
0105
0106 static const BlockLengthMap m_blockLength;
0107
0108
0109 static const BlockNameMap m_blockName;
0110
0111
0112 static const BlkToRctCrateMap m_rctEmCrate;
0113
0114
0115 static const BlkToRctCrateMap m_rctJetCrate;
0116
0117
0118
0119 static const BlockIdToEmCandIsoBoundMap m_internEmIsoBounds;
0120
0121
0122 static const BlockIdToUnpackFnMap m_blockUnpackFn;
0123
0124
0125
0126
0127
0128
0129
0130
0131 void blockToGctEmCandsAndEnergySums(const unsigned char* d, const GctBlockHeader& hdr);
0132
0133
0134 void blockToGctJetCandsAndCounts(const unsigned char* d, const GctBlockHeader& hdr);
0135
0136
0137 void blockToRctEmCand(const unsigned char* d, const GctBlockHeader& hdr);
0138
0139
0140 void blockToFibres(const unsigned char* d, const GctBlockHeader& hdr);
0141
0142
0143 void blockToFibresAndToRctEmCand(const unsigned char* d, const GctBlockHeader& hdr);
0144
0145
0146 void blockToAllRctCaloRegions(const unsigned char* d, const GctBlockHeader& hdr);
0147
0148
0149
0150
0151
0152
0153
0154 template <typename Collection>
0155 bool findBx0OffsetInCollection(unsigned& bx0Offset, const Collection* coll);
0156 };
0157
0158 #endif