00001 #ifndef DCCFEBLOCK_HH 00002 #define DCCFEBLOCK_HH 00003 00004 #include <iostream> 00005 #include <memory> 00006 #include <stdint.h> 00007 #include <string> 00008 #include <vector> 00009 #include <map> 00010 #include <utility> 00011 00012 #include <DataFormats/EcalDigi/interface/EcalDigiCollections.h> 00013 #include <DataFormats/EcalRawData/interface/EcalRawDataCollections.h> 00014 #include <DataFormats/EcalDetId/interface/EcalDetIdCollections.h> 00015 #include <FWCore/MessageLogger/interface/MessageLogger.h> 00016 00017 #include "DCCDataBlockPrototype.h" 00018 00019 class DCCEventBlock; 00020 class DCCDataUnpacker; 00021 00022 class DCCFEBlock : public DCCDataBlockPrototype { 00023 00024 public : 00025 00026 DCCFEBlock(DCCDataUnpacker * u,EcalElectronicsMapper * m, DCCEventBlock * e, bool unpack, bool forceToKeepFRdata); 00027 00028 virtual ~DCCFEBlock(){ delete [] xtalGains_;} 00029 00030 void zsFlag(bool zs){ zs_ = zs;} 00031 00032 void enableFeIdChecks(){checkFeId_= true;} 00033 00034 virtual void updateCollectors(); 00035 00036 void display(std::ostream & o); 00037 00038 int unpack(const uint64_t** data, unsigned int * dwToEnd, bool zs, unsigned int expectedTowerID); 00039 00040 unsigned int getLength(){return blockLength_; } 00041 00042 protected : 00043 00044 virtual int unpackXtalData(unsigned int stripID, unsigned int xtalID){ return BLOCK_UNPACKED;}; 00045 virtual void fillEcalElectronicsError( std::auto_ptr<EcalElectronicsIdCollection> * ){}; 00046 00047 00048 bool zs_; 00049 bool checkFeId_; 00050 unsigned int expTowerID_; 00051 bool forceToKeepFRdata_; 00052 unsigned int expXtalTSamples_; 00053 unsigned int unfilteredDataBlockLength_; 00054 unsigned int lastStripId_; 00055 unsigned int lastXtalId_; 00056 00057 unsigned int towerId_; 00058 unsigned int numbDWInXtalBlock_; 00059 unsigned int xtalBlockSize_; 00060 unsigned int nTSamples_; 00061 00062 unsigned int blockSize_; 00063 unsigned int bx_; 00064 unsigned int l1_; 00065 00066 short * xtalGains_; 00067 std::auto_ptr<EcalElectronicsIdCollection> * invalidTTIds_; 00068 std::auto_ptr<EcalElectronicsIdCollection> * invalidZSXtalIds_; 00069 std::auto_ptr<EcalElectronicsIdCollection> * invalidBlockLengths_; 00070 00071 }; 00072 00073 00074 #endif