Skip to content

Commit 92aec44

Browse files
committed
Rounds number of frames up, to nearest even integer if odd
Timely updates frames_expected in Debug Tab Number of configured buffers a more even value, 52k Adds compression option to odin_config, rearranges config file into alphabetical order.
1 parent adb70fc commit 92aec44

14 files changed

+78
-61
lines changed

control/odin_config.json

+31-32
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,32 @@
11
{
2-
"fem/hexitec_config": "control/config/hexitec_unified_CSD__performance.ini",
3-
"daq/file_name": "a",
4-
"daq/file_dir": "/data/hexitec/",
5-
"daq/addition_enable": false,
6-
"daq/pixel_grid_size": 3,
7-
"daq/calibration_enable": false,
8-
"daq/gradients_filename": "data/config/m_2x6.txt",
9-
"daq/intercepts_filename": "data/config/c_2x6.txt",
10-
"daq/discrimination_enable": false,
11-
"daq/bin_end": 8000,
12-
"daq/bin_start": 0,
13-
"daq/bin_width": 10.0,
14-
"daq/max_frames_received": 100000,
15-
"daq/pass_processed": false,
16-
"daq/pass_raw": false,
17-
"daq/lvframes_dataset_name": "raw_frames",
18-
"daq/lvframes_frequency": 0,
19-
"daq/lvframes_per_second": 2,
20-
"daq/lvspectra_frequency": 0,
21-
"daq/lvspectra_per_second": 1,
22-
"daq/next_frame_enable": false,
23-
"daq/threshold_lower": 0,
24-
"daq/threshold_upper": 4400,
25-
"daq/image_frequency": 100000,
26-
"daq/threshold_filename": "data/config/thresh_2x6.txt",
27-
"daq/threshold_mode": "value",
28-
"daq/threshold_value": 120,
29-
"number_frames": 10,
30-
"duration": 1,
31-
"duration_enable": false
32-
}
33-
2+
"daq/addition_enable": false,
3+
"daq/bin_end": 8000,
4+
"daq/bin_start": 0,
5+
"daq/bin_width": 10.0,
6+
"daq/calibration_enable": false,
7+
"daq/compression_type": "none",
8+
"daq/discrimination_enable": false,
9+
"daq/file_dir": "/data/hexitec/",
10+
"daq/file_name": "a",
11+
"daq/gradients_filename": "data/config/m_2x6.txt",
12+
"daq/image_frequency": 100000,
13+
"daq/intercepts_filename": "data/config/c_2x6.txt",
14+
"daq/lvframes_dataset_name": "raw_frames",
15+
"daq/lvframes_frequency": 0,
16+
"daq/lvframes_per_second": 2,
17+
"daq/lvspectra_frequency": 0,
18+
"daq/lvspectra_per_second": 1,
19+
"daq/max_frames_received": 100000,
20+
"daq/pass_processed": false,
21+
"daq/pass_raw": false,
22+
"daq/pixel_grid_size": 5,
23+
"daq/threshold_filename": "data/config/thresh_2x6.txt",
24+
"daq/threshold_lower": 0,
25+
"daq/threshold_mode": "filename",
26+
"daq/threshold_upper": 4400,
27+
"daq/threshold_value": 120,
28+
"duration": 60,
29+
"duration_enable": true,
30+
"fem/hexitec_config": "control/config/hexitec_unified_CSD__performance.ini",
31+
"number_frames": 40
32+
}

control/src/hexitec/HexitecDAQ.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,8 @@ def prepare_daq(self, number_frames):
300300
self.frames_received = 0
301301
# Count hdf's frames_processed across node(s)
302302
self.frame_start_acquisition = self.get_total_frames_processed('hdf')
303-
self.frames_expected = self.number_frames
304303
self.number_frames = number_frames
304+
self.frames_expected = self.number_frames
305305
logging.info("FRAME START ACQ: %d END ACQ: %d",
306306
self.frame_start_acquisition,
307307
self.frame_start_acquisition + number_frames)
@@ -314,6 +314,8 @@ def prepare_daq(self, number_frames):
314314
self.set_file_writing(True)
315315
# Diagnostics:
316316
self.daq_start_time = '%s' % (datetime.datetime.now().strftime(HexitecDAQ.DATE_FORMAT))
317+
self.fem_not_busy = 0
318+
self.daq_stop_time = 0
317319
# About to receive fem data, daq therefore now busy
318320
self.daq_ready = False
319321
# Wait while fem finish sending data
@@ -864,6 +866,8 @@ def set_data_dir(self, directory):
864866
def set_number_frames(self, number_frames):
865867
"""Set number of frames to be acquired."""
866868
self.number_frames = number_frames
869+
self.frames_expected = number_frames
870+
self.frames_processed = 0
867871
self.processed_remaining = self.number_frames - self.frames_processed
868872

