#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