def plot_laserscan(d, gv):
    x = d[d[:, 3] == gv, 1]
    y = d[d[:, 3] == gv, 2]
    plt.figure()
    plt.subplot(1, 1, 1)
    plt.plot(x, y)
    try:
        gx = float(raw_input('Ey?'))
        gy = float(raw_input('Ex?'))
        x1, y2 = nvlevels.get_ES_ExEy_plottable(gx, gy, np.max(y))
        plt.plot(x1, y2)
    except:
        print 'could not understand input'
def plot_laserscan(d,gv):
        x=d[d[:,3]==gv,1]
        y=d[d[:,3]==gv,2]
        plt.figure()
        plt.subplot(1,1,1)
        plt.plot(x,y)
        try:
            gx= float(raw_input('Ey?'))
            gy= float(raw_input('Ex?'))
            x1,y2=nvlevels.get_ES_ExEy_plottable(gx,gy,np.max(y))
            plt.plot(x1,y2)
        except:
            print 'could not understand input'
Beispiel #3
0
    def run_scan(self, **kw):
        stabilizing_time = kw.pop('stabilizing_time', 0.01)

        d = qt.Data(name=self.mprefix+'_'+self.name)
        d.add_coordinate('Voltage (V)')
        d.add_coordinate('Frequency (GHz)')
        d.add_coordinate('Counts [Hz]')
        d.add_coordinate('Gate Voltage(V)')

        p = qt.Plot2D(d, 'ro', title='Frq (left) vs Voltage (bottom)', plottitle=self.mprefix,
                name='Laser Scan', clear=True, coorddim=0, valdim=1, maxtraces=1)
        p.add(d, 'bo', title='Counts (right) vs Frq (top)', coorddim=1, valdim=2,
                right=True, top=True)
        p.set_x2tics(True)
        p.set_y2tics(True)
        p.set_x2label('Frequency (GHz)')
        p.set_y2label('Counts [Hz]')
        
        if self.gate_pts>1:
            p3=qt.Plot3D(d, name='Laser_Scan2D', plottitle=self.mprefix, coorddims=(1,3), valdim=2, clear=True)

        qt.mstart()
        ###### HERE THE MEASUREMENT LOOP STARTS ######
        for j,gv in enumerate(np.linspace(self.gate_start_voltage, self.gate_stop_voltage, self.gate_pts)):
            if (msvcrt.kbhit() and (msvcrt.getch() == 'c')): break  
            
            self.scan_to_voltage(self.start_voltage)
            
            if not self.use_repump_during:
                self.repump_pulse()
            
            if self.set_gate_after_repump:
                self.gate_scan_to_voltage(gv)                 
                        
            for i,v in enumerate(np.linspace(self.start_voltage, self.stop_voltage, self.pts)):
                if msvcrt.kbhit():
                    chr=msvcrt.getch()
                    if chr=='q': 
                        break
                    elif chr =='r': 
                        self.repump_pulse()
                
                self.set_laser_voltage(v)
                qt.msleep(stabilizing_time)

                cts = float(self.get_counts(self.integration_time)[self.counter_channel])/(self.integration_time*1e-3)
                frq = self.get_frequency(self.wm_channel)*self.frq_factor - self.frq_offset
                if frq < 0: 
                    continue
                d.add_data_point(v, frq, cts, gv)
                if np.mod(i,10)==0:
                    p.update()
                
            if self.set_gate_after_repump:
                self.gate_scan_to_voltage(0.)
            p.update()
            if self.plot_strain_lines:
                p.set_maxtraces(2)
                try:
                    from analysis.lib.nv import nvlevels
                    Ey_line=float(raw_input('Ey line?')) #GHz
                    Ex_line=float(raw_input('Ex line?')) #GHz
                    lx,ly=nvlevels.get_ES_ExEy_plottable(Ex_line,Ey_line,max(d.get_data()[:,2]))
                    tit=str('Frequency (GHz) lines: [%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f] ' % tuple(nvlevels.get_ES_ExEy(Ex_line,Ey_line)))
                    p.add(lx,ly,right=True, top=True, title=tit)
                except ValueError:
                    print 'Could not understand input for lines'
                    pass
            plotsavename=os.path.splitext(d.get_filepath())[0] + ('_gate_voltage_%2.3f' % gv) + '.png'
            p.set_plottitle(str(os.path.splitext(d.get_filename())[0]))
            p.save_png(filepath=plotsavename)
            d.new_block()
            if self.gate_pts>1: 
                p3.update()
            
        qt.mend()
        if self.gate_pts>1:
            p3.reset()
            qt.msleep(1)
            p3.save_png()
        np.savez(os.path.splitext(d.get_filepath())[0]+ '.npz', data=d.get_data())
        d.close_file()
    def run_scan(self, **kw):
        stabilizing_time = kw.pop("stabilizing_time", 0.01)

        d = qt.Data(name=self.mprefix + "_" + self.name)
        d.add_coordinate("Voltage (V)")
        d.add_coordinate("Frequency (GHz)")
        d.add_coordinate("Counts [Hz]")
        d.add_coordinate("Gate Voltage(V)")

        p = qt.Plot2D(
            d,
            "ro",
            title="Frq (left) vs Voltage (bottom)",
            plottitle=self.mprefix,
            name="Laser Scan",
            clear=True,
            coorddim=0,
            valdim=1,
            maxtraces=1,
        )
        p.add(d, "bo", title="Counts (right) vs Frq (top)", coorddim=1, valdim=2, right=True, top=True)
        p.set_x2tics(True)
        p.set_y2tics(True)
        p.set_x2label("Frequency (GHz)")
        p.set_y2label("Counts [Hz]")

        if self.gate_pts > 1:
            p3 = qt.Plot3D(d, name="Laser_Scan2D", plottitle=self.mprefix, coorddims=(1, 3), valdim=2, clear=True)

        qt.mstart()
        #######
        for j, gv in enumerate(np.linspace(self.gate_start_voltage, self.gate_stop_voltage, self.gate_pts)):
            if msvcrt.kbhit() and (msvcrt.getch() == "c"):
                break

            prev_v = v = self.scan_to_frequency(self.start_frequency)
            self.set_laser_power(self.laser_power)

            if not self.use_repump_during:
                self.repump_pulse()

            if self.set_gate:
                self.gate_scan_to_voltage(gv)
            i = 0
            while (v < self.max_v) and (v > self.min_v):
                i = i + 1
                if msvcrt.kbhit():
                    chr = msvcrt.getch()
                    if chr == "q":
                        break
                    elif chr == "r":
                        self.repump_pulse()
                v = prev_v - self.v_step
                prev_v = v
                self.set_laser_voltage(v)
                qt.msleep(stabilizing_time)

                cts = float(self.get_counts(self.integration_time)[self.counter_channel]) / (
                    self.integration_time * 1e-3
                )
                frq = self.get_frequency(self.wm_channel) * self.frq_factor - self.frq_offset
                if frq < 0:
                    print "WARNING: WM gives frq", frq
                    continue
                d.add_data_point(v, frq, cts, gv)
                if np.mod(i, 10) == 0:
                    p.update()
                if frq > self.stop_frequency:
                    break
            self.set_laser_power(0)
            if self.set_gate_to_zero_before_repump:
                self.gate_scan_to_voltage(0.0)
            p.update()
            if self.plot_strain_lines:
                p.set_maxtraces(2)
                try:
                    from analysis.lib.nv import nvlevels

                    Ey_line = float(raw_input("Ey line?"))  # GHz
                    Ex_line = float(raw_input("Ex line?"))  # GHz
                    lx, ly = nvlevels.get_ES_ExEy_plottable(Ex_line, Ey_line, max(d.get_data()[:, 2]))
                    tit = str(
                        "Frequency (GHz) lines: [%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f] "
                        % tuple(nvlevels.get_ES_ExEy(Ex_line, Ey_line))
                    )
                    p.add(lx, ly, right=True, top=True, title=tit)
                except ValueError:
                    print "Could not understand input for lines"
                    pass
            plotsavename = os.path.splitext(d.get_filepath())[0] + ("_gate_voltage_%2.3f" % gv) + ".png"
            p.set_plottitle(str(os.path.splitext(d.get_filename())[0]))
            p.save_png(filepath=plotsavename)
            d.new_block()
            if self.gate_pts > 1:
                p3.update()

        qt.mend()
        if self.gate_pts > 1:
            p3.reset()
            qt.msleep(1)
            p3.save_png()
        np.savez(os.path.splitext(d.get_filepath())[0] + ".npz", data=d.get_data())
        d.close_file()
