Example #1
0
 def take_data_specs():
     curr_spec = copy.copy(H.hero_spec())
     specs.append(curr_spec)
     block_laser()
     time.sleep(1)
     specs_bg.append(copy.copy(H.hero_spec()))
     unblock_laser()
     time.sleep(0.5)
Example #2
0
def THG_1560(sample,
             hero_int_time=2000,
             hero_avg_num=1,
             num_of_spec=5,
             alphas=np.arange(0, 360, 5),
             timesleep=0.5,
             log=''):
    """
    Obtain Hero spectrum for each alpha and gamma

    for horizontal reference frame (0deg at horizontal, and counter-clockwise rotation in the view of the microscope)
    POL = -4 (actually a HWP ZO for 1560 is bing used here)
    ANA = -47.8
    """
    main_path = r'D:\Nonlinear_setup\Experimental_data\THG_1560\%s' % sample
    os.makedirs(main_path)
    block_laser()
    total_len = len(alphas)
    total_time = total_len * hero_avg_num * num_of_spec * hero_int_time / 1000. + total_len * (
        0.5 + timesleep + 1)
    start_time = time.time()

    init_line = 'Started THG_1560 (%s) on %s, expected to complete on %s\nhero_int_time = %.2fms, hero_avg_num = %i, num_of_spec = %i, timesleep = %s\nalphas = %s' % (
        sample, time.strftime("%d%b%Y %H:%M", time.localtime()),
        time.strftime("%d%b%Y %H:%M",
                      time.localtime(time.time() + total_time)), hero_int_time,
        hero_avg_num, num_of_spec, timesleep, str(alphas))
    print(init_line)
    log_txt = [init_line, unicode(log) + u'\n\n']
    np.savetxt(os.path.join(main_path, 'log.txt'), uniArray(log_txt), fmt='%s')

    np.save(os.path.join(main_path, 'alphas'), alphas)
    _alphas_csv = open(os.path.join(main_path, "alphas.csv"), "wb")
    alphas_csv = csv.writer(_alphas_csv)
    alphas_csv.writerow(alphas)
    _alphas_csv.close()

    #    np.save(os.path.join(main_path,'gammas'),gammas)
    #    _gammas_csv=open(os.path.join(main_path, "gammas.csv"), "wb")
    #    gammas_csv=csv.writer(_gammas_csv)
    #    gammas_csv.writerow(gammas)
    #    _gammas_csv.close()

    H.initialise_hero()
    H.hero_int_time(hero_int_time)
    H.hero_avg_num(hero_avg_num)

    def HOME_POL_LOOP():
        home_POL()


#    def HOME_QWP_LOOP():
#        home_QWP()
#    def HOME_ANA_LOOP():
#        home_ANA()

    print('Homing POL')
    POL_th = threading.Thread(target=HOME_POL_LOOP)
    #    QWP_th = threading.Thread(target=HOME_QWP_LOOP)
    #    ANA_th = threading.Thread(target=HOME_ANA_LOOP)
    POL_th.start()
    #    QWP_th.start()
    #    ANA_th.start()
    #
    BCKGND_SPEC = H.hero_spec()

    np.save(os.path.join(main_path, 'BCKGND_SPEC'), BCKGND_SPEC)
    _BCKGND_SPEC_csv = open(os.path.join(main_path, "BCKGND_SPEC.csv"), "wb")
    BCKGND_SPEC_csv = csv.writer(_BCKGND_SPEC_csv)
    BCKGND_SPEC_csv.writerow(BCKGND_SPEC)
    _BCKGND_SPEC_csv.close()

    POL_th.join()

    #    QWP_th.join()
    #    ANA_th.join()

    def prepare_take_data():
        global specs
        specs = []

    def prepare_take_data_pm():
        global pm_ref
        pm_ref = []
        pma_wl(1560)

    def take_data():
        curr_spec = copy.copy(H.hero_spec())
        specs.append(curr_spec)

    def take_data_2():
        curr_power = pma_power()
        pm_ref.append(curr_power)

    def save_data(a):
        try:
            np.save(os.path.join(main_path, 'SPECS_a%s' % (a)),
                    np.array(specs))
            np.save(os.path.join(main_path, 'PM_ref'), np.array(pm_ref))
        except:
            time.sleep(1)
            save_data(a)

    prepare_take_data_pm()

    prev_completed = ''
    _n = 0
    prints('\n')
    for alpha in alphas:
        completed = 'alpha at %.1fdeg (%.2f percent)' % (alpha,
                                                         _n * 100. / total_len)
        prints(completed, prev_completed)
        prev_completed = completed

        move_PQA(alpha)
        prepare_take_data()

        unblock_laser()
        plt.pause(0.5)
        for i in range(num_of_spec):
            take_data()
        take_data_2()
        block_laser()

        save_data(a='%i' % (alpha * 100))

        plt.pause(timesleep)
        _n += 1

    block_laser()
    print 'Done! Time spent = %is' % (time.time() - start_time)
    play_sound(complete)

    H.hero_shutdown()
    try:
        anal_THG_1560(sample)
        plt.pause(1e-6)
    except:
        pass
