class_docstr: The gui to start and manipulate the analysis model
class_docstr_tok: ["The","gui","to","start","and","manipulate","the","analysis","model"]
code: def add_analysis(self, analysis_id, name, parent_id, numpoints):
      im = ImageQt.ImageQt(
          Image.new("RGB", self.thumb_size, (100, 0, 200))
      )
      item = QStandardItem(QIcon(QPixmap.fromImage(im)), name)
      # Need to persist the thumbnails otherwise the ImageQT will get garbage
      # collected along with the memory
      item.__thumb = im
      if parent_id == ModelGui.NO_PARENT_ID:
          # print("Adding root")
          self.clear()
          self.model.insertRow(
              0,
              [
                  item,
                  QStandardItem(str(analysis_id)),
                  QStandardItem(str(numpoints)),
              ],
          )
          self.root_id = analysis_id
          self.id_item[analysis_id] = item
      else:
          # print("Adding child")
          parent = self.find_analysis_item(parent_id)
          if parent is not None:
              parent.appendRow(
                  [
                      item,
                      QStandardItem(str(analysis_id)),
                      QStandardItem(str(numpoints)),
                  ]
              )
              self.id_item[analysis_id] = item
              self.tree.expand(parent.index())
  
imports: import sys
  import os
  import queue
  from pathlib import Path
  import math
  from enum import Enum
  import nptsne
  import numpy
  import PIL
  from PIL import ImageQt, Image
  from PyQt5.QtWidgets import QApplication, QTreeView, QWidget, QGridLayout, QDialog, QGroupBox, QFormLayout, QPushButton, QLabel, QSpinBox, QFileDialog, QAbstractItemView, QComboBox, QHBoxLayout, QVBoxLayout, QLineEdit, QHeaderView
  from PyQt5.QtCore import Qt, QTimer, QSize, pyqtSlot
  from PyQt5.QtGui import QIcon, QStandardItemModel, QStandardItem, QPixmap, QIntValidator
  from DemoConfig import CONFIGS
label_desc: Use image node_id 24 for calling the ModelGui obj's underlying member method code with example usage: obj.add_analysis(analysis_id, name, parent_id, numpoints) without return types