public AngleDR Preces(String sys, double ep0, double ep1, AngleDR d) {
        double pm[][], v1[], v2[];

        TRACE("Preces");
        /* Validate sys */
        boolean fk4 = sys.toUpperCase().equals("FK4");
        boolean fk5 = sys.toUpperCase().equals("FK5");
        if (fk4 || fk5) {

            /* Generate appropriate precession matrix */
            if (fk4) {
                pm = Prebn(ep0, ep1);
            } else {
                pm = Prec(ep0, ep1);
            }

            /* Convert RA,Dec to x,y,z */
            v1 = Dcs2c(d);

            /* Precess */
            v2 = Dmxv(pm, v1);

            /* Back to RA,Dec */
            d = Dcc2s(v2);
            d.setAlpha(Dranrm(d.getAlpha()));
        } else {
            d = new AngleDR(-99.0, -99.0);
        }
        ENDTRACE("Preces");
        return d;
    }