Example #3
0
 def take_data():
     curr_spec = copy.copy(H.hero_spec())
     specs.append(curr_spec)
Example #4
0
def polarized_SHG_singlebeam2(sample,
                              hero_int_time=2000,
                              hero_avg_num=1,
                              num_of_spec=5,
                              alpha=-5,
                              gammas=np.arange(-45, 45.1, 5),
                              betas=np.arange(0, 360, 5),
                              timesleep=0.5,
                              log=''):
    """
    Obtain Hero spectrum for fix alpha, change gamma and scan beta (analyzer angle + offset)

    for horizontal reference frame (0deg at horizontal, and counter-clockwise rotation in the view of the microscope)
    POL = -37.9
    QWP = 25.5 (fast/slow), use +-45 around this
    ANA = -51.5
    """
    main_path = r'D:\Nonlinear_setup\Experimental_data\reVP1\%s' % sample
    os.makedirs(main_path)
    block_laser()
    total_len = len(betas) * len(gammas)
    total_time = total_len * hero_avg_num * num_of_spec * hero_int_time / 1000. + total_len * (
        0.5 + timesleep + 1)
    start_time = time.time()

    init_line = 'Started polarized_SHG_singlebeam2 (%s) on %s, expected to complete on %s\nhero_int_time = %.2fms, hero_avg_num = %i, num_of_spec = %i, timesleep = %.2fs, alpha = %.2fdeg\ngammas = %s\nbetas = %s' % (
        sample, time.strftime("%d%b%Y %H:%M", time.localtime()),
        time.strftime("%d%b%Y %H:%M",
                      time.localtime(time.time() + total_time)), hero_int_time,
        hero_avg_num, num_of_spec, timesleep, alpha, str(gammas), str(betas))
    print(init_line)
    log_txt = [init_line, unicode(log) + u'\n\n']
    np.savetxt(os.path.join(main_path, 'log.txt'), uniArray(log_txt), fmt='%s')

    np.save(os.path.join(main_path, 'betas'), betas)

    np.save(os.path.join(main_path, 'gammas'), gammas)

    H.initialise_hero()
    H.hero_int_time(hero_int_time)
    H.hero_avg_num(hero_avg_num)

    align_pol_ang = -37.9
    align_QWP_ang = 25.5
    align_ana_ang = -51.5

    def HOME_MOVE_POL_LOOP():
        home_POL()
        move_POL(alpha + align_pol_ang)

    def HOME_QWP_LOOP():
        home_QWP()

    def HOME_ANA_LOOP():
        home_ANA()

    print('Homing POL, QWP, ANA')
    POL_th = threading.Thread(target=HOME_MOVE_POL_LOOP)
    QWP_th = threading.Thread(target=HOME_QWP_LOOP)
    ANA_th = threading.Thread(target=HOME_ANA_LOOP)
    POL_th.start()
    QWP_th.start()
    ANA_th.start()

    BCKGND_SPEC = H.hero_spec()

    np.save(os.path.join(main_path, 'BCKGND_SPEC'), BCKGND_SPEC)
    _BCKGND_SPEC_csv = open(os.path.join(main_path, "BCKGND_SPEC.csv"), "wb")
    BCKGND_SPEC_csv = csv.writer(_BCKGND_SPEC_csv)
    BCKGND_SPEC_csv.writerow(BCKGND_SPEC)
    _BCKGND_SPEC_csv.close()

    POL_th.join()
    QWP_th.join()
    ANA_th.join()

    def prepare_take_data():
        global specs
        specs = []

    def prepare_take_data_pm():
        global pm_ref
        pm_ref = []
        pma_wl(1560)

    def take_data():
        curr_spec = copy.copy(H.hero_spec())
        specs.append(curr_spec)

    def take_data_2():
        curr_power = pma_power()
        pm_ref.append(curr_power)

    def save_data(g, b):
        try:
            np.save(os.path.join(main_path, 'SPECS_g%s_b%s' % (g, b)),
                    np.array(specs))
            np.save(os.path.join(main_path, 'PM_g%s' % (g)), np.array(pm_ref))
        except:
            time.sleep(1)
            save_data(g, b)

    prev_completed = ''
    _n = 0
    prints('\n')
    for gamma in gammas:

        def MOVE_QWP_LOOP():
            move_QWP(alpha + align_QWP_ang + gamma)

        def HOME_ANA_LOOP():
            home_ANA()

        QWP_th = threading.Thread(target=MOVE_QWP_LOOP)
        ANA_th = threading.Thread(target=HOME_ANA_LOOP)
        QWP_th.start()
        ANA_th.start()
        QWP_th.join()
        ANA_th.join()

        prepare_take_data_pm()

        for beta in betas:
            completed = 'gamma at %.1fdeg, beta at %.1fdeg (%.2f percent)' % (
                gamma, beta, _n * 100. / total_len)
            prints(completed, prev_completed)
            prev_completed = completed

            move_ANA(beta + align_ana_ang)

            prepare_take_data()

            unblock_laser()
            time.sleep(1.0)
            plt.pause(0.5)
            for i in range(num_of_spec):
                take_data()
            take_data_2()
            block_laser()

            save_data(g='%i' % (gamma * 100), b='%i' % (beta * 100))

            plt.pause(timesleep)
            _n += 1

    block_laser()
    print 'Done! Time spent = %is' % (time.time() - start_time)
    play_sound(complete)

    H.hero_shutdown()
    try:
        anal_polarized_SHG_singlebeam2(sample)
        plt.pause(1e-6)
    except:
        pass
