class_docstr: For a concrete example::
  
      _input_sources define multiple modality mappings, e.g.,
      _input_sources {'image': ('T1', 'T2'), 'label': ('manual_map',)}
  
  means:
  
  'image' consists of two components, formed by
  concatenating 'T1' and 'T2' input source images.
  'label' consists of one component, loading from 'manual_map'
  
  :param self._names: a tuple of the output names of this reader.
      ``('image', 'labels')``
  
  :param self._shapes: the shapes after combining input sources
      ``{'image': (192, 160, 192, 1, 2), 'label': (192, 160, 192, 1, 1)}``
  
  :param self._dtypes: store the dictionary of tensorflow shapes
      ``{'image': tf.float32, 'label': tf.float32}``
  
  :param self.output_list: a list of dictionaries, with each item::
  
      {'image': <niftynet.io.image_type.SpatialImage4D object>,
      'label': <niftynet.io.image_type.SpatialImage3D object>}
code: def __init__(self, names=None):
      # list of file names
      self._file_list = None
      self._input_sources = None
      self._spatial_ranks = None
      self._shapes = None
      self._dtypes = None
      self._names = None
      if names:
          self.names = names
  
      # list of image objects
      self.output_list = None
      self.current_id = -1
  
      self.preprocessors = []
      super(ImageReader, self).__init__(name="image_reader")
  
imports: from __future__ import absolute_import, division, print_function
  from copy import deepcopy
  import argparse
  import numpy
  import pandas
  import tensorflow
  from six import string_types
  from niftynet.io.misc_io import dtype_casting
  from niftynet.io.image_sets_partitioner import COLUMN_UNIQ_ID
  from niftynet.io.image_type import ImageFactory
  from niftynet.layer.base_layer import Layer, DataDependentLayer, RandomisedLayer
  from niftynet.utilities.user_parameters_helper import make_input_tuple
  from niftynet.utilities.util_common import print_progress_bar, ParserNamespace
  from niftynet.io.image_sets_partitioner import ImageSetsPartitioner
  from niftynet.utilities.util_common import look_up_operations
label_desc: Use image node_id 1 to create a new ImageReader object from inherited base classes: Layer with example: obj = ImageReader(names)