class DiscreteModel {

    public DiscreteModelEvaluation process(int[] y, Matrix X) {
        m_y = y;
        m_x = X;

        // initialization 
        double[] c = initialize();
        // create the function 
        llFn fn = new llFn(this);
        // optimization...
        if (getMinimizer().minimize(fn, new DiscreteModelEvaluation(this, new DataBlock(c)))) {
            return (DiscreteModelEvaluation) getMinimizer().getResult();
        } else {
            return null;
        }
    }

    public  DiscreteModel(ICumulativeDistributionFunction fn);

}