CMS 3D CMS Logo

GctFormatTranslateMCLegacy.h

Go to the documentation of this file.
00001 #ifndef GctFormatTranslateMCLegacy_h_
00002 #define GctFormatTranslateMCLegacy_h_
00003 
00004 #include "EventFilter/GctRawToDigi/src/GctFormatTranslateBase.h"
00005 
00018 // ************************************************************************
00019 // ***  THE TRANSLATION PROCESS MUST NEVER THROW ANY KIND OF EXCEPTION! *** 
00020 // ************************************************************************
00021 
00022 class GctFormatTranslateMCLegacy : public GctFormatTranslateBase
00023 {
00024 public:
00025 
00026   /* PUBLIC METHODS */
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   /* Public Block Packing Functions */
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   /* PROTECTED METHODS */
00074 
00075   /* Static data member access methods */
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   /* Other general methods */
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   /* PRIVATE TYPES & TYPEDEFS */
00103  
00105   typedef void (GctFormatTranslateMCLegacy::*PtrToUnpackFn)(const unsigned char *, const GctBlockHeader&);
00107   typedef std::map<unsigned int, PtrToUnpackFn> BlockIdToUnpackFnMap;
00109   struct EmuToSfpData
00110   {
00111     // Input data.
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     // Output data.
00121     unsigned short sfp[2][4]; // [ cycle ] [ output number ]
00122   };
00123 
00124 
00125   /* PRIVATE MEMBER DATA */
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   /* PRIVATE METHODS */
00148   
00149   /* --------------------------------- */
00150   /* Private Block Unpacking Functions */
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   /* Miscellaneous Private Methods */
00174   /* ----------------------------- */
00175     
00177 
00178   template <typename Collection> 
00179   bool findBx0OffsetInCollection(unsigned& bx0Offset, const Collection* coll);
00180 
00181 };
00182 
00183 #endif

Generated on Tue Jun 9 17:34:41 2009 for CMSSW by  doxygen 1.5.4