File indexing completed on 2024-09-07 04:36:08
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