code: def getDMCparam(fn: Path, xyPix, xyBin,
                  FrameIndReq=None, ut1req=None, kineticsec=None, startUTC=None, nHeadBytes=4, verbose=0):
      
      Nmetadata = nHeadBytes // 2  # FIXME for DMCdata version 1 only
  
      if not fn.is_file():  # leave this here, getsize() doesn't fail on directory
          raise ValueError(f'{fn} is not a file!')
  
      print(f'reading {fn}')
  
      # int() in case we are fed a float or int
      SuperX = int(xyPix[0] // xyBin[0])
      SuperY = int(xyPix[1] // xyBin[1])
  
      PixelsPerImage, BytesPerImage, BytesPerFrame = howbig(
          SuperX, SuperY, nHeadBytes)
  
      (firstRawInd, lastRawInd) = getRawInd(
          fn, BytesPerImage, nHeadBytes, Nmetadata)
  
      FrameIndRel = whichframes(fn, FrameIndReq, kineticsec, ut1req, startUTC, firstRawInd, lastRawInd,
                                BytesPerImage, BytesPerFrame, verbose)
  
      return {'superx': SuperX, 'supery': SuperY, 'nmetadata': Nmetadata,
              'bytesperframe': BytesPerFrame, 'pixelsperimage': PixelsPerImage,
              'nframeextract': FrameIndRel.size,
              'frameindrel': FrameIndRel}
docs: nHeadBytes=4 for 2013-2016 data
      nHeadBytes=0 for 2011 data