def scan(self): # scan one x line per loop for yNum in xrange(0, len(self.yArray)): # initialize APD thread readthread = APDIn.ReadAPD("Dev1/ctr0", 1 / self.dt, len(self.xArray) + 1) self.initPt = numpy.transpose( numpy.column_stack((self.xArray[0], self.yArray[yNum]))) self.initPt = (numpy.repeat(self.initPt, 2, axis=1)) # move galvo to first point in line pointthread = DaqOut.DaqOutputWave(self.initPt, 1 / self.dt, "Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop() writethread = DaqOut.DaqOutputWave(self.xArray, 1 / self.dt, "Dev1/ao0") # start counter and scanning sequence readthread.runCtr() writethread.run() writethread.waitToFinish() writethread.stop() self.xLineData = readthread.read() self.imageData[yNum] = numpy.diff(self.xLineData) # clean up APD tasks readthread.stopCtr() readthread.stopClk() if (not (self.canvas == None)): self.dispImageGui() #normalize to kCount/sec self.imageData = self.imageData / (.001 / self.dt) return self.imageData
def setDaqPt(xVolt, yVolt): initPt = np.transpose(np.column_stack((xVolt, yVolt))) initPt = (np.repeat(initPt, 2, axis=1)) # move galvo to first point in line pointthread = DaqOut.DaqOutputWave(initPt, 1 / .001, "Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop()
def setDaqPt(xVolt,yVolt): pt = numpy.transpose(numpy.column_stack((xVolt,yVolt))) pt = (numpy.repeat(pt, 2, axis=1)) # prefacing string with b should do nothing in python 2, but otherwise this doesn't work pointthread = DaqOut.DaqOutputWave(pt, 1000.0, b"Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop()
def move_to_pt((pt_x, pt_y)): if (abs(pt_x) > .5 or abs(pt_y) > .5): raise ValueError( "Invalid nv coordinate, galvo voltages must not exceed +- .5 V") initPt = np.transpose(np.column_stack((pt_x, pt_y))) initPt = (np.repeat(initPt, 2, axis=1)) # move galvo to first point in line pointthread = DaqOut.DaqOutputWave(initPt, 1 / .001, "Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop()
def scan(self, queue=None): # scan one x line per loop for yNum in xrange(0, len(self.yArray)): if (not (queue is None) and not (queue.empty()) and (queue.get() == 'STOP')): break # initialize APD thread readthread = PDIn.ReadAI("Dev1/AI2", 1 / self.dt, len(self.xArray) + 1) self.initPt = numpy.transpose( numpy.column_stack((self.xArray[0], self.yArray[yNum]))) self.initPt = (numpy.repeat(self.initPt, 2, axis=1)) # move galvo to first point in line pointthread = DaqOut.DaqOutputWave(self.initPt, 1 / self.dt, "Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop() writethread = DaqOut.DaqOutputWave(self.xArray, 1 / self.dt, "Dev1/ao0") # start counter and scanning sequence readthread.run() writethread.run() writethread.waitToFinish() writethread.stop() self.xLineData = readthread.read() self.averagedData = numpy.zeros( len(self.xArray) / self.clockAdjust) for i in range(0, int((len(self.xArray) / self.clockAdjust))): self.averagedData[i] = numpy.mean( self.xLineData[(i * self.clockAdjust + 1):(i * self.clockAdjust + self.clockAdjust - 1)]) self.imageData[yNum] = self.averagedData if (not (self.canvas == None)): self.dispImageGui() return self.imageData
def scan(self,queue = None): # scan one x line per loop for yNum in xrange(0, len(self.yArray)): if (not (queue is None) and not (queue.empty()) and (queue.get() == 'STOP')): break # initialize APD thread readthread = APDIn.ReadAPD("Dev1/ctr0", 1 / self.dt, len(self.xArray) + 1) self.initPt = numpy.transpose(numpy.column_stack((self.xArray[0], self.yArray[yNum]))) self.initPt = (numpy.repeat(self.initPt, 2, axis=1)) # move galvo to first point in line pointthread = DaqOut.DaqOutputWave(self.initPt, 1 / self.dt, "Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop() writethread = DaqOut.DaqOutputWave(self.xArray, 1 / self.dt, "Dev1/ao0") # start counter and scanning sequence readthread.runCtr() writethread.run() writethread.waitToFinish() writethread.stop() self.xLineData,_ = readthread.read() self.diffData = numpy.diff(self.xLineData) self.summedData = numpy.zeros(len(self.xArray)/self.clockAdjust) for i in range(0,int((len(self.xArray)/self.clockAdjust))): self.summedData[i] = numpy.sum(self.diffData[(i*self.clockAdjust+1):(i*self.clockAdjust+self.clockAdjust-1)]) #also normalizing to kcounts/sec self.imageData[yNum] = self.summedData*(.001/self.timePerPt) # clean up APD tasks readthread.stopCtr() readthread.stopClk() if(not(self.canvas == None)): self.dispImageGui() return self.imageData
def sweepscan(self, amplitude, offset, freqStart, freqEnd, sampleNum, samplesPerPt, name): self.sweeper = ZI.ZIHF2(amplitude, offset, 500000, ACCoupling=1) pointnum = 1 for point in self.xypairs: self.initPt = numpy.transpose( numpy.column_stack((point[0], point[1]))) self.initPt = (numpy.repeat(self.initPt, 2, axis=1)) # move galvo to first point in line pointthread = DaqOut.DaqOutputWave(self.initPt, 1 / self.dt, "Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop() self.sweepData = self.sweeper.sweep(freqStart, freqEnd, sampleNum, samplesPerPt) self.filepath = 'C:\Users\Experiment\Desktop\Sweeptest\sweep' + name + str( pointnum) + '.txt' self.writeArray(self.sweepData, self.filepath, ['Frequency', 'Response']) pointnum += 1
def resonancescan(self, amplitude, offset, freq): self.scanner = ZI.ZIHF2(amplitude, offset, freq, ACCoupling=1) x = [] y = [] R = [] for point in self.xypairs: self.initPt = numpy.transpose( numpy.column_stack((point[0], point[1]))) self.initPt = (numpy.repeat(self.initPt, 2, axis=1)) # move galvo to first point in line pointthread = DaqOut.DaqOutputWave(self.initPt, 1 / self.dt, "Dev1/ao0:1") pointthread.run() pointthread.waitToFinish() pointthread.stop() x = numpy.append(x, point[0]) y = numpy.append(y, point[1]) R = numpy.append(R, self.scanner.poll()) #self.filepath = 'C:\Users\Experiment\Desktop\Sweeptest\scan.txt' #self.writeArray(R, self.filepath, ['Frequency', 'Response']) plt.scatter(x, y, c=R, s=20, cmap=mpl.cm.pink) plt.show()
# make freq. array for current section freq_section_array = freq_array[np.where( np.logical_and(freq_array >= sec_min, freq_array < sec_max))] # if section is empty skip if len(freq_section_array) == 0: continue center_freq = (sec_max + sec_min) / 2.0 freq_voltage_array = ( (freq_section_array - sec_min) / RANGE_STEP) * 2 - 1 #normalize voltages to +-1 range mwgen.setFreq(center_freq) readthread = APDIn.ReadAPD("Dev1/ctr0", 1 / dt, len(freq_voltage_array) + 1, 100000) writethread = DaqOut.DaqOutputWave(freq_voltage_array, 1 / dt, "Dev1/ao2") # start counter and scanning sequence readthread.runCtr() writethread.run() writethread.waitToFinish() writethread.stop() raw_data = readthread.read() #raw_data = sweep_mw_and_count_APD(freq_voltage_array, dt) # counter counts continiously so we take the difference to get the counts per time interval diff_data = np.diff(raw_data) summed_data = np.zeros(len(freq_voltage_array) / clock_adjust) for i in range(0, int((len(freq_voltage_array) / clock_adjust))): summed_data[i] = np.sum(diff_data[(i * clock_adjust + 1):(i * clock_adjust +