docstr: parses the subheaders in the ecat (.v) file
  there is one subheader for each frame in the ecat file
  
  Parameters
  ----------
  hdr : EcatHeader
      ECAT main header
  mlist : array shape (N, 4)
      Matrix list
  fileobj : ECAT file <filename>.v  fileholder or file object
            with read, seek methods
docstr_tok: ["parses","the","subheaders","in","the","ecat","(",".v",")","file","there","is","one","subheader","for","each","frame","in","the","ecat","file","Parameters","--","--","--","--","--","hdr",":","EcatHeader","ECAT","main","header","mlist",":","array","shape","(","N",",","4",")","Matrix","list","fileobj",":","ECAT","file","<","filename",">",".v","fileholder","or","file","object","with","read",",","seek","methods"]
code: def __init__(self, hdr, mlist, fileobj):
      """parses the subheaders in the ecat (.v) file
      there is one subheader for each frame in the ecat file
  
      Parameters
      ----------
      hdr : EcatHeader
          ECAT main header
      mlist : array shape (N, 4)
          Matrix list
      fileobj : ECAT file <filename>.v  fileholder or file object
                with read, seek methods
      """
      self._header = hdr
      self.endianness = hdr.endianness
      self._mlist = mlist
      self.fileobj = fileobj
      self.subheaders = read_subheaders(fileobj, mlist, hdr.endianness)
  
imports: import warnings
  from numbers import Integral
  import numpy
  from .arraywriters import make_array_writer
  from .fileslice import canonical_slicers, predict_shape, slice2outax
  from .spatialimages import SpatialHeader, SpatialImage
  from .volumeutils import array_from_file, make_dt_codes, native_code, swapped_code
  from .wrapstruct import WrapStruct
label_desc: Use image node_id 1 to create a new EcatSubHeader object  with example: obj = EcatSubHeader(hdr, mlist, fileobj)