class_docstr: The containing dialog and controller for the embedding
  and the image viewer that together make up an analysis
  (i.e. a user selection at an hSNE scale). It also
  iterates over the embedding once the analysis is created
  and this is dynamically displayed in the embedding gui.
docstr: Start the embedding  iteration loop with the
  supplied data and hsne analysis
docstr_tok: ["Start","the","embedding","iteration","loop","with","the","supplied","data","and","hsne","analysis"]
code: def start_embedding(
      self,
      data,
      analysis,
      iterations,
      image_dimensions,
      top_level=False,
      labels=None,
      color_norm=None,
  ):
      """Start the embedding  iteration loop with the
      supplied data and hsne analysis"""
      self.setWindowTitle(str(analysis))
      self.analysis = analysis
      self.data = data
      self.image_dimensions = image_dimensions
      self.iterations = iterations
  
      # Animation support for the embedding
      # if matplot lib rendering is slow do a number of iterations per frame
      # Total iterations = num_frames X iters_per_frame
      self.iters_per_frame = 5
      self.num_frames = int(self.iterations / self.iters_per_frame)
      self._stop_iter = False
      self._iter_count = 0
      self.timer_count = 0
      if self.demo_type in [
          DemoType.LABELLED_DEMO,
          DemoType.HYPERSPECTRAL_DEMO,
      ]:
          self.data_gui.init_plot(data, image_dimensions)
      elif self.demo_type == DemoType.POINT_DEMO:
          self.data_gui.init_metadata(
              self.meta_path, self.on_meta_colors, self.on_meta_select
          )
  
      sub_labels = None
      if labels is not None:
          sub_labels = labels[self.analysis.landmark_orig_indexes]
  
      disable_select = self.analysis.scale_id == 0
      self.embedding_viewer.init_plot(
          analysis.embedding,
          analysis.landmark_weights,
          self.on_selection,
          self.do_close,
          disable_select,
          top_level,
          sub_labels,
          color_norm,
      )
  
      # Fire up the embedding - drive the embedding and animation using a
      # timer
      self.timer = self.embedding_viewer.get_canvas_timer(50)
      self.timer.add_callback(self.iterate_tsne)
      self.timer.start()
  
imports: import time
  import numpy
  from PyQt5 import QtWidgets
  from EmbeddingGui import EmbeddingViewer
  from ModelGui import DemoType
  from CompositeImageViewer import CompositeImageViewer
  from HyperspectralImageViewer import HyperspectralImageViewer
  from MetaDataViewer import MetaDataViewer
label_desc: Use image node_id 4 for calling the AnalysisController obj's underlying member method code with example usage: obj.start_embedding(data, analysis, iterations, image_dimensions, top_level, labels, color_norm) without return types