Beispiel #5
0
    def run_scan(self, **kw):
        stabilizing_time = kw.pop('stabilizing_time', 0.01)

        d = qt.Data(name=self.mprefix + '_' + self.name)
        d.add_coordinate('Voltage (V)')
        d.add_coordinate('Frequency (GHz)')
        d.add_coordinate('Counts [Hz]')
        d.add_coordinate('Gate Voltage(V)')

        p = qt.Plot2D(d,
                      'ro',
                      title='Frq (left) vs Voltage (bottom)',
                      plottitle=self.mprefix,
                      name='Laser Scan',
                      clear=True,
                      coorddim=0,
                      valdim=1,
                      maxtraces=1)
        p.add(d,
              'bo',
              title='Counts (right) vs Frq (top)',
              coorddim=1,
              valdim=2,
              right=True,
              top=True)
        p.set_x2tics(True)
        p.set_y2tics(True)
        p.set_x2label('Frequency (GHz)')
        p.set_y2label('Counts [Hz]')

        if self.gate_pts > 1:
            p3 = qt.Plot3D(d,
                           name='Laser_Scan2D',
                           plottitle=self.mprefix,
                           coorddims=(1, 3),
                           valdim=2,
                           clear=True)

        qt.mstart()
        ######
        for j, gv in enumerate(
                np.linspace(self.gate_start_voltage, self.gate_stop_voltage,
                            self.gate_pts)):
            if (msvcrt.kbhit() and (msvcrt.getch() == 'c')): break

            self.scan_to_voltage(self.start_voltage)

            if not self.use_repump_during:
                self.repump_pulse()

            if self.set_gate:
                self.gate_scan_to_voltage(gv)

            for i, v in enumerate(
                    np.linspace(self.start_voltage, self.stop_voltage,
                                self.pts)):
                if msvcrt.kbhit():
                    chr = msvcrt.getch()
                    if chr == 'q':
                        break
                    elif chr == 'r':
                        self.repump_pulse()

                self.set_laser_voltage(v)
                qt.msleep(stabilizing_time)

                cts = float(
                    self.get_counts(self.integration_time)[
                        self.counter_channel]) / (self.integration_time * 1e-3)
                frq = self.get_frequency(
                    self.wm_channel) * self.frq_factor - self.frq_offset
                if frq < 0:
                    print 'WARNING: WM gives frq', frq
                    continue
                d.add_data_point(v, frq, cts, gv)
                if np.mod(i, 10) == 0:
                    p.update()

            if self.set_gate_to_zero_before_repump:
                self.gate_scan_to_voltage(0.)
            p.update()
            if self.plot_strain_lines:
                p.set_maxtraces(2)
                try:
                    from analysis.lib.nv import nvlevels
                    Ey_line = float(raw_input('Ey line?'))  #GHz
                    Ex_line = float(raw_input('Ex line?'))  #GHz
                    lx, ly = nvlevels.get_ES_ExEy_plottable(
                        Ex_line, Ey_line, max(d.get_data()[:, 2]))
                    tit = str(
                        'Frequency (GHz) lines: [%2.2f,%2.2f,%2.2f,%2.2f,%2.2f,%2.2f] '
                        % tuple(nvlevels.get_ES_ExEy(Ex_line, Ey_line)))
                    p.add(lx, ly, right=True, top=True, title=tit)
                except ValueError:
                    print 'Could not understand input for lines'
                    pass
            plotsavename = os.path.splitext(
                d.get_filepath())[0] + ('_gate_voltage_%2.3f' % gv) + '.png'
            p.set_plottitle(str(os.path.splitext(d.get_filename())[0]))
            p.save_png(filepath=plotsavename)
            d.new_block()
            if self.gate_pts > 1:
                p3.update()

        qt.mend()
        if self.gate_pts > 1:
            p3.reset()
            qt.msleep(1)
            p3.save_png()
        np.savez(os.path.splitext(d.get_filepath())[0] + '.npz',
                 data=d.get_data())
        d.close_file()
