MITHaystack/digital_rf

thor.py: Setting file_cadence_millisecs to a large value causes ValueError

Closed this issue · 2 comments

Hello,
I would like thor.py to produce a single file rather than many chunks of files and a way I have been trying to accomplish this is by setting file_cadence_millisecs to a very large value. However, upon setting it to large values, thor.py refuses to proceed:

thor.py -m 192.168.10.2 -d "A:0" -f 1575420000 -F 0 -g 50 -b 0 -r 4000000 -n 1000000 --nolock --nosync ~

Main boards: addr=192.168.10.2
Subdevices: ['A:0']
Clock rates: [None]
Clock sources: ['']
Time sources: ['']
Sample rate: 4000000.0
Device arguments: recv_buff_size=100000000,num_recv_frames=512
Stream arguments:
Tune arguments:
Antenna: ['']
Bandwidth: [0.0]
Frequency: [1575420000.0]
LO frequency offset: [0.0]
LO source: ['']
LO export: [None]
Gain: [50.0]
DC offset: [False]
IQ balance: [None]
Output channels: [0]
Output channel names: ['ch0']
Output sample rate: [None]
Output frequency: [False]
Output scaling: [1.0]
Output subchannels: [1]
Output type: ['sc16']
Data dir: /home/avoronov
Metadata: {}
UUID: None
Local time: Tue 2023-07-11 12:24:55 EDT
Universal time: Tue 2023-07-11 16:24:55 UTC
RTC time: Tue 2023-07-11 16:24:55
Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
[INFO] [UHD] linux; GNU C++ version 9.4.0; Boost_107100; UHD_4.4.0.0-0ubuntu1~focal1
[INFO] [X300] X300 initialization sequence...
[INFO] [X300] Maximum frame size: 1472 bytes.
[INFO] [X300] Radio 1x clock: 200 MHz
[WARNING] [UDP] The recv buffer could not be resized sufficiently.
Target sock buff size: 100000000 bytes.
Actual sock buff size: 50000000 bytes.
See the transport application notes on buffer resizing.
Please run: sudo sysctl -w net.core.rmem_max=100000000
Using the following devices:
---- receiver channel 0 ------------------------------------------------------
Motherboard: X310 (192.168.10.2) | Daughterboard: TwinRX RX0
Subdev: A:0 | Antenna: RX1 | Gain: 50.0 | Rate: 4000000.0
Frequency: 1575420000.330 (+0.000) | Bandwidth: 80000000.0

Launch time: Tue Jul 11 16:25:02.000000 2023 (1689092702.0)
Sample index: 6756370808000000
|ch0|start @ sample 0: 1689092702+0.0 (6756370808000000)
Traceback (most recent call last):
File "/home/avoronov/.local/bin/thor.py", line 1879, in
args.func(args)
File "/home/avoronov/.local/bin/thor.py", line 1873, in _run_thor
thor.run(**runopts)
File "/home/avoronov/.local/bin/thor.py", line 1052, in run
dst = gr_drf.digital_rf_channel_sink(
File "/home/avoronov/.local/lib/python3.8/site-packages/gr_digital_rf/digital_rf_sink.py", line 403, in init
self._create_writer()
File "/home/avoronov/.local/lib/python3.8/site-packages/gr_digital_rf/digital_rf_sink.py", line 413, in _create_writer
self._Writer = DigitalRFWriter(
File "/home/avoronov/.local/lib/python3.8/site-packages/digital_rf/digital_rf_hdf5.py", line 342, in init
raise ValueError(
ValueError: (subdir_cadence_secs*1000 % file_cadence_millisecs) must equal 0

Is there either a way for either drf to record a file of an unlimited length, or to record for a very very large amount of time?

ValueError: (subdir_cadence_secs*1000 % file_cadence_millisecs) must equal 0

This is the key part of the error message, and it's saying that you need to also set subdir_cadence_secs so that an integer number of files will go in each subdirectory. I'll suggest using -n 3600000 instead, since that will work with the default of -N 3600 and you have (3600 * 1000) % 3600000 == 0.

That makes sense. Thanks!