This commit is contained in:
gac-x03da
2019-11-23 18:37:02 +01:00
parent 0a673f6e25
commit e8c0465d24
5 changed files with 815 additions and 0 deletions

View File

@@ -0,0 +1,343 @@
"""
Line/vector/area/holo scan of multiple spectral regions
save this script into your script/user folder before editing!
usage:
1. uncomment one of the MOTORS lines.
add another line if necessary.
2. uncomment one of the scan blocks and adjust the parameters.
add another block if necessary.
3. declare the regions.
4. add the regions to the REGIONS list.
5. run the script.
"""
# dummy scan (time series)
MOTORS = [Eph]
# photon energy scan (do not include 'ephot' in regions in this case!)
#MOTORS = [Eph]
# phi scan
#MOTORS = [ManipulatorPhi]
# holo scan
#MOTORS = (ManipulatorPhi, ManipulatorTheta)
# 2D YZ scan
#MOTORS = [ManipulatorY, ManipulatorZ]
# line scan [start, stop, step]
#POSITIONS = [0., 10., 0.5]
#SCAN = 'lscan'
# vector scan [pos1, pos2, pos3, ...]
POSITIONS = [600., 900.]
SCAN = 'vscan'
# area scan [(start1, start2), (stop1, stop2), (step1, step2)]
# corresponding to (positioner1, positioner2)
#POSITIONS = [(-1., 114.), (+1., 116.), (20, 20)]
#ZIGZAG = True
#SCAN = 'ascan'
# holo scan
#PHI_RANGE = (-160.0, 160.0) # (tuple (min, max))
#THETA_RANGE = (-9.0, 81.0) # (tuple (min, max))
#STEPS = (40.0, 1.0) # (tuple (phi, theta))
#ZIGZAG = True
#POSITIONS = [(PHI_RANGE[0], THETA_RANGE[0]), (PHI_RANGE[1], THETA_RANGE[1]), STEPS]
#SCAN = 'ascan'
# seconds to wait between positioning command and triggering the detector
LATENCY = 0.0
# region setup
#
# for each region, define a python dictionary with the following items.
# optional items can be left unspecified and will default to the indicated values.
# for swept mode, include 'elo', 'ehi', 'estep', 'iter' values, but do not include 'efix'.
# for fixed mode, include 'efix' value, but do not include 'elo', 'ehi', 'estep', 'iter'.
#
# 'name': user-specific name of the region (for graph title and RegionName attribute in data file)
# 'elo': lower kinetic energy boundary of the spectrum
# 'ehi': upper kinetic energy boundary of the spectrum
# 'estep': energy step size
# 'efix': center kinetic energy in fixed mode
# 'epass': pass energy
# 'ephot': photon energy (default: unchanged)
# 'tstep': dwell time in seconds
# 'iter': number of iterations/sweeps (default 1)
# 'cis': True = constant initial state (photoemission line), False = constant final state (Auger peak), (default False)
# 'slit': exit slit (default: unchanged)
# First window should be set to first photon energy (see energies above)
REFERENCE_POSITION = {'X':1.2 ,'Y':0.0, 'Z':110.6, 'Theta':-9.1, 'Tilt':0.9, 'Phi':-90.0}
SAMPLE_POSITION = {'X':0.65 ,'Y':0.0, 'Z':115.0, 'Theta':-9.1, 'Tilt':0.9, 'Phi':-90.0}
REGION1 = {'name': 'AuFermi', 'ephot':600. , 'elo': 595., 'ehi':597.0, 'estep':0.1, 'epass': 20., 'tstep': 1., 'iter': 1, 'cis': False, 'position': 'reference'}
REGION2 = {'name': 'In3d','ephot':600., 'elo': 140., 'ehi':153.0, 'estep':0.1, 'epass': 20., 'tstep': 1., 'iter': 1, 'cis': False, 'position': 'sample'}
REGION3 = {'name': 'AuFermi', 'ephot':900. , 'elo': 895., 'ehi':897.0, 'estep':0.1, 'epass': 20., 'tstep': 1., 'iter': 1, 'cis': False, 'position': 'reference'}
REGION4 = {'name': 'Au4f', 'ephot':900. , 'elo': 895., 'ehi':897.0, 'estep':0.1, 'epass': 20., 'tstep': 1., 'iter': 1, 'cis': False, 'position': 'reference'}
REGION5 = {'name': 'In3d','ephot':900., 'elo': 440., 'ehi':453.0, 'estep':0.1, 'epass': 20., 'tstep': 1., 'iter': 1, 'cis': False, 'position': 'sample'}
# list of region dictionaries to execute at each scan position
REGIONS = [REGION1, REGION2, REGION3, REGION4]
# close beam shutter and turn off analyser at the end of the scan
CLOSE_SHUTTER_AT_END = True
def move_to_position(pdict):
ManipulatorX.move(pdict['X'])
ManipulatorY.move(pdict['Y'])
ManipulatorZ.move(pdict['Z'])
ManipulatorTheta.move(pdict['Theta'])
ManipulatorTilt.move(pdict['Tilt'])
ManipulatorPhi.move(pdict['Phi'])
# --- DO NOT EDIT BELOW THIS LINE! ---
set_exec_pars(keep=False)
def check_region(region):
"""
check region dictionary items and apply defaults where necessary
"""
region['fixed'] = 'efix' in region
if region['fixed']:
region['elo'] = region['efix']
region['ehi'] = region['efix']
if 'iter' not in region:
region['iter'] = 1
print("region {0}: setting default iter = {1}".format(region['name'], region['iter']))
if 'cis' not in region:
region['cis'] = False
print("region {0}: setting default cis = {1}".format(region['name'], region['cis']))
class SpectrumReader(ReadonlyRegisterBase, ReadonlyRegisterArray):
def initialize(self):
#super(SpectrumReader, self).initialize()
self.scan_index = -1
def create_datasets(self):
path = get_exec_pars().scanPath + self.region_name + "/"
if self.region['fixed']:
self.channel_center_dataset_name = path + "ScientaChannelCenter"
create_dataset(self.channel_center_dataset_name, 'd')
else:
self.channel_begin_dataset_name = path + "ScientaChannelBegin"
self.channel_end_dataset_name = path + "ScientaChannelEnd"
self.step_energy_dataset_name = path + "ScientaStepEnergy"
create_dataset(self.channel_begin_dataset_name, 'd')
create_dataset(self.channel_end_dataset_name, 'd')
create_dataset(self.step_energy_dataset_name, 'd')
if 'epass' in self.region:
self.pass_energy_dataset_name = path + "ScientaPassEnergy"
create_dataset(self.pass_energy_dataset_name, 'd')
if 'tstep' in self.region:
self.step_time_dataset_name = path + "ScientaStepTime"
create_dataset(self.step_time_dataset_name, 'd')
if 'iter' in self.region:
self.iterations_dataset_name = path + "ScientaIterations"
create_dataset(self.iterations_dataset_name, 'd')
if 'slit' in self.region:
self.slit_dataset_name = path + "ExitSlit"
create_dataset(self.slit_dataset_name, 'd')
if 'position' in self.region:
position_names = {key:path + "Position"+ key for key in ['X','Y','Z','Theta','Tilt','Phi']}
self.position_dataset_names = position_names
for datanames in self.position_dataset_names.values():
create_dataset(datanames, 'd')
def setup(self):
# print("spectrum.setup")
if self.scan_index != get_exec_pars().index:
self.scan_index = get_exec_pars().index
self.create_datasets()
if self.region_index == 0:
print "scan {0}".format(self.scan_index)
edelta = 0.0
try:
ephot = self.region['ephot']
Eph.move(ephot)
except KeyError:
ephot = Eph.take(100)
if isinstance(ephot, float) and ephot > 0.:
try:
if self.region['cis']:
edelta = ephot - self.ephot_start
except AttributeError:
self.ephot_start = ephot
elo = self.region['elo'] + edelta
ehi = self.region['ehi'] + edelta
if self.region['fixed']:
Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Fixed)
Scienta.centerEnergy.write(elo)
append_dataset(self.channel_center_dataset_name, elo)
else:
Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Swept)
Scienta.lowEnergy.write(elo)
Scienta.highEnergy.write(ehi)
Scienta.stepSize.write(self.region['estep'])
append_dataset(self.channel_begin_dataset_name, elo)
append_dataset(self.channel_end_dataset_name, ehi)
append_dataset(self.step_energy_dataset_name, self.region['estep'])
try:
Scienta.setPassEnergy(int(self.region['epass']))
append_dataset(self.pass_energy_dataset_name, self.region['epass'])
except KeyError:
pass
try:
Scienta.stepTime.write(self.region['tstep'])
append_dataset(self.step_time_dataset_name, self.region['tstep'])
except KeyError:
pass
try:
Scienta.setIterations(self.region['iter'])
append_dataset(self.iterations_dataset_name, self.region['iter'])
except KeyError:
pass
try:
ExitSlit.write(self.region['slit'])
append_dataset(self.slit_dataset_name, self.region['slit'])
except KeyError:
pass
if self.region['position'] == 'sample':
move_to_position(SAMPLE_POSITION)
for name in SAMPLE_POSITION.keys():
append_dataset(self.position_dataset_names[name], SAMPLE_POSITION[name])
elif self.region['position'] == 'reference':
move_to_position(REFERENCE_POSITION)
for name in REFERENCE_POSITION.keys():
append_dataset(self.position_dataset_names[name], SAMPLE_POSITION[name])
Scienta.update()
def read(self):
# print("spectrum.read")
global current_region_index
current_region_index = self.region_index
self.setup()
print("Acquiring region {0}.".format(self.region['name']))
trig_scienta()
time.sleep(0.5)
sp = Scienta.getSpectrum().read()
return sp
def getSize(self):
if self.region['fixed']:
nx = 992
else:
nx = int((self.region['ehi'] - self.region['elo']) / self.region['estep']) + 1
return nx
class ImageReader(ReadonlyRegisterBase, ReadonlyRegisterMatrix):
def read(self):
# print("image.read")
return Scienta.getDataMatrix().read()
def getWidth(self):
if self.region['fixed']:
nx = 992
else:
nx = int((self.region['ehi'] - self.region['elo']) / self.region['estep']) + 1
return nx
def getHeight(self):
ny = Scienta.slices.read()
return ny
def setup_live_plots(regions):
global live_plots
global current_region_index
names = [region['name'] for region in regions]
live_plots = plot(None, names, title="Live Spectra")
current_region_index = 0
def update_live_plots():
global live_plots
global current_region_index
try:
while get_context().state.running:
y = Scienta.spectrum.take(100)
x = Scienta.spectrumX
try:
series = live_plots[current_region_index].getSeries(0)
series.setData(x, y)
except IndexError:
pass
time.sleep(1.0)
finally:
print "Stopping live spectra"
def do_scan(scan, motors, positions, regions, latency):
global SENSORS
SENSORS = []
for (index, region) in enumerate(regions):
check_region(region)
reader = SpectrumReader()
reader.region_index = index
reader.region_name = "region{0}".format(index + 1)
reader.region = region
reader.initialize()
set_device_alias(reader, reader.region_name + "/ScientaSpectrum")
SENSORS.append(reader)
image = ImageReader()
image.region_index = index
image.region = region
image.initialize()
set_device_alias(image, reader.region_name + "/ScientaImage")
SENSORS.append(image)
SENSORS.append(SampleCurrent)
SENSORS.append(RefCurrent)
adjust_sensors()
set_adc_averaging()
if scan == 'ascan':
ascan(motors, SENSORS, positions[0], positions[1], positions[2], latency, False, zigzag = True, before_read=wait_beam, after_read = after_readout)
elif scan == 'lscan':
lscan(motors, SENSORS, positions[0], positions[1], positions[2], latency, False, before_read=wait_beam, after_read = after_readout)
elif scan == 'vscan':
vscan(motors, SENSORS, positions, True, latency,False, before_read=wait_beam, after_read = after_readout)
else:
print('unknown scan mode {}'.format(scan))
for (index, region) in enumerate(regions):
set_attribute(get_exec_pars().scanPath + "region{0}/ScientaSpectrum".format(index + 1), "RegionName", region['name'])
set_attribute(get_exec_pars().scanPath + "region{0}/ScientaImage".format(index + 1), "RegionName", region['name'])
set_attribute(get_exec_pars().scanPath, "Regions", [region['name'] for region in regions])
try:
setup_live_plots(REGIONS)
task = fork(update_live_plots)
do_scan(SCAN, MOTORS, POSITIONS, REGIONS, LATENCY)
finally:
if CLOSE_SHUTTER_AT_END:
after_scan()

