コード例 #1
0
    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))
コード例 #2
0
    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
コード例 #3
0
    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)
コード例 #4
0
 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))))
コード例 #5
0
    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
コード例 #6
0
ファイル: suservo.py プロジェクト: AUTProgram/artiq
    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)
コード例 #7
0
    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))
コード例 #8
0
 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)
コード例 #9
0
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)
コード例 #10
0
ファイル: suservo.py プロジェクト: m-labs/artiq
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)
コード例 #11
0
    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()
コード例 #12
0
    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)
コード例 #13
0
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()