Comparison with AROL/YASMINE
The goals and technologies of obsinfo are similar to those found in
YASMINE and the format of the Atomic Response Object Library
(AROL) files used by YASMINE is the very similar to that of the Datalogger,
Sensor and Preamplifier files (and underlying filter
files) used by obsinfo.
The major differences are:
- obsinfo is a completely file-based solution, designed for processing large
sets of similar instruments. Yasmine is a GUI (YASMINE_EDITOR) or a command-line interface (YASMINE_CLI) to modify existing StationXML files. obsinfo is thus best compared with a combination of YASMINE_EDITOR (to create a base StationXML file for a given configuration), followed by YASMINE_CLI (to enter station-specific modifications to this configuration)
obsinfo holds its configuration information inside the instrument component (DataLogger, PreAmplifier, Sensor) files, whereas AROL has a file for each configuration and uses an accompanying configuration file to choose between them
obsinfo adds processing and ocean-bottom seismology specific fields, to facilitate the notation and correction for clock problems such as drift and leap-seconds.
obsinfo uses
instrumentation`
files to represent specific OBSsobsinfo uses
network
files to control all this
The YASMINE Commmand-line interface (_YASMINE_CLI)
Nomenclature
We use the term “InstrumentComponent” for Dataloggers, Preamplifiers and Sensors.
AROL verus obsinfo configuration methods
Let’s compare the AROL implementation of a Nanometrics Taurus datalogger with that of obsinfo. My AROL example comes from gitlab/RESIF/AROL/sources/Dataloggers.
The AROL configuration file is called nanometrics.yaml and includes Centaur, Taurus and .. dataloggers. For brevity, I only include the Taurus loggers:
mandatory_filters: [digitizer_manufacturer, digitizer_model, sampling_rate]
filters:
- name: Digitizer manufacturer
code: digitizer_manufacturer
help: Select the manufacturer of your digitizer
- name: Digitizer model
code: digitizer_model
help: Select the model of your digitizer
- name: Version
code: digitizer_version
help: Select the version of digitizer you have
- name: DC removal on/off
code: dc_removal
help: Is DC removal filter activated or not
- name: Samples per seconds
code: sampling_rate
help: Select the sampling rate for this channel
- name: Frontend gain
code: preamplifier_gain
help: Select the preamplifier gain (frontend)
responses:
- path: nanometrics/TAURUS-G-1.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
preamplifier_gain: Gain 1 (1x - 0dB - 16Vpp)
- path: nanometrics/TAURUS-G-04.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
preamplifier_gain: Gain 0.4 (0.4x - 0dB - 40Vpp)
- path: nanometrics/TAURUS-G-2.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
preamplifier_gain: Gain 2 (1x - 0dB - 8Vpp)
- path: nanometrics/TAURUS.10.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
sampling_rate: 10 sps
- path: nanometrics/TAURUS.40.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
sampling_rate: 40 sps
- path: nanometrics/TAURUS.50.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
sampling_rate: 50 sps
- path: nanometrics/TAURUS.100.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
sampling_rate: 100 sps
- path: nanometrics/TAURUS.200.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
sampling_rate: 200 sps
- path: nanometrics/TAURUS.250.response.yaml
applicable_filters:
digitizer_manufacturer: Nanometrics
digitizer_model: Taurus
sampling_rate: 250 sps
and a few examples of the AROL response files are:
nanometrics/TAURUS-G-1.response.yaml
---
format_version: '0.106'
response:
decimation_info:
delay_correction: true
stages:
- input_units:
name: V
description: Volts
output_units:
name: V
description: Volts
gain:
value: 1.0
frequency: 0.0
filter:
type: ANALOG
name: ' AMPLIFIER_FILTER'
delay: 0.0
extras:
DBIRD_response_type: THEORETICAL
Number_of_zeroes: '0'
Number_of_poles: '0'
notes:
- '# Diviseur par 1 en preampli'
- 'Response_type : THEORETICAL # optionel'
- 'Input_unit : V # optionel'
- 'Output_unit : V # optionel'
- 'Transfer_normalization_frequency : 0 # optionel'
nanometrics/TAURUS-G-2.response.yaml
---
format_version: '0.106'
response:
decimation_info:
delay_correction: true
stages:
- input_units:
name: V
description: Volts
output_units:
name: V
description: Volts
gain:
value: 2.0
frequency: 0.0
filter:
type: ANALOG
name: ' AMPLIFIER_FILTER'
delay: 0.0
extras:
DBIRD_response_type: THEORETICAL
Number_of_zeroes: '0'
Number_of_poles: '0'
notes:
- '# Diviseur par 1 en preampli'
- 'Response_type : THEORETICAL # optionel'
- 'Input_unit : V # optionel'
- 'Output_unit : V # optionel'
- 'Transfer_normalization_frequency : 0 # optionel'
nanometrics/TAURUS-G-04.response.yaml
---
format_version: '0.106'
response:
decimation_info:
delay_correction: true
stages:
- input_units:
name: V
description: Volts
output_units:
name: V
description: Volts
gain:
value: 0.4
frequency: 0.0
filter:
type: ANALOG
name: ' AMPLIFIER_FILTER'
delay: 0.0
extras:
DBIRD_response_type: THEORETICAL
Number_of_zeroes: '0'
Number_of_poles: '0'
notes:
- '# Diviseur par 1 en preampli'
- 'Response_type : THEORETICAL # optionel'
- 'Input_unit : V # optionel'
- 'Output_unit : V # optionel'
- 'Transfer_normalization_frequency : 0 # optionel'
nanometrics/TAURUS.100.response.yaml
---
format_version: '0.106'
response:
decimation_info:
delay_correction: true
stages:
- input_units: &id001
name: V
description: Volts
output_units: &id002
name: counts
description: Digital Counts
gain:
value: 1000012.875
frequency: 0.0
filter:
type: AD_CONVERSION
input_full_scale: "16.777"
output_full_scale: "16777216.000000"
name: ' DIGITIZER'
input_sample_rate: 0.0
output_sample_rate: 30000.000300000003
delay: 0.0
- input_units: *id002
output_units: *id002
filter:
$ref: include/tau_FirSym2_s1_100.filter.yaml#filter
name: ' DECIMATION'
input_sample_rate: 30000.000300000003
output_sample_rate: 2000.0
delay: 0.0
decimation_factor: 15
- input_units: *id002
output_units: *id002
filter:
$ref: include/tau_FirSym2_s2_100.filter.yaml#filter
name: ' DECIMATION'
input_sample_rate: 2000.0
output_sample_rate: 200.0
delay: 0.0
decimation_factor: 10
- input_units: *id002
output_units: *id002
filter:
$ref: include/tau_FirSym2_s3_100.filter.yaml#filter
name: ' DECIMATION'
input_sample_rate: 200.0
output_sample_rate: 100.0
delay: 0.0
decimation_factor: 2
extras:
DBIRD_response_type: "THEORETICAL"
Output_sampling_interval: '1.0000000e-02'
notes:
- '# Generated by G. Cougoulat LGIT '
- '# On: 10/25/2010'
- "Response_name : DIGITIZER# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 0# optionnel "
- "Output_sampling_interval : 3.3333333e-05# (= 5.10^-4 / 15) "
- "Input_full_scale : 16.777# 16.777 Vpp , gain = 1"
- "Output_full_scale : 16777216.000000# 2^24 "
- "Sensitivity : 1000012.875# 1\xB5v"
- '# stage 1 decimation par 15'
- "Response_name : DECIMATION# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 3.3333333e-05# 3.0000000e-04# ~ 30000\
\ / 15 = "
- "Output_sampling_interval : 5.0000000e-04# 2.0000000e-03# optionnel"
- '# stage 2 decimation par 10'
- "Response_name : DECIMATION# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 5.0000000e-04# 2.0000000e-03"
- "Output_sampling_interval : 5.0000000e-03# 2.0000000e-02# optionnel"
- '# stage 3 decimation par 2'
- "Response_name : DECIMATION# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 5.0000000e-03#2.0000000e-02"
- "Output_sampling_interval : 1.0000000e-02# optionnel"
nanometrics/TAURUS.200.response.yaml
---
format_version: '0.106'
response:
decimation_info:
delay_correction: true
stages:
- input_units: &id001
name: V
description: Volts
output_units: &id002
name: counts
description: Digital Counts
gain:
value: 1048576.0
frequency: 0.0
filter:
type: AD_CONVERSION
input_full_scale: "16.0"
output_full_scale: "16777216.000000"
name: ' DIGITIZER'
input_sample_rate: 0.0
output_sample_rate: 30000.000300000003
delay: 0.0
- input_units: *id002
output_units: *id002
filter:
$ref: include/tau_FirSym2_s1_200.filter.yaml#filter
name: ' DECIMATION'
input_sample_rate: 30000.000300000003
output_sample_rate: 2000.0
delay: 0.0
decimation_factor: 15
- input_units: *id002
output_units: *id002
filter:
$ref: include/tau_FirSym2_s2_200.filter.yaml#filter
name: ' DECIMATION'
input_sample_rate: 2000.0
output_sample_rate: 400.0
delay: 0.0
decimation_factor: 5
- input_units: *id002
output_units: *id002
filter:
$ref: include/tau_FirSym2_s3_200.filter.yaml#filter
name: ' DECIMATION'
input_sample_rate: 400.0
output_sample_rate: 200.0
delay: 0.0
decimation_factor: 2
extras:
DBIRD_response_type: "THEORETICAL"
Output_sampling_interval: '5.0000000e-03'
notes:
- '# Generated by G. Cougoulat LGIT '
- '# On: 10/25/2010'
- "Response_name : DIGITIZER# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 0# optionnel "
- "Output_sampling_interval : 3.3333333e-05# (= 5.10^-4 / 15) "
- "Input_full_scale : 16.0# 16 Vpp , gain = 1"
- "Output_full_scale : 16777216.000000# 2^24 "
- "Sensitivity : 1048576.0# 1\xB5v"
- '# stage 1 decimation par 15'
- "Response_name : DECIMATION# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 3.3333333e-05# 3.0000000e-04# ~ 30000\
\ / 15 = "
- "Output_sampling_interval : 5.0000000e-04# 2.0000000e-03# optionnel"
- '# stage 2 decimation par 5'
- "Response_name : DECIMATION# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 5.0000000e-04# 2.0000000e-03"
- "Output_sampling_interval : 2.5000000e-03# 2.0000000e-02# optionnel"
- '# stage 3 decimation par 2'
- "Response_name : DECIMATION# optionnel"
- "Response_type : THEORETICAL# optionnel"
- "Input_sampling_interval : 2.5000000e-03#2.0000000e-02"
- "Output_sampling_interval : 5.0000000e-03# optionnel"
In obsinfo
, we would have 2 choices for implementing the two choices
here: sampling rate and gain:
1) put the gain into a “preamplifier” file and the “sampling rate” into a
datalogger
file
put both in a
datalogger
file
The second is more complicated but also easier to directly translate from AROL and expandable to other configuration dimensions such as the choice between minimum phase and linear phase filtering, or the implementation of a DC removal filter. We show this option below.
First, we would break the different stages
into their own files:
tau_DIGITIZER.100.stage.yaml .. code-block:: yaml
— format_version: ‘0.110’ stage:
- input_units: &id001
name: V description: Volts
- output_units: &id002
name: counts description: Digital Counts
- gain:
value: 1000012.875 frequency: 0.0
- filter:
type: AD_CONVERSION input_full_scale: “16.777” output_full_scale: “16777216.000000”
name: ‘ DIGITIZER’ input_sample_rate: 0.0 output_sample_rate: 30000.000300000003 delay: 0.0
tau_DIGITIZER.200.stage.yaml .. code-block:: yaml
— format_version: ‘0.110’ stage:
- input_units: &id001
name: V description: Volts
- output_units: &id002
name: counts description: Digital Counts
- gain:
value: 1000012.875 frequency: 0.0
- filter:
type: AD_CONVERSION input_full_scale: “16.777” output_full_scale: “16777216.000000”
name: ‘ DIGITIZER’ input_sample_rate: 0.0 output_sample_rate: 30000.000300000003 delay: 0.0
tau_FirSym2_s1_100.stage.yaml .. code-block:: yaml
tau_FirSym2_s2_100.stage.yaml .. code-block:: yaml
tau_FirSym2_s3_100.stage.yaml .. code-block:: yaml
Notice that we lost the sampling rates and had to specify the units in each file rather than using YAML anchors. Here is the modified 100 sps datalogger file:
---
format_version: '0.110'
datalogger:
sample_rate: 100
delay_correction: true
response_stages:
- {$ref: 'tau_DIGITIZER.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3.stage.yaml#stage'}
This file is ALMOST AROL-compatible, except that
the output
sample_rate
is specifiedresponse is renamed
datalogger
and can includeequipment
(where is this in AROL?)stages is renamed response_stages (change in v0.111?).
delay_correction is not under decimation_info (change in v0.111?)
Many of these differences come from our “flattening” of the StationXML Response, should we move back for compatibility?
We can add one of the gains as well, here before the digitizer:
---
format_version: '0.110'
datalogger:
sample_rate: 100
delay_correction: true
response_stages:
- {$ref: "TAURUS-G-1.response.yaml#response/stage"}
- {$ref: 'tau_DIGITIZER.stage.yaml#stage'}
- {$ref: 'tau_DIGITIZER.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3.stage.yaml#stage'}
Now, putting configurations inside the Datalogger
file we have:
---
format_version: '0.110'
datalogger:
sample_rate: 100
delay_correction: true
response_stages:
- {$ref: "TAURUS-G-1.response.yaml#response/stage"}
- {$ref: 'tau_DIGITIZER.stage.yaml#stage'}
- {$ref: 'tau_DIGITIZER.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3.stage.yaml#stage'}
configuration_default: '100sps_G1'
configuration_definitions:
"100sps_G1":
configuration_description: "100 sps, gain=1"
"100sps_G2":
configuration_description: "100 sps, gain=2"
response_stages:
- {$ref: "TAURUS-G-2.response.yaml#response/stage"}
- {$ref: 'tau_DIGITIZER.100.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1_100.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2_100.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3_100.stage.yaml#stage'}
"100sps_G04":
configuration_description: "100 sps, gain=0.4"
response_stages:
- {$ref: "TAURUS-G-04.response.yaml#response/stage"}
- {$ref: 'tau_DIGITIZER.100.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1_100.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2_100.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3_100.stage.yaml#stage'}
"200sps_G1":
sample_rate: 200
configuration_description: "200 sps, gain=1"
response_stages:
- {$ref: "TAURUS-G-1.response.yaml#response/stage"}
- {$ref: 'tau_DIGITIZER.200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1_200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2_200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3_200.stage.yaml#stage'}
"200sps_G2":
sample_rate: 200
configuration_description: "200 sps, gain=2"
response_stages:
- {$ref: "TAURUS-G-2.response.yaml#response/stage"}
- {$ref: 'tau_DIGITIZER.200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1_200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2_200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3_200.stage.yaml#stage'}
"200sps_G04":
sample_rate: 200
configuration_description: "200 sps, gain=0.4"
response_stages:
- {$ref: "TAURUS-G-04.response.yaml#response/stage"}
- {$ref: 'tau_DIGITIZER.200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s1_200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s2_200.stage.yaml#stage'}
- {$ref: 'tau_FirSym2_s3_200.stage.yaml#stage'}
extras:
DBIRD_response_type: "THEORETICAL"
Output_sampling_interval: '1.0000000e-02'
This is not the best example, as the Taurus appears to use different FIRs for each sampling rate: in many cases we can further reduce repetion by giving the same FIRs for different sampling rates, simply adding FIRs to account for the different sampling rates (e.g. CS5321 converters) or having a different sampling rate for the first stage (e.g. AD128* converters). One of the advantages is that we only specify a given FIR (or IIR) sequence once in the hierarchy
Converting obsinfo files to AROL
This should be fairly straightforward via a program that “explodes” an InstrumentCompoennt file into individual files and an AROL-style configuration file.
Converting AROL files to obsinfo
It may be possible to write a routine that combines a given set of files into an obsinfo file with different configurations, although there would be much repetition in this file.
Directly using AROL files in obsinfo
For now, this is not directly possible because of the lack of configuration information in the AROL InstrumentComponent files. See below for converting AROL files to obsinfo
Another, more complicated option would be to allow obsinfo to read AROL-style
configuration files ($arol
operator instead of $ref
?), but the top-level
configuration would have to allow several fields for the configuration