Support for various app and slic wrapper
This commit is contained in:
111
app/hero.py
Normal file
111
app/hero.py
Normal 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()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user