def laserscan(dataname=mname, 
            start_v = start_v,
            stop_v = stop_v,
            steps = steps,
            pxtime = pxtime, #ms
            green_during = green_during,
            green_before = green_before,
            red_during= red_during,
            f_offset = f_offset, # GHz
            mw = mw, # True
            amp = amp,
            mw_power = mw_power,
            mw_frq = mw_frq,
            LT2 = LT2,
            gate_phase_locking=gate_phase_locking, #has no effect if measuring LT1 #SO LEAVE IT AT 1
            good_phase=good_phase,
            do_smooth = do_smooth,
            plot_strain_lines=plot_strain_lines):
    
    if LT2:
        ins_adwin = qt.instruments['adwin']
        ins_laser_scan = qt.instruments['laser_scan']
        ins_mw = qt.instruments['SMB100']
        ins_adwin.set_linescan_var(set_phase_locking_on=gate_phase_locking,
               set_gate_good_phase=good_phase)
        ins_green=qt.instruments['GreenAOM']
        ins_newfocus=qt.instruments['NewfocusAOM']

    else:
        ins_adwin = qt.instruments['adwin_lt1']
        ins_laser_scan = qt.instruments['laser_scan_lt1']
        ins_mw = qt.instruments['SMB100_lt1']
        ins_green=qt.instruments['GreenAOM_lt1']
        ins_newfocus=qt.instruments['NewfocusAOM_lt1']

    
    ins_laser_scan.set_StartVoltage(start_v)
    ins_laser_scan.set_StopVoltage(stop_v)
    ins_laser_scan.set_ScanSteps(steps)
    ins_laser_scan.set_IntegrationTime(pxtime)
    ins_running = True
    step = 0

    #_before_voltages = ins_adwin.get_dac_voltages(['green_aom','newfocus_aom'])
    #FIXME NEED A CONDITION FOR WHEN THE Newfocus IS ONE THE AWG.

    ins_green.set_power(green_before)
    qt.msleep(1)

    ins_newfocus.set_power(red_during)
    ins_green.set_power(green_during)
    ins_adwin.set_dac_voltage(('gate',gate_voltage_during))
    #make sure microwaves are off 
    ins_mw.set_status('off')

    if mw:
        ins_mw.set_iq('off')
        ins_mw.set_pulm('off')
        ins_mw.set_power(mw_power)
        ins_mw.set_frequency(mw_frq)
        ins_mw.set_status('on')

    qt.mstart()
    qt.Data.set_filename_generator(data.DateTimeGenerator())
    d = qt.Data(name=dataname)
    d.add_coordinate('voltage [V]')
    d.add_value('frequency [GHz]')
    d.add_value('counts')
    d.create_file()

    p_f = qt.Plot2D(d, 'rO', name='frequency', coorddim=0, valdim=1, clear=True)
    p_c = qt.Plot2D(d, 'bO', name='counts', coorddim=1, valdim=2, clear=True)

    # go manually to initial position
    ins_adwin.set_dac_voltage(('newfocus_frq',start_v))
    qt.msleep(1)
    
    print 'starting scan'
    ins_laser_scan.start_scan()
    qt.msleep(1)
    timer_id=gobject.timeout_add(abort_check_time,check_for_abort,ins_laser_scan)

    while(ins_running):
      
        ins_running = not ins_laser_scan.get_TraceFinished()
        
        _step = ins_laser_scan.get_CurrentStep()

        qt.msleep(0.3)

        if _step > step:
            _v = ins_laser_scan.get_voltages()[step:_step]
            _f = ins_laser_scan.get_frequencies()[step:_step] - f_offset
            _c = ins_laser_scan.get_counts()[step:_step]
           
            # print _v,_f,_c
            _valid_elmnts=(_f>0)
            
            _v=_v[_valid_elmnts]
            _f=_f[_valid_elmnts]
            _c=_c[_valid_elmnts]

            if not(len(_v) == 0): 
                if len(_v) == 1:
                    _v = _v[0]
                    _f = _f[0]
                    _c = _c[0]                
                d.add_data_point(_v,_f,_c)

            step = _step
            p_f.update()
            p_c.update()

    ins_laser_scan.end_scan()
    gobject.source_remove(timer_id)
    #ins_adwin.set_dac_voltage(['green_aom',_before_voltages[0]])
    #ins_adwin.set_dac_voltage(['newfocus_aom',_before_voltages[1]])
    if mw:
        ins_mw.set_status('off')
    qt.mend()
   
    pfsave=p_f
    pcsave=p_c

    if do_smooth:            
        basepath = d.get_filepath()[:-4]
        ds = qt.Data()
        ds.set_filename_generator(data.IncrementalGenerator(basepath))
        ds.add_coordinate('voltage [V]')
        ds.add_value('smoothed frequency [GHz]')
        ds.add_value('counts')
        ds.create_file()

        p_fs = qt.Plot2D(ds, 'r-', name='frequency smoothed', coorddim=0, valdim=1, clear=True)
        p_cs = qt.Plot2D(ds, 'b-', name='counts smoothed', coorddim=1, valdim=2, clear=True)
         
        ds.add_data_point(d.get_data()[:,0], rolling_avg(d.get_data()[:,1]), 
                d.get_data()[:,2])

        ds.close_file()
        pfsave=p_fs
        pcsave=p_cs

    if plot_strain_lines:        
        try:
            from analysis.lib.nv import nvlevels
            Ey_line=float(raw_input('Ey line?')) #GHz
            Ex_line=float(raw_input('Ex line?')) #GHz
            lx,ly=nvlevels.get_ES_ExEy_plottable(Ex_line,Ey_line,max(d.get_data()[:,2]))
            pcsave.add(lx,ly)
        except ValueError:
            print 'Could not understand input for lines'
            pass

    pfsave.save_png()
    pcsave.save_png()

    d.close_file()
    qt.Data.set_filename_generator(data.DateTimeGenerator())

    if LT2:  
        ins_adwin.set_linescan_var(set_phase_locking_on=0,
           set_gate_good_phase=0)
    ins_newfocus.set_power(0)
    ins_adwin.set_dac_voltage(('gate',gate_voltage_after))
    ins_green.set_power(green_before)
