Support for various app and slic wrapper

This commit is contained in:
2023-06-13 14:18:09 +02:00
parent f22a17852c
commit dc5df0ca2a
13 changed files with 488 additions and 31 deletions

111
app/hero.py Normal file
View File

@ -0,0 +1,111 @@
import datetime
import numpy as np
from slic.core.acquisition import PVAcquisition
from slic.core.acquisition import BSAcquisition
from slic.devices.general import motor
from slic.core.scanner import Scanner
from sfbd.ext import CamAcquisition
# some temporary wrapper
class PollingPVAcquisition(PVAcquisition):
def _acquire(self, *args, polling=True, **kwargs):
return super()._acquire(*args, polling=polling, **kwargs)
class LaserScanBase:
def __init__(self):
print('Init Base Class')
self.SV= 'SSL-LMOT-M1104:MOT'
self.pol = motor.Motor(self.SV)
def stop(self):
if self.sc is None:
return
self.sc.stop()
def running(self):
return self.sc.running
def status(self):
si = self.sc.scan_info.to_dict()
steps = 0
if 'scan_values' in si:
steps=len(si['scan_values'])
return steps,self.N
def info(self):
return self.sc.scan_info.to_dict()
def setup(self,amax=21,Nsteps=5,Nsamples=5):
amin = 0
self.N = Nsteps
self.Ns= Nsamples
self.values=np.linspace(19,21,num=self.N) # needs a change
# measuring the pulse energy as a function of the controling PV. Note that the power should be limited to 300 uJ
# thus limiting the value of the actuaor defining the lase rpulse energy in the EnergyModulaiton class.
class LaserPower(LaserScanBase):
def __init__(self):
super(LaserPower,self).__init__()
self.scanname = 'HEROLaserEnergy'
dirpath= datetime.datetime.now().strftime('/sf/data/measurements/%Y/%m/%d/slic_sfbd')
self.scandir='%s/%s' % (dirpath,self.scanname)
self.RB = 'SSL-LENG-SLNK1:VAL_GET'
self.erg = PollingPVAcquisition("machine","sfbd", default_channels=[self.RB])
self.scanner = Scanner(data_base_dir=self.scandir,scan_info_dir=self.scandir,make_scan_sub_dir=True,
default_acquisitions=[self.erg])
def scan(self):
self.sc=self.scanner.ascan_list(self.pol,self.values,
filename=self.scanname,start_immediately = False,
n_pulses=self.Ns,return_to_initial_values=True)
self.sc.run()
# measuring the coherent emission/space charge blow-up as a function of the hero energy modulation
class EnergyModulation(LaserScanBase):
def __init__(self, acq = 0):
super(EnergyModulation,self).__init__()
self.scanname = 'HEROEnergyModulation'
dirpath= datetime.datetime.now().strftime('/sf/data/measurements/%Y/%m/%d/slic_sfbd')
self.scandir='%s/%s' % (dirpath,self.scanname)
self.acq = acq
if self.acq == 0:
self.RB ='SATFE10-PEPG046-EVR0:CALCI'
self.erg = BSAcquisition("machine","sfbd", default_channels=[self.RB])
elif self.acq == 1:
self.RB ='SATBD02-DBPM040:Y2'
self.erg = BSAcquisition("machine","sfbd", default_channels=[self.RB])
elif self.acq == 2:
self.RB = 'SATBD01-DSCR210'
self.erg = CamAcquisition("machine","sfbd", default_channels=[self.RB])
self.erg.getConnection(self.RB)
else:
self.RB = 'SATBD02-DSCR050'
self.erg = CamAcquisition("machine","sfbd", default_channels=[self.RB])
self.erg.getConnection(self.RB)
self.scanner = Scanner(data_base_dir=self.scandir,scan_info_dir=self.scandir,make_scan_sub_dir=True,
default_acquisitions=[self.erg])
def scan(self):
self.sc=self.scanner.ascan_list(self.pol,self.values,
filename=self.scanname,start_immediately = False,
n_pulses=self.Ns,return_to_initial_values=True)
self.sc.run()