public MathType getMathType() throws VisADException {
    MathType mt = null;
    HDF5DataAdaptable theMember = null;
    int size = getMemberCount();
    int new_size = 0;

    if (size <= 0) return (mathtype = null);

    if (mathtype == null) {
      MathType[] m_types = new MathType[size];
      for (int i = 0; i < size; i++) {
        theMember = (HDF5DataAdaptable) getMemberAt(i);
        mt = theMember.getMathType();
        if (mt == null) removeMember(theMember);
        else m_types[new_size++] = mt;
      }

      new_size = getMemberCount();
      MathType[] new_types = m_types;

      if (new_size < size) {
        if (new_size <= 0) return (mathtype = null);
        new_types = new MathType[new_size];
        for (int i = 0; i < new_size; i++) new_types[i] = m_types[i];
      }

      mathtype = (MathType) new TupleType(new_types);
    }

    return mathtype;
  }
  public DataImpl getAdaptedData() throws VisADException, RemoteException {
    int size = getMemberCount();

    if (size <= 0) return null;

    if (datas == null) datas = new DataImpl[size];

    HDF5DataAdaptable theData = null;
    if (tuple == null) {
      for (int i = 0; i < size; i++) {
        theData = (HDF5DataAdaptable) getMemberAt(i);
        datas[i] = theData.getAdaptedData();
      }
      tuple = (DataImpl) new Tuple((TupleType) mathtype, datas, false);
    }

    return tuple;
  }