869873
def set_number_nodes(self, nodes):

control/src/hexitec/HexitecFem.py

+4
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,9 @@ def set_duration(self, duration):
582582
self.calculate_frame_rate()
583583
self.duration = duration
584584
frames = self.duration * self.frame_rate
585+
# Ensure even number of frames
586+
if frames % 2:
587+
frames = self.parent.round_to_even(frames)
585588
self.number_frames = int(round(frames))
586589

587590
def get_health(self):
@@ -764,6 +767,7 @@ def acquire_data(self):
764767
logging.info("Initiate Data Capture")
765768
self.acquire_time = 0
766769
self.acquire_start_time = self.create_timestamp()
770+
self.acquire_stop_time = "0"
767771

768772
logging.debug("Reset frame number")
769773
self.frame_reset_to_zero()

control/src/hexitec/adapter.py

+23-15
Original file line numberDiff line numberDiff line change
@@ -405,35 +405,35 @@ def disconnect_hardware(self, msg):
405405
def save_odin(self, msg):
406406
"""Save Odin's settings to file."""
407407
config = {}
408-
config["fem/hexitec_config"] = self.fem.hexitec_config
409-
config["daq/file_name"] = self.daq.file_name
410-
config["daq/file_dir"] = self.daq.file_dir
411408
config["daq/addition_enable"] = self.daq.addition_enable
412-
config["daq/pixel_grid_size"] = self.daq.pixel_grid_size
413-
config["daq/calibration_enable"] = self.daq.calibration_enable
414-
config["daq/gradients_filename"] = self.daq.gradients_filename
415-
config["daq/intercepts_filename"] = self.daq.intercepts_filename
416-
config["daq/discrimination_enable"] = self.daq.discrimination_enable
417409
config["daq/bin_end"] = self.daq.bin_end
418410
config["daq/bin_start"] = self.daq.bin_start
419411
config["daq/bin_width"] = self.daq.bin_width
420-
config["daq/max_frames_received"] = self.daq.max_frames_received
421-
config["daq/pass_processed"] = self.daq.pass_processed
422-
config["daq/pass_raw"] = self.daq.pass_raw
412+
config["daq/calibration_enable"] = self.daq.calibration_enable
413+
config["daq/discrimination_enable"] = self.daq.discrimination_enable
414+
config["daq/file_dir"] = self.daq.file_dir
415+
config["daq/file_name"] = self.daq.file_name
416+
config["daq/gradients_filename"] = self.daq.gradients_filename
417+
config["daq/image_frequency"] = self.daq.image_frequency
418+
config["daq/intercepts_filename"] = self.daq.intercepts_filename
423419
config["daq/lvframes_dataset_name"] = self.daq.lvframes_dataset_name
424420
config["daq/lvframes_frequency"] = self.daq.lvframes_frequency
425421
config["daq/lvframes_per_second"] = self.daq.lvframes_per_second
426422
config["daq/lvspectra_frequency"] = self.daq.lvspectra_frequency
427423
config["daq/lvspectra_per_second"] = self.daq.lvspectra_per_second
428-
config["daq/threshold_lower"] = self.daq.threshold_lower
429-
config["daq/threshold_upper"] = self.daq.threshold_upper
430-
config["daq/image_frequency"] = self.daq.image_frequency
424+
config["daq/max_frames_received"] = self.daq.max_frames_received
425+
config["daq/pass_processed"] = self.daq.pass_processed
426+
config["daq/pass_raw"] = self.daq.pass_raw
427+
config["daq/pixel_grid_size"] = self.daq.pixel_grid_size
431428
config["daq/threshold_filename"] = self.daq.threshold_filename
429+
config["daq/threshold_lower"] = self.daq.threshold_lower
432430
config["daq/threshold_mode"] = self.daq.threshold_mode
431+
config["daq/threshold_upper"] = self.daq.threshold_upper
433432
config["daq/threshold_value"] = self.daq.threshold_value
434-
config["number_frames"] = self.number_frames
435433
config["duration"] = self.duration
436434
config["duration_enable"] = self.duration_enable
435+
config["fem/hexitec_config"] = self.fem.hexitec_config
436+
config["number_frames"] = self.number_frames
437437
try:
438438
with open(self.odin_config_file, "w") as f:
439439
json.dump(config, f)
@@ -471,6 +471,7 @@ def load_odin(self, msg):
471471
self.daq._set_threshold_filename(config["daq/threshold_filename"])
472472
self.daq._set_threshold_mode(config["daq/threshold_mode"])
473473
self.daq._set_threshold_value(config["daq/threshold_value"])
474+
self.daq._set_compression_type(config["daq/compression_type"])
474475
if config["duration_enable"]:
475476
self.set_duration(config["duration"])
476477
self.set_duration_enable(config["duration_enable"])
@@ -494,8 +495,15 @@ def set_duration_enable(self, duration_enable):
494495
else:
495496
self.set_number_frames(self.number_frames)
496497

