// AID-GENERATED
// =========================================================================
// This class was generated by AID - Abstract Interface Definition          
// DO NOT MODIFY, but use the org.freehep.aid.Aid utility to regenerate it. 
// =========================================================================

// Copyright 2000-2002, FreeHEP.
package hep.graphics.heprep;


/**
 * HepRepPoint interface. The HepRepMath class can be used to deal with the conversions.
 *
 * @author Mark Donszelmann
 */
public interface HepRepPoint extends HepRepAttribute {

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return dx-coordinate
     */
    public double getX();

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return dy-coordinate
     */
    public double getY();

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return dz-coordinate
     */
    public double getZ();

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return rho = sqrt(dx2+dy2);
     */
    public double getRho();

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return phi = atan2(dy, dx);
     */
    public double getPhi();

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return theta = atan2(rho, dx);
     */
    public double getTheta();

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return r = sqrt(dx2+dy2+dz2);
     */
    public double getR();

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @return eta = -0.5*clog((1.-ct)/(1.+ct)), where ct = .cos(getTheta(dx, dy, dz));
     */
    public double getEta();

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return dx-coordinate
     */
    public double getX(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return dy-coordinate
     */
    public double getY(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return dz-coordinate
     */
    public double getZ(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return rho = sqrt(dx2+dy2);
     */
    public double getRho(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return phi = atan2(dy, dx);
     */
    public double getPhi(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return theta = atan2(rho, dx);
     */
    public double getTheta(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return r = sqrt(dx2+dy2+dz2);
     */
    public double getR(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (xVertex, yVertex, zVertex).
     *
     * @return eta = -0.5*clog((1.-ct)/(1.+ct)), where ct = .cos(getTheta(dx, dy, dz));
     */
    public double getEta(double xVertex, double yVertex, double zVertex);

    /**
     * Returns coordinate with respect to vertex at (0, 0, 0).
     *
     * @param xyz list of three coordinates which are filled and returned.
     *            If null, a new list of three coordinates is allocated.
     * @return list of 3 coordinates.
     */
    public double[] getXYZ(double[] xyz);

    /**
     * Returns associated instance (parent).
     *
     * @return HepRepInstance.
     */
    public HepRepInstance getInstance();

    /**
     * Returns a deep copy of this point.
     *
     * @param parent to add the copy to.
     * @return copy of this point.
     * @throws CloneNotSupportedException if copying is not possible.
     */
    public HepRepPoint copy(HepRepInstance parent) throws CloneNotSupportedException;
} // class or interface

