grib/src/main/java/ucar/nc2/grib/collection/GribDataReader.java
private Array readDataFromCollection(GribCollectionImmutable.VariableIndex vindex, SectionIterable want) throws IOException {
    // first time, read records and keep in memory
    vindex.readRecords();

    int rank = want.getRank();
    int sectionLen = rank - 2; // all but x, y
    SectionIterable sectionWanted = want.subSection(0, sectionLen);
    // assert sectionLen == vindex.getRank(); LOOK true or false ??

    // collect all the records that need to be read
    int resultIndex = 0;
    for  (int sourceIndex : sectionWanted) {
      // addRecord(sourceIndex, count++);
      GribCollectionImmutable.Record record = vindex.getRecordAt(sourceIndex);
      if (Grib.debugRead)
        logger.debug("GribIosp debugRead sourceIndex=%d resultIndex=%d record is null=%s%n", sourceIndex, resultIndex, record == null);
      if (record != null)
        records.add( new DataRecord(resultIndex, record, vindex.group.getGdsHorizCoordSys()));
      resultIndex++;
    }

    // sort by file and position, then read
    DataReceiverIF dataReceiver = new DataReceiver(want.getShape(), want.getRange(rank - 2), want.getRange(rank-1) );
    read(dataReceiver);
    return dataReceiver.getArray();
  }
private Array readDataFromCollection(GribCollectionImmutable.VariableIndex vindex, SectionIterable want) throws IOException {
    // first time, read records and keep in memory
    vindex.readRecords();

    int rank = want.getRank();
    int sectionLen = rank - 2; // all but x, y
    SectionIterable sectionWanted = want.subSection(0, sectionLen);
    // assert sectionLen == vindex.getRank(); LOOK true or false ??

    // collect all the records that need to be read
    int resultIndex = 0;
    for  (int sourceIndex : sectionWanted) {
      // addRecord(sourceIndex, count++);
      GribCollectionImmutable.Record record = vindex.getRecordAt(sourceIndex);
      if (Grib.debugRead)
        logger.debug("GribIosp debugRead sourceIndex=%d resultIndex=%d record is null=%s%n", sourceIndex, resultIndex, record == null);
      if (record != null)
        records.add( new DataRecord(resultIndex, record, vindex.group.getGdsHorizCoordSys()));
      resultIndex++;
    }

    // sort by file and position, then read
    DataReceiverIF dataReceiver = new DataReceiver(want.getShape(), want.getRange(rank - 2), want.getRange(rank-1) );
    read(dataReceiver);
    return dataReceiver.getArray();
  }
private Array readDataFromCollection ( GribCollectionImmutable . VariableIndex vindex , SectionIterable want ) throws IOException { // first time, read records and keep in memory vindex . readRecords ( ) ; int rank = want . getRank ( ) ; int sectionLen = rank - 2 ; // all but x, y SectionIterable sectionWanted = want . subSection ( 0 , sectionLen ) ; // assert sectionLen == vindex.getRank(); LOOK true or false ?? // collect all the records that need to be read int resultIndex = 0 ; for ( int sourceIndex : sectionWanted ) { // addRecord(sourceIndex, count++); GribCollectionImmutable . Record record = vindex . getRecordAt ( sourceIndex ) ; if ( Grib . debugRead ) logger . debug ( "GribIosp debugRead sourceIndex=%d resultIndex=%d record is null=%s%n" , sourceIndex , resultIndex , record == null ) ; if ( record != null ) records . add ( new DataRecord ( resultIndex , record , vindex . group . getGdsHorizCoordSys ( ) ) ) ; resultIndex ++ ; } // sort by file and position, then read DataReceiverIF dataReceiver = new DataReceiver ( want . getShape ( ) , want . getRange ( rank - 2 ) , want . getRange ( rank - 1 ) ) ; read ( dataReceiver ) ; return dataReceiver . getArray ( ) ; }
/*
SectionIterable iterates over the source indexes, corresponding to vindex's SparseArray.
IOSP: works because variable coordinate corresponds 1-1 to Grib Coordinate.
GribCoverage: must translate coordinates to Grib Coordinate index.
want.getShape() indicates the result Array shape.
SectionIterable.next(int[] index) is not used here.
/ * SectionIterable iterates over the source indexes corresponding to vindex s SparseArray . IOSP : works because variable coordinate corresponds 1 - 1 to Grib Coordinate . GribCoverage : must translate coordinates to Grib Coordinate index . want . getShape () indicates the result Array shape . SectionIterable . next ( int [] index ) is not used here .