private void process(double[] data,double min,double max,KernelDensityFunction kernel,int window,double epsilon){
  dens=new double[data.length];
  var=new double[data.length];
  double halfwidth=((max - min) / window) * .5;
  for (int current=0; current < data.length; current++) {
    double value=0.0;
    for (int i=current; i >= 0; i--) {
      double delta=Math.abs(data[i] - data[current]) / halfwidth;
      final double contrib=kernel.density(delta);
      value+=contrib;
      if (contrib < epsilon) {
        break;
      }
    }
    for (int i=current + 1; i < data.length; i++) {
      double delta=Math.abs(data[i] - data[current]) / halfwidth;
      final double contrib=kernel.density(delta);
      value+=contrib;
      if (contrib < epsilon) {
        break;
      }
    }
    double realwidth=(Math.min(data[current] + halfwidth,max) - Math.max(min,data[current] - halfwidth));
    double weight=realwidth / (2 * halfwidth);
    dens[current]=value / (data.length * realwidth * .5);
    var[current]=1 / weight;
  }
}

private void process ( double [ ] data , double min , double max , KernelDensityFunction kernel , int window , double epsilon ) { dens = new double [ data . length ] ; var = new double [ data . length ] ; double halfwidth = ( ( max - min ) / window ) * .5 ; for ( int current = 0 ; current < data . length ; current ++ ) { double value = 0.0 ; for ( int i = current ; i >= 0 ; i -- ) { double delta = Math . abs ( data [ i ] - data [ current ] ) / halfwidth ; final double contrib = kernel . density ( delta ) ; value += contrib ; if ( contrib < epsilon ) { break ; } } for ( int i = current + 1 ; i < data . length ; i ++ ) { double delta = Math . abs ( data [ i ] - data [ current ] ) / halfwidth ; final double contrib = kernel . density ( delta ) ; value += contrib ; if ( contrib < epsilon ) { break ; } } double realwidth = ( Math . min ( data [ current ] + halfwidth , max ) - Math . max ( min , data [ current ] - halfwidth ) ) ; double weight = realwidth / ( 2 * halfwidth ) ; dens [ current ] = value / ( data . length * realwidth * .5 ) ; var [ current ] = 1 / weight ; } }
process a new array