Example #5
0
def VP2_pol_SHG(sample,hero_int_time=2000,hero_avg_num=1,num_of_spec=5,alphas=np.arange(0,360,2),ana_offset=-50.99,pump_wl=1560,sc_wl=756,sc_on=False,timesleep=0.5,log=''):
    """
    Obtain Hero spectrum for each alpha.
    Alpha is defined as the angle for the ANALYZER.
    The HWP controls the input polarization, and therefore its angle is Alpha/2.
    QWP is not needed in this experiment code, since circular poalrization parameters are fixed in the supercontinuum laser beam.
    SHG pump beam wavelength is 1560nm.
    The laser beam we are using comes from the 780nm output from Toptica, this is the reminiscent 1560nm beam.

    As carachterized on 21-nov-2017, 1560nm average power before 100x lens is ~3.2mW, and 100x lens transmittance is ~40%.

    for horizontal reference frame (0deg at horizontal, and counter-clockwise rotation in the view of the microscope)
    HWP = -9.67
    ANA = -50.99
    """
    main_path=r'D:\Nonlinear_setup\Experimental_data\VP2_pol_SHG\%s'%sample 
    os.makedirs(main_path)
    block_laser()
    total_len = len(alphas)
    total_time = total_len*hero_avg_num*num_of_spec*hero_int_time/1000. + total_len*(0.5+timesleep+1)
    start_time = time.time()
    init_pos = get_pos()

    init_line = '\nStarted VP2_pol_SHG (%s) on %s, expected to complete on %s\nhero_int_time = %.2f ms, hero_avg_num = %i, num_of_spec = %i, timesleep = %.2f s, alphas = %s, piezo stage position at %s\n'%(sample,time.strftime("%d%b%Y %H:%M", time.localtime()),time.strftime("%d%b%Y %H:%M", time.localtime(time.time()+total_time)),hero_int_time,hero_avg_num,num_of_spec,timesleep,str(alphas),str(init_pos))
    print(init_line)
    log_txt = [init_line,
               unicode(log)+u'\n\n']
    np.savetxt(os.path.join(main_path,'log.txt'),uniArray(log_txt),fmt='%s')
    
    np.save(os.path.join(main_path,'alphas'),alphas)
    _alphas_csv=open(os.path.join(main_path, "alphas.csv"), "wb") 
    alphas_csv=csv.writer(_alphas_csv)
    alphas_csv.writerow(alphas)
    _alphas_csv.close()

    H.initialise_hero()
    H.hero_int_time(hero_int_time)
    H.hero_avg_num(hero_avg_num)

    if sc_on:
        unblock_sc()
    else:
        block_sc()

    def HOME_HWP_LOOP():
        home_HWP()
    def HOME_ANA_LOOP():
        home_ANA()
    def HOME_QWP_LOOP():
        home_QWP()
    print('Homing HWP, QWP, ANA')
    HWP_th = threading.Thread(target=HOME_HWP_LOOP)
    ANA_th = threading.Thread(target=HOME_ANA_LOOP)
    QWP_th = threading.Thread(target=HOME_QWP_LOOP)
    HWP_th.start()
    ANA_th.start()
    QWP_th.start()

    block_laser()
    BCKGND_SPEC = H.hero_spec()
    unblock_laser()
    
    np.save(os.path.join(main_path,'BCKGND_SPEC'),BCKGND_SPEC)
    _BCKGND_SPEC_csv=open(os.path.join(main_path, "BCKGND_SPEC.csv"), "wb")
    BCKGND_SPEC_csv=csv.writer(_BCKGND_SPEC_csv)
    BCKGND_SPEC_csv.writerow(BCKGND_SPEC)
    _BCKGND_SPEC_csv.close()
     
    HWP_th.join()
    ANA_th.join()
    QWP_th.join()

    pma_wl(pump_wl)
