コード例 #1
0
    #turn on magnet stepping in Z
    #Change mode to step for normal operation
    mom.set_mode('Z_axis', 'gnd')

    # start: define B-field and position by first ESR measurement
    DESR_msmt.darkesr(
        'magnet_' + 'Z_axis_' + 'msm1',
        ms='msm',
        range_MHz=range_fine,
        pts=pts_fine,
        reps=reps_fine,
        freq=(f0m_temp) * 1e9,  # - N_hyperfine,
        pulse_length=8e-6,
        ssbmod_amplitude=0.0015,
        mw_switch=False)  #0.0025
    f0m_temp, u_f0m_temp = dark_esr_auto_analysis.analyze_dark_esr_double()
    f0m_temp = f0m_temp  # + N_hyperfine*1e-9
    delta_f0m_temp = f0m_temp * 1e6 - current_f_msm1 * 1e-3

    # start to list all the measured values
    iterations = 0
    iterations_list.append(iterations)
    f0m.append(f0m_temp)
    u_f0m.append(u_f0m_temp)
    delta_f0m.append(delta_f0m_temp)
    d_steps.append(
        int(
            round(
                mt.steps_to_frequency(freq=f0m_temp * 1e9,
                                      freq_id=current_f_msm1,
                                      ms='plus'))))
コード例 #2
0
        # Measure B-field
        darkesr('magnet_Zpos_optimize_init',
                range_MHz=coarse_range,
                pts=coarse_pts,
                reps=coarse_reps,
                power=coarse_amplitude,
                MW_power=coarse_MW_power,
                pulse_length=coarse_pulse_length)

        # Do the fitting, returns in MHz, input in GHz
        if only_fine == False:
            f0_temp, u_f0_temp = dark_esr_auto_analysis.analyze_dark_esr(
                current_f_msm1 * 1e-9,
                qt.exp_params['samples'][SAMPLE]['N_HF_frq'] * 1e-9)
        else:
            f0_temp, u_f0_temp = dark_esr_auto_analysis.analyze_dark_esr_double(
                do_plot=True)
        delta_f0_temp = -f0_temp * 1e6 + current_f_msm1 * 1e-3  # in kHz

        # Magnet start position
        Start_position = magnet_Z_scanner.GetPosition()

        # List all the measured values
        iterations = 0
        f0.append(f0_temp)
        u_f0.append(u_f0_temp)
        delta_f0.append(delta_f0_temp)
        magnet_postion_list.append(Start_position)

        temperature = (temperature_sensor.get_readlastval() -
                       100) / 0.385  # better to be here
        temperature_list.append(temperature)
コード例 #3
0
def optimize_magnetic_field():

    safemode            = False    # If True then manual confirmation is needed befor each magnet movement
    optimization_target = 15     # Target difference frequency in kHz , first (03.08) was 10 then 7 then 10 again
    field_gradient      = 0.100     
    only_fine           = False

    ### Settings for the first coarse steps
    coarse_range          = 7.5     #Common: 10 MHz
    coarse_pts            = 101     #Common: 121
    coarse_reps           = 750     #Common: 500
    coarse_amplitude      = 0.08
    coarse_pulse_length   = 3e-6
    coarse_MW_power       = -1

    ### Settings for the fine steps
    fine_range          = 0.600
    fine_pts            = 81
    fine_reps           = 2000
    fine_amplitude      = 0.08/3 
    fine_pulse_length   = 9e-6
    fine_MW_power       = -1

    
    
    
    coarse_range   = fine_range     
    coarse_pts     = fine_pts    
    coarse_reps    = fine_reps   
    coarse_pulse_length = fine_pulse_length
    coarse_amplitude    = fine_amplitude 
    coarse_MW_power = fine_MW_power


## Run optimizor ##############
    GreenAOM.set_power(10e-6)
    counters.set_is_running(True)
    optimiz0r.optimize(dims=['x','y','z'], int_time=300)

    GreenAOM.set_power(10e-6)
    counters.set_is_running(True)
    optimiz0r.optimize(dims=['x','y','z'], int_time=300)

    name = 'SSRO_calib'
    ssrocalibration(name)

   ### SSRO Analysis
    ssro_analysis.ssrocalib()

