class_docstr: Class to represent a sequence of 3d scans (possibly acquired on a
  slice-by-slice basis).
  
  Object remains empty until the data array is actually loaded in memory.
  
  Parameters
  ----------
    data : nd array or proxy (function that actually gets the array)
class_docstr_tok: ["Class","to","represent","a","sequence","of","3d","scans","(","possibly","acquired","on","a","slice-by-slice","basis",")",".","Object","remains","empty","until","the","data","array","is","actually","loaded","in","memory",".","Parameters","--","--","--","--","--","data",":","nd","array","or","proxy","(","function","that","actually","gets","the","array",")"]
docstr: Account for the fact that slices may be stored in reverse
  order wrt the scanner coordinate system convention (slice 0 ==
  bottom of the head)
docstr_tok: ["Account","for","the","fact","that","slices","may","be","stored","in","reverse","order","wrt","the","scanner","coordinate","system","convention","(","slice","0","==","bottom","of","the","head",")"]
code: def z_to_slice(self, z):
      """
      Account for the fact that slices may be stored in reverse
      order wrt the scanner coordinate system convention (slice 0 ==
      bottom of the head)
      """
      if self.slice_direction < 0:
          return self.nslices - 1 - z
      else:
          return z
  
imports: import os
  import warnings
  import numpy
  from nibabel import io_orientation
  from nibabel.affines import apply_affine
  from ...core.image.image_spaces import as_xyz_image, make_xyz_image, xyz_affine
  from ...io.nibcompat import get_header
  from ..slicetiming import timefuncs
  from ._registration import _cspline_sample3d, _cspline_sample4d, _cspline_transform
  from .affine import Affine, Rigid
  from .optimizer import configure_optimizer, use_derivatives
  from .type_check import check_type, check_type_and_shape
label_desc: Use image node_id 6 for calling the Image4d obj's underlying member method code with example usage: obj.z_to_slice(z) and returns: unknown, z