From 9b19bf09f0562fae7ba1bfe88a8f907dccf5cecf Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Fri, 8 Jul 2022 11:56:01 -0400 Subject: [PATCH 1/8] Moved the tree copy (dev.copy()) from the MDSWorker thread back to the main process thread. --- pydevices/HtsDevices/acq2106_435st.py | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_435st.py b/pydevices/HtsDevices/acq2106_435st.py index 078d72101e..1f1a7485eb 100755 --- a/pydevices/HtsDevices/acq2106_435st.py +++ b/pydevices/HtsDevices/acq2106_435st.py @@ -188,10 +188,17 @@ class MDSWorker(threading.Thread): def __init__(self, dev): super(_ACQ2106_435ST.MDSWorker, self).__init__(name=dev.path) - self.dev = dev + self.dev = dev.copy() - self.nchans = self.dev.sites * 32 + self.chans = [] + self.decim = [] + self.nchans = self.dev.sites*32 self.resampling = self.dev.resampling + + 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()) self.seg_length = self.dev.seg_length.data() self.segment_bytes = self.seg_length*self.nchans*np.int32(0).nbytes @@ -218,17 +225,8 @@ def lcma(arr): ans = lcm(ans, e) return int(ans) - self.dev = self.dev.copy() - if self.dev.debug: print("MDSWorker running") - - self.chans = [] - self.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()) event_name = self.dev.seg_event.data() From 682d7c5f30c5a22de0b054613c754ac893c21a75 Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Fri, 8 Jul 2022 12:25:23 -0400 Subject: [PATCH 2/8] Moved the creation of chans[] and decim[] to MDSWorker thread. --- pydevices/HtsDevices/acq2106_435st.py | 33 +++++++++++++-------------- 1 file changed, 16 insertions(+), 17 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_435st.py b/pydevices/HtsDevices/acq2106_435st.py index 1f1a7485eb..77a542af32 100755 --- a/pydevices/HtsDevices/acq2106_435st.py +++ b/pydevices/HtsDevices/acq2106_435st.py @@ -190,15 +190,8 @@ def __init__(self, dev): self.dev = dev.copy() - self.chans = [] - self.decim = [] self.nchans = self.dev.sites*32 self.resampling = self.dev.resampling - - 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()) self.seg_length = self.dev.seg_length.data() self.segment_bytes = self.seg_length*self.nchans*np.int32(0).nbytes @@ -227,6 +220,12 @@ def lcma(arr): if self.dev.debug: print("MDSWorker running") + + chans = [] + decim = [] + for i in range(self.nchans): + 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() @@ -251,7 +250,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 // @@ -279,19 +278,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) @@ -467,12 +466,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 = uut.nchan() 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])) From 86a231962c858a8b65f94f9fee10e3dcb8e6915a Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Mon, 1 Aug 2022 16:24:11 -0400 Subject: [PATCH 3/8] For 423 devices, dev.copy() has also been moved --- pydevices/HtsDevices/acq2106_423st.py | 6 ++---- pydevices/HtsDevices/acq2106_435st.py | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_423st.py b/pydevices/HtsDevices/acq2106_423st.py index beedcadf75..aa20049055 100755 --- a/pydevices/HtsDevices/acq2106_423st.py +++ b/pydevices/HtsDevices/acq2106_423st.py @@ -165,7 +165,7 @@ class MDSWorker(threading.Thread): def __init__(self, dev): super(_ACQ2106_423ST.MDSWorker, self).__init__(name=dev.path) - self.dev = dev + self.dev = dev.copy() self.nchans = self.dev.sites*32 @@ -191,8 +191,6 @@ def lcma(arr): ans = lcm(ans, e) return int(ans) - self.dev = self.dev.copy() - if self.dev.debug: print("MDSWorker running") @@ -409,7 +407,7 @@ def init(self, armed_by_transient = False): eoff = uut.cal_eoff[1:] self.chans = [] - nchans = uut.nchan() + nchans = self.sites*32 for ii in range(nchans): self.chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1))) diff --git a/pydevices/HtsDevices/acq2106_435st.py b/pydevices/HtsDevices/acq2106_435st.py index 77a542af32..c746b92552 100755 --- a/pydevices/HtsDevices/acq2106_435st.py +++ b/pydevices/HtsDevices/acq2106_435st.py @@ -190,7 +190,7 @@ def __init__(self, dev): self.dev = dev.copy() - self.nchans = self.dev.sites*32 + self.nchans = self.dev.sites * 32 self.resampling = self.dev.resampling self.seg_length = self.dev.seg_length.data() @@ -467,7 +467,7 @@ def init(self, resampling = False, armed_by_transient = False): eoff = uut.cal_eoff[1:] chans = [] - nchans = uut.nchan() + nchans = self.sites * 32 for ii in range(nchans): chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1))) From 8b7cdd8337b3049ea2a1df6df0e2cab40ccf71a9 Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Mon, 1 Aug 2022 17:18:45 -0400 Subject: [PATCH 4/8] Converted self.chans and self.decim to chans and decim. --- pydevices/HtsDevices/acq2106_423st.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_423st.py b/pydevices/HtsDevices/acq2106_423st.py index aa20049055..8339a9e1b9 100755 --- a/pydevices/HtsDevices/acq2106_423st.py +++ b/pydevices/HtsDevices/acq2106_423st.py @@ -194,18 +194,18 @@ def lcma(arr): 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 // @@ -228,11 +228,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) @@ -406,12 +406,12 @@ def init(self, armed_by_transient = False): coeffs = uut.cal_eslo[1:] eoff = uut.cal_eoff[1:] - self.chans = [] + chans = [] nchans = self.sites*32 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])) From 18493bb575b161eedc8d3b1a9da518aca05d9e76 Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Tue, 2 Aug 2022 16:52:26 -0400 Subject: [PATCH 5/8] Added static variable NUM_CHANS_PER_SITE --- pydevices/HtsDevices/acq2106_423st.py | 8 +++++--- pydevices/HtsDevices/acq2106_435st.py | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_423st.py b/pydevices/HtsDevices/acq2106_423st.py index 8339a9e1b9..8364c93b02 100755 --- a/pydevices/HtsDevices/acq2106_423st.py +++ b/pydevices/HtsDevices/acq2106_423st.py @@ -159,6 +159,8 @@ class _ACQ2106_423ST(MDSplus.Device): trig_types = ['hard', 'soft', 'automatic'] + NUM_CHANS_PER_SITE = 32 + class MDSWorker(threading.Thread): NUM_BUFFERS = 20 @@ -167,7 +169,7 @@ def __init__(self, dev): self.dev = dev.copy() - self.nchans = self.dev.sites*32 + self.nchans = self.dev.sites * NUM_CHANS_PER_SITE self.seg_length = self.dev.seg_length.data() self.segment_bytes = self.seg_length*self.nchans*np.int16(0).nbytes @@ -407,7 +409,7 @@ def init(self, armed_by_transient = False): eoff = uut.cal_eoff[1:] chans = [] - nchans = self.sites*32 + nchans = self.sites * NUM_CHANS_PER_SITE for ii in range(nchans): chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1))) @@ -448,7 +450,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,), diff --git a/pydevices/HtsDevices/acq2106_435st.py b/pydevices/HtsDevices/acq2106_435st.py index c746b92552..795a000633 100755 --- a/pydevices/HtsDevices/acq2106_435st.py +++ b/pydevices/HtsDevices/acq2106_435st.py @@ -182,6 +182,8 @@ class _ACQ2106_435ST(MDSplus.Device): data_socket = -1 + NUM_CHANS_PER_SITE = 32 + class MDSWorker(threading.Thread): NUM_BUFFERS = 20 @@ -190,7 +192,7 @@ def __init__(self, dev): self.dev = dev.copy() - self.nchans = self.dev.sites * 32 + self.nchans = self.dev.sites * NUM_CHANS_PER_SITE self.resampling = self.dev.resampling self.seg_length = self.dev.seg_length.data() @@ -467,7 +469,7 @@ def init(self, resampling = False, armed_by_transient = False): eoff = uut.cal_eoff[1:] chans = [] - nchans = self.sites * 32 + nchans = self.sites * NUM_CHANS_PER_SITE for ii in range(nchans): chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1))) @@ -553,7 +555,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,), From c80e175418c8abf962d9e22a7f6849df96daed7a Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Tue, 2 Aug 2022 18:04:51 -0400 Subject: [PATCH 6/8] Corrected the calls to the static variable NUM_CHANS_PER_SITE --- pydevices/HtsDevices/acq2106_423st.py | 4 ++-- pydevices/HtsDevices/acq2106_435st.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_423st.py b/pydevices/HtsDevices/acq2106_423st.py index 8364c93b02..7cf138d40c 100755 --- a/pydevices/HtsDevices/acq2106_423st.py +++ b/pydevices/HtsDevices/acq2106_423st.py @@ -169,7 +169,7 @@ def __init__(self, dev): self.dev = dev.copy() - self.nchans = self.dev.sites * NUM_CHANS_PER_SITE + 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 @@ -409,7 +409,7 @@ def init(self, armed_by_transient = False): eoff = uut.cal_eoff[1:] chans = [] - nchans = self.sites * NUM_CHANS_PER_SITE + nchans = self.sites * self.NUM_CHANS_PER_SITE for ii in range(nchans): chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1))) diff --git a/pydevices/HtsDevices/acq2106_435st.py b/pydevices/HtsDevices/acq2106_435st.py index 795a000633..024c5eddb1 100755 --- a/pydevices/HtsDevices/acq2106_435st.py +++ b/pydevices/HtsDevices/acq2106_435st.py @@ -192,7 +192,7 @@ def __init__(self, dev): self.dev = dev.copy() - self.nchans = self.dev.sites * NUM_CHANS_PER_SITE + self.nchans = self.dev.sites * self.dev.NUM_CHANS_PER_SITE self.resampling = self.dev.resampling self.seg_length = self.dev.seg_length.data() @@ -469,7 +469,7 @@ def init(self, resampling = False, armed_by_transient = False): eoff = uut.cal_eoff[1:] chans = [] - nchans = self.sites * NUM_CHANS_PER_SITE + nchans = self.sites * self.NUM_CHANS_PER_SITE for ii in range(nchans): chans.append(getattr(self, 'INPUT_%3.3d' % (ii+1))) From b27d903098ad59e71a8993a280fcec8747fcd691 Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Tue, 13 Dec 2022 13:13:59 -0500 Subject: [PATCH 7/8] Create a tuple containing an instant of the tree to be used in the MDSWorker thread (instead of using .copy() --- pydevices/HtsDevices/acq2106_423st.py | 8 +++++++- pydevices/HtsDevices/acq2106_435st.py | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_423st.py b/pydevices/HtsDevices/acq2106_423st.py index 7cf138d40c..a3c7ee1dea 100755 --- a/pydevices/HtsDevices/acq2106_423st.py +++ b/pydevices/HtsDevices/acq2106_423st.py @@ -167,7 +167,10 @@ class MDSWorker(threading.Thread): def __init__(self, dev): super(_ACQ2106_423ST.MDSWorker, self).__init__(name=dev.path) - self.dev = dev.copy() + # Tuple designed to bring a copy of the tree to the MDSWorker thread + self.info = (dev.tree.name, dev.tree.shot, dev.path) + + self.dev = dev self.nchans = self.dev.sites * self.dev.NUM_CHANS_PER_SITE @@ -193,6 +196,9 @@ def lcma(arr): ans = lcm(ans, e) return int(ans) + tree = MDSplus.Tree(self.info[0], self.info[1]) + self.dev = tree.getNode(self.info[2]) + if self.dev.debug: print("MDSWorker running") diff --git a/pydevices/HtsDevices/acq2106_435st.py b/pydevices/HtsDevices/acq2106_435st.py index 024c5eddb1..9264a8e321 100755 --- a/pydevices/HtsDevices/acq2106_435st.py +++ b/pydevices/HtsDevices/acq2106_435st.py @@ -190,7 +190,10 @@ class MDSWorker(threading.Thread): def __init__(self, dev): super(_ACQ2106_435ST.MDSWorker, self).__init__(name=dev.path) - self.dev = dev.copy() + # Tuple designed to bring a copy of the tree to the MDSWorker thread + self.info = (dev.tree.name, dev.tree.shot, dev.path) + + self.dev = dev self.nchans = self.dev.sites * self.dev.NUM_CHANS_PER_SITE self.resampling = self.dev.resampling @@ -220,6 +223,9 @@ def lcma(arr): ans = lcm(ans, e) return int(ans) + tree = MDSplus.Tree(self.info[0], self.info[1]) + self.dev = tree.getNode(self.info[2]) + if self.dev.debug: print("MDSWorker running") From 1483d8a4c6ae4a3f05e2f914d70b7078fdf688e1 Mon Sep 17 00:00:00 2001 From: Fernando Santoro Date: Fri, 7 Apr 2023 14:24:59 -0400 Subject: [PATCH 8/8] Break tuple into 3 variables Replace info tuple with tree, shot and path to bring a copy of the tree to the worker thread. --- pydevices/HtsDevices/acq2106_423st.py | 10 ++++++---- pydevices/HtsDevices/acq2106_435st.py | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/pydevices/HtsDevices/acq2106_423st.py b/pydevices/HtsDevices/acq2106_423st.py index a3c7ee1dea..2efa6be1c3 100755 --- a/pydevices/HtsDevices/acq2106_423st.py +++ b/pydevices/HtsDevices/acq2106_423st.py @@ -167,8 +167,10 @@ class MDSWorker(threading.Thread): def __init__(self, dev): super(_ACQ2106_423ST.MDSWorker, self).__init__(name=dev.path) - # Tuple designed to bring a copy of the tree to the MDSWorker thread - self.info = (dev.tree.name, dev.tree.shot, 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 @@ -196,8 +198,8 @@ def lcma(arr): ans = lcm(ans, e) return int(ans) - tree = MDSplus.Tree(self.info[0], self.info[1]) - self.dev = tree.getNode(self.info[2]) + tree = MDSplus.Tree(self.tree, self.shot) + self.dev = tree.getNode(self.path) if self.dev.debug: print("MDSWorker running") diff --git a/pydevices/HtsDevices/acq2106_435st.py b/pydevices/HtsDevices/acq2106_435st.py index 9264a8e321..3f52aa0476 100755 --- a/pydevices/HtsDevices/acq2106_435st.py +++ b/pydevices/HtsDevices/acq2106_435st.py @@ -190,8 +190,10 @@ class MDSWorker(threading.Thread): def __init__(self, dev): super(_ACQ2106_435ST.MDSWorker, self).__init__(name=dev.path) - # Tuple designed to bring a copy of the tree to the MDSWorker thread - self.info = (dev.tree.name, dev.tree.shot, 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 @@ -223,8 +225,8 @@ def lcma(arr): ans = lcm(ans, e) return int(ans) - tree = MDSplus.Tree(self.info[0], self.info[1]) - self.dev = tree.getNode(self.info[2]) + tree = MDSplus.Tree(self.tree, self.shot) + self.dev = tree.getNode(self.path) if self.dev.debug: print("MDSWorker running")