def run(self): ### Initilizations self.core.reset() # Initializes Artiq (required) ##self.scan_count = 10 # number of loops volts = [] # absorption signal frchks = [] # yag fire check fluor = [] # fluorescence pmt signal avgs = [0] * self.scan_count ### Run Experiment for i in range(self.scan_count): self.scheduler.pause() #input('Press ENTER for Run {}/{}'.format(i+1,scan_count)) self.fire_and_read() # fires yag and reads voltages vals = self.get_dataset('absorption') chks = self.get_dataset('fire_check') pmts = self.get_dataset('pmt') new_volts = [] #print(vals) #print(frchks) for v in vals: new_volts = [splr.adc_mu_to_volt(v)] volts = volts + new_volts for f in chks: frchks = frchks + [splr.adc_mu_to_volt(f)] for p in pmts: fluor = fluor + [splr.adc_mu_to_volt(p)] avgs[i] = sum(new_volts) self.set_dataset('signal', (avgs), broadcast=True) print('Run {}/{} Completed'.format(i + 1, self.scan_count)) ## Write Data to Files v_name = 'signal_1.txt' v_out = open(v_name, 'w') for v in volts: v_out.write(str(v) + ' ') v_out.close() print('Absorption signal data written to {}'.format(v_name)) f_name = 'fire_check_1.txt' f_out = open(f_name, 'w') #print(frchks) for f in frchks: f_out.write(str(f) + ' ') f_out.close() print('Fire check data written to {}'.format(f_name)) p_name = 'pmt_1.txt' p_out = open(p_name, 'w') for p in fluor: p_out.write(str(p) + ' ') p_out.close() print('PMT check data written to {}'.format(p_name))
def check_shot(self): repeat_shot = False # check if Yag has fired if self.yag_check and np.max(self.smp_data['fire_check']) < 0.3: repeat_shot = True print('No Yag') # check if spectroscopy light was there blue_min = splr.adc_mu_to_volt(20) if self.which_scanning_laser == 1: if self.blue_check and np.min( self.smp_data['spec_check']) < blue_min: repeat_shot = True print('No spectroscopy') elif self.which_scanning_laser == 2: if self.blue_check and np.min( self.smp_data['slow_check']) < blue_min: repeat_shot = True print('No spectroscopy') else: print('bad scanning laser') return repeat_shot
def run(self): self.initialize_kernel() adc_channels = [0, 1, 2, 3, 4, 5, 6, 7] times = [10e-3, 5e-3, 10e-3] adc_table = [[1], [1], [1]] ''' Compute number of samples for each run ''' delay = 100 * us N_samples = [] for time in times: N_samples.append(int(time / delay)) self.data = prepare_data_sets(times, N_samples) slack = self.adc(times, adc_table, delay, N_samples) print('adc slack:', slack) # print(self.data) df = pd.DataFrame(columns=range(8)) total_time = 0 for i in range(len(times)): t0 = total_time for j in range(len(self.data[i])): d = np.atleast_2d(self.data[i][j]) subdf = pd.DataFrame(d, index=[t0], columns=range(8)) t0 += delay df = df.append(subdf) total_time += times[i] df = adc_mu_to_volt(df) print(df)
def readout_data(self): # readout data from Artiq by toggling through all channels and saving the data in a list self.smp_data = {} for channel in self.smp_data_sets.keys(): # self.smp_data['absorption'] = ... self.smp_data[self.smp_data_sets[channel]] = np.array( list( map(lambda v: splr.adc_mu_to_volt(v), self.get_dataset(channel))))
def check_shot(self): repeat_shot = False # check if Yag has fired if self.yag_check and np.max(self.smp_data['fire_check']) < 0.3: repeat_shot = True print('No Yag') # check if spectroscopy light was there blue_min = splr.adc_mu_to_volt(40) if self.blue_check and np.min(self.smp_data['spec_check']) < blue_min: repeat_shot = True print('No spectroscopy') # check if slowing light was there blue_min = splr.adc_mu_to_volt(40) if self.slow_check and np.min(self.smp_data['slow_check']) < blue_min: repeat_shot = True print('No slowing') return repeat_shot
def get_adc(self, channel): """Get an ADC reading (IIR filter input X0). This method does not advance the timeline but consumes all slack. :param adc: ADC channel number (0-7) :return: ADC voltage """ val = (self.get_adc_mu(channel) >> 1) & 0xffff mask = 1 << 15 val = -(val & mask) + (val & ~mask) gain = (self.gains >> (channel * 2)) & 0b11 return sampler.adc_mu_to_volt(val, gain)
def run(self): ### Initilizations self.core.reset() # Initializes Artiq (required) scan_count = 1 # number of loops self.set_dataset('absorption',np.full(self.scope_count,np.nan)) # class dataset for Artiq communication self.set_dataset('fire_check',np.full(self.scope_count,np.nan)) # class dataset for Artiq communication volts = [] # absorption signal frchks = [] # yag fire check ### Run Experiment for i in range(scan_count): print('loop {}'.format(i)) #input('Press ENTER for Run {}/{}'.format(i+1,scan_count)) self.fire_and_read() # fires yag and reads voltages vals = self.get_dataset('absorption') chks = self.get_dataset('fire_check') for v in vals: volts.append(splr.adc_mu_to_volt(v)) for f in chks: frchks.append(splr.adc_mu_to_volt(f)) print('Run {}/{} Completed'.format(i+1,scan_count)) ### Write Data to Files v_name = 'signal_1.txt' v_out = open(v_name,'w') for v in volts: v_out.write(str(v)+' ') v_out.close() print('Absorption signal data written to {}'.format(v_name)) f_name = 'fire_check_1.txt' f_out = open(f_name,'w') print(frchks) for f in frchks: f_out.write(str(f)+' ') f_out.close() print('Fire check data written to {}'.format(f_name))
def convert_and_send(self, data, adc_delay): if self.do_adc == 1: df = pd.DataFrame(columns=range(8)) total_time = 0 for i in range(len(self.times)): t0 = total_time index = np.linspace(0, (len(data[i]) - 1) * adc_delay, len(data[i])) index += total_time subdf = pd.DataFrame(np.array(data[i]), index=index) df = df.append(subdf) total_time += self.times[i] df = df[(df.T != 0).any()] df = df[self.adc_channels] df = adc_mu_to_volt(df) post_convert = time.time() post_results(df)
def adc_mu_to_volts(x, gain): """Convert servo ADC data from machine units to Volt.""" val = (x >> 1) & 0xffff mask = 1 << 15 val = -(val & mask) + (val & ~mask) return sampler.adc_mu_to_volt(val, gain)
def run(self): ### Initilizations self.core.reset() # Initializes Artiq (required) # self.set_dataset('absorption',np.full(self.scope_count,np.nan)) # class dataset for Artiq communication # self.set_dataset('fire_check',np.full(self.scope_count,np.nan)) # class dataset for Artiq communication set_freqs = [] # absorption signal volts = [] # absorption signal frchks = [] # yag fire check fluor = [] # fluorescence pmt signal postsel = [] # spec blue post select postsel2 = [] # slow blue post select avgs = [0]*self.setpoint_count pmt_avgs = [0]*self.setpoint_count self.set_dataset('spectrum',(avgs),broadcast=True) self.set_dataset('pmt_spectrum',(pmt_avgs),broadcast=True) slow_filename = '/home/molecules/skynet/Logs/setpoint2.txt' slow_file = open(slow_filename,'w') slow_file.write(str(self.slowing_set)) slow_file.close() # Define scan parameters #scan_count = 9 # number of loops/averages #scan_offset = 383.949702 # THz #no_of_points = 100 scan_interval = np.linspace(self.setpoint_min,self.setpoint_max,self.setpoint_count) self.set_dataset('freqs',(scan_interval),broadcast=True) scan_interval = self.setpoint_offset + scan_interval/2e6 self.set_dataset('times',(np.linspace(0,(self.step_size+9)*(self.scope_count-1)/1e3,self.scope_count)),broadcast=True) # End of define scan parameters my_today = datetime.datetime.today() datafolder = '/home/molecules/software/data/' setpoint_filename = '/home/molecules/skynet/Logs/setpoint.txt' basefolder = str(my_today.strftime('%Y%m%d')) # 20190618 # create new folder if doesn't exist yet if not os.path.exists(datafolder + basefolder): os.makedirs(datafolder + basefolder) basefilename = datafolder + basefolder + '/' + str(my_today.strftime('%Y%m%d_%H%M%S')) # 20190618_105557 print('Filename: ' + basefilename) #save run configuration conf_file = open(basefilename+'_conf','w') conf_str = basefilename+'\n' conf_str += 'Number of Samples per Shot: '+str(self.scope_count)+'\n' conf_str += 'Number of Averages: '+str(self.scan_count)+'\n' conf_str += 'Number of Setpoints: '+str(self.setpoint_count)+'\n' conf_str += 'Setpoint Offset: '+str(self.setpoint_offset)+' THz\n' conf_str += 'Setpoint Min: '+str(self.setpoint_min)+' MHz\n' conf_str += 'Setpoint Max: '+str(self.setpoint_max)+' MHz\n' conf_str += 'Slowing Frequency: '+str(self.slowing_set)+' THz\n' conf_str += 'Step Size: '+str(self.step_size)+' us\n' conf_file.write(conf_str) conf_file.close() print('Config File Written') for n, nu in enumerate(scan_interval): print('-'*30) print('Setpoint {}/{}'.format(n+1,self.setpoint_count)) print('Setting laser to ' + str(nu)) # move laser to set point setpoint_file = open(setpoint_filename, 'w') setpoint_file.write(str(nu)) setpoint_file.close() new_avg = 0 new_avg_pmt = 0 time.sleep(5) if n == 0: for cntdwn in range(10): print('Firing in {}...'.format(10-cntdwn)) time.sleep(1) print('FIRE IN THE HOLE!!!') # run scan_count averages ### Run Experiment for i in range(self.scan_count): self.scheduler.pause() shot_fired = False blue_on = False # spec slow_on = False # slowing while not shot_fired and not blue_on and not slow_on: #break #break will break out of the infinite while loop # input('Press ENTER for Run {}/{}'.format(i+1,scan_count)) self.fire_and_read() # fires yag and reads voltages vals = self.get_dataset('absorption') chks = self.get_dataset('fire_check') pmts = self.get_dataset('pmt') psel = self.get_dataset('spec_check') psel2 = self.get_dataset('slow_check') hlp = [] for v in vals: hlp.append(splr.adc_mu_to_volt(v)) hlp2 = [] for f in chks: hlp2.append(splr.adc_mu_to_volt(f)) hlp3 = [] for p in pmts: hlp3.append(splr.adc_mu_to_volt(p)) hlp4 = [] for ps in psel: hlp4.append(splr.adc_mu_to_volt(ps)) hlp5 = [] for ps2 in psel: hlp5.append(splr.adc_mu_to_volt(ps2)) blue_min = splr.adc_mu_to_volt(40) slow_min = splr.adc_mu_to_volt(40) # check if Yag fired if np.max(np.array(hlp2)) > 0.3: # save set points for each shot if np.min(np.array(hlp4)) > blue_min: if np.min(np.array(hlp5)) > slow_min: set_freqs.append(nu) volts.append(hlp) frchks.append(hlp2) fluor.append(hlp3) postsel.append(hlp4) postsel2.append(hlp5) new_avg = new_avg + sum(hlp[int(self.slice_min*1e3/self.step_size):int(self.slice_max*1e3/self.step_size)]) new_avg_pmt = new_avg_pmt + sum(hlp3[int(self.pmt_slice_min*1e3/self.step_size):int(self.pmt_slice_max*1e3/self.step_size)]) print('Scan {}/{} Completed'.format(i+1,self.scan_count)) shot_fired = True blue_on = True slow_on = True else: slow_on = False print('Repeat shot. No Slow Blue.') else: blue_on = False print('Repeat shot. No Spec Blue.') else: #break # repeat shot shot_fired = False print('Repeat shot. No Yag.') time.sleep(1) #new_avg = new_avg/self.scan_count self.mutate_dataset('spectrum',n,new_avg) self.mutate_dataset('pmt_spectrum',n,new_avg_pmt) # transform into numpy arrays freqs = np.array(set_freqs) ch1 = np.array(volts) ch2 = np.array(frchks) ch3 = np.array(fluor) ch4 = np.array(postsel) ch5 = np.array(postsel2) #print(freqs) print('Saving data ...') ### Write Data to Files f_freqs = open(basefilename + '_freqs','w') f_ch1 = open(basefilename + '_ch1','w') f_ch2 = open(basefilename + '_ch2','w') f_ch3 = open(basefilename + '_ch3','w') f_ch4 = open(basefilename + '_ch4','w') f_ch5 = open(basefilename + '_ch5','w') np.savetxt(f_freqs, freqs, delimiter=",") f_freqs.close() np.savetxt(f_ch1, ch1, delimiter=",") f_ch1.close() np.savetxt(f_ch2, ch2, delimiter=",") f_ch2.close() np.savetxt(f_ch3, ch3, delimiter=",") f_ch3.close() np.savetxt(f_ch4, ch4, delimiter=",") f_ch4.close() np.savetxt(f_ch5, ch5, delimiter=",") f_ch5.close() print('Filename: ' + basefilename) conf_file = open(basefilename+'_conf','a') conf_file.write('RUN FINISHED') conf_file.close()
def run(self): ### Initilizations self.core.reset() # Initializes Artiq (required) # self.set_dataset('absorption',np.full(self.scope_count,np.nan)) # class dataset for Artiq communication # self.set_dataset('fire_check',np.full(self.scope_count,np.nan)) # class dataset for Artiq communication set_freqs = [] # absorption signal volts = [] # absorption signal frchks = [] # yag fire check fluor = [] # fluorescence pmt signal # Define scan parameters #scan_count = 9 # number of loops/averages #scan_offset = 383.949702 # THz #no_of_points = 100 scan_interval = 0.5 * np.linspace(-1200, 500, self.setpoint_count) * 1.0e6 # MHz scan_interval = self.setpoint_offset + scan_interval / 1e12 # End of define scan parameters my_today = datetime.datetime.today() datafolder = '/home/molecules/software/data/' setpoint_filename = '/home/molecules/skynet/setpoint.txt' basefolder = str(my_today.strftime('%Y%m%d')) # 20190618 # create new folder if doesn't exist yet if not os.path.exists(datafolder + basefolder): os.makedirs(datafolder + basefolder) basefilename = datafolder + basefolder + '/' + str( my_today.strftime('%Y%m%d_%H%M%S')) # 20190618_105557 for n, nu in enumerate(scan_interval): print('-' * 30) print('Setpoint {}/{}'.format(n + 1, self.setpoint_count)) print('Setting laser to ' + str(nu)) # move laser to set point setpoint_file = open(setpoint_filename, 'w') setpoint_file.write(str(nu)) setpoint_file.close() time.sleep(2.0) # run scan_count averages ### Run Experiment for i in range(self.scan_count): shot_fired = False while not shot_fired: # input('Press ENTER for Run {}/{}'.format(i+1,scan_count)) self.fire_and_read() # fires yag and reads voltages vals = self.get_dataset('absorption') chks = self.get_dataset('fire_check') pmts = self.get_dataset('pmt') hlp = [] for v in vals: hlp.append(splr.adc_mu_to_volt(v)) hlp2 = [] for f in chks: hlp2.append(splr.adc_mu_to_volt(f)) hlp3 = [] for p in pmts: hlp3.append(splr.adc_mu_to_volt(p)) # check if Yag fired if np.max(np.array(hlp2)) > 0.5: # save set points for each shot set_freqs.append(nu) volts.append(hlp) frchks.append(hlp2) fluor.append(hlp3) print('Run {}/{} Completed'.format( i + 1, self.scan_count)) shot_fired = True else: # repeat shot shot_fired = False print('Repeat shot. No Yag.') time.sleep(1.0) # transform into numpy arrays freqs = np.array(set_freqs) ch1 = np.array(volts) ch2 = np.array(frchks) ch3 = np.array(fluor) print(freqs) print('Saving data ...') ### Write Data to Files f_freqs = open(basefilename + '_freqs', 'w') f_ch1 = open(basefilename + '_ch1', 'w') f_ch2 = open(basefilename + '_ch2', 'w') f_ch3 = open(basefilename + '_ch3', 'w') np.savetxt(f_freqs, freqs, delimiter=",") f_freqs.close() np.savetxt(f_ch1, ch1, delimiter=",") f_ch1.close() np.savetxt(f_ch2, ch2, delimiter=",") f_ch2.close() np.savetxt(f_ch3, ch3, delimiter=",") f_ch3.close() print('Filename: ' + basefilename)
data_string = '' f = open('data.txt') reading = True while reading: newdata = f.readline() if newdata != '': data_string += newdata else: reading = False data_split = data_string.split('.') data_strip = [] data = [] for d in data_split: try: data.append(int(d)) except: data_strip.append(d) volts = [] for da in data: volts.append(spr.adc_mu_to_volt(da)) fo = open('data_volt.txt', 'w') for v in volts: fo.write(str(v) + '\n') f.close() fo.close()