docs: @Override
  	public void trainOnInstanceImpl(Instance inst) {
  		double[] x = inst.toDoubleArray();
  		if (this.numDimensions != x.length) {
  			System.out.println("Line skipped because line dimension is "
  					+ x.length + " instead of " + this.numDimensions);
  			return;
  		}
  		// Starts with the buffer phase to calculate the starting threshold
  		if (this.bufferPhase) {
  			// Calculates the pairwise distance to all unequal point in the
  			// buffer
  			for (double[] point : this.buffer) {
  				double d = Metric.distanceSquared(point, x);
  				if (d > 0) {
  					this.pairwiseDifferent++;
  					if (d < minDistance) {
  						minDistance = d;
  					}
  				}
  			}
  			this.buffer.add(x);
  
  			// Checks if the buffer is large enough
  			if (this.pairwiseDifferent >= this.maxNumClusterFeatures + 1) {
  				// Calculates the starting threshold
  				this.T = 16 * minDistance;
  				this.root.setThreshold(calcRSquared(1));
  				this.bufferPhase = false;
  				// Adds all points to the ClusteringFeature tree
  				for (double[] point : this.buffer) {
  					bicoUpdate(point);
  				}
  				this.buffer.clear();
  				this.buffer = null;
  			}
  		} else {
  			// Adds the point directly to the ClusteringFeature tree
  			bicoUpdate(x);
  		}
  	}