Merge branch 'master' of https://git.psi.ch/swissfel/eco
This commit is contained in:
+21
-1
@@ -93,9 +93,29 @@ class Scans:
|
||||
def ascan(self,adjustable,start_pos,end_pos,N_intervals,N_pulses,file_name=None,start_immediately=True):
|
||||
positions = np.linspace(start_pos,end_pos,N_intervals+1)
|
||||
values = [[tp] for tp in positions]
|
||||
s = ScanSimple([adjustable],values,self._default_counters,file_name,Npulses=100,basepath=self.data_base_dir,scan_info_dir=self.scan_info_dir)
|
||||
s = ScanSimple([adjustable],values,self._default_counters,file_name,Npulses=N_pulses,basepath=self.data_base_dir,scan_info_dir=self.scan_info_dir)
|
||||
if start_immediately:
|
||||
s.scanAll()
|
||||
return s
|
||||
|
||||
def rscan(self,adjustable,start_pos,end_pos,N_intervals,N_pulses,file_name=None,start_immediately=True):
|
||||
positions = np.linspace(start_pos,end_pos,N_intervals+1)
|
||||
current = adjustable.get_current_value()
|
||||
values = [[tp+current] for tp in positions]
|
||||
s = ScanSimple([adjustable],values,self._default_counters,file_name,Npulses=N_pulses,basepath=self.data_base_dir,scan_info_dir=self.scan_info_dir)
|
||||
if start_immediately:
|
||||
s.scanAll()
|
||||
return s
|
||||
|
||||
def dscan(self,*args,**kwargs):
|
||||
print('Warning: dscan will be deprecated for rscan unless someone explains what it stands for in spec!')
|
||||
return self.rscan(*args,**kwargs)
|
||||
|
||||
def ascanList(self,adjustable,posList,N_pulses,file_name=None,start_immediately=True):
|
||||
positions = posList
|
||||
values = [[tp] for tp in positions]
|
||||
s = ScanSimple([adjustable],values,self._default_counters,file_name,Npulses=N_pulses,basepath=self.data_base_dir,scan_info_dir=self.scan_info_dir)
|
||||
if start_immediately:
|
||||
s.scanAll()
|
||||
return s
|
||||
|
||||
|
||||
+16
-29
@@ -4,7 +4,8 @@ import numpy as np
|
||||
import time
|
||||
from ..devices_general.utilities import Changer
|
||||
|
||||
_basefolder = "/sf/bernina/config/par/lasertiming"
|
||||
|
||||
_basefolder = "/sf/bernina/config/com/data/src/lasertiming"
|
||||
|
||||
def timeToStr(value,n=12):
|
||||
fmt = "%%+.%df" % n
|
||||
@@ -34,6 +35,8 @@ def niceTimeToStr(delay,fmt="%+.0f"):
|
||||
ret = fmt % (delay*1e12) + "fs"
|
||||
elif 1e-18 <= a_delay < 1e-15:
|
||||
ret = fmt % (delay*1e12) + "as"
|
||||
elif a_delay < 1e-18:
|
||||
ret = "0s"
|
||||
else:
|
||||
ret = str(delay) +"s"
|
||||
return ret
|
||||
@@ -117,7 +120,7 @@ _OSCILLATOR_PERIOD = 1/71.368704e6
|
||||
|
||||
class Phase_shifter(PV):
|
||||
""" this class is needed to store the offset in files and read in ps """
|
||||
def __init__(self,pv_basename="SLAAR01-TSPL-EPL",dial_max=14.05e-9):
|
||||
def __init__(self,pv_basename="SLAAR01-TSPL-EPL",dial_max=14.0056e-9,precision=100e-15):
|
||||
pvname = pv_basename+":CURR_DELTA_T"
|
||||
PV.__init__(self,pvname)
|
||||
self._filename = os.path.join(_basefolder,pvname)
|
||||
@@ -125,6 +128,7 @@ class Phase_shifter(PV):
|
||||
self._pv_execute = PV(pv_basename + ":SET_NEW_PHASE.PROC")
|
||||
self._storage = Storage(pvname)
|
||||
self.dial_max = dial_max
|
||||
self.retry = precision
|
||||
|
||||
@property
|
||||
def offset(self): return self._storage.value
|
||||
@@ -141,7 +145,8 @@ class Phase_shifter(PV):
|
||||
if value == None: value = self.get_dial()
|
||||
self._storage.store( value )
|
||||
|
||||
def move(self,value):
|
||||
def move(self,value,accuracy=None):
|
||||
if accuracy is None: accuracy = self.retry
|
||||
dial = value + self.offset
|
||||
dial = np.mod(dial,_OSCILLATOR_PERIOD)
|
||||
if dial > self.dial_max: dial = self.dial_max
|
||||
@@ -149,7 +154,10 @@ class Phase_shifter(PV):
|
||||
self._pv_setvalue.put(dial_ps)
|
||||
time.sleep(0.1)
|
||||
self._pv_execute.put(1)
|
||||
while( np.abs(self.get_dial()-dial) > 100e-15 ): time.sleep(0.2)
|
||||
#print(accuracy)
|
||||
while( np.abs(self.get_dial()-dial) > accuracy ):
|
||||
#print(np.abs(self.get_dial()-dial))
|
||||
time.sleep(0.2)
|
||||
|
||||
def set(self,value):
|
||||
newoffset = self.get_dial()-value
|
||||
@@ -169,8 +177,6 @@ _phase_shifter = Phase_shifter("SLAAR01-TSPL-EPL")
|
||||
|
||||
|
||||
_POCKELS_CELL_RESOLUTION = 7e-9
|
||||
|
||||
|
||||
class Lxt(object):
|
||||
def __init__(self):
|
||||
self.sdg1 = _sdg1
|
||||
@@ -183,10 +189,10 @@ class Lxt(object):
|
||||
def move_sdg(self,value):
|
||||
self.sdg1.move(value)
|
||||
|
||||
def move(self,value):
|
||||
def move(self,value,accuracy=None):
|
||||
self.sdg1.move(-value)
|
||||
self.slicer_gate.move(-value)
|
||||
self.phase_shifter.move(value)
|
||||
self.phase_shifter.move(value,accuracy=accuracy)
|
||||
|
||||
def set(self,value):
|
||||
self.phase_shifter.set(value)
|
||||
@@ -203,25 +209,6 @@ class Lxt(object):
|
||||
delay = int(idx_pulse)*_OSCILLATOR_PERIOD - phase_shifter
|
||||
return -delay
|
||||
|
||||
def changeTo(self, value, hold=False):
|
||||
""" Adjustable convention"""
|
||||
|
||||
changer = lambda value: self.move(\
|
||||
value)
|
||||
return Changer(
|
||||
target=value,
|
||||
parent=self,
|
||||
mover=changer,
|
||||
hold=hold,
|
||||
stopper=None)
|
||||
|
||||
|
||||
def get_current_value(self):
|
||||
return self.get()
|
||||
|
||||
def set_current_value(self,value):
|
||||
self.set(value)
|
||||
|
||||
def changeTo(self, value, hold=False):
|
||||
""" Adjustable convention"""
|
||||
|
||||
@@ -242,7 +229,7 @@ class Lxt(object):
|
||||
self.set(value)
|
||||
|
||||
def __repr__(self):
|
||||
delay = niceTimeToStr(self.get())
|
||||
delay = niceTimeToStr(lxt.get())
|
||||
return "delay = %s"%(delay)
|
||||
|
||||
|
||||
lxt = Lxt()
|
||||
|
||||
Reference in New Issue
Block a user