docs: def _multiframe_to_block(multiframe_dicom):
      """
      Generate a full datablock containing all stacks
      """
      # Calculate the amount of stacks and slices in the stack
      number_of_stack_slices = int(common.get_ss_value(multiframe_dicom[Tag(0x2001, 0x105f)][0][Tag(0x2001, 0x102d)]))
      number_of_stacks = int(int(multiframe_dicom.NumberOfFrames) / number_of_stack_slices)
  
      # We create a numpy array
      size_x = multiframe_dicom.pixel_array.shape[2]
      size_y = multiframe_dicom.pixel_array.shape[1]
      size_z = number_of_stack_slices
      size_t = number_of_stacks
      # get the format
      format_string = common.get_numpy_type(multiframe_dicom)
  
      # get header info needed for ordering
      frame_info = multiframe_dicom[0x5200, 0x9230]
  
      data_4d = numpy.zeros((size_z, size_y, size_x, size_t), dtype=format_string)
  
      # loop over each slice and insert in datablock
      t_location_index = _get_t_position_index(multiframe_dicom)
      for slice_index in range(0, size_t * size_z):
  
          z_location = frame_info[slice_index].FrameContentSequence[0].InStackPositionNumber - 1
          if t_location_index is None:
              t_location = frame_info[slice_index].FrameContentSequence[0].TemporalPositionIndex - 1
          else:
              t_location = frame_info[slice_index].FrameContentSequence[0].DimensionIndexValues[t_location_index] - 1
  
          block_data = multiframe_dicom.pixel_array[slice_index, :, :]
          # apply scaling
          rescale_intercept = frame_info[slice_index].PixelValueTransformationSequence[0].RescaleIntercept
          rescale_slope = frame_info[slice_index].PixelValueTransformationSequence[0].RescaleSlope
          block_data = common.do_scaling(block_data,
                                         rescale_slope, rescale_intercept)
          # switch to float if needed
          if block_data.dtype != data_4d.dtype:
              data_4d = data_4d.astype(block_data.dtype)
          data_4d[z_location, :, :, t_location] = block_data
  
      full_block = numpy.zeros((size_x, size_y, size_z, size_t), dtype=data_4d.dtype)
  
      # loop over each stack and reorganize the data
      for t_index in range(0, size_t):
          # transpose the block so the directions are correct
          data_3d = numpy.transpose(data_4d[:, :, :, t_index], (2, 1, 0))
          # add the block the the full data
          full_block[:, :, :, t_index] = data_3d
  
      return full_block