#ifndef ALIMUONVDIGIT_H
#define ALIMUONVDIGIT_H
#ifndef ROOT_TObject
# include "TObject.h"
#endif
class AliMUONVDigit : public TObject
{
public:
AliMUONVDigit();
AliMUONVDigit(Int_t detElemId, Int_t manuId, Int_t manuChannel, Int_t cathode);
virtual ~AliMUONVDigit();
virtual Bool_t IsEqual(const TObject* object) const;
virtual Bool_t IsSortable() const { return kTRUE; }
virtual Int_t Compare(const TObject* object) const;
virtual const char* GetName() const;
virtual Int_t DetElemId() const=0;
virtual Int_t PadX() const=0;
virtual Int_t PadY() const=0;
virtual Int_t Cathode() const=0;
virtual Float_t Charge() const=0;
virtual Int_t ADC() const = 0;
virtual Int_t ManuId() const = 0;
virtual Int_t ManuChannel() const=0;
virtual Bool_t IsSaturated() const=0;
virtual void Saturated(Bool_t saturated=kTRUE)=0;
virtual Bool_t IsNoiseOnly() const=0;
virtual void NoiseOnly(Bool_t =kTRUE) { }
virtual Bool_t IsEfficiencyApplied() const=0;
virtual void EfficiencyApplied(Bool_t =kTRUE) {}
virtual Bool_t IsCalibrated() const=0;
virtual void Calibrated(Bool_t value)=0;
virtual Bool_t IsChargeInFC() const { return kFALSE; }
virtual void ChargeInFC(Bool_t value=kTRUE)=0;
virtual Bool_t IsConverted() const { return kFALSE; }
virtual Bool_t IsUsed() const = 0;
virtual void Used(Bool_t value) = 0;
virtual UInt_t StatusMap() const=0;
virtual void SetStatusMap(UInt_t statusMap)=0;
virtual void SetADC(Int_t adc)=0;
virtual void SetPadXY(Int_t padx, Int_t pady)=0;
virtual void SetCharge(Float_t q)=0;
virtual void AddCharge(Float_t q) { SetCharge(Charge()+q); }
virtual Bool_t MergeWith(const AliMUONVDigit& other)=0;
virtual Bool_t IsTracker() const { return !IsTrigger(); }
virtual Bool_t IsTrigger() const { return DetElemId()>=1100; }
virtual void Print(Option_t* opt="") const;
virtual Bool_t HasMCInformation() const = 0;
virtual Int_t Hit() const { return 0; }
virtual void SetHit(Int_t ) { }
virtual Float_t Time() const {return 0;}
virtual void SetTime(Float_t ) { }
virtual Int_t Ntracks() const { return 0; }
virtual void AddTrack(Int_t , Float_t ) {}
virtual Int_t Track(Int_t ) const { return 0; }
virtual Float_t TrackCharge(Int_t ) const { return 0; }
virtual void PatchTracks(Int_t ) {}
static UInt_t BuildUniqueID(Int_t detElemId, Int_t manuId,
Int_t manuChannel, Int_t cathode);
static void DecodeUniqueID(UInt_t uniqueID,
Int_t& detElemId, Int_t& manuId,
Int_t& manuChannel, Int_t& cathode);
static Int_t DetElemId(UInt_t uniqueID);
static Int_t ManuId(UInt_t uniqueID);
static Int_t ManuChannel(UInt_t uniqueID);
static Int_t Cathode(UInt_t uniqueID);
static Int_t LocalBoardNumber(UInt_t uniqueID) { return ManuId(uniqueID); }
static Int_t LocalBoardChannel(UInt_t uniqueID) { return ManuChannel(uniqueID); }
ClassDef(AliMUONVDigit,0)
};
#endif