class_docstr: Extending the default sampler to include csv data
code: def __init__(
      self,
      reader,
      csv_reader=None,
      window_sizes=None,
      batch_size=10,
      windows_per_image=1,
      shuffle=True,
      queue_length=10,
      num_threads=4,
      epoch=-1,
      smaller_final_batch_mode="pad",
      name="random_vector_sampler",
  ):
      self.csv_reader = csv_reader
      print("assigned csv_reader")
      ImageWindowDataset.__init__(
          self,
          reader=reader,
          window_sizes=window_sizes,
          batch_size=batch_size,
          windows_per_image=windows_per_image,
          shuffle=shuffle,
          queue_length=queue_length,
          epoch=epoch,
          smaller_final_batch_mode=smaller_final_batch_mode,
          name=name,
      )
      print("initialised IWD")
      self.set_num_threads(num_threads)
  
file_path: NiftyNet/niftynet/contrib/csv_reader/sampler_csv_rows.py
imports: import numpy
  from niftynet.engine.image_window_dataset import ImageWindowDataset
  from niftynet.engine.image_window import N_SPATIAL, LOCATION_FORMAT
label_desc: Use image node_id 1 to create a new ImageWindowDatasetCSV object from inherited base classes: ImageWindowDataset with example: obj = ImageWindowDatasetCSV(reader, csv_reader, window_sizes, batch_size, windows_per_image, shuffle, queue_length, num_threads, epoch, smaller_final_batch_mode, name)