Improved snapshot interface with saving snapshot files in the OP configuration. Added app support for stabilizing XTCAV. Added a BSacquisition based on BSCache

This commit is contained in:
2023-07-05 09:16:18 +02:00
parent a54abd383e
commit 0c928a8bb1
7 changed files with 79 additions and 11 deletions

View File

@ -2,3 +2,4 @@ from .adaptiveorbit import AdaptiveOrbit
from .spectralanalysis import SpectralAnalysis
from .hero import LaserPower,EnergyModulation
from .dispersiontools import Dispersion
from .xtcavstabilizer import XTCAVStabilizer

View File

@ -9,6 +9,7 @@ from slic.core.adjustable import PVAdjustable
from slic.core.acquisition import BSAcquisition, PVAcquisition
from slic.core.scanner import Scanner
from sfbd.ext import CounterAdjustable
from sfbd.ext import BSCAcquisition
def getAux(pvs=None):
if not pvs:
@ -95,7 +96,7 @@ class Dispersion:
sensor1 = getBSChannels('SATBD02-DBPM.*:Y2$')
sensor2 = getBSChannels('SATCB.*-RLLE-DSP:.*-VS$')
self.sensor = sensor1+sensor2
self.acq = [BSAcquisition(".",pgroup, default_channels=self.sensor)]
self.acq = [BSCAcquisition(".",pgroup, default_channels=self.sensor)]
# auxiliar data to be read one
self.aux = self.getRFCalibrationChannels(sensor2,'SATCL01-MBND100:ENERGY-OP')
@ -159,7 +160,7 @@ class Dispersion:
def setup(self,scl = 1, Nsteps=5, Nsamples=5):
val = self.adj.get_current_value(readback=False)
dval = self.amp*scl
dval = 0
dval = 0 ######## edit this
self.N = Nsteps
self.Ns= Nsamples
self.values=np.linspace(val-dval,val+dval,num=self.N)
@ -179,10 +180,10 @@ class Dispersion:
self.sc=self.scanner.ascan_list(self.adj,self.values,
filename=self.branch,start_immediately = False,
n_pulses=self.Ns,return_to_initial_values=True)
self.preaction()
# self.preaction() ######
self.sc.run()
self.auxdata = getAux(self.aux)
self.postaction()
# self.postaction() #######
def stop(self):

View File

@ -2,18 +2,29 @@ import time
import numpy as np
from bstrd import BSCache
from epics import PV
class XTCAVStabilizer:
"""
Wrapper class to bundle all daq/io needed for stabilizing the XTCAV
"""
def __init__(self):
# the PV
self.PVTCAV = PV('SATMA02-RMSM:SM-GET',connection_timeout=0.9, callback=self.stateChanged)
self.state=self.PVTCAV.value == 9
# the BS channels
self.bs = BSCache(100000,10000) # 100 second timeout, size for 100 second data taken
self.channels = ['SATBD02-DBPM040:X2','SATMA02-RLLE-DSP:PHASE-VS']
self.channels = ['SATBD02-DBPM040:X2','SATMA02-RLLE-DSP:PHASE-VS','SATBD02-DBPM040:X2-VALID']
self.validation = self.channels[2]
self.bs.get_vars(self.channels) # this starts the stream into the cache
self.bs.stop()
def stateChanged(self,pvname=None, value=0, **kws):
self.state = value == 9
def terminate(self):
print('Stopping BSStream Thread...')
self.bs.stop()
@ -23,7 +34,7 @@ class XTCAVStabilizer:
self.bs.flush()
def read(self):
data=self.bs.__next__()
return data['pid'],data[self.channels[0]],data[self.channels[1]] # returns PID, BPM reading, TCAV Phase
return self.bs.__next__()