316
script/191122-dev-move.py Normal file
View File

@@ -0,0 +1,316 @@
"""
Discrete scan (vector scan) of multiple spectral regions
"""
# scan positioner: Eph = photon energy
#MOTORS = (ManipulatorPhi, ManipulatorTheta)
#MOTORS = [ManipulatorPhi]
MOTORS = [dummy]
# comma-separated discrete list of scan positions
#POSITIONS = [(PHI_RA
#POSITIONS = [(PNGE[0], THETA_RANGE[0]), (PHI_RANGE[1], THETA_RANGE[1]), STEPS]
#POSITIONS = [-175., 180., 5.]
# seconds to wait between positioning command and triggering the detector
LATENCY = 0.0
# region setup
#
# for each region, define a python dictionary with the following items.
# optional items can be left unspecified and will default to the indicated values.
# for swept mode, include 'elo', 'ehi', 'estep', 'iter' values, but do not include 'efix'.
# for fixed mode, include 'efix' value, but do not include 'elo', 'ehi', 'estep', 'iter'.
#
# 'name': user-specific name of the region (for graph title and RegionName attribute in data file)
# 'elo': lower kinetic energy boundary of the spectrum
# 'ehi': upper kinetic energy boundary of the spectrum
# 'estep': energy step size
# 'efix': center kinetic energy in fixed mode
# 'epass': pass energy
# 'tstep': dwell time in seconds
# 'iter': number of iterations/sweeps (default 1)
# 'cis': True = constant initial state (photoemission line), False = constant final state (Auger peak), (default False)
# 'slit': exit slit (default current value)
#REGION1 = {'name': 'VB62eV', 'ephot': 62, 'efix': 1222.1, 'epass': 200., 'tstep': 20., 'iter': 1, 'cis': False}
#REGION2 = {'name': 'off-resonance', 'ephot': 1235.0, 'efix': 1219.4, 'epass': 200., 'tstep': 20., 'iter': 1, 'cis': False}
#REGION1 = {'name': 'VB62eV', 'ephot': 62, 'elo': 49.0, 'ehi': 58.0, 'estep': 0.002, 'epass': 10, 'tstep': 0.5, 'iter': 1, 'cis': False}
#REGION1 = {'name': 'VB62eVzoom', 'elo': 54.0, 'ehi': 58.0, 'estep': 0.002, 'epass': 10.0, 'tstep': 0.5, 'iter': 1, 'cis': True}
# close beam shutter and turn off analyser at the end of the scan
CLOSE_SHUTTER_AT_END = False
# --- DO NOT EDIT BELOW THIS LINE! ---
set_exec_pars(keep=False)
def check_region(region):
"""
check region dictionary items and apply defaults where necessary
"""
region['fixed'] = 'efix' in region
if region['fixed']:
region['elo'] = region['efix']
region['ehi'] = region['efix']
if 'iter' not in region:
region['iter'] = 1
print("region {0}: setting default iter = {1}".format(region['name'], region['iter']))
if 'cis' not in region:
region['cis'] = False
print("region {0}: setting default cis = {1}".format(region['name'], region['cis']))
if 'slit' not in region:
region['slit'] = ExitSlit.read()
print("region {0}: setting default slit = {1}".format(region['name'], region['slit']))
class SpectrumReader(ReadonlyRegisterBase, ReadonlyRegisterArray):
def initialize(self):
#super(SpectrumReader, self).initialize()
self.scan_index = -1
def create_datasets(self):
path = get_exec_pars().scanPath + self.region_name + "/"
self.channel_begin_dataset_name = path + "ScientaChannelBegin"
self.channel_end_dataset_name = path + "ScientaChannelEnd"
self.channel_center_dataset_name = path + "ScientaChannelCenter"
self.pass_energy_dataset_name = path + "ScientaPassEnergy"
self.step_energy_dataset_name = path + "ScientaStepEnergy"
self.step_time_dataset_name = path + "ScientaStepTime"
self.iterations_dataset_name = path + "ScientaIterations"
self.slit_dataset_name = path + "ExitSlit"
create_dataset(self.channel_begin_dataset_name, 'd')
create_dataset(self.channel_end_dataset_name, 'd')
create_dataset(self.channel_center_dataset_name, 'd')
create_dataset(self.pass_energy_dataset_name, 'd')
create_dataset(self.step_energy_dataset_name, 'd')
create_dataset(self.step_time_dataset_name, 'd')
create_dataset(self.iterations_dataset_name, 'd')
create_dataset(self.slit_dataset_name, 'd')
def setup(self):
if self.scan_index != get_exec_pars().index:
self.scan_index = get_exec_pars().index
self.create_datasets()
if self.region_index == 0:
print "scan {0}".format(self.scan_index)
#ephot = Eph.read()
#try:
# if self.region['cis']:
# edelta = ephot - self.ephot_start
# else:
# edelta = 0.0
#except AttributeError:
# self.ephot_start = ephot
edelta = 0.0
elo = self.region['elo'] + edelta
ehi = self.region['ehi'] + edelta
try:
Eph.write(self.region['ephot'])
except KeyError:
pass
if self.region['fixed']:
Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Fixed)
Scienta.centerEnergy.write(elo)
else:
Scienta.setAcquisitionMode(ch.psi.pshell.epics.Scienta.AcquisitionMode.Swept)
Scienta.lowEnergy.write(elo)
Scienta.highEnergy.write(ehi)
Scienta.stepSize.write(self.region['estep'])
Scienta.setPassEnergy(int(self.region['epass']))
Scienta.stepTime.write(self.region['tstep'])
Scienta.setIterations(self.region['iter'])
ExitSlit.write(self.region['slit'])
Scienta.update()
if self.region['fixed']:
append_dataset(self.channel_center_dataset_name, elo)
else:
append_dataset(self.channel_begin_dataset_name, elo)
append_dataset(self.channel_end_dataset_name, ehi)
append_dataset(self.step_energy_dataset_name, self.region['estep'])
append_dataset(self.pass_energy_dataset_name, self.region['epass'])
append_dataset(self.step_time_dataset_name, self.region['tstep'])
append_dataset(self.iterations_dataset_name, self.region['iter'])
append_dataset(self.slit_dataset_name, self.region['slit'])
def read(self):
global current_region_index
current_region_index = self.region_index
self.setup()
print("Acquiring region {0}.".format(self.region['name']))
trig_scienta()
time.sleep(0.5)
sp = Scienta.getSpectrum().read()
return sp
def getSize(self):
if self.region['fixed']:
nx = 992
else:
nx = int((self.region['ehi'] - self.region['elo']) / self.region['estep']) + 1
return nx
class ImageReader(ReadonlyRegisterBase, ReadonlyRegisterMatrix):
def read(self):
return Scienta.getDataMatrix().read()
def getWidth(self):
if self.region['fixed']:
nx = 992
else:
nx = int((self.region['ehi'] - self.region['elo']) / self.region['estep']) + 1
return nx
def getHeight(self):
ny = Scienta.slices.read()
return ny
def setup_live_plots(regions):
global live_plots
global current_region_index
names = [region['name'] for region in regions]
live_plots = plot(None, names, title="Live Spectra")
current_region_index = 0
def update_live_plots():
global live_plots
global current_region_index
try:
while get_context().state.running:
y = Scienta.spectrum.take(100)
x = Scienta.spectrumX
try:
series = live_plots[current_region_index].getSeries(0)
series.setData(x, y)
except IndexError:
pass
time.sleep(1.0)
finally:
print "Stopping live spectra"
def do_scan(motors, positions, regions, latency):
global SENSORS
SENSORS = []
for (index, region) in enumerate(regions):
check_region(region)
reader = SpectrumReader()
reader.region_index = index
reader.region_name = "region{0}".format(index + 1)
reader.region = region
reader.initialize()
set_device_alias(reader, reader.region_name + "/ScientaSpectrum")
SENSORS.append(reader)
image = ImageReader()
image.region_index = index
image.region = region
image.initialize()
set_device_alias(image, reader.region_name + "/ScientaImage")
SENSORS.append(image)
SENSORS.append(SampleCurrent)
SENSORS.append(RefCurrent)
adjust_sensors()
set_adc_averaging()
#ascan(motors, SENSORS, positions[0], positions[1], positions[2], latency, False, zigzag = True, before_read=wait_beam, after_read = after_readout)
#lscan(motors, SENSORS, positions[0], positions[1], positions[2], latency, False, before_read=wait_beam, after_read = after_readout)
vscan(motors, SENSORS, positions, True, latency,False, before_read=wait_beam, after_read = after_readout)
for (index, region) in enumerate(regions):
set_attribute(get_exec_pars().scanPath + "region{0}/ScientaSpectrum".format(index + 1), "RegionName", region['name'])
set_attribute(get_exec_pars().scanPath + "region{0}/ScientaImage".format(index + 1), "RegionName", region['name'])
set_attribute(get_exec_pars().scanPath, "Regions", [region['name'] for region in regions])
class PhysicalLocation():
def __init__(self, X, Y, Z, theta, tilt, phi):
self.X = X
self.Y = Y
self.Z = Z
self.theta = theta
self.tilt = tilt
self.phi = phi
def move_to_location(self):
ManipulatorX.move(self.X)
ManipulatorY.move(self.Y)
ManipulatorZ.move(self.Z)
ManipulatorTheta.move(self.theta)
ManipulatorTilt.move(self.tilt)
ManipulatorPhi.move(self.phi)
#VARS
sample = PhysicalLocation(-4.1,-0.5,115.1,-8.8,0.7,-90.0)
goldReference = PhysicalLocation(-3.4,4.4,111.6,-8.8,0.7,90.0)
dosing = PhysicalLocation(-4.1,-0.5,115.1,51.0,0.7,-90.0)
sample.move_to_location()
energies = [300,400,500]
for e in energies:
try:
Eph.move(e)
goldReference.move_to_location()
goldRegions = goldRegion(e, "fixed")
do_scan(MOTORS, POSITIONS, goldRegions, LATENCY)
sample.move_to_location()
sampleRegions =
do_scan(MOTORS, POSITIONS, sampleRegions, LATENCY)
def goldRegion(energy, scan_type):
if scan_type == "fixed":
return [{'name': 'Au', 'ephot': 1237.7, 'efix': 1222.1, 'epass': 50., 'tstep': 5., 'iter': 1, 'cis': False}]
elif scan_type == "swept":
return [{'name': 'Au', 'elo': 54.0, 'ehi': 58.0, 'estep': 0.002, 'epass': 10.0, 'tstep': 0.5, 'iter': 1, 'cis': False}]
def sampleRegion(energy, scan_type):
epass = 10.0
tstep = 0.5
estep = 0.002
if scan_type == "In4d":
e1 = energy - 4.5 - 18
e2 = energy - 4.5 - 17
return [{'name': scan_type, 'elo': 54.0, 'ehi': 58.0, 'estep': estep, 'epass': epass, 'tstep': tstep, 'iter': 1, 'cis': False}]
elif scan_type == "Sb4d":
e1 = energy - 4.5 - 33
e2 = energy - 4.5 - 32
elif scan_type == "In3d":
e1 = energy - 4.5 - 451
e2 = energy - 4.5 - 444
return [{'name': scan_type, 'elo': 54.0, 'ehi': 58.0, 'estep': estep, 'epass': epass, 'tstep': tstep, 'iter': 1, 'cis': False}]
goldReference.move_to_location()
thisregion =
sample.move_to_location()
thisregion = {'name': 'In3d', 'ephot': 1237.7, 'efix': 1222.1, 'epass': 50., 'tstep': 5., 'iter': 1, 'cis': False}

