Instrumentation Files

Instrumentation files define the components and instrument responses of instrumentations. They should be created by the technical staff responsable for the instrumentations. Once created, they can be used for many different subnetwork files. The instrumentation structure consist of several levels, most of which point to other files.

Example instrumentation_base files

../../src/obsinfo/_examples/instrumentation_files/instrumentation_bases/EXAMPLE_noconfigs.instrumentation_base.yaml
    equipment:
        model: "My Model"
        type: "Broadband Ocean Bottom Seismometer"
        description: "A really cool BBOBS" 
        manufacturer: "ACME OBSs"
        vendor: "ACME Sales, Ltd"
    channels:
        default:
            datalogger: {base: {$ref: "datalogger_bases/EXAMPLE.datalogger_base.yaml"}}
            preamplifier: {base: {$ref: "preamplifier_bases/EXAMPLE_BBOBS.preamplifier_base.yaml"},
                           configuration: "0.225x gain"}
            sensor: {base: {$ref: "sensor_bases/EXAMPLE_BBSeismometer.sensor_base.yaml"},
                     configuration: "SN1-399, single-sided"}  
        "1":
            orientation: {code: "2", azimuth.deg: {value: 90, uncertainty: 180}}
        "2":
            orientation: {code: "1", azimuth.deg: {value: 0, uncertainty: 180}}
        "3": 
            orientation: {code: "Z", azimuth.deg: {value: 0}, dip.deg: {value: -90}}
            preamplifier: {configuration: "1x gain"}
        "4":
            orientation : {code: "G", azimuth.deg: {value: 0}, dip.deg: {value: 90}}
            replace_preamplifier: {base: {$ref: "preamplifier_bases/EXAMPLE_DPG.preamplifier_base.yaml"}}
            replace_sensor: {base: {$ref: "sensor_bases/EXAMPLE_DPG.sensor_base.yaml"}}         
    

This simple instrumentation_base file shows the basic elements of an instrumentation. The details of its main components: a datalogger, a preamplifier and a sensor, are specified in separate datalogger_base, preamplifier_base and sensor_base files, which makes the instrumentation_base file clearer to read and allows the components to be used in other instrumentations.

Below is an instrumentation_base file which defines several configurations