#    pmd_wl(sc_wl)

    def prepare_take_data_inside_loop():
        global specs
        specs = []
        
    def prepare_take_data_outside_loop():
        global powers, powers_dev, powers_sc, powers_sc_dev
        powers = []
#        powers_sc = []
        powers_dev = []
#        powers_sc_dev = []

    def take_data_specs():
        curr_spec = copy.copy(H.hero_spec())
        specs.append(curr_spec)

    def take_data_powers():
        _powers=[]
#        _powers_sc=[]
        for i in range(100):
            _powers.append(pma_power())
            time.sleep(0.05)
#        for i in range(10):
#            _powers_sc.append(pmd_power())
#            time.sleep(0.05)
        
        curr_power = np.mean(_powers)
        curr_power_dev = np.std(_powers)
#        curr_power_sc = np.mean(_powers_sc)
#        curr_power_sc_dev = np.std(_powers_sc)
        
        powers.append(curr_power)
        powers_dev.append(curr_power_dev)
#        powers_sc_dev.append(curr_power_sc_dev)

    def save_data_specs(a):
        try:
            np.save(os.path.join(main_path,'SPECS_a%s'%a),np.array(specs))
        except:
            time.sleep(1)
            save_data_specs(a)

    def save_data_powers():
        try:
            np.save(os.path.join(main_path,'powers'),np.array(powers))
            np.save(os.path.join(main_path,'powers_dev'),np.array(powers_dev))
#            np.save(os.path.join(main_path,'powers_sc'),np.array(powers_sc))
#            np.save(os.path.join(main_path,'powers_sc_dev'),np.array(powers_sc_dev))
        except:
            time.sleep(1)
            save_data_powers()
    
    prev_completed = ''
    _n = 0
    prints('\n')
    
    SP_filter_out()
    
    prepare_take_data_outside_loop()
    for alpha in alphas:
        completed = 'alpha at %.1fdeg (%.2f percent)'%(alpha,_n*100./total_len)
        prints(completed,prev_completed)
        prev_completed = completed

        move_alpha(alpha,ANA_off=ana_offset)
        prepare_take_data_inside_loop()
        
        plt.pause(0.5)
        for i in range(num_of_spec):
            take_data_specs()
        take_data_powers()


        save_data_specs(a='%i'%(alpha*100))
        save_data_powers()

        plt.pause(timesleep)
        _n += 1

    block_laser()
#    SP_filter_in()
    block_sc()
    
    print 'Done! Time spent = %is'%(time.time()-start_time)
    play_sound(complete)

    H.hero_shutdown()
    try:
        VP2_pol_SHG_1560_anal(sample)
        plt.pause(1e-6)
    except:
        pass