View File

@@ -0,0 +1,88 @@
import ch.psi.pshell.plot.RangeSelectionPlot.RangeSelection as RangeSelection
REFERENCE_POSITION = {'X':1.4 ,'Y':0.0, 'Z':110.6, 'Theta':-9.1, 'Tilt':0.8, 'Phi':-90.0}
SAMPLE_POSITION = {'X':1.4 ,'Y':0.6, 'Z':116.5, 'Theta':-9.1, 'Tilt':0.8, 'Phi':-90.0}
def move_to_position(pdict):
ManipulatorX.move(pdict['X'])
ManipulatorY.move(pdict['Y'])
ManipulatorZ.move(pdict['Z'])
ManipulatorTheta.move(pdict['Theta'])
ManipulatorTilt.move(pdict['Tilt'])
ManipulatorPhi.move(pdict['Phi'])
binding_center_Au_Ef=0.;
window_Au_Ef=4.;
time_Au_Ef = 15.
binding_center_Au_4f=86.;
window_Au_4f=15.;
time_Au_4f = 2.
binding_center_As_3d=43.;
window_As_3d=15.;
time_As_3d=50.
energies = [1450,950,450]
exit_slit_dict = {1450:50, 950:25, 450:25}
pass_energy_dict = {1450:50, 950:20, 450:20}
for e in energies:
photon_energy = float(e)
ExitSlit.write(exit_slit_dict[e])
#####################################################
#Au-fermi
set_exec_pars(name="Au-Fermi-"+str(e)+"eV")
move_to_position(REFERENCE_POSITION)
center_Au = photon_energy - 4.5 - binding_center_Au_Ef
rs = RangeSelection(center_Au-window_Au_Ef/2.,center_Au+window_Au_Ef/2.)
rs.setVars([time_Au_Ef, 0.05, 1, photon_energy]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":pass_energy_dict[e]})
set_exec_pars(open=False)
#####################################################
#Au-4f
set_exec_pars(name="Au-4f-"+str(e)+"eV")
center_Au_4f = photon_energy - 4.5 - binding_center_Au_4f
rs = RangeSelection(center_Au_4f-window_Au_4f/2.,center_Au_4f+window_Au_4f/2.)
rs.setVars([time_Au_4f, 0.05, 1, photon_energy]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":pass_energy_dict[e]})
set_exec_pars(open=False)
#####################################################
#As
set_exec_pars(name="As-3d-"+str(e)+"eV")
move_to_position(SAMPLE_POSITION)
center_As_3d = photon_energy - 4.5 - binding_center_As_3d
rs = RangeSelection(center_As_3d-window_As_3d/2.,center_As_3d+window_As_3d/2.)
rs.setVars([time_As_3d, 0.05, 1, photon_energy]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":pass_energy_dict[e]})
set_exec_pars(open=False)

28
script/temp-overnight.py Normal file
View File

@@ -0,0 +1,28 @@
move_to_position(REFERENCE_POSITION)
#Au900-Fermi
rs = RangeSelection(895.0,897.0)
rs.setVars([1., 0.1, 1, 900.]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":20})
#Au900-4f
rs = RangeSelection(804.0,815.0)
rs.setVars([1., 0.1, 1, 900.]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":20})
move_to_position(SAMPLE_POSITION)
#In900
rs = RangeSelection(440.0,453.0)
rs.setVars([1., 0.1, 1, 900.]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":20})

40
script/test/Bug.py Normal file
View File

@@ -0,0 +1,40 @@
import ch.psi.pshell.plot.RangeSelectionPlot.RangeSelection as RangeSelection
REFERENCE_POSITION = {'X':1.2 ,'Y':0.0, 'Z':110.6, 'Theta':-9.1, 'Tilt':0.8, 'Phi':-90.0}
SAMPLE_POSITION = {'X':0.65 ,'Y':0.0, 'Z':115.0, 'Theta':-9.1, 'Tilt':0.8, 'Phi':-90.0}
def move_to_position(pdict):
ManipulatorX.move(pdict['X'])
ManipulatorY.move(pdict['Y'])
ManipulatorZ.move(pdict['Z'])
ManipulatorTheta.move(pdict['Theta'])
ManipulatorTilt.move(pdict['Tilt'])
ManipulatorPhi.move(pdict['Phi'])
#Au600
move_to_position(REFERENCE_POSITION)
rs = RangeSelection(347.0,354.0)
rs.setVars([1., 1., 1, 800.]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":100})
#set_exec_pars(open=False)
flush_data()
#In600
move_to_position(SAMPLE_POSITION)
#rs = RangeSelection(140.0,153.0)
rs = RangeSelection(347.0,354.0)
rs.setVars([1., 1., 1, 800.]) #Time, Size, Iteration, photon energy
run("XPSSpectrum", {"save_scienta_image":True,
"ranges":[rs, ],
"ENDSCAN":False,
"pass_energy":100})
flush_data()