Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 #ifndef DCCMEMBLOCK_HH
0002 #define DCCMEMBLOCK_HH
0003 
0004 /*
0005  *\ Class DCCMemBlock
0006  *
0007  * Class responsible for MEMs unpacking 
0008  *
0009  * \file DCCTCCBlock.h
0010  *
0011  *
0012  * \author N. Almeida
0013  * \author G. Franzoni
0014  *
0015 */
0016 
0017 #include <iostream>
0018 #include <memory>
0019 #include <cstdint>
0020 #include <string>
0021 #include <vector>
0022 #include <map>
0023 #include <utility>
0024 
0025 #include <DataFormats/EcalDigi/interface/EcalDigiCollections.h>
0026 #include <DataFormats/EcalRawData/interface/EcalRawDataCollections.h>
0027 #include <DataFormats/EcalDetId/interface/EcalDetIdCollections.h>
0028 #include <FWCore/MessageLogger/interface/MessageLogger.h>
0029 #include "DCCDataBlockPrototype.h"
0030 
0031 class DCCEventBlock;
0032 class DCCDataUnpacker;
0033 
0034 class DCCMemBlock : public DCCDataBlockPrototype {
0035 public:
0036   DCCMemBlock(DCCDataUnpacker* u, EcalElectronicsMapper* m, DCCEventBlock* e);
0037 
0038   ~DCCMemBlock() override {}
0039 
0040   void updateCollectors() override;
0041 
0042   void display(std::ostream& o) override;
0043   using DCCDataBlockPrototype::unpack;
0044   int unpack(const uint64_t** data, unsigned int* dwToEnd, unsigned int expectedTowerID);
0045 
0046 protected:
0047   void unpackMemTowerData();
0048   void fillPnDiodeDigisCollection();
0049 
0050   std::vector<short> pn_;
0051 
0052   unsigned int expTowerID_;
0053   unsigned int expXtalTSamples_;
0054   unsigned int kSamplesPerPn_;
0055 
0056   unsigned int lastStripId_;
0057   unsigned int lastXtalId_;
0058   unsigned int lastTowerBeforeMem_;
0059 
0060   unsigned int towerId_;
0061   unsigned int numbDWInXtalBlock_;
0062   unsigned int xtalBlockSize_;
0063   unsigned int nTSamples_;
0064   unsigned int unfilteredTowerBlockLength_;
0065 
0066   unsigned int bx_;
0067   unsigned int l1_;
0068 
0069   std::unique_ptr<EcalElectronicsIdCollection>* invalidMemChIds_;
0070   std::unique_ptr<EcalElectronicsIdCollection>* invalidMemBlockSizes_;
0071   std::unique_ptr<EcalElectronicsIdCollection>* invalidMemTtIds_;
0072   std::unique_ptr<EcalElectronicsIdCollection>* invalidMemGains_;
0073   std::unique_ptr<EcalPnDiodeDigiCollection>* pnDiodeDigis_;
0074 };
0075 
0076 #endif