public double score( final Index index ) throws IOException {
final IntervalIterator it = documentIterator.intervalIterator( index );
if ( it == IntervalIterators.TRUE || it == IntervalIterators.FALSE ) return 0;
double score = 0, residual = 1, t;
int extent = it.extent(), length;
Interval interval;
while ( ( interval = it.nextInterval() ) != null ) {
length = interval.length();
t = residual * Math.min( (double)extent / length, 1 ) / 2;
residual -= t;