/*************************************************************************** * * * Originally created by Y. Karadzhov and J.S. Graulich, April 2011 * * * ***************************************************************************/ #ifndef __MDDATWORDVLSB_H #define __MDDATWORDVLSB_H #include "MDdataWord.h" #include #include #include #include using namespace std; class MDdataWordVLSB : public MDdataWord { public: MDdataWordVLSB( void *d = 0 ); ~MDdataWordVLSB(){} int32_t GetBankLength(int ibank){ return (Get32bWordPtr()[ibank] & Header_Bank0Length_Mask); } int16_t GetAdc() { if (!IsValid()) return 0; return (Get32bWordPtr()[0] & Adc_Mask) >> Adc_Shift ; } int16_t GetTdc() { if (!IsValid()) return 0; return (Get32bWordPtr()[0] & Tdc_Mask) >> Tdc_Shift ; } int16_t GetChannel() { if (!IsValid()) return 0; return (Get32bWordPtr()[0] & Channel_Mask) >> Channel_Shift ; } bool GetDiscriBit() { if (!IsValid()) return false; return !!((Get32bWordPtr()[0] & Discri_Mask) >> Discri_Shift) ; } int16_t GetEventNum() { if (!IsValid()) return 0; return (Get32bWordPtr()[0] & EventNum_Mask) >> EventNum_Shift ; } bool IsValid(); virtual void Dump( int atTheTime = 1 ); private: enum Header { Header_Bank0Length_Mask = 0x0003FFFF, Header_Bank0Length_Shift = 0, Header_Bank0Length_Word = 0, Header_Bank1Length_Mask = 0x0003FFFF, Header_Bank1Length_Shift = 0, Header_Bank1Length_Word = 1, Header_Bank2Length_Mask = 0x0003FFFF, Header_Bank2Length_Shift = 0, Header_Bank2Length_Word = 2, Header_Bank3Length_Mask = 0x0003FFFF, Header_Bank3Length_Shift = 0, Header_Bank3Length_Word = 3 }; enum BankWord { Error_Word = 0xdeadbeef, Adc_Shift = 0, Adc_Mask = 0x000000FF, Tdc_Shift = 8, Tdc_Mask = 0x0000FF00, Channel_Shift = 16, Channel_Mask = 0x007F0000, Discri_Shift = 23, Discri_Mask = 0x00800000, EventNum_Shift = 24, EventNum_Mask = 0xFF000000 }; }; ostream &operator<<(ostream &s,MDdataWordVLSB &dw); istream &operator>>(istream &s,MDdataWordVLSB &dw); #endif