First working scan
This commit is contained in:
@@ -5,6 +5,7 @@ import zmq
|
||||
import os
|
||||
import data_api as api
|
||||
import datetime
|
||||
from threading import Thread
|
||||
|
||||
|
||||
class BStools:
|
||||
@@ -62,6 +63,40 @@ class BStools:
|
||||
data.to_hdf(fina,"/data")
|
||||
|
||||
|
||||
def acquire(self,file_name=None,Npulses=100):
|
||||
def acquire(file_name=None, Npulses=None):
|
||||
self.h5(fina=file_name,N_pulses=Npulses)
|
||||
file_name += '.h5'
|
||||
return Acquisition(acquire=acquire,acquisition_kwargs={'file_name':file_name, 'Npulses':Npulses},hold=False)
|
||||
|
||||
def wait_done(self):
|
||||
self.check_running()
|
||||
self.check_still_running()
|
||||
|
||||
|
||||
class Acquisition:
|
||||
def __init__(self, parent=None, acquire=None, acquisition_kwargs = {}, hold=True, stopper=None):
|
||||
self.acquisition_kwargs = acquisition_kwargs
|
||||
self.file_name = acquisition_kwargs['file_name']
|
||||
self._acquire = acquire
|
||||
self._stopper = stopper
|
||||
self._thread = Thread(target=self._acquire,kwargs=(acquisition_kwargs))
|
||||
if not hold:
|
||||
self._thread.start()
|
||||
|
||||
def wait(self):
|
||||
self._thread.join()
|
||||
|
||||
def start(self):
|
||||
self._thread.start()
|
||||
|
||||
def status(self):
|
||||
if self._thread.ident is None:
|
||||
return 'waiting'
|
||||
else:
|
||||
if self._isAlive:
|
||||
return 'acquiring'
|
||||
else:
|
||||
return 'done'
|
||||
def stop(self):
|
||||
self._stopper()
|
||||
|
||||
+25
-6
@@ -1,10 +1,12 @@
|
||||
import pyscan
|
||||
import os
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
class ScanSimple:
|
||||
def __init__(self,adjustables,values,counterCallers,fina,basepath='',scan_info_dir=''):
|
||||
def __init__(self,adjustables,values,counterCallers,fina,Npulses=100,basepath='',scan_info_dir=''):
|
||||
self.Nsteps = len(values)
|
||||
self.pulses_per_step = Npulses
|
||||
self.adjustables = adjustables
|
||||
self.values_todo = values
|
||||
self.values_done = []
|
||||
@@ -26,7 +28,7 @@ class ScanSimple:
|
||||
|
||||
def get_filename(self,stepNo,Ndigits=4):
|
||||
fina = os.path.join(self.basepath,self.fina)
|
||||
fina += '_setp%04d.h5'%stepNo
|
||||
fina += '_step%04d'%stepNo
|
||||
return fina
|
||||
|
||||
def doNextStep(self,step_info=None):
|
||||
@@ -39,12 +41,16 @@ class ScanSimple:
|
||||
ms.append(adj.changeTo(tv))
|
||||
for tm in ms:
|
||||
tm.wait()
|
||||
filenames = []
|
||||
acs = []
|
||||
for ctr in self.counterCallers:
|
||||
ms.append(ctr.acquire(file_name=fina))
|
||||
for tm in ms:
|
||||
tm.wait()
|
||||
acq = ctr.acquire(file_name=fina,Npulses=self.pulses_per_step)
|
||||
filenames.append(acq.file_name)
|
||||
acs.append(acq)
|
||||
for ta in acs:
|
||||
ta.wait()
|
||||
self.values_done.append(self.values_todo.pop(0))
|
||||
self.appendScanInfo(values_step,fina,step_info=step_info)
|
||||
self.appendScanInfo(values_step,filenames,step_info=step_info)
|
||||
self.writeScanInfo()
|
||||
|
||||
self.nextStep +=1
|
||||
@@ -65,5 +71,18 @@ class ScanSimple:
|
||||
done = not self.doNextStep()
|
||||
|
||||
|
||||
class Scans:
|
||||
def __init__(self,data_base_dir='',scan_info_dir='',default_counters=[]):
|
||||
self.data_base_dir = data_base_dir
|
||||
self.scan_info_dir = scan_info_dir
|
||||
self._default_counters = default_counters
|
||||
|
||||
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)
|
||||
if start_immediately:
|
||||
s.scanAll()
|
||||
return s
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ from bsread import source, SUB
|
||||
import subprocess
|
||||
import h5py
|
||||
from time import sleep
|
||||
from threading import Thread
|
||||
|
||||
try:
|
||||
import sys
|
||||
@@ -116,8 +117,7 @@ class FeDigitizer:
|
||||
|
||||
class DiodeDigitizer:
|
||||
def __init__(self,Id,VME_crate=None,link=None,
|
||||
ch_0=7,ch_1=8,
|
||||
elog=None):
|
||||
ch_0=7,ch_1=8, elog=None):
|
||||
self.Id = Id
|
||||
if VME_crate:
|
||||
self.diode_0 = FeDigitizer('%s:Lnk%dCh%d'%(VME_crate,link,ch_0))
|
||||
@@ -183,9 +183,6 @@ class JF:
|
||||
else:
|
||||
sleep(time_interval)
|
||||
|
||||
|
||||
|
||||
|
||||
def start(self):
|
||||
self.client.start()
|
||||
print("start acquisition")
|
||||
@@ -202,3 +199,46 @@ class JF:
|
||||
self.start()
|
||||
pass
|
||||
|
||||
def acquire(self,file_name=None,Npulses=100):
|
||||
def acquire(file_name=None, Npulses=None):
|
||||
self.detector_config.update(dict(cycles=Npulses))
|
||||
self.writer_config.update(dict(output_file=file_name))
|
||||
self.reset()
|
||||
DetectorIntegrationClient.set_config(self,self.writer_config, self.backend_config, self.detector_config)
|
||||
self.client.start()
|
||||
self.check_running()
|
||||
self.check_still_running()
|
||||
|
||||
return Acquisition(acquire=acquire,acquisition_kwargs={'file_name':file_name, 'Npulses':Npulses},hold=False)
|
||||
|
||||
def wait_done(self):
|
||||
self.check_running()
|
||||
self.check_still_running()
|
||||
|
||||
|
||||
class Acquisition:
|
||||
def __init__(self, parent=None, acquire=None, acquisition_kwargs = {}, hold=True, stopper=None):
|
||||
self.acquisition_kwargs = acquisition_kwargs
|
||||
self._acquire = acquire
|
||||
self._stopper = stopper
|
||||
self._thread = Thread(target=self._acquire,kwargs=(acquisition_kwargs))
|
||||
if not hold:
|
||||
self._thread.start()
|
||||
|
||||
def wait(self):
|
||||
self._thread.join()
|
||||
|
||||
def start(self):
|
||||
self._thread.start()
|
||||
|
||||
def status(self):
|
||||
if self._thread.ident is None:
|
||||
return 'waiting'
|
||||
else:
|
||||
if self._isAlive:
|
||||
return 'acquiring'
|
||||
else:
|
||||
return 'done'
|
||||
def stop(self):
|
||||
self._stopper()
|
||||
|
||||
|
||||
@@ -86,4 +86,5 @@ channellist = dict(bernina_channel_list=
|
||||
parseChannelListFile('/sf/bernina/config/com/channel_lists/default_channel_list'))
|
||||
bsdaq = BStools(default_channel_list=channellist,default_file_path='%s')
|
||||
|
||||
from ..acquisition import scan
|
||||
from ..acquisition import scan as _scan
|
||||
scans = _scan.Scans(data_base_dir='/sf/bernina/config/com/data/scan_data',scan_info_dir='/sf/bernina/config/com/data/scan_info',default_counters=[bsdaq])
|
||||
|
||||
Reference in New Issue
Block a user