class_docstr: Class to wrap general DICOM files
  
  Methods:
  
  * get_data()
  * get_pixel_array()
  * is_same_series(other)
  * __getitem__ : return attributes from `dcm_data`
  * get(key[, default]) - as usual given __getitem__ above
  
  Attributes and things that look like attributes:
  
  * affine : (4, 4) array
  * dcm_data : object
  * image_shape : tuple
  * image_orient_patient : (3,2) array
  * slice_normal : (3,) array
  * rotation_matrix : (3,3) array
  * voxel_sizes : tuple length 3
  * image_position : sequence length 3
  * slice_indicator : float
  * series_signature : tuple
docstr: Signature for matching slices into series
  
  We use `signature` in ``self.is_same_series(other)``.
  
  Returns
  -------
  signature : dict
     with values of 2-element sequences, where first element is
     value, and second element is function to compare this value
     with another.  This allows us to pass things like arrays,
     that might need to be ``allclose`` instead of equal
docstr_tok: ["Signature","for","matching","slices","into","series","We","use","`","signature","`","in","``","self.is_same_series","(","other",")","``",".","Returns","--","--","--","-","signature",":","dict","with","values","of","2-element","sequences",",","where","first","element","is","value",",","and","second","element","is","function","to","compare","this","value","with","another",".","This","allows","us","to","pass","things","like","arrays",",","that","might","need","to","be","``","allclose","``","instead","of","equal"]
code: def series_signature(self):
      """Signature for matching slices into series
  
      We use `signature` in ``self.is_same_series(other)``.
  
      Returns
      -------
      signature : dict
         with values of 2-element sequences, where first element is
         value, and second element is function to compare this value
         with another.  This allows us to pass things like arrays,
         that might need to be ``allclose`` instead of equal
      """
      # dictionary with value, comparison func tuple
      signature = {}
      eq = operator.eq
      for key in (
          "SeriesInstanceUID",
          "SeriesNumber",
          "ImageType",
          "SequenceName",
          "EchoNumbers",
      ):
          signature[key] = (self.get(key), eq)
      signature["image_shape"] = (self.image_shape, eq)
      signature["iop"] = (self.image_orient_patient, none_or_close)
      signature["vox"] = (self.voxel_sizes, none_or_close)
      return signature
  
imports: import operator
  import warnings
  import numpy
  from nibabel.optpkg import optional_package
  from ..onetime import auto_attr
  from ..openers import ImageOpener
  from .None import csareader
  from .dwiparams import B2q, nearest_pos_semi_def, q2bg
label_desc: Use image node_id 10 for calling the Wrapper obj's underlying member method code with example usage: obj.series_signature() and returns: signature