package hep.lcd.geometry;
import hep.lcd.geometry.component.*;

/**
 * Interface for accessing information about a Calorimeter Cell (or hit)
 * from its "tower ID".
 * @see hep.lcd.event.LCDEvent#getCalorimeterCell()
 */
public interface CalorimeterCell
{
	/**
	 * Set the current id 
	 */
	public void setTowerID(int id);
	public int getTowerID();
	public int getThetaBin();
	public int getPhiBin();
	public int getLayer();
	public int getSystem();
        public int findTowerIDfromCartesian(double x,double y,double z);
        public int findTowerIDfromCylindrical(double r,double phi,double z);
        public int findTowerIDfromSpherical(double rr,double theta,double phi);
        public int constructID(double r,double z,double theta,double phi);
        public int constructID(int thetabin, int phibin, int layer, String system);
		
        public Calorimeter findSystem(double r,double z);
	public boolean isEndcap();
	public boolean isNorth();
	public SegmentedDetectorComponent getComponent();
	public double getCosTheta();
	public double getTheta();
	public double getPhi();
	public double getX();
	public double getY();
	public double getZ();
	/**
	 * @return {x,y,z} as an array
	 */
	public double[] getPosition();
	/**
	 * Returns an array of towerID's for the neighbouring cells
	 */
	public int[] getNeighbouringCells();
}