#########################################

    f0 = []; u_f0 = []; delta_f0 =[]; iterations_list =[]; magnet_postion_list =[]; fit_failed_list=[]

    darkesr('magnet_optimize_init', range_MHz=coarse_range, pts=coarse_pts, reps=coarse_reps, 
                power= coarse_amplitude, MW_power = coarse_MW_power, pulse_length=coarse_pulse_length)

    # Do the fitting, returns in MHz, input in GHz
     
    f0_temp, u_f0_temp = dark_esr_auto_analysis.analyze_dark_esr_double(do_plot=True)
    delta_f0_temp = -f0_temp*1e6+current_f_msm1*1e-3    # in kHz

    # Magnet start position
    Start_position = magnet_Z_scanner.GetPosition()

    # List all the measured values
    iterations = 0
    f0.append(f0_temp)
    u_f0.append(u_f0_temp)
    delta_f0.append(delta_f0_temp)
    magnet_postion_list.append(Start_position)


    while abs(delta_f0_temp) > optimization_target:

            ## Determine new postition
            current_position = magnet_Z_scanner.GetPosition()
            delta_position = delta_f0_temp/field_gradient*1e-6
            move_to_position = current_position + delta_position

            print 'Target frequency =' + str(current_f_msm1)
            print 'Measured frequency = ' + str(f0_temp) + ' GHz +/- ' + str(u_f0_temp*1e6) + ' kHz'
            print 'Difference = ' + str(delta_f0_temp) + ' kHz'
            print 'Current magnet position = ' + str(current_position) + ' mm'
            print 'Move to position          ' + str(move_to_position) + ' mm'
            print 'By                        ' + str(delta_position*1e6) + 'nm'
            

            # if u_f0_temp*1e6 > 15:
            #     print 'Uncertainty larger than 15 kHz, fit failed'
            #     fit_failed = 1
            # else: 
            #     fit_failed = 0

            # fit_failed_list.append(fit_failed)
            
            ## Actually move the magnet
          

            if u_f0_temp*1e6 < 15:
       
                ## Limit the maximum movement range
                if move_to_position < 0.042 or move_to_position > 0.072:
                    print 'movement is going out of range, abort!!!'
                    break

                print 'Target frequency =' + str(current_f_msm1)
                print 'Measured frequency = ' + str(f0_temp) + ' GHz +/- ' + str(u_f0_temp*1e6) + ' kHz'
                print 'Difference = ' + str(delta_f0_temp) + ' kHz'
                print 'Current magnet position = ' + str(current_position) + ' mm'
                print 'Move to position          ' + str(move_to_position) + ' mm'
                print 'By                        ' + str((move_to_position-current_position)*1e6) + 'nm'

                if safemode == True: 
                    print '\a\a\a' 
                    ri = raw_input ('move magnet? (y/n)')
                    if str(ri) != 'y': 
                        break
                
                ## Actually move the magnet
                magnet_Z_scanner.MoveRelative(delta_position)
                print 'moving magnet...'

            else:
                print 'Uncertainty larger than 15 kHz, fit failed'
                break

            print '--------------------------------'
            print 'press q to stop measurement loop'
            print '--------------------------------'
            qt.msleep(2)

            if (msvcrt.kbhit() and (msvcrt.getch() == 'q')) or abs(move_to_position-current_position) < 0.000025:
                break

            darkesr('magnet_optimize_step_' + str(iterations), range_MHz=fine_range, pts=fine_pts, reps=fine_reps, 
                power = fine_amplitude, MW_power = fine_MW_power, pulse_length=fine_pulse_length)

            f0_temp, u_f0_temp = dark_esr_auto_analysis.analyze_dark_esr_double(do_plot=True)
            delta_f0_temp = -f0_temp*1e6+current_f_msm1*1e-3

            iterations += 1