Beispiel #7
0
def laserscan(
        dataname=mname,
        start_v=start_v,
        stop_v=stop_v,
        steps=steps,
        pxtime=pxtime,  #ms
        green_during=green_during,
        green_before=green_before,
        red_during=red_during,
        f_offset=f_offset,  # GHz
        mw=mw,  # True
        amp=amp,
        mw_power=mw_power,
        mw_frq=mw_frq,
        LT2=LT2,
        gate_phase_locking=gate_phase_locking,  #has no effect if measuring LT1 #SO LEAVE IT AT 1
        good_phase=good_phase,
        do_smooth=do_smooth,
        plot_strain_lines=plot_strain_lines):

    if LT2:
        ins_adwin = qt.instruments['adwin']
        ins_laser_scan = qt.instruments['laser_scan']
        ins_mw = qt.instruments['SMB100']
        ins_adwin.set_linescan_var(set_phase_locking_on=gate_phase_locking,
                                   set_gate_good_phase=good_phase)
        ins_green = qt.instruments['GreenAOM']
        ins_newfocus = qt.instruments['NewfocusAOM']

    else:
        ins_adwin = qt.instruments['adwin_lt1']
        ins_laser_scan = qt.instruments['laser_scan_lt1']
        ins_mw = qt.instruments['SMB100_lt1']
        ins_green = qt.instruments['GreenAOM_lt1']
        ins_newfocus = qt.instruments['NewfocusAOM_lt1']

    ins_laser_scan.set_StartVoltage(start_v)
    ins_laser_scan.set_StopVoltage(stop_v)
    ins_laser_scan.set_ScanSteps(steps)
    ins_laser_scan.set_IntegrationTime(pxtime)
    ins_running = True
    step = 0

    #_before_voltages = ins_adwin.get_dac_voltages(['green_aom','newfocus_aom'])
    #FIXME NEED A CONDITION FOR WHEN THE Newfocus IS ONE THE AWG.

    ins_green.set_power(green_before)
    qt.msleep(1)

    ins_newfocus.set_power(red_during)
    ins_green.set_power(green_during)
    ins_adwin.set_dac_voltage(('gate', gate_voltage_during))
    #make sure microwaves are off
    ins_mw.set_status('off')

    if mw:
        ins_mw.set_iq('off')
        ins_mw.set_pulm('off')
        ins_mw.set_power(mw_power)
        ins_mw.set_frequency(mw_frq)
        ins_mw.set_status('on')

    qt.mstart()
    qt.Data.set_filename_generator(data.DateTimeGenerator())
    d = qt.Data(name=dataname)
    d.add_coordinate('voltage [V]')
    d.add_value('frequency [GHz]')
    d.add_value('counts')
    d.create_file()

    p_f = qt.Plot2D(d,
                    'rO',
                    name='frequency',
                    coorddim=0,
                    valdim=1,
                    clear=True)
    p_c = qt.Plot2D(d, 'bO', name='counts', coorddim=1, valdim=2, clear=True)

    # go manually to initial position
    ins_adwin.set_dac_voltage(('newfocus_frq', start_v))
    qt.msleep(1)

    print 'starting scan'
    ins_laser_scan.start_scan()
    qt.msleep(1)
    timer_id = gobject.timeout_add(abort_check_time, check_for_abort,
                                   ins_laser_scan)

    while (ins_running):

        ins_running = not ins_laser_scan.get_TraceFinished()

        _step = ins_laser_scan.get_CurrentStep()

        qt.msleep(0.3)

        if _step > step:
            _v = ins_laser_scan.get_voltages()[step:_step]
            _f = ins_laser_scan.get_frequencies()[step:_step] - f_offset
            _c = ins_laser_scan.get_counts()[step:_step]

            # print _v,_f,_c
            _valid_elmnts = (_f > 0)

            _v = _v[_valid_elmnts]
            _f = _f[_valid_elmnts]
            _c = _c[_valid_elmnts]

            if not (len(_v) == 0):
                if len(_v) == 1:
                    _v = _v[0]
                    _f = _f[0]
                    _c = _c[0]
                d.add_data_point(_v, _f, _c)

            step = _step
            p_f.update()
            p_c.update()

    ins_laser_scan.end_scan()
    gobject.source_remove(timer_id)
    #ins_adwin.set_dac_voltage(['green_aom',_before_voltages[0]])
    #ins_adwin.set_dac_voltage(['newfocus_aom',_before_voltages[1]])
    if mw:
        ins_mw.set_status('off')
    qt.mend()

    pfsave = p_f
    pcsave = p_c

    if do_smooth:
        basepath = d.get_filepath()[:-4]
        ds = qt.Data()
        ds.set_filename_generator(data.IncrementalGenerator(basepath))
        ds.add_coordinate('voltage [V]')
        ds.add_value('smoothed frequency [GHz]')
        ds.add_value('counts')
        ds.create_file()

        p_fs = qt.Plot2D(ds,
                         'r-',
                         name='frequency smoothed',
                         coorddim=0,
                         valdim=1,
                         clear=True)
        p_cs = qt.Plot2D(ds,
                         'b-',
                         name='counts smoothed',
                         coorddim=1,
                         valdim=2,
                         clear=True)

        ds.add_data_point(d.get_data()[:, 0], rolling_avg(d.get_data()[:, 1]),
                          d.get_data()[:, 2])

        ds.close_file()
        pfsave = p_fs
        pcsave = p_cs

    if plot_strain_lines:
        try:
            from analysis.lib.nv import nvlevels
            Ey_line = float(raw_input('Ey line?'))  #GHz
            Ex_line = float(raw_input('Ex line?'))  #GHz
            lx, ly = nvlevels.get_ES_ExEy_plottable(Ex_line, Ey_line,
                                                    max(d.get_data()[:, 2]))
            pcsave.add(lx, ly)
        except ValueError:
            print 'Could not understand input for lines'
            pass

    pfsave.save_png()
    pcsave.save_png()

    d.close_file()
    qt.Data.set_filename_generator(data.DateTimeGenerator())

    if LT2:
        ins_adwin.set_linescan_var(set_phase_locking_on=0,
                                   set_gate_good_phase=0)
    ins_newfocus.set_power(0)
    ins_adwin.set_dac_voltage(('gate', gate_voltage_after))
    ins_green.set_power(green_before)