Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef DCCFEBLOCK_HH
0002 #define DCCFEBLOCK_HH
0003 
0004 #include <iostream>
0005 #include <memory>
0006 #include <cstdint>
0007 #include <string>
0008 #include <vector>
0009 #include <map>
0010 #include <utility>
0011 
0012 #include <DataFormats/EcalDigi/interface/EcalDigiCollections.h>
0013 #include <DataFormats/EcalRawData/interface/EcalRawDataCollections.h>
0014 #include <DataFormats/EcalDetId/interface/EcalDetIdCollections.h>
0015 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0016 
0017 #include "DCCDataBlockPrototype.h"
0018 
0019 class DCCEventBlock;
0020 class DCCDataUnpacker;
0021 
0022 class DCCFEBlock : public DCCDataBlockPrototype {
0023 public:
0024   DCCFEBlock(DCCDataUnpacker* u, EcalElectronicsMapper* m, DCCEventBlock* e, bool unpack, bool forceToKeepFRdata);
0025 
0026   ~DCCFEBlock() override { delete[] xtalGains_; }
0027 
0028   void zsFlag(bool zs) { zs_ = zs; }
0029 
0030   void enableFeIdChecks() { checkFeId_ = true; }
0031 
0032   void updateCollectors() override;
0033 
0034   void display(std::ostream& o) override;
0035   using DCCDataBlockPrototype::unpack;
0036   int unpack(const uint64_t** data, unsigned int* dwToEnd, bool zs, unsigned int expectedTowerID);
0037 
0038   unsigned int getLength() override { return blockLength_; }
0039 
0040 protected:
0041   virtual int unpackXtalData(unsigned int stripID, unsigned int xtalID) { return BLOCK_UNPACKED; };
0042   virtual void fillEcalElectronicsError(std::unique_ptr<EcalElectronicsIdCollection>*){};
0043 
0044   bool zs_;
0045   bool checkFeId_;
0046   unsigned int expTowerID_;
0047   bool forceToKeepFRdata_;
0048   unsigned int expXtalTSamples_;
0049   unsigned int unfilteredDataBlockLength_;
0050   unsigned int lastStripId_;
0051   unsigned int lastXtalId_;
0052 
0053   unsigned int towerId_;
0054   unsigned int numbDWInXtalBlock_;
0055   unsigned int xtalBlockSize_;
0056   unsigned int nTSamples_;
0057 
0058   unsigned int blockSize_;
0059   unsigned int bx_;
0060   unsigned int l1_;
0061 
0062   short* xtalGains_;
0063   std::unique_ptr<EcalElectronicsIdCollection>* invalidTTIds_;
0064   std::unique_ptr<EcalElectronicsIdCollection>* invalidZSXtalIds_;
0065   std::unique_ptr<EcalElectronicsIdCollection>* invalidBlockLengths_;
0066 };
0067 
0068 #endif