mono with ecol scan, callable scan info is possible.
This commit is contained in:
+3
-2
@@ -81,10 +81,11 @@ class ScanSimple:
|
||||
if self.checker:
|
||||
if not self.checker['checker_call'](*self.checker['args'],**self.checker['kwargs']):
|
||||
return True
|
||||
|
||||
if callable(step_info):
|
||||
tstepinfo = step_info()
|
||||
self.values_done.append(self.values_todo.pop(0))
|
||||
self.readbacks.append(readbacks_step)
|
||||
self.appendScanInfo(values_step,readbacks_step,step_files=filenames,step_info=step_info)
|
||||
self.appendScanInfo(values_step,readbacks_step,step_files=filenames,step_info=tstepinfo)
|
||||
self.writeScanInfo()
|
||||
self.nextStep +=1
|
||||
return True
|
||||
|
||||
+14
-2
@@ -142,8 +142,8 @@ scansBsreadLocal = _scan.Scans(data_base_dir='/sf/bernina/config/com/data/scan_d
|
||||
bsdaqJF.gain_file = "/sf/bernina/data/p16582/res/gains_I0.h5"
|
||||
try:
|
||||
import glob
|
||||
path = '/sf/bernina/data/p17247/res/JF_pedestal/pedestal_*_res.h5'
|
||||
list_of_files = glob.glob('/sf/bernina/data/p17247/res/JF_pedestal/pedestal_*_res.h5')
|
||||
path = '/sf/bernina/data/p17295/res/JF_pedestal/pedestal_*_res.h5'
|
||||
list_of_files = glob.glob('/sf/bernina/data/p17295/res/JF_pedestal/pedestal_*_res.h5')
|
||||
latest_file = max(list_of_files, key=os.path.getctime)
|
||||
bsdaqJF.pede_file = latest_file
|
||||
except (Exception, ArithmeticError) as e:
|
||||
@@ -153,3 +153,15 @@ except (Exception, ArithmeticError) as e:
|
||||
from ..timing.lasertiming import Lxt as _Lxt
|
||||
|
||||
lxt = _Lxt()
|
||||
|
||||
|
||||
from ..xoptics.dcm import MonoEcolEnergy, EcolEnergy
|
||||
monoEcol = MonoEcolEnergy('SAROP21-ODCM098')
|
||||
ecol = EcolEnergy('dummy')
|
||||
|
||||
|
||||
|
||||
if 'eco_path' in list(exp_config.keys()):
|
||||
pass
|
||||
else:
|
||||
eco_path = '/sf/bernina/'+ exp_config['pgroup']
|
||||
|
||||
@@ -20,13 +20,23 @@ class Laser_Exp:
|
||||
#Waveplate and Delay stage
|
||||
self.wp = MotorRecord(Id+'-M534:MOT')
|
||||
|
||||
self._delayStg = MotorRecord(self.Id+'-M521:MOTOR_1')
|
||||
self.pump_delay = DelayStage(self._delayStg)
|
||||
self._pump_delayStg = MotorRecord(self.Id+'-M521:MOTOR_1')
|
||||
self.pump_delay = DelayStage(self._pump_delayStg)
|
||||
|
||||
#LAM delay stage
|
||||
self._lam_delayStg = SmarActRecord('SLAAR21-LMTS-LAM11')
|
||||
#LAM delay stages
|
||||
self._lam_delayStg_Smar = SmarActRecord('SLAAR21-LMTS-LAM11')
|
||||
self.lam_delay_Smar = DelayStage(self._lam_delayStg_Smar)
|
||||
|
||||
self._lam_delayStg = MotorRecord(self.Id+'-M548:MOT')
|
||||
self.lam_delay = DelayStage(self._lam_delayStg)
|
||||
|
||||
#PALM delay stages
|
||||
self._palm_delayStg = MotorRecord(self.Id+'-M552:MOT')
|
||||
self.palm_delay = DelayStage(self._palm_delayStg)
|
||||
|
||||
#PSEN delay stages
|
||||
#self._psen_delayStg = MotorRecord(self.Id+'')
|
||||
#self.psen_delay = DelayStage(self._pump_delayStg)
|
||||
|
||||
#SmarAct ID
|
||||
self.IdSA = 'SARES23'
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
# Thu May 31 22:39:30 2018
|
||||
0.001990231000000
|
||||
# Sun Jun 3 20:42:08 2018
|
||||
0.001996429730000
|
||||
@@ -1,2 +1,2 @@
|
||||
# Sat Mar 17 19:39:21 2018
|
||||
0.001996429000000
|
||||
# Sun Jun 3 20:42:08 2018
|
||||
0.001996429730000
|
||||
@@ -1,2 +1,2 @@
|
||||
# Thu May 31 22:39:30 2018
|
||||
0.000000006999952
|
||||
# Sun Jun 3 20:42:08 2018
|
||||
0.000000008499738
|
||||
+17
-7
@@ -43,6 +43,7 @@ def niceTimeToStr(delay,fmt="%+.0f"):
|
||||
|
||||
|
||||
class Storage(object):
|
||||
""" this class is needed to store the offset in files and read in s """
|
||||
def __init__(self,pvname):
|
||||
self._filename = os.path.join(_basefolder,pvname)
|
||||
self.pvname = pvname
|
||||
@@ -79,11 +80,11 @@ class Storage(object):
|
||||
|
||||
|
||||
class Pockels_trigger(PV):
|
||||
""" this class is needed to store the offset in files and read in s """
|
||||
def __init__(self,pv_basename):
|
||||
pvname = pv_basename + "-RB"
|
||||
def __init__(self, pv_get, pv_set, pv_offset_get=None):
|
||||
pvname = pv_get
|
||||
PV.__init__(self,pvname)
|
||||
self._pv_setvalue = PV(pv_basename + "-SP")
|
||||
self._pv_offset_get = PV(pv_offset_get)
|
||||
self._pv_setvalue = PV(pv_set)
|
||||
self._filename = os.path.join(_basefolder,pvname)
|
||||
self._storage = Storage(pvname)
|
||||
|
||||
@@ -91,7 +92,7 @@ class Pockels_trigger(PV):
|
||||
def offset(self): return self._storage.value
|
||||
|
||||
def get_dial(self):
|
||||
return np.round(super().get()*1e-6,9)
|
||||
return np.round(super().get()*1e-6,9)+self._pv_offset_get.get()*1e-9 - 7.41e-9
|
||||
|
||||
def get(self):
|
||||
""" convert time to sec """
|
||||
@@ -171,8 +172,16 @@ class Phase_shifter(PV):
|
||||
return "Phase Shifter: user,dial = %s , %s"%(user,dial)
|
||||
|
||||
|
||||
_slicer_gate = Pockels_trigger("SLAAR-LTIM02-EVR0:Pul3-Delay")
|
||||
_sdg1 = Pockels_trigger("SLAAR-LTIM02-EVR0:Pul2-Delay")
|
||||
_slicer_gate = Pockels_trigger(
|
||||
"SLAAR-LTIM02-EVR0:Pul3-Delay-RB",
|
||||
"SLAAR-LTIM02-EVR0:Pul3_NEW_DELAY",
|
||||
pv_offset_get="SLAAR-LTIM02-EVR0:UnivDlyModule1-Delay1-RB")
|
||||
|
||||
_sdg1 = Pockels_trigger(
|
||||
"SLAAR-LTIM02-EVR0:Pul2-Delay-RB",
|
||||
"SLAAR-LTIM02-EVR0:Pul2_NEW_DELAY",
|
||||
pv_offset_get="SLAAR-LTIM02-EVR0:UnivDlyModule1-Delay0-RB")
|
||||
|
||||
_phase_shifter = Phase_shifter("SLAAR02-TSPL-EPL")
|
||||
|
||||
|
||||
@@ -199,6 +208,7 @@ class Lxt(object):
|
||||
|
||||
def set(self,value):
|
||||
self.phase_shifter.set(value)
|
||||
self.slicer_gate.set(-value)
|
||||
self.sdg1.set(-value)
|
||||
|
||||
def get(self):
|
||||
|
||||
@@ -77,3 +77,80 @@ class Double_Crystal_Mono:
|
||||
|
||||
def __call__(self,value):
|
||||
self._currentChange = self.changeTo(value)
|
||||
|
||||
|
||||
class EcolEnergy:
|
||||
def __init__(self,Id, val='SARCL02-MBND100:P-SET',rb='SARCL02-MBND100:P-READ' ,dmov='SFB_BEAM_ENERGY_ECOL:SUM-ERROR-OK'):
|
||||
self.Id = Id
|
||||
self.setter = PV(val)
|
||||
self.readback = PV(rb)
|
||||
self.dmov = PV(dmov)
|
||||
self.done = False
|
||||
|
||||
def get_current_value(self):
|
||||
return self.readback.get()
|
||||
|
||||
def move_and_wait(self,value,checktime=.01,precision=2):
|
||||
curr = self.setter.get()
|
||||
while abs(curr-value)>0.1:
|
||||
curr = self.setter.get()
|
||||
self.setter.put(curr + np.sign(value-curr)*.1)
|
||||
sleep(0.3)
|
||||
|
||||
self.setter.put(value)
|
||||
while abs(self.get_current_value() - value)>precision:
|
||||
sleep(checktime)
|
||||
while not self.dmov.get():
|
||||
#print(self.dmov.get())
|
||||
sleep(checktime)
|
||||
|
||||
def changeTo(self,value,hold=False):
|
||||
changer = lambda value: self.move_and_wait(value)
|
||||
return Changer(
|
||||
target=value,
|
||||
parent=self,
|
||||
changer=changer,
|
||||
hold=hold,
|
||||
stopper=None)
|
||||
|
||||
|
||||
class MonoEcolEnergy:
|
||||
def __init__(self,Id):
|
||||
self.Id = Id
|
||||
self.name = 'energy_collimator'
|
||||
self.dcm = Double_Crystal_Mono(Id)
|
||||
self.ecol = EcolEnergy('ecol_dummy')
|
||||
self.offset = None
|
||||
self.MeVperEV = 0.78333
|
||||
|
||||
|
||||
def get_current_value(self):
|
||||
return self.dcm.get_current_value()
|
||||
|
||||
def move_and_wait(self,value):
|
||||
ch = [self.dcm.changeTo(value),
|
||||
self.ecol.changeTo(self.calcEcol(value))]
|
||||
for tc in ch:
|
||||
tc.wait()
|
||||
|
||||
def changeTo(self,value,hold=False):
|
||||
changer = lambda value: self.move_and_wait(value)
|
||||
return Changer(
|
||||
target=value,
|
||||
parent=self,
|
||||
changer=changer,
|
||||
hold=hold,
|
||||
stopper=self.dcm.stop)
|
||||
|
||||
def alignOffsets(self):
|
||||
mrb = self.dcm.get_current_value()
|
||||
erb = self.ecol.get_current_value()
|
||||
self.offset = {'dcm':mrb, 'ecol':erb}
|
||||
|
||||
def calcEcol(self,eV):
|
||||
return (eV-self.offset['dcm'])*self.MeVperEV + self.offset['ecol']
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user