コード例 #4
0
def fit_B_msmt_loop(older_than=None, newer_than=None):
    f0m = []
    u_f0m = []
    #f0p = [] ;u_f0p = []
    # Bx_field_measured = []
    # Bz_field_measured = []
    # f_centre_list = []; f_diff_list=[]
    timestamp_list = []
    # f_centre_error_list= []
    it_list = []
    # f_diff_error_list = []
    absolute_time_list = []
    temperature_list = []
    magnet_position_list = []

    #msm
    print 'start'
    older_than_SSRO = older_than
    print older_than, newer_than
    iteration = 0
    while toolbox.latest_data(contains='magnet_scanner_calib_fine',
                              older_than=older_than,
                              newer_than=newer_than,
                              raise_exc=False) != False:
        print 'ITERATION ' + str(iteration)
        ## Find the data folder

        ### This was needed for some of the meaurements where both a fine and a coarse measurement was done, THT 160725
        # timestamp,folder = toolbox.latest_data(contains='magnet_msm1_coarse', older_than=older_than, newer_than=newer_than,return_timestamp = True)
        # older_than = str(int(timestamp)-1)

        timestamp, folder = toolbox.latest_data(
            contains='magnet_scanner_calib_fine',
            older_than=older_than,
            newer_than=newer_than,
            return_timestamp=True)
        print 'm folder ' + folder

        ## Load the data ##
        ssro_calib_folder = toolbox.latest_data(
            contains='AdwinSSRO_SSROCalibration', older_than=older_than_SSRO)
        a = sequence.SequenceAnalysis(folder)
        a.get_sweep_pts()
        a.get_readout_results('ssro')
        a.get_electron_ROC(ssro_calib_folder=ssro_calib_folder)

        f0m_temp, u_f0m_temp = dark_esr_auto_analysis.analyze_dark_esr_double(
            do_plot=True, add_folder=folder)

        # #msp
        # folder = toolbox.latest_data(contains='msmt_msp_', older_than=older_than, newer_than=newer_than,)
        # print folder
        # a = sequence.SequenceAnalysis(folder)
        # a.get_sweep_pts()
        # a.get_readout_results('ssro')
        # a.get_electron_ROC(ssro_calib_folder=ssro_calib_folder)

        # f0p_temp,u_f0p_temp = dark_esr_auto_analysis.analyze_dark_esr(None, 2.196*1e-3, add_folder = folder )

        # print f0p_temp >0 and f0m_temp >0
        # if f0p_temp >0 and f0m_temp >0:
        # Bz_measured, Bx_measured = amt.get_B_field(msm1_freq=f0m_temp*1e9, msp1_freq=f0p_temp*1e9, u_msm1_freq =u_f0m_temp ,u_msp1_freq=u_f0p_temp)
        # f_centre = (f0m_temp+f0p_temp)/2
        # f_centre_error = np.sqrt(u_f0m_temp**2+u_f0p_temp**2)/2
        # f_diff = (f_centre-ZFS*1e-9)*1e6
        # f_diff_error = f_centre_error*1e6
        f0m.append(f0m_temp)
        u_f0m.append(u_f0m_temp)
        # f0p.append(f0p_temp)
        # u_f0p.append(u_f0p_temp)
        # f_centre_list.append(f_centre)
        # f_centre_error_list.append(f_centre_error)
        # f_diff_list.append(f_diff)
        # f_diff_error_list.append(f_diff_error)
        # Bx_field_measured.append(Bx_measured)
        # Bz_field_measured.append(Bz_measured)
        timestamp_list.append(timestamp)
        it_list.append(iteration)

        ### Get the temperature data
        temperature = (a.g.attrs['temp'] - 100) / 0.385
        temperature_list.append(temperature)

        magnet_position = (a.g.attrs['magnet_position'])
        magnet_position_list.append(magnet_position)

        absolute_time = int(timestamp[-2:]) + int(timestamp[-4:-2]) * 60 + int(
            timestamp[-6:-4]) * 60**2 + int(timestamp[6:8]) * (60**2) * 24
        absolute_time_list.append(absolute_time)

        older_than = str(int(timestamp) - 1)
        print 'older than: ' + older_than
        iteration = iteration + 1

    it_list = np.linspace(0, len(it_list) - 1, len(it_list))
    outfile = TemporaryFile()

    np.savez(
        'test_B_field_meas',
        f0m=f0m,
        u_f0m=u_f0m,
        # f0p=f0p,
        # u_f0p=u_f0p,
        # f_centre_list=f_centre_list,
        # f_centre_error_list=f_centre_error_list,
        # f_diff_list=f_diff_list,
        # f_diff_error_list=f_diff_error_list,
        # Bx_field_measured=Bx_field_measured,
        # Bz_field_measured=Bz_field_measured,
        timestamp_list=timestamp_list,
        absolute_time_list=absolute_time_list,
        it_list=it_list,
        temperature_list=temperature_list,
        magnet_position_list=magnet_position_list)
