Skip to content
40 changes: 24 additions & 16 deletions pydevices/HtsDevices/acq2106_423st.py
Original file line number Diff line number Diff line change
Expand Up @@ -159,15 +159,22 @@ class _ACQ2106_423ST(MDSplus.Device):

trig_types = ['hard', 'soft', 'automatic']

NUM_CHANS_PER_SITE = 32

class MDSWorker(threading.Thread):
NUM_BUFFERS = 20

def __init__(self, dev):
super(_ACQ2106_423ST.MDSWorker, self).__init__(name=dev.path)

# Variables designed to bring a copy of the tree to the MDSWorker thread
self.tree = dev.tree.name
self.shot = dev.tree.shot
self.path = dev.path

self.dev = dev

self.nchans = self.dev.sites*32
self.nchans = self.dev.sites * self.dev.NUM_CHANS_PER_SITE

self.seg_length = self.dev.seg_length.data()
self.segment_bytes = self.seg_length*self.nchans*np.int16(0).nbytes
Expand All @@ -191,23 +198,24 @@ def lcma(arr):
ans = lcm(ans, e)
return int(ans)

self.dev = self.dev.copy()
tree = MDSplus.Tree(self.tree, self.shot)
self.dev = tree.getNode(self.path)

if self.dev.debug:
print("MDSWorker running")

self.chans = []
self.decim = []
chans = []
decim = []
for i in range(self.nchans):
self.chans.append(getattr(self.dev, 'input_%3.3d' % (i+1)))
self.decim.append(
chans.append(getattr(self.dev, 'input_%3.3d' % (i+1)))
decim.append(
getattr(self.dev, 'input_%3.3d_decimate' % (i+1)).data())

event_name = self.dev.seg_event.data()

dt = 1./self.dev.freq.data()

decimator = lcma(self.decim)
decimator = lcma(decim)

if self.seg_length % decimator:
self.seg_length = (self.seg_length //
Expand All @@ -230,11 +238,11 @@ def lcma(arr):

buffer = np.frombuffer(buf, dtype='int16')
i = 0
for c in self.chans:
slength = self.seg_length/self.decim[i]
deltat = dt * self.decim[i]
for c in chans:
slength = self.seg_length/decim[i]
deltat = dt * decim[i]
if c.on:
b = buffer[i::self.nchans*self.decim[i]]
b = buffer[i::self.nchans*decim[i]]
begin = segment * slength * deltat
end = begin + (slength - 1) * deltat
dim = MDSplus.Range(begin, end, deltat)
Expand Down Expand Up @@ -408,12 +416,12 @@ def init(self, armed_by_transient = False):
coeffs = uut.cal_eslo[1:]
eoff = uut.cal_eoff[1:]

self.chans = []
nchans = uut.nchan()
chans = []
nchans = self.sites * self.NUM_CHANS_PER_SITE
for ii in range(nchans):
self.chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1)))
chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1)))

for ic, ch in enumerate(self.chans):
for ic, ch in enumerate(chans):
if ch.on:
ch.OFFSET.putData(float(eoff[ic]))
ch.COEFFICIENT.putData(float(coeffs[ic]))
Expand Down Expand Up @@ -450,7 +458,7 @@ def setChanScale(self, num):

def assemble(cls):
cls.parts = list(_ACQ2106_423ST.carrier_parts)
for i in range(cls.sites*32):
for i in range(cls.sites * cls.NUM_CHANS_PER_SITE):
cls.parts += [
{
'path': ':INPUT_%3.3d' % (i+1,),
Expand Down
43 changes: 25 additions & 18 deletions pydevices/HtsDevices/acq2106_435st.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,15 +182,22 @@ class _ACQ2106_435ST(MDSplus.Device):

data_socket = -1

NUM_CHANS_PER_SITE = 32

class MDSWorker(threading.Thread):
NUM_BUFFERS = 20

def __init__(self, dev):
super(_ACQ2106_435ST.MDSWorker, self).__init__(name=dev.path)

# Variables designed to bring a copy of the tree to the MDSWorker thread
self.tree = dev.tree.name
self.shot = dev.tree.shot
self.path = dev.path

self.dev = dev

self.nchans = self.dev.sites * 32
self.nchans = self.dev.sites * self.dev.NUM_CHANS_PER_SITE
self.resampling = self.dev.resampling

self.seg_length = self.dev.seg_length.data()
Expand Down Expand Up @@ -218,17 +225,17 @@ def lcma(arr):
ans = lcm(ans, e)
return int(ans)

self.dev = self.dev.copy()
tree = MDSplus.Tree(self.tree, self.shot)
self.dev = tree.getNode(self.path)

if self.dev.debug:
print("MDSWorker running")

self.chans = []
self.decim = []
chans = []
decim = []
for i in range(self.nchans):
self.chans.append(getattr(self.dev, 'input_%3.3d' % (i+1)))
self.decim.append(
getattr(self.dev, 'input_%3.3d_decimate' % (i+1)).data())
chans.append(getattr(self.dev, 'input_%3.3d' % (i+1)))
decim.append(getattr(self.dev, 'input_%3.3d_decimate' % (i+1)).data())

event_name = self.dev.seg_event.data()

Expand All @@ -253,7 +260,7 @@ def lcma(arr):
print("The SR is {} and timebase delta t is {}".format(
self.dev.freq.data(), dt))

decimator = lcma(self.decim)
decimator = lcma(decim)

if self.seg_length % decimator:
self.seg_length = (self.seg_length //
Expand Down Expand Up @@ -281,19 +288,19 @@ def lcma(arr):

buffer = np.right_shift(np.frombuffer(buf, dtype='int32'), 8)
i = 0
for c in self.chans:
slength = self.seg_length/self.decim[i]
deltat = dt * self.decim[i]
for c in chans:
slength = self.seg_length/decim[i]
deltat = dt * decim[i]
#Choice between executing resampling or not:
if c.on and self.resampling:
resampled = getattr(self.dev, str(c) + ':RESAMPLED')
b = buffer[i::self.nchans*self.decim[i]]
b = buffer[i::self.nchans*decim[i]]
begin = segment * slength * deltat
end = begin + (slength - 1) * deltat
dim = MDSplus.Range(begin, end, deltat)
c.makeSegmentResampled(begin, end, dim, b, resampled, res_factor)
elif c.on:
b = buffer[i::self.nchans*self.decim[i]]
b = buffer[i::self.nchans*decim[i]]
begin = segment * slength * deltat
end = begin + (slength - 1) * deltat
dim = MDSplus.Range(begin, end, deltat)
Expand Down Expand Up @@ -469,12 +476,12 @@ def init(self, resampling = False, armed_by_transient = False):
coeffs = uut.cal_eslo[1:]
eoff = uut.cal_eoff[1:]

self.chans = []
nchans = self.sites * 32
chans = []
nchans = self.sites * self.NUM_CHANS_PER_SITE
for ii in range(nchans):
self.chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1)))
chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1)))

for ic, ch in enumerate(self.chans):
for ic, ch in enumerate(chans):
if ch.on:
ch.OFFSET.putData(float(eoff[ic]))
ch.COEFFICIENT.putData(float(coeffs[ic]))
Expand Down Expand Up @@ -556,7 +563,7 @@ def setChanScale(self, num):

def assemble(cls):
cls.parts = list(_ACQ2106_435ST.carrier_parts)
for i in range(cls.sites*32):
for i in range(cls.sites * cls.NUM_CHANS_PER_SITE):
cls.parts += [
{
'path': ':INPUT_%3.3d' % (i+1,),
Expand Down