../../src/obsinfo/_examples/instrumentation_files/instrumentation_bases/EXAMPLE.instrumentation_base.yaml
    equipment:
        model: "My Model"
        type: "Broadband Ocean Bottom Seismometer"
        description: "A really cool BBOBS" 
        manufacturer: "ACME OBSs"
        vendor: "ACME Sales, Ltd"
    channels:
        default:
            datalogger: {base: {$ref: "datalogger_bases/EXAMPLE.datalogger_base.yaml"}}
            preamplifier: {base: {$ref: "preamplifier_bases/EXAMPLE_BBOBS.preamplifier_base.yaml"},
                           configuration: "0.225x gain"}
            sensor: {base: {$ref: "sensor_bases/EXAMPLE_BBSeismometer.sensor_base.yaml"},
                     configuration: "SN1-399, single-sided"}  
        "1":
            orientation: {code: "2", azimuth.deg: {value: 90, uncertainty: 180}}
        "2":
            orientation: {code: "1", azimuth.deg: {value: 0, uncertainty: 180}}
        "3": 
            orientation: {code: "Z", azimuth.deg: {value: 0}, dip.deg: {value: -90}}
            preamplifier: {configuration: "1x gain"}
        "4":
            orientation : {code: "G", azimuth.deg: {value: 0}, dip.deg: {value: 90}}
            replace_preamplifier: {base: {$ref: "preamplifier_bases/EXAMPLE_DPG.preamplifier_base.yaml"}}
            replace_sensor: {base: {$ref: "sensor_bases/EXAMPLE_DPG.sensor_base.yaml"}}         
    configuration_default: "seismometer_sn_1-399_2012+"  
    configurations:
        "seismometer_sn_1-399_2012+":
            channels:
                default: {sensor: {configuration: "SN1-399, single-sided"}}
                "4": {sensor: {configuration: "generic"}}
        "SN01_2012+":
            equipment: {serial_number: '01'}
            channels:
                default: {sensor: {configuration: "Sphere01"}}
                "4": {sensor: {configuration: "generic"}}
        "SN02_2012+":
            equipment: {serial_number: '02'}
            channels:
                default: {sensor: {configuration: "Sphere02"}}
                "4": {sensor: {configuration: "generic"}} 
        "SN03_2012+":
            equipment: {serial_number: '03'}
            channels:
                default: {sensor: {configuration: "Sphere03"}}
                "4": {sensor: {configuration: "generic"}}
        "SN04_2012+":
            equipment: {serial_number: '04'}
            channels:
                default: {sensor: {configuration: "Sphere04"}}
                "4": {sensor: {configuration: "generic"}}
        "SN05_2012+":
            equipment: {serial_number: '05'}
            channels:
                default: {sensor: {configuration: "Sphere05"}}
                "4": {sensor: {configuration: "generic"}}
        "SN06_2012+":
            equipment: {serial_number: '06'}
            channels:
                default: {sensor: {configuration: "Sphere06"}}
                "4": {sensor: {configuration: "generic"}}
        "SN07_2012+":
            equipment: {serial_number: '07'}
            channels:
                default: {sensor: {configuration: "Sphere07"}}
                "4": {sensor: {configuration: "generic"}}
        "SN08_2012+":
            equipment: {serial_number: '08'}
            channels:
                default: {sensor: {configuration: "Sphere08"}}
                "4": {sensor: {configuration: "generic"}}
        "SN09_2012+":
            equipment: {serial_number: '09'}
            channels:
                default: {sensor: {configuration: "Sphere09"}}
                "4": {sensor: {configuration: "generic"}}            
        "SN01_pre2012":
            equipment: {serial_number: '01'}
            channels:
                default: {sensor: {configuration: "Sphere01"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}
        "SN02_pre2012":
            equipment: {serial_number: '02'}
            channels:
                default: {sensor: {configuration: "Sphere02"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}} 
        "SN03_pre2012":
            equipment: {serial_number: '03'}
            channels:
                default: {sensor: {configuration: "Sphere03"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}
        "SN04_pre2012":
            equipment: {serial_number: '04'}
            channels:
                default: {sensor: {configuration: "Sphere04"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}
        "SN05_pre2012":
            equipment: {serial_number: '05'}
            channels:
                default: {sensor: {configuration: "Sphere05"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}
        "SN06_pre2012":
            equipment: {serial_number: '06'}
            channels:
                default: {sensor: {configuration: "Sphere06"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}
        "SN07_pre2012":
            equipment: {serial_number: '07'}
            channels:
                default: {sensor: {configuration: "Sphere07"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}
        "SN08_pre2012":
            equipment: {serial_number: '08'}
            channels:
                default: {sensor: {configuration: "Sphere08"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}
        "SN09_pre2012":
            equipment: {serial_number: '09'}
            channels:
                default: {sensor: {configuration: "Sphere09"}}
                "3": {preamplifier: {configuration: "0.225x gain"}}
                "4": {sensor: {configuration: "generic"}}            
    

The default configuration, seismometer_sn_1-399_2012+, is the most commonly used. The others allow the user to specify all possible configurations, according to the sensor sphere number and the deployment epoch.

Lower-level files

Here are details of the instrument_component files called by the above instrumentation files.

The datalogger_base file and its subfiles

../../src/obsinfo/_examples/instrumentation_files/datalogger_bases/EXAMPLE.datalogger_base.yaml
    equipment:
        model: "EXAMPLE/22"
        type: "delta-sigma A/D converter + digital filter"
        description: "EXAMPLE/22 delta-sigma A/D converter + FIR digital filter"
        manufacturer: "ACME dataloggers"
        vendor: "ACME sales, Ltd."
    stages:
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR1.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
        - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR3.stage_base.yaml"}}
    sample_rate: 125
    correction: 0.232
    configuration_default: "125sps"
    configurations:
        "62.5sps":
            configuration_description: "62.5 sps"
            sample_rate: 62.5
            correction: 0.464
            stages:
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR1.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR3.stage_base.yaml"}}
        "125sps":
            configuration_description: "125 sps"
            sample_rate: 125
            correction: 0.232
            stages:
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR1.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR3.stage_base.yaml"}}
        "250sps":
            configuration_description: "250 sps"
            sample_rate: 250
            correction: 0.116
            stages:
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR1.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR3.stage_base.yaml"}}
        "500sps":
            configuration_description: "500 sps"
            sample_rate: 500
            correction: 0.058
            stages:
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR1.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR3.stage_base.yaml"}}
        "1000sps":
            configuration_description: "1000 sps"
            sample_rate: 1000
            correction: 0.029
            stages:
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR1.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR2.stage_base.yaml"}}
                - {base: {$ref: "datalogger_bases/stage_bases/EXAMPLE_FIR3.stage_base.yaml"}}
                
notes: 
    - "Delay correction is hard-coded to 29 samples in LCHEAPO software"
    

There are 49 stage declarations, but only 3 unique stage_bases, so it is more efficient to declare them in separate files:

../../src/obsinfo/_examples/instrumentation_files/datalogger_bases/stage_bases/EXAMPLE_FIR1.stage_base.yaml
    name: "EXAMPLE FIR1"
    description : "DIGITIZER - EXAMPLE Delta-Sigma A/D converter" #  optional
    input_units : { name : "V", description: "Volts"}
    output_units : { name : "counts", description: "Digital Counts"}
    input_sample_rate : 32000
    decimation_factor: 1
    gain : 
        frequency: 0
        value: 1165084 #  counts/V
    filter:
        type : "ADCONVERSION"
        v_plus: 4.5
        v_minus: -4.5
        counts_dtype: 'int24'
        counts_plus: '0x4FFFFF'
        counts_minus: '0xB00000'
notes:
    - "First stage of datalogger: convert do digital signal"
    

The above top-level FIR is an ADConversion filter, which is declared within the stage_base file.

    name: "EXAMPLE FIR2"
    description : "DECIMATION - CS5322 FIR2" 
    decimation_factor : 2
    gain :         {value: 1, frequency: 0}
    input_units :  { name : "counts", description: "Digital Counts"}
    output_units : { name : "counts", description: "Digital Counts"}
    filter: 
        type: "FIR"
        symmetry: "NONE"
        delay.samples: 6
        coefficients:
            - 2.44141E-4
            - 0.00292969
            - 0.0161133
            - 0.0537109
            - 0.12085
            - 0.193359
            - 0.225586
            - 0.193359
            - 0.12085
            - 0.0537109
            - 0.0161133
            - 0.00292969
            - 2.44141E-4
notes:
    - "filter stages of datalogger: decimate digital signal by 2"         
   

The above second-level FIR is repeated across multiple stages during data decimation. Its filter is has relatively few coefficients, so it is declared within the stage_base file.`

../../src/obsinfo/_examples/instrumentation_files/datalogger_bases/stage_bases/EXAMPLE_FIR3.stage_base.yaml
    name: "EXAMPLE FIR3"
    decimation_factor : 2
    gain :         {value: 1, frequency: 0}
    input_units :  { name : "counts", description: "Digital Counts"}
    output_units : { name : "counts", description: "Digital Counts"}
    description : "DECIMATION - CS5322 FIR3 (linear phase)" 
    filter: 
        $ref: "datalogger_bases/stage_bases/filters/EXAMPLE_FIR3.filter.yaml"
    
notes: ["From CS5322_Filter.pdf"]

The above third-level FIR has a much longer FIR filter, which is therefore declared in a separate file that we will not show here.

The preamplifier_base file and its subfiles

    equipment:
        model: "BBOBS-GAIN"
        type: "Analog gain card"
        description: "Example BBOBS gain card"
        manufacturer: "ACME BBOBSs"
        vendor: "ACME Sales Ltd."
    stages:
        - {base: {$ref: "preamplifier_bases/stage_bases/EXAMPLE_BBOBS.stage_base.yaml"}}
    configuration_default: "1x gain"
    configurations:
        "0.225x gain":
            stage_modifications:
                '*': {configuration: "0.225x"}
        "1x gain":
            stage_modifications:
                '*': {configuration: "1.0x"}

This above preamplifier has one stage, which is declared in a separate file, below:

../../src/obsinfo/_examples/instrumentation_files/preamplifier_bases/stage_bases/EXAMPLE_BBOBS.stage_base.yaml
    description : "BBOBS PREAMPLIFIER"
    input_units : {name: "V", description: "VOLTS"}
    output_units : {name: "V", description: "VOLTS"}
    gain : { value : 1.0, frequency: 0}
    filter :
        type : "ANALOG"
    configuration_default: "1.0x"
    configurations:
        "1.0x":
            gain: {value: 1.0, frequency: 0}
        "0.225x":
            gain: {value: 0.225, frequency: 0}
    

The stage above has no filtering, just a gain. We could have declared it directly in the preamplifier_base file.

The seismometer sensor_base file and its subfiles

../../src/obsinfo/_examples/instrumentation_files/sensor_bases/EXAMPLE_BBSeismometer.sensor_base.yaml
    equipment:
        model: "BBOBS-SX"
        type: "Broadband seismometer"
        description: "Really great broadband seismometer"
        manufacturer: "ACME seismometry Gbmh"
        vendor: "ACME Sales, Ltd."
    seed_codes:
        band: "broadband"
        instrument: "H" 
    configuration_default: "SN1-399, single-sided"
    stages:
        - {base: {$ref: "sensor_bases/stage_bases/EXAMPLE_BBSeismometer.stage_base.yaml"}}
    configurations:
        "Sphere01":
            equipment: {serial_number: "133"}
            stage_modifications:
                '*': {configuration: "SN1-399, single-sided"}
        "Sphere02":
            equipment: {serial_number: "132"}
            stage_modifications:
                '*': {configuration: "SN1-399, single-sided"}
        "Sphere03":
            equipment: {serial_number: "134"}
            stage_modifications:
                '*': {configuration: "SN1-399, single-sided"}
        "Sphere04":
            equipment: {serial_number: "138"}
            stage_modifications:
                '*': {configuration: "SN1-399, single-sided"}
        "Sphere05":
            equipment: {serial_number: "137"}
            stage_modifications:
                '*': {configuration: "SN1-399, single-sided"}
        "Sphere06":
            equipment: {serial_number: "830"}
            stage_modifications:
                '*': {configuration: "SN400+, single-sided"}
        "Sphere07":
            equipment: {serial_number: "136"}
            stage_modifications:
                '*': {configuration: "SN1-399, single-sided"}
        "Sphere08":
            equipment: {serial_number: "829"}
            stage_modifications:
                '*': {configuration: "SN400+, single-sided"}
        "Sphere09":
            equipment: {serial_number: "826"}
            stage_modifications:
                '*': {configuration: "SN400+, single-sided"}
        "SN1-399, single-sided" :
            configuration_description: "serial numbers 1-399, single-sided connection"
            stage_modifications:
                '*': {configuration: "SN1-399, single-sided"}
        "SN400plus, single-sided" :
            configuration_description: "serial numbers 400+, single-sided connection"
            stage_modifications:
                '*': {configuration: "SN400+, single-sided"}
        "SN1-399, differential" :
            configuration_description: "serial numbers 1-399, single-sided connection"
            stage_modifications:
                '*': {configuration: "SN1-399, differential"}
        "SN400plus, differential" :
            configuration_description: "serial numbers 400+, single-sided connection"
            stage_modifications:
                '*': {configuration: "SN400+, differential"}
    
    

The above sensor has a single stage, which is read from a separate file. It has many configurations, allowing the user to obtain the correct sensor serial number and response by specifying the deployment sphere number.

../../src/obsinfo/_examples/instrumentation_files/sensor_bases/stage_bases/EXAMPLE_BBSeismometer.stage_base.yaml
    description : "SENSOR - Broadband Seismometer"
    input_units :  {name: "m/s", description: "VELOCITY"}
    output_units : {name: "V", description: "VOLTS"}
    gain : 
        value: 598.45
        frequency: 1.
    filter:
        $ref: "sensor_bases/stage_bases/filters/EXAMPLE_BBSeismometer_SN1-399.filter.yaml"
    configuration_default: "SN1-399, single-sided"
    configurations:
        "SN1-399, single-sided":
            filter:
                $ref: "sensor_bases/stage_bases/filters/EXAMPLE_BBSeismometer_SN1-399.filter.yaml"
            gain: {value: 598.45, frequency: 1.}
        "SN400+, single-sided":
            gain: {value: 594.5, frequency: 1.}
            filter:
                $ref: "sensor_bases/stage_bases/filters/EXAMPLE_BBSeismometer_SN400-.filter.yaml"
        "SN1-399, differential":
            filter:
                $ref: "sensor_bases/stage_bases/filters/EXAMPLE_BBSeismometer_SN1-399.filter.yaml"
            gain: {value: 1196.9, frequency: 1.}
        "SN400+, differential":
            gain: {value: 1189., frequency: 1.}
            filter:
                $ref: "sensor_bases/stage_bases/filters/EXAMPLE_BBSeismometer_SN400-.filter.yaml"
    

This response stage has two possible filters, depending on the serial number, and four possible gains, depending on the serial number and how the sensor is connected to the datalogger (single-sided or differential)

Below we show the filters for T240 serial numbers 1-399 and for serial numbers 400+. The coefficients are slightly different

../../src/obsinfo/_examples/instrumentation_files/sensor_bases/stage_bases/filters/EXAMPLE_BBSeismometer_SN1-399.filter.yaml
    type: "PolesZeros"
    transfer_function_type: "LAPLACE (RADIANS/SECOND)"
    zeros :
        - '0.0 + 0.0j'
        - '0.0 + 0.0j'
        - '-72.5 + 0.0j'
        - '-163.3 + 0.0j'
        - '-251 + 0.0j'
        - '-3270.0 + 0.0j'
    poles :
        - '-0.018134 + 0.018034j'
        - '-0.018134 - 0.018034j'
        - '-84.4 + 0.0j'
        - '-180.2 + 224.4j'
        - '-180.2 - 224.4j'
        - '-725 + 0j'
        - '-1060 - 0j'
        - '-4300 - 0j'
        - '-5800 - 0j'
        - '-4200 + 4600j'
        - '-4200 - 4600j'
../../src/obsinfo/_examples/instrumentation_files/sensor_bases/stage_bases/filters/EXAMPLE_BBSeismometer_SN400-.filter.yaml
    type: "PolesZeros"
    transfer_function_type: "LAPLACE (RADIANS/SECOND)"
    zeros :
        - '0.0 + 0.0j'
        - '0.0 + 0.0j'
        - '-72.5 + 0.0j'
        - '-159.3 +  0.0j'
        - '-251 + 0.0j'
        - '-3270.0 + 0.0j'
    poles :
        - '-0.017699 + 0.017604j'
        - '-0.017699 - 0.017604j'
        - '-85.3   +  0.0j'
        - '-155.4  + 210.8j'
        - '-155.4  - 210.8j'
        - '-713    +   0j'
        - '-1140   -   0j'
        - '-4300   -   0j'
        - '-5800   -   0j'
        - '-4300   + 4400j'
        - '-4300   - 4400j'
    delay.seconds: 0

The pressure sensor_base file and its subfiles

../../src/obsinfo/_examples/instrumentation_files/sensor_bases/EXAMPLE_DPG.sensor_base.yaml
    equipment:
        model: "DPG"
        type: "Differential Pressure Gauge"
        description: "Differential Pressure Gauge"
        manufacturer: "various"
        vendor: "various"
    seed_codes:
        band: "broadband"
        instrument: "D"
    stages:
        - {base: {$ref: "sensor_bases/stage_bases/EXAMPLE_DPG.stage_base.yaml"}}
    configuration_default: "generic"
    configurations:
        "generic":
            equipment: {manufacturer: "unknown"}
        "5004": 
            equipment: {manufacturer: "ACME", serial_number: "5004"}
            stage_modifications:
                "1": {configuration: "SN5004"}
        "5018":
            equipment: {manufacturer: "Zoton", serial_number: "5018"}
            stage_modifications:
                "1": {configuration: "SN5018"}
        "5027":
            equipment: {manufacturer: "ACME", serial_number: "5027"}
            stage_modifications:
                "1": {configuration: "SN5027"}
                
notes: 
    - "dip value assumes pressure gauge positive correponds to increasing pressure in upward compressional wave (seafloor up => pressure up)"

The sensor has a single stage, which is read from a separate file. The sensor_base file specifies several configurations, allowing the right sensor serial number and response to be put into the StationXML file simply by specifying the appropriate configuration.

../../src/obsinfo/_examples/instrumentation_files/sensor_bases/stage_bases/EXAMPLE_DPG.stage_base.yaml
    description : "SENSOR - GENERIC DPG" # optionel
    input_units :  {name: "Pa", description: "PRESSURE"}
    output_units : {name: "V", description: "VOLTS"}
    gain : {value: 4.25e-4, frequency: 1.}
    filter:
        type: "PolesZeros"
        transfer_function_type: "LAPLACE (RADIANS/SECOND)"
        zeros : 
           - '0.0 + 0.0j'
           - '0.0 + 0.0j'
        poles :
           - '-0.0182 + 0.000j'
           - '-0.0500 + 0.000j'
    configuration_default: "SN5027"
    configurations:
        "SN5027":
            configuration_description: "S/N 5027"
        "SN5004":
            configuration_description: "S/N 5004, based on 2007/6 calibration w/BB01 logger"
            calibration_dates: ["2007-06-01"]
            gain: {value: 4.25e-4, frequency: 1.}
            filter:
                type: "PolesZeros"
                transfer_function_type: "LAPLACE (RADIANS/SECOND)"
                zeros : ['0 + 0j']
                poles : ['-0.0182 + 0.000j']
        "SN5018":
            configuration_description: "S/N 5018, based on 2007/6 calibration w/BB02 logger"
            calibration_dates: ["2007-06-01"]
            gain: {value: 4.38e-4, frequency: 1.}
            filter:
                type: "PolesZeros"
                transfer_function_type: "LAPLACE (RADIANS/SECOND)"
                zeros : ['0 + 0j']
                poles : ['-0.0138 + 0.000j']