4 Commits

Author SHA1 Message Date
chrin 0992667ded 1.3.0 2025-07-24 17:32:35 +02:00
chrin 9055baad4a Updated PVs related to new HIPA clock, 3036 MHz sampling frequency 2025-07-17 12:21:07 +02:00
chrin 7267bc30e3 added reverse polarity flag 2025-07-17 09:12:46 +02:00
chrin 14ba366861 increased peak threshold in json file 2025-06-24 14:55:54 +02:00
4 changed files with 87 additions and 31 deletions
+51 -12
View File
@@ -73,8 +73,13 @@ class AnalysisProcedure(QObject):
self.injector_2 = self.parent.injector_2
self.ring_cyclotron = self.parent.ring_cyclotron
self.accelerator_list = self.parent.accelerator_list
self.reverse_input_signal = False
self.reverse_output_signal = True
# Declare input parameters
self.input_parameters = self.parent.input_parameters
self.input_data = None
self.debug = False
self.log_level = logging.INFO
@@ -87,9 +92,9 @@ class AnalysisProcedure(QObject):
self.n_turns = 0
# self.t_stepsize = 0.000000019750043 #0.00000002
self.rf_freq = 50.6328 # 10**6
self.rf_sample = 3.0 # 10**6
self.rf_sample = 3036 # 10**6
self.pulse_stepsize = 1 / (self.rf_freq * 10**6)
self.t_stepsize = 1 / (self.rf_sample * 10**9)
self.t_stepsize = 1 / (self.rf_sample * 10**6)
self.t_interval = math.ceil(self.pulse_stepsize / self.t_stepsize)
self.correlation_peak_diff = 0.0
@@ -149,6 +154,10 @@ class AnalysisProcedure(QObject):
else:
self.loglevel = self.input_data['loggingLevel']
self.reverse_input_signal = False
self.reverse_output_signal = True
self.logger.setLevel(self.logging.getLevelName(self.loglevel))
if 'debug' in self.input_data.keys():
@@ -166,12 +175,13 @@ class AnalysisProcedure(QObject):
mess = 'Sampling rate changed to 2.5 MHz for oscilloscope data'
self.parent.trigger_log_message.emit(
MsgSeverity.INFO.name, _pymodule, utils.line_no(), mess, {})
else:
self.rf_sample = float(self.input_data['freqsampling'])
#else:
# self.rf_sample = float(self.input_data['freqsampling'])
try:
self.accelerator = self.input_data['accelerator']
print (f'Accelerator: {self.accelerator}', flush=True)
self.harmonic_no = float(
self.input_data[self.accelerator]['harmonic'])
self.dt_cable = float(
@@ -182,7 +192,14 @@ class AnalysisProcedure(QObject):
# self.input_data[self.accelerator_peak_search][
# 'minimumCurrent'])
print (f'Accelerator: {self.accelerator}', flush=True)
self.reverse_output_signal = bool(
self.input_data[self.accelerator_peak_search]['reverseOutput'])
self.reverse_input_signal = bool(
self.input_data[self.accelerator_peak_search]['reverseInput'])
if self.injector_2 in self.accelerator:
self.mod_freq = float(
self.input_data[self.accelerator]['freqmod']) # * 10**9 GHz
@@ -195,8 +212,8 @@ class AnalysisProcedure(QObject):
self.logger.info(f'Simulation {self.simulation}')
self.logger.info(
f'RF Frequency (10**6 Hz) {self.rf_freq}')
self.logger.info(
f'RF Sampling (10**9 Hz) {self.rf_sample}')
#self.logger.info(
# f'RF Sampling (10**9 Hz) {self.rf_sample}')
self.logger.info(f'Harmonic No. {self.harmonic_no}')
self.logger.info(f'dT Cable {self.dt_cable}')
self.logger.info(f'dN Pickup {self.dn_pickup}')
@@ -431,6 +448,17 @@ class AnalysisProcedure(QObject):
self.check_status_list(_pymodule, 'getScalarList',
pv_list, status_list, utils.line_no())
#
pv_rf_sample = self.settings.data['PV'][self.accelerator]['samplingFreq']
if not self.simulation:
self.rf_sample = self.cafe.getCache(pv_rf_sample)
self.t_stepsize = 1 / (self.rf_sample * 10**6)
self.t_interval = math.ceil(self.pulse_stepsize / self.t_stepsize)
print(f'rf_sample = {self.rf_sample}', flush = True)
# Retrieve
pv_entry_current = self.settings.data['PV'][self.accelerator]['IEntry']
@@ -499,7 +527,7 @@ class AnalysisProcedure(QObject):
# returns indices of peaks, and dictionary of properties
y1_peaks_pre = signal.find_peaks(self.y1_sample, height=height,
distance=10)
distance=self.signal_min_peak_distance)
print(
'peak length==>', len(
@@ -515,7 +543,7 @@ class AnalysisProcedure(QObject):
y1_height = min_y1_p * 0.9 # y1_peaks_avg * 0.726667
y2_peaks_pre = signal.find_peaks(self.y2_sample, height=height,
distance=10)
distance=self.signal_min_peak_distance)
##y2_peaks_avg = np.average(y2_peaks_pre[1]['peak_heights'])
min_y2_p = np.min(y2_peaks_pre[1]['peak_heights'])
@@ -527,9 +555,11 @@ class AnalysisProcedure(QObject):
print(f'AVG = {y1_height}, {y2_height}', flush=True)
y1_peaks = signal.find_peaks(
self.y1_sample, height=y1_height, distance=10)
self.y1_sample, height=y1_height,
distance=self.signal_min_peak_distance)
y2_peaks = signal.find_peaks(
self.y2_sample, height=y2_height, distance=10)
self.y2_sample, height=y2_height,
distance=self.signal_min_peak_distance)
print((f'PEAKS==> {y1_peaks}, {y2_peaks},' +
f'{len(y1_peaks[0])}, {len(y2_peaks[0])}'), flush=True)
print(y1_peaks[1]['peak_heights'], flush=True)
@@ -676,6 +706,15 @@ class AnalysisProcedure(QObject):
print(f'y1 sample length = {len(self.y1_sample)}')
print(f'y2 sample length = {len(self.y2_sample)}', flush=True)
if self.reverse_input_signal:
for i in range(0, len(self.y1_sample)):
self.y1_sample[i] = self.y1_sample[i] * (-1)
if self.reverse_output_signal:
for i in range(0, len(self.y2_sample)):
self.y2_sample[i] = self.y2_sample[i] * (-1)
#series = pd.Series(self.y1_sample)
#self.y1_sample = (series * (-1)).tolist()
#self.y1_sample = (series).tolist()
+20 -11
View File
@@ -40,11 +40,11 @@ class AppGui(QWidget):
self.input_labels = self.parent.input_labels
self.expert_parameters = self.parent.expert_parameters
self.gui_frame.expert_parameters_group.setFixedWidth(280)
self.gui_frame.expert_parameters_group.setFixedHeight(350)
self.gui_frame.expert_parameters_group.setFixedHeight(430)
self.gui_frame.operator_parameters_group.setFixedWidth(260)
self.gui_frame.operator_parameters_group.setFixedHeight(400)
self.gui_frame.measurement_tab_wgt.setFixedWidth(516)
self.gui_frame.measurement_tab_wgt.setFixedHeight(480)
self.gui_frame.measurement_tab_wgt.setFixedHeight(580)
self.gui_frame.operator_wgt.setFixedHeight(640)
# self.gui_frame.expert_wgt.setFixedHeight(240)
self.gui_frame.expert_wgt.layout().addWidget(
@@ -61,11 +61,12 @@ class AppGui(QWidget):
self.daq_wgt.setCurrentIndex(self.parent.default_idx)
self.daq_wgt.currentChanged.emit(self.parent.default_idx)
# Accelerator Current
self.current_wgt = self.accelerator_current_group_qtabwidget(
widget_type='QStackedWidget')
self.gui_frame.measurement_layout.addWidget(
self.current_wgt, 1, 1, 1, 1, alignment=Qt.AlignTop)
self.current_wgt, 1, 1, 1, 1, alignment=Qt.AlignTop|Qt.AlignCenter)
self.current_wgt.setCurrentIndex(self.parent.default_idx)
self.current_wgt.currentChanged.emit(self.parent.default_idx)
@@ -131,8 +132,8 @@ class AppGui(QWidget):
accel_wgt_dict[accel] = self.daq_group(accel)
accel_tab_widget.addWidget(accel_wgt_dict[accel])
accel_tab_widget.setFixedWidth(320)
accel_tab_widget.setFixedHeight(160)
accel_tab_widget.setFixedWidth(380)
#accel_tab_widget.setFixedHeight(160)
return accel_tab_widget
def daq_group(self, accel):
@@ -145,26 +146,34 @@ class AppGui(QWidget):
pv_daq.append(self.settings.data['PV'][accel]['daqTrigger'])
pv_daq.append(self.settings.data['PV'][accel]['daqReady'])
pv_daq.append(self.settings.data['PV'][accel]['daqErrorCount'])
pv_daq.append(self.settings.data['PV'][accel]['daqWindow'])
pv_daq.append(self.settings.data['PV'][accel]['samplingFreq'])
pv_daq.append(self.settings.data['PV'][accel]['samplingNum'])
self.cafe.openPrepare()
self.cafe.open(pv_daq)
self.cafe.openNowAndWait(1.0)
vbox.addWidget(QLabel('DAQ Trigger:'), 0, 0)
vbox.addWidget(QLabel('DAQ Count:'), 1, 0)
vbox.addWidget(QLabel('Error Count:'), 2, 0)
vbox.addWidget(QLabel('Read Error Count:'), 2, 0)
vbox.addWidget(QLabel('DAQ Window:'), 3, 0)
vbox.addWidget(QLabel('Sampling Freq:'), 4, 0)
vbox.addWidget(QLabel('No Samples:'), 5, 0)
pv_widget = [None] * len(pv_daq)
for i, pv in enumerate(pv_daq):
pv_widget[i] = CAQLabel(self, pv_name=pv)
pv_widget[i] = CAQLabel(self, pv_name=pv, show_units=True)
vbox.addWidget(pv_widget[i], i, 1)
fwidth = 40 if 'ERR-CNT' not in pv else 60
#fwidth = 100 if 'ERR-CNT' not in pv else 100
fwidth = 120 if 'SMP' in pv or 'WINDOW' in pv else 60
pv_widget[i].setFixedWidth(fwidth)
vbox.setContentsMargins(9, 19, 9, 9)
vbox.setSpacing(5)
vbox.setAlignment(Qt.AlignTop | Qt.AlignHCenter)
group_box.setFixedWidth(220)
group_box.setFixedHeight(140)
group_box.setFixedWidth(260)
group_box.setFixedHeight(240)
group_box.setFont(self.font_gui)
group_box.setAlignment(int(Qt.AlignTop | Qt.AlignHCenter))
group_box.setLayout(vbox)
@@ -231,7 +240,7 @@ class AppGui(QWidget):
vbox.setContentsMargins(9, 19, 9, 9)
vbox.setSpacing(5)
vbox.setAlignment(Qt.AlignTop | Qt.AlignHCenter)
group_box.setFixedWidth(220)
group_box.setFixedWidth(260)
group_box.setFixedHeight(100)
group_box.setFont(self.font_gui)
group_box.setAlignment(int(Qt.AlignTop | Qt.AlignHCenter))
+15 -7
View File
@@ -18,6 +18,9 @@
"daqTrigger": "ZWSGA-CECL-TCINJ:TRG-SINGLE:PROC",
"daqReady": "ZWSGA-CECL-TCINJ:SCOPE-ACQ-CNT",
"daqErrorCount": "ZWSGA-CECL-TCINJ:ERR-CNT",
"samplingFreq": "ZWSGA-CECL-TCINJ:SCOPE-SMP-FREQ",
"samplingNum": "ZWSGA-CECL-TCINJ:SCOPE-SMP-NUM",
"daqWindow": "ZWSGA-CECL-TCINJ:SCOPE-ACQ-WINDOW",
"wfEntry": "ZWSGA-CECL-TCINJ:SCOPE-CH0",
"wfExit": "ZWSGA-CECL-TCINJ:SCOPE-CH1",
"IEntry": "ENTRY:IST:1",
@@ -27,6 +30,9 @@
"daqTrigger": "ZWSGA-CECL-TCRING:TRG-SINGLE.PROC",
"daqReady": "ZWSGA-CECL-TCRING:SCOPE-ACQ-CNT",
"daqErrorCount": "ZWSGA-CECL-TCRING:ERR-CNT",
"samplingFreq": "ZWSGA-CECL-TCRING:SCOPE-SMP-FREQ",
"samplingNum": "ZWSGA-CECL-TCRING:SCOPE-SMP-NUM",
"daqWindow": "ZWSGA-CECL-TCRING:SCOPE-ACQ-WINDOW",
"wfEntry": "ZWSGA-CECL-TCRING:SCOPE-CH0",
"wfExit": "ZWSGA-CECL-TCRING:SCOPE-CH1",
"IEntry": "MNC3:IST:2",
@@ -71,21 +77,23 @@
"peakHeight": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min peak height:", "value" : 50 }},
"peakDistance": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min peak distance: ", "value" : 10 }},
"correlationPeakDifference": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min dcorr(peak1-peak2):", "value" : 0.01}},
"minimumCurrent": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Inj2 I_min (mA):", "value" : "0.100"}}
"minimumCurrent": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Inj2 I_min (mA):", "value" : "0.100"}},
"reverseInput": {"flag": 1, "data":{ "widget": "QCheckBox", "text" :"Reverse Input Polarity: ", "value" : 1, "orientation":"RightToLeft"}},
"reverseOutput": {"flag": 1, "data":{ "widget": "QCheckBox", "text" :"Reverse Output Polarity: ", "value" : 1, "orientation":"RightToLeft"}}
},
" Cyclotron ": {
"peakHeight": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min peak height:", "value" : 50 }},
"peakHeight": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min peak height:", "value" : 100 }},
"peakDistance": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min peak distance: ", "value" : 10 }},
"correlationPeakDifference": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min dcorr(peak1-peak2):", "value" : 0.01 }},
"minimumCurrent": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Inj2 I_min (mA):", "value" : "0.100"}}
"correlationPeakDifference": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Min dcorr(peak1-peak2):", "value" : 0.005 }},
"minimumCurrent": {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"Inj2 I_min (mA):", "value" : "0.100"}},
"reverseInput": {"flag": 1, "data":{ "widget": "QCheckBox", "text" :"Reverse Input Polarity: ", "value" : 1, "orientation":"RightToLeft"}},
"reverseOutput": {"flag": 1, "data":{ "widget": "QCheckBox", "text" :"Reverse Output Polarity: ", "value" : 1, "orientation":"RightToLeft"}}
}
},
"Parameters":{
"freqrf" : {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"RF Freq (10^6/s):", "value" : 50.6328 }},
"freqsampling" : {"flag": 1, "data":{ "widget": "QLineRead", "text" :"Sampling Freq (GHz):", "value" : 3.0 }},
"freqrf" : {"flag": 1, "data":{ "widget": "QLineEdit", "text" :"RF Freq (10^6/s):", "value" : 50.6328 }},
"drawLine" : {"flag" : 1, "data":{ "widget": "QHLine", "text" : "None", "value" : "None"}},
"accelerator" : {"flag" : 1, "data":{ "widget": "QTabWidget", "text" : "Accelerator: ",
"link" : "QTabAccelerator", "value" : 1,
+1 -1
View File
@@ -1,5 +1,5 @@
#!/bin/bash
cd /hipa/bd/applications/tina/1.1.0
cd /hipa/bd/applications/tina/1.3.0
# For use if script is sourced rather than executed
appNameDefault="tina.sh"