Example #6
0
def VP2_power_dep_SHG(sample,hero_int_time=2000,hero_avg_num=1,num_of_spec=5,alphas=np.arange(0,360,2),hwp_offset=-9.67,ana_offset=-50.99,pump_wl=1560,timesleep=0.5,log=''):
    """

    In this power dependence measurement, analyser holds its position.

    After aligning HWO and ANA to alpha for maximum SHG, a polazizer must be inserted after HWP,
    so by rotating HWP we change the power pumping SHG, and do not change the alpha.
    
    The objective is to observe how SHG intensity varies with varying pump power.

    Obtain Hero spectrum for each HWP position (alpha/2).
    Alpha is defined as the angle for the polarization after HWP.

    The HWP controls the input polarization, and therefore its angle is Alpha/2.

    SHG pump beam wavelength is 1560nm.
    The laser beam we are using comes from the 780nm output from Toptica, this is the reminiscent 1560nm beam.

    As carachterized on 21-nov-2017, 1560nm average power before 100x lens is ~3.2mW, and 100x lens transmittance is ~40%.

    for horizontal reference frame (0deg at horizontal, and counter-clockwise rotation in the view of the microscope)
    HWP = -9.67
    ANA = -50.99
    """
    main_path=r'D:\Nonlinear_setup\Experimental_data\VP2_power_dep_SHG\%s'%sample 
    os.makedirs(main_path)
    block_laser()
    total_len = len(alphas)
    total_time = total_len*hero_avg_num*num_of_spec*hero_int_time/1000. + total_len*(0.5+timesleep+1)
    start_time = time.time()
    init_pos = get_pos()

    init_line = '\nStarted VP2_power_dep_SHG (%s) on %s, expected to complete on %s\nhero_int_time = %.2f ms, hero_avg_num = %i, num_of_spec = %i, timesleep = %.2f s, alphas = %s, piezo stage position at %s\n'%(sample,time.strftime("%d%b%Y %H:%M", time.localtime()),time.strftime("%d%b%Y %H:%M", time.localtime(time.time()+total_time)),hero_int_time,hero_avg_num,num_of_spec,timesleep,str(alphas),str(init_pos))
    print(init_line)
    ans=raw_input('To run this experiment, a polarizer must be introduced after HWP. Have you done this modification? Press n to cancel, press any other key to proceed.')
    if ans=='n' or ans=='N':
        return
    
    log_txt = [init_line,
               unicode(log)+u'\n\n']
    np.savetxt(os.path.join(main_path,'log.txt'),uniArray(log_txt),fmt='%s')

    np.save(os.path.join(main_path,'alphas'),alphas)
    _alphas_csv=open(os.path.join(main_path, "alphas.csv"), "wb") 
    alphas_csv=csv.writer(_alphas_csv)
    alphas_csv.writerow(alphas)
    _alphas_csv.close()

    H.initialise_hero()
    H.hero_int_time(hero_int_time)
    H.hero_avg_num(hero_avg_num)

    def HOME_HWP_LOOP():
        home_HWP()
    print('Homing HWP')
    HWP_th = threading.Thread(target=HOME_HWP_LOOP)
    HWP_th.start()

    BCKGND_SPEC = H.hero_spec()

    np.save(os.path.join(main_path,'BCKGND_SPEC'),BCKGND_SPEC)
    _BCKGND_SPEC_csv=open(os.path.join(main_path, "BCKGND_SPEC.csv"), "wb")
    BCKGND_SPEC_csv=csv.writer(_BCKGND_SPEC_csv)
    BCKGND_SPEC_csv.writerow(BCKGND_SPEC)
    _BCKGND_SPEC_csv.close()

    HWP_th.join()


    pma_wl(pump_wl)

    def prepare_take_data_inside_loop():
        global specs
        specs = []

    def prepare_take_data_outside_loop():
        global powers, powers_dev
        powers = []
        powers_dev = []

    def take_data_specs():
        curr_spec = copy.copy(H.hero_spec())
        specs.append(curr_spec)

    def take_data_powers():
        _powers=[]
        for i in range(10):
            _powers.append(pma_power())
            time.sleep(0.05)

        curr_power = np.mean(_powers)
        curr_power_dev = np.std(_powers)

        powers.append(curr_power)
        powers_dev.append(curr_power_dev)

    def save_data_specs(a):
        try:
            np.save(os.path.join(main_path,'SPECS_a%s'%a),np.array(specs))
        except:
            time.sleep(1)
            save_data_specs(a)

    def save_data_powers():
        try:
            np.save(os.path.join(main_path,'powers'),np.array(powers))
            np.save(os.path.join(main_path,'powers_dev'),np.array(powers_dev))
        except:
            time.sleep(1)
            save_data_powers()

    prev_completed = ''
    _n = 0
    prints('\n')

    prepare_take_data_outside_loop()
    for alpha in alphas:
        completed = 'alpha at %.1fdeg (%.2f percent)'%(alpha,_n*100./total_len)
        prints(completed,prev_completed)
        prev_completed = completed

        move_HWP(alpha/2 + hwp_offset)
        prepare_take_data_inside_loop()

        unblock_laser()
        plt.pause(0.5)
        for i in range(num_of_spec):
            take_data_specs()
        take_data_powers()

        block_laser()
        save_data_specs(a='%i'%(alpha*100))
        save_data_powers()

        plt.pause(timesleep)
        _n += 1

    block_laser()
    print 'Done! Time spent = %is'%(time.time()-start_time)
    play_sound(complete)

    H.hero_shutdown()