498+
def round_to_even(self, n):
499+
"""Round (upwards) integer to even integer."""
500+
return (2 * round(0.4+n/2))
501+
497502
def set_number_frames(self, frames):
498503
"""Set number of frames in DAQ, FEM."""
504+
# Ensure even number of frames
505+
if frames % 2:
506+
frames = self.round_to_even(frames)
499507
if frames <= 0:
500508
raise ParameterTreeError("frames must be above 0!")
501509
self.number_frames = frames

control/static/js/odin_server.js

+3-1
Original file line numberDiff line numberDiff line change
@@ -1083,7 +1083,9 @@ function hexitec_config_changed() {
10831083

10841084
function frames_changed() {
10851085
ui_frames = document.querySelector('#frames-text');
1086-
hexitec_endpoint.put(Number(ui_frames.value), 'detector/acquisition/number_frames')
1086+
frames = 2 * Math.round(ui_frames.value / 2);
1087+
document.querySelector('#frames-text').value = frames;
1088+
hexitec_endpoint.put(frames, 'detector/acquisition/number_frames')
10871089
.then(result => {
10881090
ui_frames.classList.remove('alert-danger');
10891091
})

control/test/hexitec/package/test_adapter.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -449,7 +449,7 @@ def test_set_duration_enable_False(self):
449449

450450
def test_set_number_frames(self):
451451
"""Test function sets number of frames."""
452-
frames = 13
452+
frames = 12
453453
self.test_adapter.detector.set_number_frames(frames)
454454
assert self.test_adapter.detector.number_frames == frames
455455

@@ -492,9 +492,9 @@ def test_detector_initialize(self):
492492

493493
def test_detector_set_acq(self):
494494
"""Test function can set number of frames."""
495-
self.test_adapter.detector.set_number_frames(5)
496-
497-
assert self.test_adapter.detector.number_frames == 5
495+
frames = 10
496+
self.test_adapter.detector.set_number_frames(frames)
497+
assert self.test_adapter.detector.number_frames == frames
498498

499499
def test_detector_acquisition_clears_previous_daq_errors(self):
500500
"""Test function clears any previous daq error."""

data/config/fr_hxtdaq1_fr_0.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer0",
77
"rx_address": "10.0.1.1",
88
"rx_ports": "61659",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

data/config/fr_hxtdaq1_fr_1.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer01",
77
"rx_address": "10.0.2.1",
88
"rx_ports": "61660",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

data/config/fr_hxtdaq2_fr_0.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer1",
77
"rx_address": "10.0.1.2",
88
"rx_ports": "61649",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

data/config/fr_hxtdaq2_fr_1.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer11",
77
"rx_address": "10.0.2.2",
88
"rx_ports": "61650",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

data/config/fr_hxtdaq3_fr_0.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer2",
77
"rx_address": "10.0.1.3",
88
"rx_ports": "61649",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

data/config/fr_hxtdaq3_fr_1.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer21",
77
"rx_address": "10.0.2.3",
88
"rx_ports": "61650",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

data/config/fr_hxtdaq4_fr_0.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer3",
77
"rx_address": "10.0.1.4",
88
"rx_ports": "61649",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

data/config/fr_hxtdaq4_fr_1.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"shared_buffer_name": "HexitecFrameBuffer31",
77
"rx_address": "10.0.2.4",
88
"rx_ports": "61659",
9-
"max_buffer_mem": 8000000000,
9+
"max_buffer_mem": 7990528000,
1010
"decoder_path": "lib/",
1111
"decoder_type": "Hexitec",
1212
"decoder_config": {

0 commit comments

Comments
 (0)