def __init__(self): self.camera = Camera([15.0, 0.0, 2.5], [0.0, 0.0, 2.5], [0.0, 0.0, 1.0]) self.aspect = 1.0 self.numP = 300 self.t = 0 # flag to rotate camera view self.rotate = True # save current working directory cwd = os.getcwd() # initialize glfw - this changes cwd glfw.glfwInit() # restore cwd os.chdir(cwd) # version hints glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MAJOR, 3) glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MINOR, 3) glfw.glfwWindowHint(glfw.GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE) glfw.glfwWindowHint(glfw.GLFW_OPENGL_PROFILE, glfw.GLFW_OPENGL_CORE_PROFILE) # make a window self.width, self.height = 640, 480 self.aspect = self.width / float(self.height) self.win = glfw.glfwCreateWindow(self.width, self.height, b"Particle System") # make context current glfw.glfwMakeContextCurrent(self.win) # initialize GL glViewport(0, 0, self.width, self.height) glEnable(GL_DEPTH_TEST) glClearColor(0.2, 0.2, 0.2, 1.0) # set window callbacks glfw.glfwSetMouseButtonCallback(self.win, self.onMouseButton) glfw.glfwSetKeyCallback(self.win, self.onKeyboard) glfw.glfwSetWindowSizeCallback(self.win, self.onSize) # create 3D self.psys = ParticleSystem(self.numP) self.box = Box(1.0) # exit flag self.exitNow = False
def __init__(self): self.camera = Camera([15.0, 0.0, 2.5], [0.0, 0.0, 2.5], [0.0, 0.0, 1.0]) self.aspect = 1.0 self.numP = 300 self.t = 0 # flag to rotate camera view self.rotate = True # save current working directory cwd = os.getcwd() # initialize glfw - this changes cwd glfw.glfwInit() # restore cwd os.chdir(cwd) # version hints glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MAJOR, 3) glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MINOR, 3) glfw.glfwWindowHint(glfw.GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE) glfw.glfwWindowHint(glfw.GLFW_OPENGL_PROFILE, glfw.GLFW_OPENGL_CORE_PROFILE) # make a window self.width, self.height = 640, 480 self.aspect = self.width/float(self.height) self.win = glfw.glfwCreateWindow(self.width, self.height, b"Particle System") # make context current glfw.glfwMakeContextCurrent(self.win) # initialize GL glViewport(0, 0, self.width, self.height) glEnable(GL_DEPTH_TEST) glClearColor(0.2, 0.2, 0.2,1.0) # set window callbacks glfw.glfwSetMouseButtonCallback(self.win, self.onMouseButton) glfw.glfwSetKeyCallback(self.win, self.onKeyboard) glfw.glfwSetWindowSizeCallback(self.win, self.onSize) # create 3D self.psys = ParticleSystem(self.numP) self.box = Box(1.0) # exit flag self.exitNow = False
class PSMaker: """GLFW Rendering window class for Particle System""" def __init__(self): self.camera = Camera([15.0, 0.0, 2.5], [0.0, 0.0, 2.5], [0.0, 0.0, 1.0]) self.aspect = 1.0 self.numP = 300 self.t = 0 # flag to rotate camera view self.rotate = True # save current working directory cwd = os.getcwd() # initialize glfw - this changes cwd glfw.glfwInit() # restore cwd os.chdir(cwd) # version hints glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MAJOR, 3) glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MINOR, 3) glfw.glfwWindowHint(glfw.GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE) glfw.glfwWindowHint(glfw.GLFW_OPENGL_PROFILE, glfw.GLFW_OPENGL_CORE_PROFILE) # make a window self.width, self.height = 640, 480 self.aspect = self.width/float(self.height) self.win = glfw.glfwCreateWindow(self.width, self.height, b"Particle System") # make context current glfw.glfwMakeContextCurrent(self.win) # initialize GL glViewport(0, 0, self.width, self.height) glEnable(GL_DEPTH_TEST) glClearColor(0.2, 0.2, 0.2,1.0) # set window callbacks glfw.glfwSetMouseButtonCallback(self.win, self.onMouseButton) glfw.glfwSetKeyCallback(self.win, self.onKeyboard) glfw.glfwSetWindowSizeCallback(self.win, self.onSize) # create 3D self.psys = ParticleSystem(self.numP) self.box = Box(1.0) # exit flag self.exitNow = False def onMouseButton(self, win, button, action, mods): #print 'mouse button: ', win, button, action, mods pass def onKeyboard(self, win, key, scancode, action, mods): #print 'keyboard: ', win, key, scancode, action, mods if action == glfw.GLFW_PRESS: # ESC to quit if key == glfw.GLFW_KEY_ESCAPE: self.exitNow = True elif key == glfw.GLFW_KEY_R: self.rotate = not self.rotate elif key == glfw.GLFW_KEY_B: # toggle billboarding self.psys.enableBillboard = not self.psys.enableBillboard elif key == glfw.GLFW_KEY_D: # toggle depth mask self.psys.disableDepthMask = not self.psys.disableDepthMask elif key == glfw.GLFW_KEY_T: # toggle transparency self.psys.enableBlend = not self.psys.enableBlend def onSize(self, win, width, height): #print 'onsize: ', win, width, height self.width = width self.height = height self.aspect = width/float(height) glViewport(0, 0, self.width, self.height) def step(self): # inc time self.t += 10 self.psys.step() # rotate eye if self.rotate: self.camera.rotate() # restart every 5 seconds if not int(self.t) % 5000: self.psys.restart(self.numP) def run(self): # initializer timer glfw.glfwSetTime(0) t = 0.0 while not glfw.glfwWindowShouldClose(self.win) and not self.exitNow: # update every x seconds currT = glfw.glfwGetTime() if currT - t > 0.01: # update time t = currT # clear glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # render pMatrix = glutils.perspective(100.0, self.aspect, 0.1, 100.0) # modelview matrix mvMatrix = glutils.lookAt(self.camera.eye, self.camera.center, self.camera.up) # draw non-transparent object first self.box.render(pMatrix, mvMatrix) # render self.psys.render(pMatrix, mvMatrix, self.camera) # step self.step() glfw.glfwSwapBuffers(self.win) # Poll for and process events glfw.glfwPollEvents() # end glfw.glfwTerminate()
class PSMaker: """GLFW Rendering window class for Particle System""" def __init__(self): self.camera = Camera([15.0, 0.0, 2.5], [0.0, 0.0, 2.5], [0.0, 0.0, 1.0]) self.aspect = 1.0 self.numP = 300 self.t = 0 # flag to rotate camera view self.rotate = True # save current working directory cwd = os.getcwd() # initialize glfw - this changes cwd glfw.glfwInit() # restore cwd os.chdir(cwd) # version hints glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MAJOR, 3) glfw.glfwWindowHint(glfw.GLFW_CONTEXT_VERSION_MINOR, 3) glfw.glfwWindowHint(glfw.GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE) glfw.glfwWindowHint(glfw.GLFW_OPENGL_PROFILE, glfw.GLFW_OPENGL_CORE_PROFILE) # make a window self.width, self.height = 640, 480 self.aspect = self.width / float(self.height) self.win = glfw.glfwCreateWindow(self.width, self.height, b"Particle System") # make context current glfw.glfwMakeContextCurrent(self.win) # initialize GL glViewport(0, 0, self.width, self.height) glEnable(GL_DEPTH_TEST) glClearColor(0.2, 0.2, 0.2, 1.0) # set window callbacks glfw.glfwSetMouseButtonCallback(self.win, self.onMouseButton) glfw.glfwSetKeyCallback(self.win, self.onKeyboard) glfw.glfwSetWindowSizeCallback(self.win, self.onSize) # create 3D self.psys = ParticleSystem(self.numP) self.box = Box(1.0) # exit flag self.exitNow = False def onMouseButton(self, win, button, action, mods): #print 'mouse button: ', win, button, action, mods pass def onKeyboard(self, win, key, scancode, action, mods): #print 'keyboard: ', win, key, scancode, action, mods if action == glfw.GLFW_PRESS: # ESC to quit if key == glfw.GLFW_KEY_ESCAPE: self.exitNow = True elif key == glfw.GLFW_KEY_R: self.rotate = not self.rotate elif key == glfw.GLFW_KEY_B: # toggle billboarding self.psys.enableBillboard = not self.psys.enableBillboard elif key == glfw.GLFW_KEY_D: # toggle depth mask self.psys.disableDepthMask = not self.psys.disableDepthMask elif key == glfw.GLFW_KEY_T: # toggle transparency self.psys.enableBlend = not self.psys.enableBlend def onSize(self, win, width, height): #print 'onsize: ', win, width, height self.width = width self.height = height self.aspect = width / float(height) glViewport(0, 0, self.width, self.height) def step(self): # inc time self.t += 10 self.psys.step() # rotate eye if self.rotate: self.camera.rotate() # restart every 5 seconds if not int(self.t) % 5000: self.psys.restart(self.numP) def run(self): # initializer timer glfw.glfwSetTime(0) t = 0.0 while not glfw.glfwWindowShouldClose(self.win) and not self.exitNow: # update every x seconds currT = glfw.glfwGetTime() if currT - t > 0.01: # update time t = currT # clear glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # render pMatrix = glutils.perspective(100.0, self.aspect, 0.1, 100.0) # modelview matrix mvMatrix = glutils.lookAt(self.camera.eye, self.camera.center, self.camera.up) # draw non-transparent object first self.box.render(pMatrix, mvMatrix) # render self.psys.render(pMatrix, mvMatrix, self.camera) # step self.step() glfw.glfwSwapBuffers(self.win) # Poll for and process events glfw.glfwPollEvents() # end glfw.glfwTerminate()
def __init__(self, param, target=1.0, job_server=None, gui=None): self.ps = ParticleSystem(param, job_server) self.target = target self.gui = gui self.param = param
class AnnealedSMC(): def __init__(self, param, target=1.0, job_server=None, gui=None): self.ps = ParticleSystem(param, job_server) self.target = target self.gui = gui self.param = param def sample(self, lock=None): time.sleep(0.2) if not lock is None: lock.acquire() self.start = time.time() # run sequential MC scheme while self.ps.rho < self.target: self.ps.fit_proposal() self.ps.resample() self.ps.move() self.ps.reweight(self.target) if not self.check_gui(): return if self.ps.f.criterion == LAPLACE_PLUS_IS: t = time.time() if self.ps.verbose: sys.stdout.write('reweight particles according to IS estimate...') X = self.ps.get_distinct()[0] self.ps.f.criterion = FULL_IS self.ps.log_weights = self.ps.f.lpmf(X) self.ps.X = X if self.ps.verbose: sys.stdout.write('\rreweighted in %.2f sec\n' % (time.time() - t)) self.check_gui() sys.stdout.write('\rannealed smc completed in %s.\n' % self.get_time_elapsed()) if not lock is None: lock.release() # finalize thread if not self.gui is None: self.gui.stop() self.gui.write_result_file() self.check_gui() def initialize(self, lock=None): """ Initialize particle system. """ if not lock is None: lock.acquire() if self.ps.d < self.param['data/min_dim']: self.ps.enumerate_state_space(self.target) else: self.ps.initialize(self.param, self.target) if not lock is None: lock.release() self.check_gui() def get_time_elapsed(self): """ \return Get elapsed time. """ return str(datetime.timedelta(seconds=time.time() - self.start)) def get_csv(self): """ \return A comma separated values of mean, name, evals, time, pd, ac, log_f. """ return (','.join(['%.8f' % x for x in self.ps.get_mean()]), ','.join(['%.3f' % (self.ps.n_f_evals / 1000.0), '%.3f' % (time.time() - self.start)]), ','.join(['%.5f' % x for x in self.ps.r_pd]), ','.join(['%.5f' % x for x in self.ps.r_ac])) def check_gui(self): """ Plots advance of SMC on GUI. """ if self.gui is None: return True # show status if self.gui.is_running: if not self.gui.mygraph is None: self.gui.mygraph.values = [self.ps.r_ac, self.ps.r_pd] self.gui.mygraph.lines = [self.ps.r_rs] self.gui.mygraph.redraw() if not self.gui.mybarplot is None: self.gui.mybarplot.values = self.ps.get_mean() self.gui.mybarplot.redraw() self.gui.progress_bar.set_value(self.ps.rho / self.target) else: self.gui.write('\rstopped.') self.gui.stop_button.config(relief='raised', state='normal') # check if running return self.gui.is_running