Example #7
0
def VP2_zscan_SHG(sample,center_z,distance_from_center,resol=1,hero_int_time=2000,hero_avg_num=1,num_of_spec=5,alphas=[233,180],ana_offset=-50.99,pump_wl=1560,timesleep=0.5,pump_with_1560=True,log=''):

    y0=center_z
    yl=distance_from_center
    Ys=np.arange(y0-yl,y0+yl+resol,resol)

    block_laser()
#    block_sc()
    total_len = len(Ys)*len(alphas)
    total_time = total_len*(hero_avg_num*num_of_spec*hero_int_time/1000. +2)
    start_time = time.time()

    init_line = '\nStarted VP2_zscan_SHG (%s) on %s, expected to complete on %s\nhero_int_time = %.2f ms, hero_avg_num = %i, num_of_spec = %i, timesleep = %.2f s, alphas = %s, central Z = %s, distance from central Z = %s, and resolution = %.1f um\n'%(
        sample,time.strftime("%d%b%Y %H:%M", time.localtime()),time.strftime("%d%b%Y %H:%M", time.localtime(time.time()+total_time)),hero_int_time,hero_avg_num,num_of_spec,timesleep,str(alphas),str(y0),str(yl),resol)
    print(init_line)
#    ans=raw_input('Continue? Input n to cancel. ')
#    if ans=='n' or ans=='N':
#        return
    main_path=r'D:\Nonlinear_setup\Experimental_data\VP2_zscan_SHG\%s'%sample 
    os.makedirs(main_path)
    log_txt = [init_line,
               unicode(log)+u'\n\n']
    np.savetxt(os.path.join(main_path,'log.txt'),uniArray(log_txt),fmt='%s')
    
    np.save(os.path.join(main_path,'alphas'),alphas)
    np.save(os.path.join(main_path,'Ys'),Ys)
    _alphas_csv=open(os.path.join(main_path, "alphas.csv"), "wb") 
    alphas_csv=csv.writer(_alphas_csv)
    alphas_csv.writerow(alphas)
    _alphas_csv.close()

    H.initialise_hero()
    H.hero_int_time(hero_int_time)
    H.hero_avg_num(hero_avg_num)

    def HOME_HWP_LOOP():
        home_HWP()
    def HOME_QWP_LOOP():
        home_QWP()
    def HOME_ANA_LOOP():
        home_ANA()
    print('Homing HWP, QWP, ANA')
    HWP_th = threading.Thread(target=HOME_HWP_LOOP)
    QWP_th = threading.Thread(target=HOME_QWP_LOOP)
    ANA_th = threading.Thread(target=HOME_ANA_LOOP)
    HWP_th.start()
    QWP_th.start()
    ANA_th.start()

    BCKGND_SPEC = H.hero_spec()
    
    np.save(os.path.join(main_path,'BCKGND_SPEC'),BCKGND_SPEC)
    _BCKGND_SPEC_csv=open(os.path.join(main_path, "BCKGND_SPEC.csv"), "wb")
    BCKGND_SPEC_csv=csv.writer(_BCKGND_SPEC_csv)
    BCKGND_SPEC_csv.writerow(BCKGND_SPEC)
    _BCKGND_SPEC_csv.close()
     
    HWP_th.join()
    QWP_th.join()
    ANA_th.join()

    pma_wl(pump_wl)

    def prepare_take_data_spec():
        global specs
        specs = []
        
    def prepare_take_data_pm():
        global powers, powers_dev
        powers = []
        powers_dev = []

    def take_data_specs():
        curr_spec = copy.copy(H.hero_spec())
        specs.append(curr_spec)

    def take_data_powers():
        _powers=[]
        for i in range(10):
            _powers.append(pma_power())
            time.sleep(0.05)
        
        curr_power = np.mean(_powers)
        curr_power_dev = np.std(_powers)
        
        powers.append(curr_power)
        powers_dev.append(curr_power_dev)

    def save_data_specs(a,y):
        try:
            np.save(os.path.join(main_path,'SPECS_a%s_y%s'%(a,y)),np.array(specs))
        except:
            time.sleep(1)
            save_data_specs(a,y)

    def save_data_powers(a):
        try:
            np.save(os.path.join(main_path,'powers_a%s'%a),np.array(powers))
            np.save(os.path.join(main_path,'powers_dev_a%s'%a),np.array(powers_dev))
        except:
            time.sleep(1)
            save_data_powers(a)
    
    prev_completed = ''
    _n = 0
    prints('\n')
    if pump_with_1560:
        unblock_laser()
        SP_filter_out()
    else:
