def Stack_Sectioning(self,start,stop,step=0.2, verbose=True): no = int((stop-start)/step)+1 pos = start xs = self.ccd.image_size[0] ys = self.ccd.image_size[1] # psz = qx.getordernum() psz = 3 self.data = N.zeros((psz*no,xs,ys), dtype=N.uint16) self.ccd.SetShutterMode(1) q = self.ccd.Acquire() self.pol.MoveAbs(0) time.sleep(0.4) for p in range(no): self.zst.setPositionf(pos) for m in range(psz): qx.selecteorder(15+m) qx.activate() time.sleep(0.02) daq.CCDTrig_run(self.handleA,self.handleB) q = self.ccd.WaitForNewData() print (p,q) self.data[psz*p + m] = self.ccd.images qx.deactivate() time.sleep(0.02) pos += step self.ccd.AbortAcquisition() self.ccd.SetShutterMode(2) if verbose: T.imshow(self.data, vmin=self.data.min(), vmax=self.data.max()) cur_pos = self.zst.getPosition() self.stackTags(cur_pos,start,stop,step,function='Z-Stack patterns') return True
def si_2d_pattern(self,start,stop,step=0.2, verbose=True): rots = self.pol_array no = int((stop-start)/step)+1 pos = start xs = self.ccd.image_size[0] ys = self.ccd.image_size[1] # psz = qx.getordernum() psz = 9 phs = int(psz/3) self.data = N.zeros((psz*no,xs,ys), dtype=N.uint16) # self.slm.SLM_on() self.ccd.SetShutterMode(1) q = self.ccd.Acquire() time.sleep(0.1) # was 0.2, changed 20141114 for p in range(no): self.zst.setPositionf(pos) for w in range(3): self.pol.MoveAbs(rots[w]) time.sleep(0.8) for m in range(phs): #self.pr.setVoltage(rots[m]) qx.selecteorder(19+phs*w+m) qx.activate() time.sleep(0.02) #print self.pr.getVoltage() #self.dmd.set_image(patt) #self.slm.show_next_patt() #self.slm.show_patt(m) daq.CCDTrig_run(self.handleA,self.handleB) q = self.ccd.WaitForNewData() print (p,q) self.data[psz*p + 5*w + m] = self.ccd.images qx.deactivate() # time.sleep(0.02) pos += step self.ccd.AbortAcquisition() self.ccd.SetShutterMode(2) # self.slm.SLM_off() #self.pr.setVoltage(0.0) if verbose: T.imshow(self.data, vmin=self.data.min(), vmax=self.data.max()) cur_pos = self.zst.getPosition() self.stackTags(cur_pos,start,stop,step,function='Z-Stack patterns') return True
def Image_Patterns(self, angle=0, no=200, pol=0, verbose=True): pos = self.zst.getPosition() xs = self.ccd.image_size[0] ys = self.ccd.image_size[1] # psz = self.slm.ni psz = 5 self.data = N.zeros((psz*no,xs,ys), dtype=N.uint16) # self.slm.SLM_on() self.ccd.SetShutterMode(1) q = self.ccd.Acquire() time.sleep(0.01) # was 0.2, changed 20141114 self.zst.setPositionf(pos) for p in range(no): for m in range(angle*5,psz+angle*5): #self.pr.setVoltage(rots[m]) self.pol.MoveAbs(pol) qx.selecteorder(m) qx.activate() #time.sleep(.50) #print self.pr.getVoltage() #self.dmd.set_image(patt) #self.slm.show_next_patt() # self.slm.show_patt(m) daq.CCDTrig_run(self.handleA,self.handleB) q = self.ccd.WaitForNewData() print (p,q) self.data[psz*p+m%5] = self.ccd.images qx.deactivate() time.sleep(self.delay) self.ccd.AbortAcquisition() self.ccd.SetShutterMode(2) # self.slm.SLM_off() #self.pr.setVoltage(0.0) if verbose: T.imshow(self.data, vmin=self.data.min(), vmax=self.data.max()) cur_pos = self.prior.getPosition() self.stackTags(cur_pos[0],cur_pos[1],function='Z-Stack patterns') return True
def run(self): self.is_videomode = True if (self.normal_mode==True): while (self.is_videomode): self.get_img() self.emit(SIGNAL('update')) else: while (self.is_videomode): #self.slm.show_next_patt() # psz = qx.getordernum() psz =15 phs = int(psz/3) for m in range(3): self.pol.MoveAbs(self.pol_array[m]) time.sleep(0.02) for n in range(phs): qx.selecteorder(m*phs+n) qx.activate() self.get_img() self.emit(SIGNAL('update')) qx.deactivate() self.ccd.AbortAcquisition() self.ccd.SetShutterMode(2)
def ao_optimize_si(om, dm, mf, modes=[4], amprange=N.arange(-1.0, 1.25, 0.25), S=None, gain=50, blaser=False, rlaser=True): center = om.zst.getPosition() dm.Send(cmd_best) dt = N.zeros(amprange.shape) results = [] om.open_Acq(exposure=0.1, emgain=gain, laser=blaser, Rlaser=rlaser, cntLaser=False, LED12=1, FTM=False, conv=0, ccd=True, trig=1, regen=False) om.get_img() slm.selecteorder(16) slm.activate() for mode in modes: for k, amp in enumerate(amprange): print(k, amp) phiin = amp * zernike.Zm(mode, rad=17, orig=None, Nx=33) # was 28 # set mirror with new dm shape dmarr = 0.5 * N.dot(S, phiin.reshape(33 * 33)) cmd = [0.] * 69 for i in range(69): cmd[i] = dmarr[i] + cmd_best[i] if (all(i <= 1.0 for i in cmd)): dm.Send(cmd) else: raise Exception(' Error: push value greater than 1.0 ') time.sleep(0.02) om.zst.setPositionf(center) om.get_img() dt[k] = mf(om.data) # metric is peak intensity results.append((mode, amp, dt[k])) pmax = peak(amprange, dt) zmv[mode] += pmax print('setting mode %d at value of %f' % (mode, pmax)) phiin = pmax * zernike.Zm(mode, rad=17, orig=None, Nx=33) # was 28 # set mirror with new dm shape dmarr = 0.5 * N.dot(S, phiin.reshape(33 * 33)) for i in range(69): cmd_best[i] = cmd_best[i] + dmarr[i] if (all(i <= 1.0 for i in cmd_best)): dm.Send(cmd_best) else: raise Exception(' Error: push value greater than 1.0 ') slm.deactivate() om.ccd.AbortAcquisition() om.ccd.SetShutterMode(2) return results, cmd_best
def deactivateSLM(self): qx.deactivate() return True