docs: def draw(self):
          """Render the particles"""
          # update or particle positions by calling the OpenCL kernel
          # self.cle.execute(10)
          OpenGL.GL.glFlush()
  
          OpenGL.GL.glClear(
              OpenGL.GL.GL_COLOR_BUFFER_BIT | OpenGL.GL.GL_DEPTH_BUFFER_BIT
          )
          if self.white == -1:
              OpenGL.GL.glClearColor(1, 1, 1, 1)
          else:
              OpenGL.GL.glClearColor(0, 0, 0, 0)
          OpenGL.GL.glMatrixMode(OpenGL.GL.GL_MODELVIEW)
          OpenGL.GL.glLoadIdentity()
  
          # handle mouse transformations
          OpenGL.GL.glTranslatef(
              self.initrans.x, self.initrans.y, self.initrans.z
          )
          OpenGL.GL.glRotatef(self.rotate.x, 1, 0, 0)
          OpenGL.GL.glRotatef(
              self.rotate.y, 0, 1, 0
          )  # we switched around the axis so make this rotate_z
          OpenGL.GL.glTranslatef(
              self.translate.x, self.translate.y, self.translate.z
          )
  
          # render the matrix
          self.render_image()
          # render the particles
          self.render()
  
          # draw the x, y and z axis as lines
          glutil.draw_axes()
          # enable 2d display #
          OpenGL.GL.glMatrixMode(OpenGL.GL.GL_PROJECTION)
          OpenGL.GL.glPushMatrix()
          OpenGL.GL.glLoadIdentity()
          OpenGL.GL.glOrtho(0.0, self.width, self.height, 0.0, -1.0, 10.0)
          OpenGL.GL.glMatrixMode(OpenGL.GL.GL_MODELVIEW)
          # glPushMatrix()        ----Not sure if I need this
          OpenGL.GL.glLoadIdentity()
          OpenGL.GL.glDisable(OpenGL.GL.GL_CULL_FACE)
  
          OpenGL.GL.glClear(OpenGL.GL.GL_DEPTH_BUFFER_BIT)
  
          # glBegin(GL_LINES)
          # glColor3f(0.0, 1.0, 0.0)
          # glVertex2f(0.0, 0.0)
          # glVertex2f(100.0, 0.0)
          # glVertex2f(100.0, 100.0)
          # glVertex2f(0.0, 100.0)
          # glEnd()
  
          if self.white == 1:
              self.glut_print(
                  10,
                  15,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_cycle,
                  0.0,
                  1.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  30,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_temp,
                  0.0,
                  1.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  45,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_id_frag,
                  0.0,
                  1.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  60,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_likelihood,
                  0.0,
                  1.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  75,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_n_contigs,
                  0.0,
                  1.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  90,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_dist,
                  0.0,
                  1.0,
                  0.0,
                  1.0,
              )
          else:
              self.glut_print(
                  10,
                  15,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_cycle,
                  0.0,
                  0.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  30,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_temp,
                  0.0,
                  0.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  45,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_id_frag,
                  0.0,
                  0.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  60,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_likelihood,
                  0.0,
                  0.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  75,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_n_contigs,
                  0.0,
                  0.0,
                  0.0,
                  1.0,
              )
              self.glut_print(
                  10,
                  90,
                  OpenGL.GLUT.GLUT_BITMAP_9_BY_15,
                  self.str_curr_dist,
                  0.0,
                  0.0,
                  0.0,
                  1.0,
              )
  
          # self.glut_print( 10 , 15 , GLUT_BITMAP_9_BY_15 , self.str_curr_cycle
          # , 1.0 , 1.0 , 1.0 , 1.0) self.glut_print( 10 , 30 ,
          # GLUT_BITMAP_9_BY_15 , self.str_curr_temp , 1.0 , 1.0 , 1.0 , 1.0)
          # self.glut_print( 10 , 45 , GLUT_BITMAP_9_BY_15 ,
          # self.str_curr_id_frag , 1.0 , 1.0 , 1.0 , 1.0) self.glut_print( 10 ,
          # 60 , GLUT_BITMAP_9_BY_15 , self.str_likelihood , 1.0 , 1.0 , 1.0 ,
          # 1.0) self.glut_print( 10.1 , 60.1 , GLUT_BITMAP_9_BY_15 ,
          # self.str_likelihood , 1.0 , 1.0 , 1.0 , 1.0) self.glut_print( 9.9 ,
          # 59.9, GLUT_BITMAP_9_BY_15 , self.str_likelihood , 1.0 , 1.0 , 1.0 ,
          # 1.0) self.glut_print( 10 , 75 , GLUT_BITMAP_9_BY_15 ,
          # self.str_n_contigs , 1.0 , 1.0 , 1.0 , 1.0) self.glut_print( 10 , 90
          # , GLUT_BITMAP_9_BY_15 , self.str_curr_dist , 1.0 , 1.0 , 1.0 , 1.0)
  
          # self.glut_print( 10 , 15 , GLUT_BITMAP_9_BY_15 , self.str_curr_cycle
          # , 0.0 , 0.0 , 0.0 , 1.0) self.glut_print( 10 , 30 ,
          # GLUT_BITMAP_9_BY_15 , self.str_curr_temp , 0.0 , 0.0 , 0.0 , 1.0)
          # self.glut_print( 10 , 45 , GLUT_BITMAP_9_BY_15 ,
          # self.str_curr_id_frag , 0.0 , 0.0 , 0.0 , 1.0) self.glut_print( 10 ,
          # 60 , GLUT_BITMAP_9_BY_15 , self.str_likelihood , 0.0 , 0.0 , 0.0 ,
          # 1.0) self.glut_print( 10 , 75 , GLUT_BITMAP_9_BY_15 ,
          # self.str_n_contigs , 0.0 , 0.0 , 0.0 , 1.0) self.glut_print( 10 , 90
          # , GLUT_BITMAP_9_BY_15 , self.str_curr_dist , 0.0 , 0.0 , 0.0 , 1.0)
  
          # Making sure we can render 3d again
          OpenGL.GL.glMatrixMode(OpenGL.GL.GL_PROJECTION)
          OpenGL.GL.glPopMatrix()
          OpenGL.GL.glMatrixMode(OpenGL.GL.GL_MODELVIEW)
          # glPopMatrix()##        ----and this?
  
          #############
          OpenGL.GLUT.glutSwapBuffers()