// do not call directly
  @Override
  public Array reallyRead(Variable client, Section section, CancelTask cancelTask)
      throws IOException, InvalidRangeException {
    // see if its really a full read
    if ((null == section) || section.computeSize() == getSize())
      return reallyRead(client, cancelTask);

    if (orgVar == null) return getMissingDataArray(section.getShape());

    return orgVar.read(section);
  }
  // section of regular Variable
  @Override
  protected Array _read(Section section) throws IOException, InvalidRangeException {
    // really a full read
    if ((null == section) || section.computeSize() == getSize()) return _read();

    Array result;
    if (hasCachedData()) result = super._read(section);
    else result = proxyReader.reallyRead(this, section, null);

    if (needScaleOffsetMissing) return convertScaleOffsetMissing(result);
    else if (needEnumConversion) return convertEnums(result);
    else return result;
  }