コード例 #5
0
from analysis.lib.fitting import fit,esr
ZFS = 2.877623

f0m = []; u_f0m = [];
f0p = []; u_f0p = [];
f_centre = []
f_diff = []

timestamp = '20141220_140000'
k_list = np.linspace(0,20,21)

for k in range(len(k_list)):

	timestamp, folder = toolbox.latest_data('PulsarDarkESR_magnet_msm1', older_than = timestamp, return_timestamp = True)
	print folder
	f0m_temp, u_f0m_temp = dark_esr_auto_analysis.analyze_dark_esr_double(timestamp = timestamp)

	timestamp, folder = toolbox.latest_data('PulsarDarkESR_magnet_msp1', older_than = timestamp, return_timestamp = True)
	f0p_temp, u_f0p_temp = dark_esr_auto_analysis.analyze_dark_esr_double(timestamp = timestamp)

	f_centre_temp    = (f0m_temp+f0p_temp)/2
	f_diff_temp = (f_centre_temp-ZFS)*1e6

	print timestamp

	f0m.append(f0m_temp)
	u_f0m.append(u_f0m_temp)
	f0p.append(f0p_temp)
	u_f0p.append(u_f0p_temp)
	f_centre.append(f_centre_temp)
	f_diff.append(f_diff_temp)
コード例 #6
0
def auto_z_magnet_optimize():

    ######################
    ## Input parameters ##
    ######################
    safemode = False
    maximum_magnet_step_size = 50
    opimization_target = 10  # target difference in kHz (or when 0 magnet steps are required)

    ### for the remainder of the steps
    range_fine = 0.4
    pts_fine = 51
    reps_fine = 100

    ###########
    ## Start ##
    ###########

    #create the data lists
    d_steps = [0]
    f0 = [0]
    u_f0 = [0]
    delta_f0 = [0]
    iterations_list = [0]

    #turn on magnet stepping in Z
    mom.set_mode('Z_axis', 'stp')

    # start: define B-field and position by first ESR measurement
    DESR_msmt.darkesr(
        'magnet_' + 'Z_axis_' + 'msm1',
        ms='msm',
        range_MHz=range_fine,
        pts=pts_fine,
        reps=reps_fine,
        freq=f0_temp * 1e9,  # - N_hyperfine,
        pulse_length=8e-6,
        ssbmod_amplitude=0.0025)
    f0_temp, u_f0_temp = dark_esr_auto_analysis.analyze_dark_esr_double(
        do_ROC=False, do_plot=False)
    f0_temp = f0_temp  # + N_hyperfine*1e-9
    delta_f0_temp = f0_temp * 1e6 - current_f_msm1 * 1e-3

    # start to list all the measured values
    iterations = 0
    iterations_list.append(iterations)
    f0.append(f0_temp)
    u_f0.append(u_f0_temp)
    delta_f0.append(delta_f0_temp)
    d_steps.append(
        int(
            round(
                mt.steps_to_frequency(freq=f0_temp * 1e9,
                                      freq_id=current_f_msm1,
                                      ms='plus'))))

    print 'Measured frequency = ' + str(f0_temp) + ' GHz +/- ' + str(
        u_f0_temp * 1e6) + ' kHz'
    print 'Difference = ' + str(delta_f0_temp) + ' kHz'

    while abs(delta_f0_temp) > opimization_target:
        iterations += 1
        print 'move magnet in Z with ' + str(d_steps[iterations]) + ' steps'

        if abs(d_steps[iterations]) > maximum_magnet_step_size:
            print 'd_steps>+/-00, step only 50 steps!'
            if d_steps[iterations] > 0:
                d_steps[iterations] = maximum_magnet_step_size
            if d_steps[iterations] < 0:
                d_steps[iterations] = -1 * maximum_magnet_step_size
        elif d_steps[iterations] == 0:
            print 'Steps = 0 optimization converted'
            break
        if safemode == True:
            ri = raw_input('move magnet? (y/n)')
            if str(ri) == 'y':
                mom.step('Z_axis', d_steps[iterations])
            else:
                break
        else:
            mom.step('Z_axis', d_steps[iterations])

        DESR_msmt.darkesr(
            'fine_optimize_magnet_' + 'Z_axis_' + 'msm1',
            ms='msm',
            range_MHz=range_fine,
            pts=pts_fine,
            reps=reps_fine,
            freq=f0_temp * 1e9,  # - N_hyperfine,
            pulse_length=8e-6,
            ssbmod_amplitude=0.0025)

        f0_temp, u_f0_temp, folder = dark_esr_auto_analysis.analyze_dark_esr_double(
            do_ROC=False, ret_folder=True, do_plot=False)
        f0_temp = f0_temp  # + N_hyperfine*1e-9
        delta_f0_temp = f0_temp * 1e6 - current_f_msm1 * 1e-3

        d_steps.append(
            int(
                round(
                    mt.steps_to_frequency(freq=f0_temp * 1e9,
                                          freq_id=current_f_msm1,
                                          ms='plus'))))

        f0.append(f0_temp)
        u_f0.append(u_f0_temp)
        delta_f0.append(delta_f0_temp)

        print 'Measured frequency = ' + str(f0_temp) + ' GHz +/- ' + str(
            u_f0_temp * 1e6) + ' kHz'
        print 'Difference = ' + str(f0_temp * 1e6 -
                                    current_f_msm1 * 1e-3) + ' kHz'

        iterations_list.append(iterations)

    total_d_steps = np.sum(d_steps)

    #create a file to save data to --> what is a good way to save this?
    d = qt.Data(name='magnet_auto_Z_optimization_overview')
    d.add_coordinate('iteration')
    d.add_value('frequency [GHz]')
    d.add_value('frequency error [GHz]')
    d.add_value('frequency difference [GHz]')
    d.add_value('number of steps')
    d.create_file()
    filename = d.get_filepath()[:-4]
    print iterations_list
    print f0
    print u_f0
    print delta_f0
    print d_steps
    d.add_data_point(iterations_list, f0, u_f0, delta_f0, d_steps)
    d.close_file()

    print 'Z position fine optimization finished, stepped the magnet ' + str(
        total_d_steps) + ' in ' + str(iterations + 1) + ' iterations'
