// access and set functions for binary calorimeter tags
// Version 1.0 21 Oct 1998 Richard creation

#ifndef TOWERID_H
#define TOWERID_H

#include "TMath.h"
#include "TObject.h"


class towerID : public TObject {

private:
    UInt_t m_tag; // Calorimeter tower ID number

public:

    towerID();// Default constructor m_tag set equal to 0
    towerID(UInt_t tag);
    ~towerID() {};

    UInt_t tag() const;
    Int_t theta() const;
    Int_t phi() const;
    Int_t phiBinWidth() const;
    Int_t layer() const;
    Int_t barrelEndcap() const;
    Int_t system() const;
    Int_t northSouth() const;

    void setTag(UInt_t tagVal);
    void setTheta(Int_t thetaVal);
    void setPhi(Int_t phiVal);
    void setPhiBinWidth(Int_t phiBinWidthVal);
    void setLayer(Int_t layerVal);
    void setBarrelEndcap(Int_t barrelEndcapVal);
    void setSystem(Int_t systemVal);
    void setNorthSouth(Int_t northSouthVal);

// 2 routines that ROOT requires
ULong_t Hash(){ return  m_tag;};
Bool_t IsEqual(TObject *obj){ return m_tag == ((towerID*)obj)->m_tag;};

const static Int_t thetaOn;
const static Int_t thetaOff;

const static Int_t phiOn;
const static Int_t phiOff;

const static Int_t phiBinWidthOn;
const static Int_t phiBinWidthOff;

const static Int_t layerOn;
const static Int_t layerOff;

const static Int_t barrelEndcapOn;
const static Int_t barrelEndcapOff;

const static Int_t systemOn;
const static Int_t systemOff;

const static Int_t northSouthOn;
const static Int_t northSouthOff;

ClassDef(towerID,1)// Calorimeter tower ID number
};
#endif
