/* This file is part of MAUS: http://micewww.pp.rl.ac.uk:8080/projects/maus * * MAUS is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * MAUS is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with MAUS. If not, see . * */ #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