コード例 #7
0
        qt.msleep(1)
        stools.turn_off_all_lt2_lasers()
        GreenAOM.set_power(20e-6)
        optimiz0r.optimize(dims=['x', 'y', 'z'])

        darkesr(SAMPLE_CFG,
                range_MHz=repeat_range,
                pts=repeat_pts,
                reps=repeat_reps,
                power=repeat_power,
                pulse_length=repeat_pulse_length)

        #Determine frequency and B-field --> this fit programme returns in MHz, needs input GHz
        f0_temp, u_f0_temp = dark_esr_auto_analysis.analyze_dark_esr_double(
            current_f_msm1 * 1e-9,
            qt.exp_params['samples'][SAMPLE]['N_HF_frq'] * 1e-9)
        delta_f0_temp = f0_temp * 1e6 - current_f_msm1 * 1e-3

        f0.append(f0_temp)
        u_f0.append(u_f0_temp)
        delta_f0.append(delta_f0_temp)
        iterations_list.append(iterations)

        print 'Measured frequency = ' + str(f0_temp) + ' GHz +/- ' + str(
            u_f0_temp * 1e6) + ' kHz'
        print 'Difference = ' + str(f0_temp * 1e6 -
                                    current_f_msm1 * 1e-3) + ' kHz'

        # To cleanly exit the optimization
        print '--------------------------------'
コード例 #8
0
            break

        #ms=-1 fine
        DESR_msmt.darkesr(
            'magnet_' + 'msm1',
            ms='msm',
            range_MHz=range_fine,
            pts=pts_fine,
            reps=reps_fine,
            freq=f0m_temp * 1e9,  # - N_hyperfine,
            pulse_length=9e-6,
            ssbmod_amplitude=0.08 / 3,
            mw_power=-1,
            mw_switch=True)

        f0m_temp, u_f0m_temp = dark_esr_auto_analysis.analyze_dark_esr_double(
            do_plot=save_plots)
        f0m_temp = f0m_temp  # + N_hyperfine*1e-9

        #ms=+1 fine
        DESR_msmt.darkesr(
            'magnet_' + 'msp1',
            ms='msp',
            range_MHz=range_fine,
            pts=pts_fine,
            reps=reps_fine,
            freq=f0p_temp * 1e9,  # + N_hyperfine, 
            pulse_length=9e-6,
            ssbmod_amplitude=0.08 / 3,
            mw_power=-1,
            mw_switch=True)