#        unblock_sc()
        SP_filter_in()
    
    for alpha in alphas:
        move_alpha(alpha,ANA_off=ana_offset)
        prepare_take_data_pm()
        for Y in Ys:
            move_to_y(Y)
            completed = 'alpha at %.1fdeg, Y at %.1f um (%.2f percent)'%(alpha,Y,_n*100./total_len)
            prints(completed,prev_completed)
            prev_completed = completed
            
            prepare_take_data_spec()
            
#            unblock_laser()
            plt.pause(0.5)
            for i in range(num_of_spec):
                take_data_specs()
            take_data_powers()

#            block_laser()
            save_data_specs(a='%i'%(alpha*100),y='%i'%(Y*100))
            save_data_powers(a='%i'%(alpha*100))

            plt.pause(timesleep)
            _n += 1

    block_laser()
#    block_sc()
    print 'Done! Time spent = %is'%(time.time()-start_time)
    play_sound(complete)

    H.hero_shutdown()
    try:
        VP2_zscan_SHG_anal(sample)
        plt.pause(1e-6)
    except:
        pass
Example #8
0
def VP2_mapping_SHG(sample,
                    ini_pos,
                    map_size,
                    resol=1,
                    hero_int_time=2000,
                    hero_avg_num=1,
                    num_of_spec=5,
                    alphas=[233, 180],
                    ana_offset=-50.99,
                    pump_wl=1560,
                    timesleep=0.5,
                    log=''):

    Xi, Zi = ini_pos
    Xl, Zl = map_size
    Xs = np.arange(Xi, Xi + Xl + resol, resol)
    Zs = np.arange(Zi, Zi + Zl + resol, resol)

    block_laser()
    block_sc()
    total_len = len(Xs) * len(Zs) * len(alphas)
    total_time = total_len * (
        hero_avg_num * num_of_spec * hero_int_time / 1000. + 2)
    start_time = time.time()

    init_line = '\nStarted VP2_mapping_SHG (%s) on %s, expected to complete on %s\nhero_int_time = %.2f ms, hero_avg_num = %i, num_of_spec = %i, timesleep = %.2f s, alphas = %s, initial position = %s, mapping size = %s, and resolution = %.1f um\n' % (
        sample, time.strftime("%d%b%Y %H:%M", time.localtime()),
        time.strftime("%d%b%Y %H:%M",
                      time.localtime(time.time() + total_time)), hero_int_time,
        hero_avg_num, num_of_spec, timesleep, str(alphas), str(ini_pos),
        str(map_size), resol)
    print(init_line)
    ans = raw_input('Continue? Input n to cancel. ')
    if ans == 'n' or ans == 'N':
        return
    main_path = r'D:\Nonlinear_setup\Experimental_data\VP2_mapping_SHG\%s' % sample
    os.makedirs(main_path)
    log_txt = [init_line, unicode(log) + u'\n\n']
    np.savetxt(os.path.join(main_path, 'log.txt'), uniArray(log_txt), fmt='%s')

    np.save(os.path.join(main_path, 'alphas'), alphas)
    np.save(os.path.join(main_path, 'Xs'), Xs)
    np.save(os.path.join(main_path, 'Zs'), Zs)
    _alphas_csv = open(os.path.join(main_path, "alphas.csv"), "wb")
    alphas_csv = csv.writer(_alphas_csv)
    alphas_csv.writerow(alphas)
    _alphas_csv.close()

    H.initialise_hero()
    H.hero_int_time(hero_int_time)
    H.hero_avg_num(hero_avg_num)

    def HOME_HWP_LOOP():
        home_HWP()

    def HOME_QWP_LOOP():
        home_QWP()

    def HOME_ANA_LOOP():
        home_ANA()

    print('Homing HWP, QWP, ANA')
    HWP_th = threading.Thread(target=HOME_HWP_LOOP)
    QWP_th = threading.Thread(target=HOME_QWP_LOOP)
    ANA_th = threading.Thread(target=HOME_ANA_LOOP)
    HWP_th.start()
    QWP_th.start()
    ANA_th.start()

    BCKGND_SPEC = H.hero_spec()

    np.save(os.path.join(main_path, 'BCKGND_SPEC'), BCKGND_SPEC)
    _BCKGND_SPEC_csv = open(os.path.join(main_path, "BCKGND_SPEC.csv"), "wb")
    BCKGND_SPEC_csv = csv.writer(_BCKGND_SPEC_csv)
    BCKGND_SPEC_csv.writerow(BCKGND_SPEC)
    _BCKGND_SPEC_csv.close()

    HWP_th.join()
    QWP_th.join()
    ANA_th.join()

    pma_wl(pump_wl)

    def prepare_take_data_spec():
        global specs
        specs = []

    def prepare_take_data_pm_Z():
        global powers, powers_dev
        powers = []
        powers_dev = []

    def prepare_take_data_pm_X():
        powers.append([])
        powers_dev.append([])

    def take_data_specs():
        curr_spec = copy.copy(H.hero_spec())
        specs.append(curr_spec)

    def take_data_powers():
        _powers = []
        for i in range(10):
            _powers.append(pma_power())
            time.sleep(0.05)

        curr_power = np.mean(_powers)
        curr_power_dev = np.std(_powers)

        powers[-1].append(curr_power)
        powers_dev[-1].append(curr_power_dev)

    def save_data_specs(a, x, z):
        try:
            np.save(os.path.join(main_path, 'SPECS_a%s_x%s_z%s' % (a, x, z)),
                    np.array(specs))
        except:
            time.sleep(1)
            save_data_specs(a, x, z)

    def save_data_powers(a):
        try:
            np.save(os.path.join(main_path, 'powers_a%s' % a),
                    np.array(powers))
            np.save(os.path.join(main_path, 'powers_dev_a%s' % a),
                    np.array(powers_dev))
        except:
            time.sleep(1)
            save_data_powers(a)

    prev_completed = ''
    _n = 0
    prints('\n')
    unblock_laser()
    unblock_sc()

    for alpha in alphas:
        move_alpha(alpha, ANA_off=ana_offset)
        prepare_take_data_pm_Z()
        for Z in Zs:
            move_to_z(Z)
            prepare_take_data_pm_X()
            for X in Xs:
                move_to_x(X)
                completed = 'alpha at %.1fdeg, Z at %.1f um, X at %.1f um (%.2f percent)' % (
                    alpha, Z, X, _n * 100. / total_len)
                prints(completed, prev_completed)
                prev_completed = completed

                prepare_take_data_spec()

                #                unblock_laser()
                plt.pause(0.5)
                for i in range(num_of_spec):
                    take_data_specs()
                take_data_powers()

                #                block_laser()
                save_data_specs(a='%i' % (alpha * 100),
                                x='%i' % (X * 100),
                                z='%i' % (Z * 100))
                save_data_powers(a='%i' % (alpha * 100))

                plt.pause(timesleep)
                _n += 1

    block_laser()
    block_sc()
    print 'Done! Time spent = %is' % (time.time() - start_time)
    play_sound(complete)

    H.hero_shutdown()
    try:
        VP2_mapping_SHG_anal(sample)
        plt.pause(1e-6)
    except:
        pass
Example #9
0
 def hero_bg_loop():
     curr_spec_bg.append(H.hero_spec())
Example #10
0
 def hero_loop():
     curr_spec.append(H.hero_spec())