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.
code: def __init_ui(self):
      # Define the layout
      self.main_layout = QtWidgets.QVBoxLayout(self)
      self.widget_layout = QtWidgets.QHBoxLayout(self)
      self.widget_layout.addWidget(self.embedding_viewer, 1)
      data_gui_stretch = 0
      if self.demo_type == DemoType.HYPERSPECTRAL_DEMO:
          data_gui_stretch = 1
      if self.data_gui:
          self.widget_layout.addWidget(self.data_gui, data_gui_stretch)
      self.status = QtWidgets.QStatusBar()
  
      self.main_layout.addLayout(self.widget_layout)
      self.main_layout.addWidget(self.status)
  
      self.setLayout(self.main_layout)
      self.show()
  
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 2 for calling the AnalysisController obj's underlying member method code with example usage: obj.__init_ui() without return types