# def scan_2DFE_energy(): # def scan_harmonic_energy_pol(): def scan_2DFE_energy(): # 1 Define detector and scan parameters #sensors = [Keithley_2_raw.getAlias(), CADC2.getAlias(), SR_current.getAlias(), BML_energy_RBV.getAlias()] sensors = [Keithley_2_raw, CADC2, SR_current, BML_energy] Keithley_channel = Keithley_2_raw.getChannelName() Keithley_range = "2 uA" #Keithley range: "AUTO", "20 mA", "2 mA", "200 uA", "20 uA", "2 uA", "200 nA", "20 nA", "2 nA", "200 pA", "20 pA" emin = 400 emax = 415 esteps = 20 #FE_centerX = -0.75 #FE_centerY = 1.25 FE_centerX = 0.0 FE_centerY = 0.0 FE_size_x = 0.1 FE_size_y = 0.1 x_range = 3.0 y_range = 3.0 x_steps = 0.1 y_steps = 0.1 xmin = FE_centerX - x_range/2 xmax = FE_centerX + x_range/2 ymin = FE_centerY - y_range/2 ymax = FE_centerY + y_range/2 xsteps = x_steps ysteps = y_steps # Set detector and slit parameters for scan> range_number = range_to_number(Keithley_range) Keithley_range_cmd = Keithley_channel.replace('READOUT', 'RANGE') caput(Keithley_range_cmd, range_number) # 6 --> 200 nA BML_FE_sizeX.setSpeed(1.0) BML_FE_sizeY.setSpeed(1.0) BML_FE_centerX.setSpeed(1.0) BML_FE_centerY.setSpeed(1.0) BML_FE_sizeX.write(FE_size_x) BML_FE_sizeY.write(FE_size_y) #Scan_params = [emin, emax, esteps, FE_centerX, FE_centerY, FE_size_x, FE_size_y, x_range, y_range, x_steps, y_steps] # 3 Perform scans for energy in range(emin, emax, esteps): print(energy) BML_energy.update() BML_energy.move(float(energy)) print(BML_energy.read()) ascan([BML_FE_centerX, BML_FE_centerY], sensors, [xmin, ymin], [xmax, ymax], [xsteps, ysteps], latency=0.1, zigzag=False) json_path = get_exec_pars().path bml_save_scan_settings_json(json_path) BML_energy.update() # scan_3D_FE_slits(Scan_params, sensors) # 4 Restore FE motor speed BML_FE_sizeX.setSpeed(0.1) BML_FE_sizeY.setSpeed(0.1) BML_FE_centerX.setSpeed(0.1) BML_FE_centerY.setSpeed(0.1) # FE_centerX_ini = BML_FE_centerX.read() # FE_centerY_ini = BML_FE_centerY.read() # FE_sizeX_ini = BML_FE_sizeX.read() # FE_sizeY_ini = BML_FE_sizeY.read() # BML_FE_sizeX.move(FE_sizeX) # BML_FE_sizeY.move(FE_sizeY) # BML_FE_centerX.move(xmin) # BML_FE_centerY.move(ymin) # sleep(1.0) # ID2_mode # BML_energy_set # BML_FE_sizeX.update() # BML_FE_sizeY.update() # BML_FE_centerX.update() # BML_FE_centerY.update() # # BML_FE_sizeX.move(FE_sizeX_ini) # BML_FE_sizeY.move(FE_sizeY_ini) # BML_FE_centerX.move(FE_centerX_ini) # BML_FE_centerY.move(FE_centerY_ini) # # BML_FE_sizeX.setSpeed(0.1) # BML_FE_sizeY.setSpeed(0.1) # BML_FE_centerX.setSpeed(0.1) # BML_FE_centerY.setSpeed(0.1) def scan_2DFE_energy_pol(): polarizations = [1,2,3,4,5,6,7] for p in polarizations: print(p) caput("X11MA-UIND2:MODE", p) sleep(60) ID_state = caget("X11MA-UIND2:MODE") print(ID_state) ID_energy = caget("X11MA-UIND2:ENERGY-RBV") print(ID_energy) scan_2DFE_energy() BML_FE_sizeX.write(0.0) BML_FE_sizeY.write(0.0) def scan_harmonic_energy_pol(): # 0 Off # 1 Linear H # 2 Linear V+ # 3 Linear V- # 4 Circular+ # 5 Circular- # 6 +45 deg # 7 -45 deg sensors = [Keithley_2_raw.getAlias(), CADC2.getAlias(), SR_current.getAlias(), BML_energy.getAlias()] polarizations = [1] # polarizations = ["Linear H", "Linear V+", "Linear V-","Circular+", "Circular-", "+45 deg", "-45 deg"] Keithley_channel = Keithley_2_raw.getChannelName() Keithley_range = "AUTO" #Keithley range: "AUTO", "20 mA", "2 mA", "200 uA", "20 uA", "2 uA", "200 nA", "20 nA", "2 nA", "200 pA", "20 pA" emin = 500.0 emax = 800.0 esteps = 5.0 latency = 0.1 FE_centerX = 0.0 FE_centerY = 0.0 FE_size_x = 4.0 FE_size_y = 4.0 energy_slit = 20.0 # Set detector and slit parameters for scan> range_number = range_to_number(Keithley_range) Keithley_range_cmd = Keithley_channel.replace('READOUT', 'RANGE') caput(Keithley_range_cmd, range_number) # 6 --> 200 nA BML_FE_sizeX.update() BML_FE_sizeY.update() BML_FE_centerX.update() BML_FE_centerY.update() # BML_FE_centerX.write(FE_centerX) # BML_FE_centerY.write(FE_centerY) # BML_FE_sizeX.write(FE_size_x) # BML_FE_sizeY.write(FE_size_y) exit_slit.move(energy_slit) scan_energy_values = [emin, emax, esteps,latency] for p in polarizations: print(p) # caput("X11MA-UIND2:MODE", p) BML_energy.write(emin) # ID2_mode.move("Linear H") sleep(1) ID_state = caget("X11MA-UIND2:MODE") print(ID_state) ID_energy = caget("X11MA-UIND2:ENERGY-RBV") print(ID_energy) scan_energy(scan_energy_values, sensors) # BML_FE_sizeX.write(0.0) # BML_FE_sizeY.write(0.0) # def scan_2DFE_energy_OTF(): for energy in range(380, 420, 5): print(energy) BML_energy.update() BML_energy.move(float(energy)) BML_energy.update() run_parallel_scan() def scan_2DFE_energy_OTF_pol(): # polarizations = [7,6,5,4,3,2,1] polarizations = [2,7,1] # polarizations = ["Linear H", "Linear V+", "Linear V-","Circular+", "Circular-", "+45 deg", "-45 deg"] for p in polarizations: print(p) caput("X11MA-PGM:energy", 1650.0) caput("X11MA-PGM:setE.PROC", 1) # caput("X11MA-UIND2:ENERGY-SP", 1650.0) # sleep(10) caput("X11MA-UIND2:MODE", p) sleep(300) for i in range(16500, 17500, 50): # 0.2 → Faktor 10 energy = i / 10.0 print(energy) caput("X11MA-PGM:energy", energy) caput("X11MA-PGM:setE.PROC", 1) # caput("X11MA-UIND2:ENERGY-SP", energy) sleep(10) run_parallel_scan()