docs: def dicom_to_nifti(dicom_input, output_file):
      """
      This function will convert an anatomical dicom series to a nifti
  
      Examples: See unit test
  
      :param output_file: filepath to the output nifti
      :param dicom_input: directory with the dicom files for a single scan, or list of read in dicoms
      """
      if len(dicom_input) <= 0:
          raise ConversionError('NO_DICOM_FILES_FOUND')
  
      # remove duplicate slices based on position and data
      dicom_input = _remove_duplicate_slices(dicom_input)
  
      # remove localizers based on image type
      dicom_input = _remove_localizers_by_imagetype(dicom_input)
      if settings.validate_slicecount:
          # remove_localizers based on image orientation (only valid if slicecount is validated)
          dicom_input = _remove_localizers_by_orientation(dicom_input)
  
          # validate all the dicom files for correct orientations
          common.validate_slicecount(dicom_input)
      if settings.validate_orientation:
          # validate that all slices have the same orientation
          common.validate_orientation(dicom_input)
      if settings.validate_orthogonal:
          # validate that we have an orthogonal image (to detect gantry tilting etc)
          common.validate_orthogonal(dicom_input)
  
      # sort the dicoms
      dicom_input = common.sort_dicoms(dicom_input)
  
      # validate slice increment inconsistent
      slice_increment_inconsistent = False
      if settings.validate_slice_increment:
          # validate that all slices have a consistent slice increment
          common.validate_slice_increment(dicom_input)
      elif common.is_slice_increment_inconsistent(dicom_input):
          slice_increment_inconsistent = True
  
      # if inconsistent increment and we allow resampling then do the resampling based conversion to maintain the correct geometric shape
      if slice_increment_inconsistent and settings.resample:
          nii_image, max_slice_increment = _convert_slice_incement_inconsistencies(dicom_input)
      # do the normal conversion
      else:
          # Get data; originally z,y,x, transposed to x,y,z
          data = common.get_volume_pixeldata(dicom_input)
  
          affine, max_slice_increment = common.create_affine(dicom_input)
  
          # Convert to nifti
          nii_image = nibabel.Nifti1Image(data, affine)
  
      # Set TR and TE if available
      if Tag(0x0018, 0x0081) in dicom_input[0] and Tag(0x0018, 0x0081) in dicom_input[0]:
          common.set_tr_te(nii_image, float(dicom_input[0].RepetitionTime), float(dicom_input[0].EchoTime))
  
      # Save to disk
      if output_file is not None:
          logger.info('Saving nifti to disk %s' % output_file)
          nii_image.to_filename(output_file)
  
      return {'NII_FILE': output_file,
              'NII': nii_image,
              'MAX_SLICE_INCREMENT': max_slice_increment}