#ifndef HMDCDATAWORD__H
#define HMDCDATAWORD__H
#include "TObject.h"
class HMdcDataword : public TObject
{
protected:
enum {m1=0x1, m3=0x7, m4=0xf, m5 = 0x1f, m11=0x7ff, m16 = 0xffff, m24 = 0xffffff, m26 = 0x3ffffff, m29=0xFFFFFFF, m32 = 0xffffffff};
Int_t decodeType;
Int_t eventNumber;
Int_t triggerType;
Int_t errorFlag;
Int_t subEventSize;
Int_t statusCode;
Int_t statusData;
Int_t mboAddress;
Int_t tdcNumber;
Int_t channel;
Int_t hit;
Int_t time;
Int_t sector;
Int_t module;
Int_t mbo;
Int_t tdc;
Int_t entry;
Bool_t noComment;
Int_t time1;
Bool_t debug;
public:
HMdcDataword(Bool_t comment);
HMdcDataword(void);
~HMdcDataword(void){;};
Bool_t checkConsistency(UInt_t version = 0, UInt_t data = 0);
void clearData (void);
void clearAll (void){clearData();clearHeader();clearAddress();};
void clearAddress(void){sector = module = mbo = tdc = 0;};
void clearHeader (void){decodeType=eventNumber=triggerType=errorFlag=subEventSize=-1;};
Bool_t decode(const UInt_t data, Bool_t consistencyCheck = kFALSE);
void dump(void);
Int_t getDecodeType (void){return decodeType;};
Int_t getEventNumber (void){return eventNumber;};
Int_t getTriggerType (void){return triggerType;};
Int_t getErrorFlag (void){return errorFlag;};
Int_t getModule (void){return module;}
Int_t getSector (void){return sector;};
Int_t getSubEventSize(void){return subEventSize;};
Int_t getAddress (void);
Int_t getMboAddress(void){return mboAddress;};
Int_t getTdcNumber (void){return tdcNumber;};
Int_t getChannel (void){return channel;};
Int_t getHit (void){return hit;};
Int_t getTime (void){return time;};
Int_t getTime1 (void){return time1;};
Int_t getStatusCode(void){return statusCode;};
Int_t getStatusData(void){return statusData;};
UInt_t getCodedDataword(UInt_t version = 0);
void print(UInt_t version);
void setAddress(Int_t s, Int_t m, Int_t mb, Int_t t, Int_t e){sector=s;module=m;mbo=mb,tdc=t;entry=e;};
void setEventNumber (Int_t val){eventNumber = val;};
void setTriggerType (Int_t val){triggerType = val;};
void setErrorFlag (Int_t val){errorFlag = val;};
void setSubEventSize(Int_t val){subEventSize = val;};
void setAddress (Int_t addr);
void setMboAddress(Int_t val){mboAddress = val;};
void setTdcNumber (Int_t val){tdcNumber = val;};
void setChannel (Int_t val){channel = val;};
void setHit (Int_t val){hit = val;};
void setTime (Int_t val){time = val;};
void setTime1 (Int_t val){time1 = val;};
void setQuietMode(Bool_t b=kTRUE){noComment = b;};
Bool_t subHeader(const UInt_t *data, UInt_t version, Bool_t consistencyCheck = kFALSE);
ClassDef(HMdcDataword,1)
};
#endif