cdm/src/main/java/ucar/nc2/iosp/IospHelper.java
static public ucar.ma2.Array readSection(ParsedSectionSpec cer) throws IOException, InvalidRangeException {
    Variable inner = null;
    List<Range> totalRanges = new ArrayList<>();
    ParsedSectionSpec current = cer;
    while (current != null) {
      totalRanges.addAll(current.section.getRanges());
      inner = current.v;
      current = current.child;
    }
    assert inner != null;

    Section total = new Section(totalRanges);
    Array result = Array.factory(inner.getDataType(), total.getShape());

    // must be a Structure
    Structure outer = (Structure) cer.v;
    Structure outerSubset = outer.select(cer.child.v.getShortName()); // allows IOSPs to optimize for  this case
    ArrayStructure outerData = (ArrayStructure) outerSubset.read(cer.section);
    extractSection(cer.child, outerData, result.getIndexIterator());
    return result;
  }
static public ucar.ma2.Array readSection(ParsedSectionSpec cer) throws IOException, InvalidRangeException {
    Variable inner = null;
    List<Range> totalRanges = new ArrayList<>();
    ParsedSectionSpec current = cer;
    while (current != null) {
      totalRanges.addAll(current.section.getRanges());
      inner = current.v;
      current = current.child;
    }
    assert inner != null;

    Section total = new Section(totalRanges);
    Array result = Array.factory(inner.getDataType(), total.getShape());

    // must be a Structure
    Structure outer = (Structure) cer.v;
    Structure outerSubset = outer.select(cer.child.v.getShortName()); // allows IOSPs to optimize for  this case
    ArrayStructure outerData = (ArrayStructure) outerSubset.read(cer.section);
    extractSection(cer.child, outerData, result.getIndexIterator());
    return result;
  }
static public ucar . ma2 . Array readSection ( ParsedSectionSpec cer ) throws IOException , InvalidRangeException { Variable inner = null ; List < Range > totalRanges = new ArrayList <> ( ) ; ParsedSectionSpec current = cer ; while ( current != null ) { totalRanges . addAll ( current . section . getRanges ( ) ) ; inner = current . v ; current = current . child ; } assert inner != null ; Section total = new Section ( totalRanges ) ; Array result = Array . factory ( inner . getDataType ( ) , total . getShape ( ) ) ; // must be a Structure
 Structure outer = ( Structure ) cer . v ; Structure outerSubset = outer . select ( cer . child . v . getShortName ( ) ) ; // allows IOSPs to optimize for  this case
 ArrayStructure outerData = ( ArrayStructure ) outerSubset . read ( cer . section ) ; extractSection ( cer . child , outerData , result . getIndexIterator ( ) ) ; return result ; }
section reading for member data
section reading for member data