code: def get_normalization_params(array, norm_type):
      if norm_type == "auto":
          norm_type = auto_normalization_setting(array)
      shift = 0.0
      scale = 1.0
      # FIX Issue#52
      # Ignore NaNs (if any) in array for normalization
      non_nan_array = array[~np.isnan(array)]
      if norm_type == "soft":
          lowest = np.min(non_nan_array)
          q95 = np.quantile(non_nan_array, 0.95)
          width = q95 - lowest
          if math.isclose(width, 0):
              width = np.max(non_nan_array) - lowest
          shift = lowest
          scale = width
      elif norm_type == "soft1":
          lowest = np.min(non_nan_array)
          q90 = np.quantile(non_nan_array, 0.9)
          width = q90 - lowest
          if math.isclose(width, 0):
              width = (np.max(non_nan_array) - lowest) / 1.25
          shift = lowest - 0.125 * width
          scale = 1.25 * width
      elif norm_type == "minmax":
          shift = np.min(non_nan_array)
          scale = np.max(non_nan_array) - shift
      elif norm_type == "standardize":
          shift = np.mean(non_nan_array)
          scale: float = np.std(non_nan_array)  # type: ignore
      elif norm_type != "off":
          log.error(f"Normalization {norm_type} not defined.")
      # END FIX
      return ShiftScale(shift, scale)
  
imports: from __future__ import annotations
  import logging
  import math
  from collections import OrderedDict
  from dataclasses import dataclass
  from typing import TYPE_CHECKING, List, Optional, Tuple
  import numpy
  import pandas
label_desc: Use image node_id 8 for calling a global function with example usage: get_normalization_params(array, norm_type) and returns: ShiftScale