Postprocessing Modules

AL52CO

p_al52co.py

Warning

This module depreciated for flights after 2021-01-12

Process CO concentration from the AL5002 instrument. The instrument provides counts, concentration, sensitivity, and zero. However, the sensitivity and zero step change after calibrations, which propogate through to the CO concentration provided by the instrument. To avoid post-calibration step changes, we assume that the sensitivity and zero drift linearly between calibrations, and interpolate across the step changes to produce smoother sensitivity and zero-offset curves. The CO concentration is then given by

\[\text{CO} = \frac{c - z_i}{S_i},\]

where \(c\) is the count reported by ther instrument, \(z_i\) is the linearly interpolated zero and \(S_i\) is the linearly interpolated sensitivity.

After a calibration, data continue to be flagged for 5 seconds, to allow for calibration gasses to be flushed from the system. Where available, the state of the V1 valve on the Fast Greenhouse Gas Analyser (FGGA) is used to identify and flag span calibrations.

Outputs

  • CO_AERO
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: CO_AERO_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Aero-Laser GmbH

    • instrument_model: AL5002

    • long_name: Mole fraction of Carbon Monoxide in air from the AERO AL5002 instrument

    • standard_name: mole_fraction_of_carbon_monoxide_in_air

    • units: ppb

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground, as indicated by WOW_IND.

  • co_out_of_range - The derived CO concentration is considered out of valid range.

  • in_calibration - The instrument is currently, or has recently been, in calibration. Data should be disregarded.

  • no_calibration - No calibration has yet been performed. Data should be disregarded.

  • counts_zero - The instrument is reporting zero counts. This is most likely erroneous.

AL55CO

p_al55co.py

Provides Carbon Monoxide concentration from the AL5005 instrument.

The module can be run in two modes, depending on the value of the AL55CO_USE_CALS constant.

If AL55CO_USE_CALS is False, the module simply passes through the AL55CO_conc variable as the output CO_AERO, with appropriate flagging and metadata. If an uncertainty is provided in the flight constants as AL55CO_CU, this is also passed through as the CO_AERO_CU variable.

If AL55CO_USE_CALS is True, the module applies in-flight calibrations to derive the CO concentration. Two-point calibrations are performed using the high and low concentration cylinder measurements, and the sensitivity and zero are interpolated to provide a final concentration, given by

\[\left[\text{CO}\right] = \frac{\text{CO}_{|\text{counts}} - Z}{S},\]

where \(\text{CO}_{|\text{counts}}\) are the counts reported by the instrument, \(Z\) is the interpolated zero, and \(S\) is the interpolated sensitivity.

An uncertainty estimate, CO_AERO_CU, is calculated as the standard deviation of the instrument during target measurements, summed in quadrature with the uncertainties of the target cylinder concentration.

Any bias against the target cylinder concentration is calculated and corrected for.

The following constants may be given:
  • AL55CO_USE_CALS (required) = true/false. Whether to use in-flight calibrations (true) or rely on the laboratory calibration (false)

  • AL55CO_CU The (combined [k=1]) uncertainty (ppb) to use when AL55CO_USE_CALS is False

  • AL55CO_MFM_MIN (optional, default=1.2) The minimum flow rate (V), below which data are flagged

  • AL55CO_HI_MR (required if AL55CO_USE_CALS is True) The CO mixing ratio (ppb), high cylinder

  • AL55CO_LO_MR (required if AL55CO_USE_CALS is True) The CO mixing ratio (ppb), low cylinder

  • AL55CO_TAR_MR (required if AL55CO_USE_CALS is True) The CO mixing ratio (ppb), target cylinder

  • AL55CO_HI_EU (required if AL55CO_USE_CALS is True) The expanded [k=2] uncertainty (ppb), high cylinder

  • AL55CO_LO_EU (required if AL55CO_USE_CALS is True) The expanded [k=2] uncertainty (ppb), low cylinder

  • AL55CO_TAR_EU (required if AL55CO_USE_CALS is True) The expanded [k=2] uncertainty (ppb), target cylinder

  • AL55CO_HI_SN (required if AL55CO_USE_CALS is True) The serial number of the high cylinder

  • AL55CO_LO_SN (required if AL55CO_USE_CALS is True) The serial number of the low cylinder

  • AL55CO_TAR_SN``(required if ``AL55CO_USE_CALS is True) The serial number of the target cylinder

  • AL55CO_WMO_SCALE (required) The WMO scale in use

  • AL55CO_CALINFO_URL (optional) The DOI for calibration information

  • AL55CO_INSTRINFO_URL (optional) The URL for instrument information

Outputs

  • CO_AERO
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: CO_AERO_FLAG

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_description: None

    • instrument_manufacturer: Aero-Laser GmbH

    • instrument_model: AL5005

    • instrument_serial_number: <str: derived_from_file optional>

    • long_name: Carbon monoxide concentration measured by the AL5005 instrument

    • standard_name: mole_fraction_of_carbon_monoxide_in_air

    • units: ppb

  • CO_AERO_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: CO_AERO_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 1

    • long_name: Combined uncertainty estimate for CO_AERO

    • units: ppb

  • AL55CO_interpolated_sens
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Interpolated sensitivity from AL55CO in-flight calibrations

    • units: Hz ppb-1

  • AL55CO_interpolated_zero
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Interpolated zero from AL55CO in-flight calibrations

    • units: Hz

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is, or very recently was, on the ground.

  • in_calibration - The instrument is in, or has recently been in, a calibration mode.

  • flow_below_min - The instrument flow is below the valid minimum.

AirSpeed

p_airspeed.py

Calculates aircraft indicated and true air speeds.

Indicated airspeed, IAS (note that we refer to this as indicated airspeed, but in aviation terms it is more accurately described as calibrated or computed airspeed), is read from the air data computer over the ARINC-429 bus. These data are stored as knots * 32, so the indicated airspeed is given as

\[\text{IAS} = \text{IAS}_{\text{ARINC}} \times \frac{0.514444}{32},\]

where \(\text{IAS}_{\text{ARINC}}\) is the value recorded from the ARINC bus. The conversion from knots to meters per second is done using the function knots_to_ms from ppodd.utils.conversions.

True airspeed is given as

\[\text{TAS} = T_c M a\]

where \(T_c\) is a TAS correction term, defined in the flight constants, \(M\) is the Mach number, and \(a\) is the local speed of sound.

See also:

Outputs

  • IAS_RVSM
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IAS_RVSM_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Computed air speed from the aircraft RVSM (air data) system

    • units: m s-1

  • TAS_RVSM
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAS_RVSM_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: True air speed from the aircraft RVSM (air data) system and deiced temperature

    • standard_name: platform_speed_wrt_air

    • units: m s-1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable. No flagging information provided.

BBRFlux

p_bbr_flux.py

Caluclates the corrected fluxes from the upper and lower clear dome and red dome pyranometers.

Note

Prior to software version 24.3.0, the BBRs were incorrectly labelled as manufactured by Kipp & Zonen. This has been corrected to The Eppley Laboratory inc. from version 24.3.0 onwards.

The thermistors in the pyranometers have a characteristic non-linear temperature dependence due to the manufacturing process. If not corrected for, this can lead to errors in temperature of up to 1 \(^\circ\text{C}\). A quintic equation has been fitted to the manufacturer provided corrections for a range of temperatures, providing a correction between \(-50 ^\circ\) C and \(40 ^\circ\) C to within \(\pm0.07\) \(^\circ\) C.

\[T_c = T + \left(\alpha_0 + T\left(\alpha_1 + T\left(\alpha_2 + T\left(\alpha_3 + T\left(\alpha_4 + T\alpha_5\right)\right)\right)\right)\right).\]

The polynomial coefficents \(\alpha_0\ldots\alpha_5\) are hard-coded, and take the values

\[\left[-0.774, 6.08\times10^{-2}, 2.47\times10^{-3}, -6.29\times10^{-5}, -8.78\times10^{-7}, 1.37\times10^{-8}\right].\]

The flux for each dome, \(F_d\), is calculated by subtracting a 10 second running mean of the zero from the signal. The flux is then corrected for temperature sensitivity using

\[F_{d_c} = \frac{F_d}{1 + T_c\left(\gamma_1 + T_c\left(\gamma_2 + T_c\gamma_3\right)\right)},\]

where \(T_c\) is the corrected dome thermistor temperature, and \(\gamma_n\) are the first \(n\) values in the dome constants array.

A threshold value, \(F_{\text{crit}} = 920\cos(\zeta)^{1.28}\), is used to determine whether the dome is in direct or diffuse radiation, with fluxes above \(F_{\text{crit}}\) (or \(F_{\text{crit}} / 2\) for red domes) assumed to indicate direct radiation. This expression for \(F_{\text{crit}}\) approximates the ‘German’ equation (ref?) but is simpler and remains positive at low sun elevations. If the flux is determined to be direct, then the upper radiometers are corrected for the pitch and roll of the aircraft (Ref: M/MRF/13/5):

\[F = \frac{F_{d_c}}{1 -f_r(\zeta)\left(1-c(\zeta)\frac{\cos\beta}{\cos\zeta} \right)}.\]

Here, \(f_r(\zeta)\) is the ratio of of direct:direct+diffuse radiation, currently assumed to be 0.95 for all solar zenith angles, \(c(\zeta)\) is a correction term for the cosine effect (Ref: Tech note 8, table 4). The angle between the solar zenith and normal-to-instrument, \(\beta\), is given by

\[\begin{split}\cos\beta &= \sin\phi\sin\zeta\sin\psi \\ &+ \cos\phi\cos\theta\cos\zeta \\ &- \cos\phi\sin\theta\sin\zeta\cos\psi,\end{split}\]

where \(\phi\) is the aircraft roll, \(\zeta\) is the solar zenith angle, \(\psi\) is the ‘sun heading’, the difference between the solar azimuth angle and the aircraft heading, and \(\theta\) is the aircraft pitch angle. Ref: Tech. note 7, page 10. Prior to this correction, platform relative pitch and roll offsets, determined through flying clear sky box patterns, are added to the instrument-derived pitch and roll. These are given as elements 4 and 5 in the flight constants for each dome.

Outputs

  • SW_DN_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SW_DN_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: The Eppley Laboratory inc.

    • instrument_model: PSP

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected downward short wave irradiance, clear dome

    • standard_name: downwelling_shortwave_flux_in_air

    • units: W m-2

  • SW_UP_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SW_UP_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: The Eppley Laboratory inc.

    • instrument_model: PSP

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected upward short wave irradiance, clear dome

    • standard_name: upwelling_shortwave_flux_in_air

    • units: W m-2

  • RED_DN_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: RED_DN_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: The Eppley Laboratory inc.

    • instrument_model: PSP

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected downward short wave irradiance, red dome

    • units: W m-2

  • RED_UP_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: RED_UP_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: The Eppley Laboratory inc.

    • instrument_model: PSP

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected upward short wave irradiance, red dome

    • units: W m-2

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • roll_limit_exceeded - The aircraft is in a roll exceeding the specified max roll limit of 7.0 degrees from horizontal.

  • low_sun_angle - The sun is low relative to the axis of the aircraft, exceeding the maximum allowed limit of 80.0 degrees.

  • flux_out_of_range - The calculated is outside of the specified allowable flux range [-20.0, 700.0] W/m2

BBRSols

p_bbr_sols.py

Converts the raw voltages on the BBR channels to physical values via a linear calibration, using coefficients defined in the flight constants. Each radiometer provides a signal, a zero and a thermopile temperature.

Required calibration coefficients are CALUP1S, CALUP2S, CALLP1S, and CALLP2S. The forth character in each of these identifies whether the calibration is for an (U)pper or (L)ower radiometer, and the fifth and sixth characters indicate whether the calibration is for position 1 (P1) or position 2 (P2). The first two constants in each calibration array are \(n_0\) and \(n_1\) linear coefficents for the sensitivity, while the second two are the linear coefficients for the thermopile temperature.

Outputs

  • UP1S
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UP1S_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP VIS CLR SIG

    • units: W m-2

  • UP2S
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UP2S_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP VIS RED SIG

    • units: W m-2

  • UIRS
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UIRS_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP I/R SIGNAL

    • units: W m-2

  • UP1Z
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UP1Z_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP VIS CLR ZERO

    • units: W m-2

  • UP2Z
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UP2Z_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP VIS RED ZERO

    • units: W m-2

  • UIRZ
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UIRZ_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP I/R ZERO

    • units: W m-2

  • UP1T
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UP1T_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP VIS CLR TEMP

    • units: degree C

  • UP2T
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UP2T_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP VIS RED TEMP

    • units: degree C

  • UIRT
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: UIRT_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: UPP I/R TEMP

    • units: degree C

  • LP1S
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LP1S_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR VIS CLR SIG

    • units: W m-2

  • LP2S
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LP2S_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR VIS RED SIG

    • units: W m-2

  • LIRS
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LIRS_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR I/R SIGNAL

    • units: W m-2

  • LP1Z
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LP1Z_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR VIS CLR ZERO

    • units: W m-2

  • LP2Z
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LP2Z_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR VIS RED ZERO

    • units: W m-2

  • LIRZ
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LIRZ_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR I/R ZERO

    • units: W m-2

  • LP1T
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LP1T_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR VIS CLR TEMP

    • units: degree C

  • LP2T
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LP2T_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR VIS RED TEMP

    • units: degree C

  • LIRT
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LIRT_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: LWR I/R TEMP

    • units: degree C

Flags

Variables in this module use classic, value based flagging.

  • UP1S_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UP2S_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UIRS_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UP1Z_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UP2Z_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UIRZ_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UP1T_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UP2T_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • UIRT_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LP1S_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LP2S_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LIRS_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LP1Z_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LP2Z_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LIRZ_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LP1T_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LP2T_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • LIRT_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

BuckCR2

p_buck.py

This documentation adapted from FAAM document FAAM010015A (H. Price, 2016).

For further details see the FAAM Met. Handbook.

The core processed data for the Buck CR2 includes the mirror temperature and the volume mixing ratio of water vapour. Prior to September 2016, the water vapour pressure was calculated using using the parameterisation given by Hardy (1998), which is based on the ITS-90 formulations. In September 2016, the data processing was updated to use the Murphy and Koop (2000) parameterisation for water vapour pressure. The vapour pressure over liquid water is now calculated according to

\[\begin{split}\ln(p_{\text{liq}}) &= 54.842763 - \frac{6763.22}{T} - 4.21\ln{T} +0.000367 T\\ &+ \tanh\left(0.0415\left(T - 218.8\right)\right)\left(53.878 - \frac{331.22}{T} - 9.44523 \ln T + 0.014025 T \right),\end{split}\]

valid for \(123 < T < 332\) K. The vapour pressure over ice is calculated as follows:

\[\ln(p_\text{ice}) = 9.550426 - \frac{5723.265}{T} + 3.53068 \ln T -0.00728332 T,\]

valid above 110 K. The water vapour pressure inside the instrument, \(p_{\text{H}_2\text{O,Buck}}\) is calculated using either equation 1 or 2 depending on whether a dew point or a frost point has been observed. Above 273.15 K, a dew point is clearly observed. Below 243.15 K, we can be confident that a frost point is being measured. Between 243.15 and 273.15 K, a dew point is assumed if the mirror has not been below 243.15 K since it was last above 273.15 K and it has been below 273.15 K for less than ten minutes. If the mirror temperature is within the supercooled water regime but has been below 243.15 K since it was last at 273.15 K, or it has been below 273.15 K for more than ten minutes, a frost point is assumed. The fact that these are assumptions is reflected in the measurement uncertainty, described below.

The vapour pressure is converted to volume mixing ratio, \(r_{\text{H}_2\text{O}}\), as follows:

\[r_{\text{H}_2\text{O}} = \frac{e_f p_{\text{H}_2\text{O,Buck}}}{p_\text{Buck} - e_f p_{\text{H}_2\text{O,Buck}}},\]

where \(e_f\) is the enhancement factor given by Hardy (1998) and \(p_\text{Buck}\) is the air pressure inside the instrument.

A corrected dew or frost point is calculated, which is slightly different to the mirror temperature, correcting for the difference between the pressure inside the insturment and the static air pressure outside the aircraft. The water vapour pressure outside the aircraft is

\[p_{\text{H}_2\text{o,outside}} = \frac{p_s r_{\text{H}_2\text{O}}}{e_f + e_f r_{\text{H}_2\text{O}}},\]

where \(p_s\) is the static air pressure. A dew or frost point is then calculated using the Murphy and Koop (2005) parameterisation. Frost points are calculated using an equation given in the paper:

\[T_\text{frost,outside} = \frac{1.814625\ln{p_{\text{H}_2\text{O,outside}}} + 6190.134}{29.120 - \ln{p_{\text{H}_2\text{O,outside}}}}.\]

In the the absence of an equation to calculate dew point, a numerical solving routine is used to find \(T_\text{dew,outside}\) from Equation 1.

The uncertainty associated with the Buck CR2 measurements have several sources

  • The uncertainty associated with the calibration performed at NPL (where applicable). This is derived from the NPL expanded uncertainty and fit to a power law.

  • The repeatability of the calibration. This is derived from the NPL calibration measurements of different dew points and fit to a power law.

  • The response time of the instrument and the atmospheric variability. This is based on an assessment of the standard deviation of subsequent readings to give an indication of atmospheric variability.

  • The uncertainty involved in the interpolation of data between calibration datapoints. This is a function of temperature, increasing below 233.15 K.

  • The bias associated with the uncertainty about whether there is water or ice on the mirror between 243.15 and 273.15 K. This is calculated using a flagging scheme according to the temperature history of the mirror.

These are combined to produce one uncertainty value for the mirror temperature, which may be propagated through to the volume mixing ratio and the pressure-corrected dew or frost point. Note that prior to software version 0.10.1 the uncertainties are expanded uncertainties. From software version 0.10.1 onwards, the uncertainties are combined uncertainties, for consistency with other variables in the core dataset which have an associated uncertainty.

Outputs

  • VMR_CR2
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: VMR_CR2_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Buck Research Instruments

    • instrument_model: CR2 Chilled Mirror Hygrometer

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Water vapour volume mixing ratio measured by the Buck CR2

    • units: ppmv

  • VMR_C_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: VMR_C_U_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 1

    • instrument_manufacturer: Buck Research Instruments

    • instrument_model: CR2 Chilled Mirror Hygrometer

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Combined uncertainty estimate for water vapour volume mixing ratio measured by the Buck CR2

    • units: ppmv

  • TDEW_CR2
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TDEW_CR2_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Buck Research Instruments

    • instrument_model: CR2 Chilled Mirror Hygrometer

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Mirror Temperature measured by the Buck CR2 Hygrometer

    • standard_name: dew_point_temperature

    • units: degK

  • TDEW_C_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TDEW_C_U_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 1

    • instrument_manufacturer: Buck Research Instruments

    • instrument_model: CR2 Chilled Mirror Hygrometer

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Combined uncertainty estimate for Buck CR2 Mirror Temperature

    • units: degK

  • TDEWCR2C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TDEWCR2C_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Buck Research Instruments

    • instrument_model: CR2 Chilled Mirror Hygrometer

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected dew point temperature measured by the Buck CR2 Hygrometer

    • standard_name: dew_point_temperature

    • units: degK

Flags

Variables in this module use classic, value based flagging.

  • VMR_CR2_FLAG
    • 0: data_good - Data are considered valid

    • 1: not_controlling - The instrument is not controlling on a dew point

    • 2: mirror_contaminated - The instrument is reporting contamination on the mirror

    • 3: in_balance_cycle - The instrument is in a balance cycle and not recording a dew point

    • 4: data_missing - Data are expected but are not present

  • VMR_C_U_FLAG
    • 0: data_good - Data are considered valid

    • 1: not_controlling - The instrument is not controlling on a dew point

    • 2: mirror_contaminated - The instrument is reporting contamination on the mirror

    • 3: in_balance_cycle - The instrument is in a balance cycle and not recording a dew point

    • 4: data_missing - Data are expected but are not present

  • TDEW_CR2_FLAG
    • 0: data_good - Data are considered valid

    • 1: not_controlling - The instrument is not controlling on a dew point

    • 2: mirror_contaminated - The instrument is reporting contamination on the mirror

    • 3: in_balance_cycle - The instrument is in a balance cycle and not recording a dew point

    • 4: data_missing - Data are expected but are not present

  • TDEW_C_U_FLAG
    • 0: data_good - Data are considered valid

    • 1: not_controlling - The instrument is not controlling on a dew point

    • 2: mirror_contaminated - The instrument is reporting contamination on the mirror

    • 3: in_balance_cycle - The instrument is in a balance cycle and not recording a dew point

    • 4: data_missing - Data are expected but are not present

  • TDEWCR2C_FLAG
    • 0: data_good - Data are considered valid

    • 1: not_controlling - The instrument is not controlling on a dew point

    • 2: mirror_contaminated - The instrument is reporting contamination on the mirror

    • 3: in_balance_cycle - The instrument is in a balance cycle and not recording a dew point

    • 4: data_missing - Data are expected but are not present

CPC

p_cpc.py

Reports particle counts from the TSI 3786 condensation particle counter. Counts are reported as-is from the instrument; this module only provides flagging information.

Note

Prior to v23.3.0, the CPC included flags for both sample flow and sheath flow. These have been combined into a single flag, and a cloud flag has been added, as CPC data are not valid in cloud. The cloud flag is added by a separate flagging module.

Outputs

  • CPC_CNTS
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: CPC_CNTS_FLAG

    • comment: Sampled through a modified Rosemount Aerospace Inc. Type 102 Total Temperature Housing.

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 10

    • instrument_manufacturer: TSI Incorporated

    • instrument_model: Modified Water Filled 3786 Condensation Particle Counter

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Condensation Particle Counts measured by the TSI 3786

    • units: 1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • saturator_over_temp - The saturator temperature is above 6 C

  • growth_tube_temp_out_of_range - Growth tube temperature is outside the valid range [40.5, 49.5] C

  • optics_temp_out_of_range - Optics temperature is outside the valid range [40.5, 49.5] C

  • sample_or_sheath_flow_out_of_range - Sample or sheath flows are outside the valid range [270, 330]

  • counter_saturated - Counter has exceeded its saturation value, 1000000

CabinPressure

p_cabin_pressure.py

Derives cabin pressure from a pressure transducer located in the core console. A polynomial fit, with coefficients provided in the constants variable CALCABP, converts DLU counts \(\rightarrow\) transducer voltage \(\rightarrow\) pressure.

Outputs

  • CAB_PRES
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: CAB_PRES_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Cabin Pressure

    • sensor_manufacturer: Rosemount Aerospace Inc.

    • sensor_model: 1201F2

    • sensor_serial_number: <str: derived_from_file>

    • units: hPa

Flags

Variables in this module use classic, value based flagging.

  • CAB_PRES_FLAG
    • 0: data_good - Data are considered valid

    • 1: pressure_out_of_range - Data are outside the valid range [650, 1050] hPa

CabinTemp

p_cabin_temp.py

Derives cabin temperature from a sensor located on the right of the core console. A polynomial fit, with coefficients provided in the constants variable CALCABT, converts DLU counts \(\rightarrow\) raw \(\rightarrow\) temperature.

Outputs

  • CAB_TEMP
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: CAB_TEMP_FLAG

    • comment: Should be considered a qualitative measure only, due to lack of calibration and proximity to the core console

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Cabin temperature at the core consoles

    • units: degC

Flags

Variables in this module use classic, value based flagging.

  • CAB_TEMP_FLAG
    • 0: data_good - Data are considered valid

    • 1: sensor_uncalibrated - Indicates that the sensor is considered to be poorly calibrated. Temperatures are to be considered qualitative.

    • 2: data_missing - Data are expected, but are missing

DryMach

p_dry_mach.py

This module calculate a dry-air Mach number using RVSM pressure measurements.

Dry-air Mach number, \(M\), is given by

\[M = \sqrt{\left(\frac{2c_v}{R_a}\right)\left(\left(\frac{p+q}{q}\right)^\frac{R_a}{c_p} - 1\right)},\]

The module also provides the parameter SH_GAMMA, which is the ratio of specific heats at constant pressure and constant volume, along with uncertainty estimates for MACH and SH_GAMMA. The former is the combined uncertainty of the uncertainy in BAe report 127 and the uncertainty in gamma, while the latter is a constant and assumed to be 0.003, which is derived from the impact of neglecting humidity at the highest expected VMR of 35000 at 1100 hPa.

Outputs

  • MACH
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: MACH_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Dry air Mach derived from and RVSM

    • units: 1

  • SH_GAMMA
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SH_GAMMA_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Ratio of specific heats at constant pressure and constant pressure

    • units: 1

  • SH_GAMMA_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SH_GAMMA_CU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Uncertainty estimate for SH_GAMMA

    • units: 1

  • MACH_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: MACH_CU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Uncertainty estimate for MACH

    • units: 1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground, as indicated by the weight-on-wheels indicator

ElectricFieldJci140

p_electric_field.py

This module reports the raw counts from the JCI static monitor on the core console.

Outputs

  • EXX_JCI
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: EXX_JCI_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Raw data from the Fwd Core Console JCI static monitor, static signal

    • units: 1

Flags

Variables in this module use classic, value based flagging.

  • EXX_JCI_FLAG
    • 0: data_good - Data are assumed to be valid and representative of the physical quantity measured

    • 1: uncalibrated_counts - Indicates this data is raw, uncalibrated counts from the DLU. Use with caution.

ElectricFieldZeus

p_zeus.py

Provides the electric field measurement from the Zeus instrument. No processing is actually performed, the data reported by the instrument is simply passed through to the output, with the addition of a flag.

ZEUS is a window mounted static mill created by the MetOffice OBR group. It uses a sensor designed by Dr John Chubb (JCI 140) made by Hearn Morley/Fraser Anti-Static and an Arduino Uno to digitize the analogue signal. It is fitted in SW1.

Outputs

  • EXX_ZEUS
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: EXX_ZEUS_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Met Office OBR, Hearn Morley, Fraser Anti-Static

    • instrument_serial_number: 12230002

    • long_name: Electric field measured by the Zeus instrument

    • units: kV m-1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - Aircraft is on the ground, as indicated by weight-on-wheels

GINWinds

p_winds_gin.py

Calculates a horizontal wind vector from the aircraft true air speed, derived from the air data computer, and the speed and heading from the GPS-aided inertial navigation unit.

The resulting corrected TAS may be modified with a scaling correction, specified in the constants as GINWIND_TASCOR.

The eastward and northward components of TAS, \(\text{TAS}_u\) and \(\text{TAS}_v\) are given by

\[\begin{split}\text{TAS}_u &= \text{TAS}\cos(\theta - 90),\\ \text{TAS}_v &= \text{TAS}\sin(\theta - 90).\end{split}\]

Where \(\theta\) is the aircraft heading, which may be corrected with an offset given in the constant GIN_HDG_OFFSET to account for any misalignment of the GIN to the aircraft axis. The horizontal winds \(u\) and \(v\) are then given by

\[\begin{split}u &= u_G - \text{TAS}_u,\\ v &= v_G + \text{TAS}_v,\end{split}\]

where \(u_G\) and \(v_G\) are the eastward and northward components of the aircraft speed, reported by the GIN.

See also:

Outputs

  • U_NOTURB
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: U_NOTURB_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Eastward wind component derived from aircraft instruments and GIN

    • standard_name: eastward_wind

    • units: m s-1

  • V_NOTURB
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: V_NOTURB_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Northward wind component derived from aircraft instruments and GIN

    • standard_name: northward_wind

    • units: m s-1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • roll_exceeds_threshold - The absolute value of the GIN roll exceeds 2 degrees, so wind calculations will be unreliable.

GeneralEastern

p_general_eastern.py

Processing module to calculate Dew Point temperature from the General Eastern 1011B chilled mirror hygrometer. Counts from the core console are converted to dew point with a polynomial fit, using coefficients provided in the flight constants paramater CALGE. The General Eastern provides a control signal voltage to indicate whether the instrument is controlling on a due point, and the data are flagged when outside this range. The valid range is provided through the flight constants parameter GELIMS.

Outputs

  • TDEW_GE
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TDEW_GE_FLAG

    • calibration_information: This instrument cannot be calibrated

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 4

    • instrument_manufacturer: General Eastern Instruments

    • instrument_model: 1011B Chilled Mirror Hygrometer

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Dew Point from the General Eastern instrument

    • standard_name: dew_point_temperature

    • units: degK

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • control_data_missing - No control data is available. The instrument may or may not be controlling on a dew point

  • control_out_of_range - The control signal is outside of the specified valid range [7000, 5000]

  • dewpoint_out_of_range - Dew point outside valid range [195, 394] K

Gin

p_gin.py

This module provides variables from the Applanix POS AV 410 GPS-aided inertial navigation system (GIN). The GIN provides parameters at a frequency of 50 Hz; this module simply downsamples these parameters to 32 Hz.

The STATUS_GIN parameter gives the current solution status reported by the GIN. This is defined as

  • 0: Full Nav. (user accuracies met)

  • 1: Fine Align (heading RMS < 15 deg)

  • 2: GC CHI 2 (alignment w/ GPS, RMS heading error > 15 deg)

  • 3: PC CHI 2 (alignment w/o GPS, RMS heading error > 15 deg)

  • 4: GC GHI 1 (alignment w/ GPS, RMS heading error > 45 deg)

  • 5: PC CHI 1 (alignment w/o GPS, RMS heading error > 45 deg)

  • 6: Course levelling active

  • 7: Initial solution assigned

  • 8: No solution

Outputs

  • LAT_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LAT_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Latitude from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: latitude

    • units: degree_north

  • LON_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: LON_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Longitude from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: longitude

    • units: degree_east

  • ALT_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ALT_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Altitude from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: altitude

    • units: m

  • VELN_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: VELN_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Aircraft velocity north from POS AV 410 GPS-aided Inertial Navigation unit

    • units: m s-1

  • VELE_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: VELE_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Aircraft velocity east from POS AV 410 GPS-aided Inertial Navigation unit

    • units: m s-1

  • VELD_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: VELD_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Aircraft velocity down from POS AV 410 GPS-aided Inertial Navigation unit

    • units: m s-1

  • ROLL_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ROLL_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Roll angle from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_roll_angle

    • units: degree

  • PTCH_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PTCH_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Pitch angle from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_pitch_angle

    • units: degree

  • HDG_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: HDG_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Heading from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_yaw_angle

    • units: degree

  • WAND_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: WAND_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Wander angle from POS AV 410 GPS-aided Inertial Navigation unit

    • units: degree s-1

  • TRCK_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TRCK_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Aircraft track angle from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_course

    • units: degree

  • GSPD_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: GSPD_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Groundspeed from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_speed_wrt_ground

    • units: m s-1

  • ROLR_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ROLR_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Rate-of-change of roll angle from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_roll_rate

    • units: degree s-1

  • PITR_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PITR_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Rate-of-change of pitch angle from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_pitch_rate

    • units: degree s-1

  • HDGR_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: HDGR_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Rate-of-change of heading from POS AV 410 GPS-aided Inertial Navigation unit

    • standard_name: platform_yaw_rate

    • units: degree s-1

  • ACLF_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ACLF_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Acceleration along the aircraft longitudinal axis from POS AV 410 GPS-aided Inertial Navigation unit (positive forward)

    • units: m s-2

  • ACLS_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ACLS_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Acceleration along the aircraft transverse axis from POS AV 410 GPS-aided Inertial Navigation unit (positive starboard)

    • units: m s-2

  • ACLD_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ACLD_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Acceleration along the aircraft vertical axis from POS AV 410 GPS-aided Inertial Navigation unit (positive down)

    • units: m s-2

  • STATUS_GIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: STATUS_GIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: Applanix

    • instrument_model: POS AV 410

    • long_name: Solution status from POS AV 410 GPS-aided Inertial Navigation unit

    • units: 1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • no_solution - The GIN status flag indicates no solution has been obtained.

  • latlon_identically_zero - Latitude and Longitude are exactly zero. This indicates an erroneous data message.

Heimann

p_heimann.py

Processing for the Heimann Radiometer. The Heimann outputs a voltage with a range of 0 - 10 V corresponding to an inferred brightness temperature of \(-50\) - \(50\) \(^\circ\text{C}\). This module simply applies a linear transformation to the counts recorded on the DLU to convert counts \(\rightarrow\) volts \(\rightarrow\) temperature. During a calibration, temperature from the black body are reported. Parameters for the linear transformations are taken from the flight constant parameters HEIMCAL for the Heimann and PRTCCAL for the PRT on the black body.

Outputs

  • BTHEIM_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: BTHEIM_U_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 4

    • instrument_manufacturer: Heitronics

    • instrument_model: KT19.82

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Uncorrected brightness temperature from the Heimann radiometer

    • units: K

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground

  • data_out_of_range - Brightness temperature is outside the range 253.15 - 313.15 K

  • in_calibration - The Heimann is in a calibration cycle. Black body temperature is being reported

  • data_missing - Data are expected but not present

KippZonenPyrgeometer

p_pyrgeometer.py

Calculation of longwave fluxes from the upward and downward facing Kipp and Zonen CR4 Pyrgeometers.

The 0 - 32 mV output of the CR4 thermopile is mapped to a 4 - 20 mA signal in the amp box, which carries sensor specific calibrations, corresponding to a flux range of \(-600\) - \(200\) Wm\(^{-2}\). This is then converted to a voltage using a 350 \(\Omega\) resistor, which is recorded in the DLU, with 16 bits covering a \(-10\) - \(10\) V range. Similarly, the thermistor is placed in parallel with a 100 k\(\Omega\) linearising resistor, and 100 \(\mu\)A is passed through the combination, with the resulting voltage measured at the DLU.

This module first applies the inverse transformations to recover the amp box current and the thermistor resistance. The thermistor temperature is given by

\[T = \left(\alpha + \left(\beta\log\left(R\right) + \gamma\log\left(R\right)^3\right)\right)^{-1},\]

where \(R\) is the thermistor resistance and \(\alpha\), \(\beta\), and \(\gamma\) are calibration coefficients supplied by the manufacturer. The longwave flux, \(L_D\), is then given by

\[L_D = \beta(A - \alpha) - \gamma + \sigma T^4,\]

where \(\alpha = 4\), \(\beta=50\), and \(\gamma=600\) map the current from the amp box, \(A\), onto the specified range of flux values, \(T\) is the temperature recorded by the thermistor, and \(\sigma\) is the Stefan-Boltzmann constant.

Outputs

  • IR_UP_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IR_UP_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Kipp and Zonen

    • instrument_model: CGR 4

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected upward longwave irradiance

    • units: W m-2

  • IR_DN_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IR_DN_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Kipp and Zonen

    • instrument_model: CGR 4

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected downward longwave irradiance

    • units: W m-2

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - Aircraft is on the ground

Nephelometer

p_nephelometer.py

Provides data and flagging information from the TSI nephelometer. The data from the nephelometer do not require any further processing, however this module parses the instrument status information to provide a QC flag for the data.

Note

Prior to software version 24.0.0, this module used classic flagging. From version 24.0.0, the module uses bitmask flagging, and further flagging may be added by standalone flagging modules.

Outputs

  • TSC_BLUU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TSC_BLUU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Uncorrected blue total scattering coefficient from TSI 3563 Nephelometer

    • units: m-1

  • TSC_GRNU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TSC_GRNU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Uncorrected green total scattering coefficient from TSI 3563 Nephelometer

    • units: m-1

  • TSC_REDU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TSC_REDU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Uncorrected red total scattering coefficient from TSI 3563 Nephelometer

    • units: m-1

  • BSC_BLUU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: BSC_BLUU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Uncorrected blue back scattering coefficient from TSI 3563 Nephelometer

    • units: m-1

  • BSC_GRNU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: BSC_GRNU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Uncorrected green back scattering coefficient from TSI 3563 Nephelometer

    • units: m-1

  • BSC_REDU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: BSC_REDU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Uncorrected red back scattering coefficient from TSI 3563 Nephelometer

    • units: m-1

  • NEPH_PR
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NEPH_PR_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Internal sample pressure of the Nephelometer

    • units: hPa

  • NEPH_T
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NEPH_T_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Internal sample temperature of the Nephelometer

    • units: K

  • NEPH_RH
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NEPH_RH_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: TSI

    • instrument_model: 3563

    • long_name: Relative humidity from TSI 3563 Nephelometer

    • units: %

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • instrument_flag_raised - A fault has been raised by the instrument

Nevzorov

p_nevzorov.py

Post processing for liquid and total water from the Nevzorov Vane. Works with both 1T1L2R and 1T2L1R vanes, which should be specified in the flight constants as VANETYPE.

The Nevzorov hot-wire probe measures total and liquid water content by recording the powers required to hold exposed and sheltered wires at a constant temperature.

The water content, \(W\), measured by a collector is given by

\[W = \frac{P_c - K P_r}{V_t A L},\]

where \(P_c\) is the collector power, \(P_r\) is the reference power, \(K\) is the baseline, the ratio of \(P_c\) and \(P_r\) in clear air, \(V_t\) is the true air speed, \(A\) is the forward-facing area of the collector, and \(L\) is the energy required to melt and then evaporate the water impacted on the sensor, specified in the flight constants as CALNVL.

The baseline, \(K\), is not a true constant, but varies with the ambient conditions. Abel et al. (2014) parameterise \(K\) as a function of indicated air speed, \(V_\text{IAS}\) and ambient pressure, \(P\),

\[K = \alpha_\text{IAS}\frac{1}{V_\text{IAS}} + \alpha_P\log_{10}(P).\]

If, for any reason, the fitting above fails, then only the uncorrected outputs, using a constant \(K\) specified in the flight constants, are written to file.

The outputs listed produced by this module depend on the type of Nevzorov vane fitted to the aircraft. If an old-style 1T1L2R vane is fitted, then the default outputs are NV_TWC_C, NV_LWC_C, NV_TWC_COL_P, NV_LWC_COL_P, NV_TWC_REF_P, NV_LWC_REF_P. If a new-style 1T2L1R vane is fitted, then the default outputs are NV_TWC_C, NV_LWC1_C, NV_LWC2_C, NV_TWC_COL_P, NV_LWC1_COL_P, NV_LWC2_COL_P, NV_REF_P.

Note

Prior to software version 24.6.0 this module output uncorrected water content data (NV_TWC_U, NV_LWC_U, NV_LWC1_U, NV_LWC2_U), instead of the element powers. These outputs are no longer produced.

Outputs

  • NV_TWC_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_TWC_C_FLAG

    • comment: Automatically baselined using flight data.

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected total condensed water content from the Nevzorov probe

    • units: gram m-3

  • NV_TWC_COL_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_TWC_COL_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: TWC collector power

    • units: W

  • NV_TWC_REF_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_TWC_REF_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: TWC reference power

    • units: W

  • NV_REF_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_REF_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Reference power

    • units: W

  • NV_LWC_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_LWC_C_FLAG

    • comment: Automatically baselined using flight data.

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected liquid water content from the Nevzorov probe

    • standard_name: mass_concentration_of_liquid_water_in_air

    • units: gram m-3

  • NV_LWC_COL_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_LWC_COL_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: LWC collector power

    • units: W

  • NV_LWC_REF_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_LWC_REF_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: LWC reference power

    • units: W

  • NV_LWC1_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_LWC1_C_FLAG

    • comment: Automatically baselined using flight data.

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected liquid water content from the Nevzorov probe (1st collector)

    • standard_name: mass_concentration_of_liquid_water_in_air

    • units: gram m-3

  • NV_LWC1_COL_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_LWC1_COL_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: LWC1 collector power

    • units: W

  • NV_LWC2_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_LWC2_C_FLAG

    • comment: Automatically baselined using flight data.

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Corrected liquid water content from the Nevzorov probe (2nd collector)

    • standard_name: mass_concentration_of_liquid_water_in_air

    • units: gram m-3

  • NV_LWC2_COL_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_LWC2_COL_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: LWC2 collector power

    • units: W

  • NV_CLEAR_AIR_MASK
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: NV_CLEAR_AIR_MASK_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 64

    • instrument_manufacturer: Sky Phys Tech Inc.

    • instrument_model: <str: derived_from_file>

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Clear air mask based on Nevzorov Total Water power variance

    • units: None

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground

  • poor_clear_air_baseline - The Nevzorov baseline correction is poor in clear air (|dk| > 0.02)

PRTTemperatureUncertainties

p_prt_uncertainties.py

For further details see the FAAM Met. Handbook.

This module calculates combined uncertainty estimates for indicated and true air temperatures, when these are recorded with platinum resistance thermometers.

Uncertainties in the indicated temperatures are derived from:

  • Uncertainty in the thermometer calibration from NPL

  • Drift of sensors between NPL calibrations

  • Resolution uncertainty in the DECADES DLU

  • DECADES calibration uncertainty

  • Noise in the system when a fixed resistor is fitted

  • Keithley calibration

  • Keithley stability

  • DECADES calibration (counts to resistance) residual

  • NPL calibration (resistance to temperature) residual.

Uncertainties in the true air temperatures are derived from:

  • Uncertainty of the corresponding indicated air temperature

  • Uncertainty in the Mach number

  • Uncertainty in the ratio of specific heats

  • Uncertainty in the variable housing recovery factor.

Outputs

  • IAT_ND_R_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IAT_ND_R_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 32

    • long_name: Combined uncertainty estimate for IAT_ND_R

    • units: K

  • TAT_ND_R_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAT_ND_R_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 32

    • long_name: Combined uncertainty estimate for TAT_ND_R

    • units: K

  • IAT_DI_R_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IAT_DI_R_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 32

    • long_name: Combined uncertainty estimate for IAT_DI_R

    • units: K

  • TAT_DI_R_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAT_DI_R_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 32

    • long_name: Combined uncertainty estimate for TAT_DI_R

    • units: K

Flags

No flags are defined in this module.

PRTTemperatures

p_prt_temps.py

For further details see the FAAM Met. Handbook.

Calculate indicated and true (static) air temperatures from the deiced and non-deiced Rosemount housings, when fitted with platinum resistance thermometer sensors. Indicated temperatures are calculated with a polynomial transformation of the DLU signal, using calibration factors in constants variables CALDIT and CALNDT, which incorporates the DLU and sensor calibrations.

The deiced indicated temperature is subject to a heating correction term when the heater is active, given by

\[\Delta T_{\text{IAT}} = \frac{1}{10}\exp{\left(\exp{\left(a + \left(\log\left(M\right)+b\right)\left(c\left(q+P\right)+d\right)\right) }\right),}\]

where \(M\) is the Mach number, \(q\) is the dynamic pressure and \(P\) the static pressure. The parameters \(a\), \(b\), \(c\), and \(s\) are

\[\left[1.171, 2.738, -0.000568, -0.452\right].\]

True air temperatures are a function of indicated temperatures, Mach number and housing recovery factor, and are given by

\[T_\text{TAT} = \frac{T_\text{IAT}}{1 + \left(0.2 R_f M^2\right)},\]

where \(M\) is the Mach number and \(R_f\) the recovery factor. Recovery factors are calculated in the processing module RecoveryFactor.

A flag is applied to the data when the Mach number is out of range. Further flags may be added by standalone flagging modules.

Outputs

  • TAT_ND_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAT_ND_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 non-deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: True air temperature from the Rosemount non-deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: <str: derived_from_file>

    • standard_name: air_temperature

    • units: K

  • TAT_DI_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAT_DI_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: True air temperature from the Rosemount deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: <str: derived_from_file>

    • standard_name: air_temperature

    • units: K

  • IAT_ND_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IAT_ND_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 non-deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Indicated air temperature from the Rosemount non-deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: <str: derived_from_file>

    • units: K

  • IAT_DI_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IAT_DI_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Indicated air temperature from the Rosemount deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: <str: derived_from_file>

    • units: K

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • mach_out_of_range - Mach number is below acceptable minimum of 0.05

PSAP

p_psap.py

Reports data from the Radiance Research Particle Soot Absorbtion Photometer. The following transformations are applied to the data from the aerosol rack DLU:

\[F = \frac{F_\text{DLU}}{2},\]
\[P_\text{lin} = \frac{P_{\text{lin}_\text{DLU}}}{2\times10^{5}},\]
\[P_\text{log} = 10^{(P_{\text{log}_\text{DLU}} / 2) - 7},\]
\[T = \frac{T_\text{DLU}}{8},\]

where \(P_\text{lin}\), \(P_\text{log}\), \(F\), and \(T\) correspond to the outputs PSAP_LIN, PSAP_LOG, PSAP_FLO, and PSAP_TRA respectively.

Flagging is based on the flow rate and transmittance ratio limits.

Outputs

  • PSAP_FLO
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PSAP_FLO_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Radiance Research

    • long_name: PSAP Flow

    • units: l min-1

  • PSAP_LIN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PSAP_LIN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Radiance Research

    • long_name: Uncorrected absorbtion coefficient at 565nm, linear, from PSAP

    • units: m-1

  • PSAP_LOG
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PSAP_LOG_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Radiance Research

    • long_name: Uncorrected absorption coefficient at 565nm, log, from PSAP

    • units: 1

  • PSAP_TRA
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PSAP_TRA_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Radiance Research

    • long_name: PSAP Transmittance

    • units: percent

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • transmittance_out_of_range - Transmittance ratio is outside the valid range [0.5, 1.05

  • flow_out_of_range - PSAP flow is out of range. This most likely indicates that the PSAP interrupt is active, to prevent water ingress

RadAlt

p_radalt.py

Calculate the radar altitude, in metres. The radar altitude, from radalt2, is read from the aircraft ARINC-429 data bus at the rear core console, and recodred at a frequency of 2 Hz. The signal is received as a 16 bit signed integer, with a least significant bit resolution of 0.25 ft, giving a max valid value of \((((2^{16} / 2) - 1) / 4)\).

Data are flagged when below 10 feet or above 5000 feet, which is the nominal maximum range of the instrument, though altitude is reported up to 8000 ft.

Outputs

  • HGT_RADR
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: HGT_RADR_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 2

    • instrument_manufacturer: Thales

    • instrument_model: AVH16 Radar Altimeter

    • long_name: Radar height from the aircraft radar altimeter

    • standard_name: height

    • units: m

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • data_out_of_range - RadAlt reading outside valid range (10.00, 1524.00)

  • aircraft_on_ground - The aircraft is on the ground, as indicated by the weight on wheels flag.

RecoveryFactor

p_recovery_factor.py

For further details see the FAAM Met. Handbook.

This module produces a Mach dependent recovery factor for the deiced and non-deiced Rosemount housings, which house the temperature probes.

The recovery factor for the non-deiced housing is given by Rosemount Aerospace as

\[\eta_{nd} = a_1 M + a_2 M^2\]

where \(a_1 = 0.0014054157\) and \(a_2 = -0.00060943146\)

The recovery factor for the deiced housing is calculated from in-flight data, under the assumption that the recovery factor given by Rosemount is correct. It is given by

\[\eta_{di} = 1 - \alpha\left(1 - \eta_{nd}\right),\]

where \(\alpha = 0.9989\) is the average ratio of deiced and non-deiced indicated temperatures. Further information is available in the FAAM Recovery Factor report (H. Price, document # FAAM013006).

Uncertainties are given by

\[\begin{split}\alpha_U &= 0.0006\\ \eta_{nd,U} &= -0.0003458119 M^2 + 0.00059345748 M\\ \eta_{di,U} &= ((\eta_{nd}-1)^2\alpha_U^2 + \alpha^2 \eta_{nd,U}^2)^\frac{1}{2}\end{split}\]

Outputs

  • ETA_ND
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Variable recovery factor for non-deiced Rosemount housing

    • units: 1

  • ETA_DI
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Variable recovery factor for deiced Rosemount housing

    • units: 1

  • ETA_ND_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ETA_ND_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 32

    • long_name: Uncertainty in recovery factor for deiced Rosemount housing

    • units: 1

  • ETA_DI_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: ETA_DI_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 32

    • long_name: Uncertainty in recovery factor for non-deiced Rosemount housing

    • units: 1

Flags

No flags are defined in this module.

Rvsm

p_rvsm.py

Calculate derived parameters from the aircraft’s RVSM system. Pressure altitude and indicated air speed are obtained from the aircraft’s ARINC-429 data bus, with a least significant bit resolution of 4 ft and \(1/32\) kts respectively.

Static pressure, \(P\), is obtained from the pressure altitude, \(Z_p\), using the ICAO standard atmosphere,

\[P = P_0\left(\frac{T_0}{T_0 + L_0 \left(Z_p - h_0\right)}\right)^{\frac{g_0 M}{R L_0}},\]

where \(T_0=288.15\), \(L_0=-0.0065\), \(h_0=0\), \(g_0=9.80655\), \(M=0.0289644\), \(R=8.31432\), \(P_0=1013.25\) below 11000 m, or

\[P = P_1\exp\left(\frac{-g_0 M \left(Z_p - h_1\right)}{R T_1}\right),\]

where \(T_1=216.65\), \(P_1=226.321\), \(h_1=11000\), above 11000 m.

Pitot static pressure, \(q\), is given as

\[q = P \left(\frac{M^2}{5} + 1\right)^{\frac{7}{2}} - 1,\]

with the Mach number, \(M\), given by

\[M = \frac{V_{IAS}}{V_0 \sqrt{\frac{P}{P_0}}},\]

where \(V_0 = 340.294\) and \(P_0=1013.25\), and \(V_{IAS}\) is the indicated air speed.

Data are flagged where either the pressure altitude or indicated air speed are considered out of range.

Outputs

  • PS_RVSM
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PS_RVSM_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: BAE Systems

    • long_name: Static pressure from the aircraft RVSM (air data) system

    • standard_name: air_pressure

    • units: hPa

  • PALT_RVS
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PALT_RVS_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: BAE Systems

    • long_name: Pressure altitude from the aircraft RVSM (air data) system

    • standard_name: barometric_altitude

    • units: m

  • Q_RVSM
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: Q_RVSM_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • instrument_manufacturer: BAE Systems

    • long_name: Pitot static pressure inverted from RVSM (air data) system indicated airspeed

    • units: hPa

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • instrument_not_ready - The RVSM system may not be ready for use

  • altitude_out_of_range - Pressure altitude outside acceptable range [-2000, 50000]

  • ias_out_of_range - Indicated air speed outside acceptable range [-50, 500]

S10Pressure

p_s10_pressure.py

Calculate static pressure from the S10 fuselage ports. Static pressure is calulated by applying a polynomial transformation to the DLU signal. The coefficients, specified in the flight constants parameter CALS10SP, combine both the DLU and pressure transducer calibrations.

Data are flagged when they are considered out of range.

Outputs

  • P10_STAT
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: P10_STAT_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Static pressure from S10 fuselage ports

    • sensor_manufacturer: Rosemount Aerospace Inc.

    • sensor_model: 1201F2

    • sensor_serial_number: <str: derived_from_file>

    • standard_name: air_pressure

    • units: hPa

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • data_out_of_range - Pressure outside acceptable limits [100, 1050]

S9Pressure

p_s9_pressure.py

Calculate static pressure from the S9 fuselage ports. Static pressure is calulated by applying a polynomial transformation to the DLU signal. The coefficients, specified in the flight constants parameter CALS9SP, combine both the DLU and pressure transducer calibrations. Additionally, a Mach dependent ‘position error’ correction term is applied, aimed at accounting for the unknown position error associated with the S9 port, derived by minimising errors between the S9 and RVSM static pressure measurements. This correction is of the form

\[\Delta P = \alpha M ^ \beta,\]

with parameters \(\alpha\) and \(\beta\) specified in the flight constants parameter S9_PE_C.

Data are flagged when they are considered out of range.

Outputs

  • P9_STAT
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: P9_STAT_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Static pressure from S9 fuselage ports

    • sensor_manufacturer: Rosemount Aerospace Inc.

    • sensor_model: 1201F2

    • sensor_serial_number: <str: derived_from_file>

    • standard_name: air_pressure

    • units: hPa

  • P9_STAT_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: P9_STAT_U_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Static pressure from S9 fuselage ports, uncorrected

    • sensor_manufacturer: Rosemount Aerospace Inc.

    • sensor_model: 1201F2

    • sensor_serial_number: <str: derived_from_file>

    • standard_name: air_pressure

    • units: hPa

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • data_out_of_range - Pressure outside acceptable limits [100, 1050]

SeaProbe

p_seaprobe.py

Calculates bulk water contents from the SEA WCM-2000 sensor.

Element Power

First element powers \(P = V*I\) are derived from recorded voltages and currents for each element (TWC, 083, 021, CMP, DCE).

Cloud mask

A cloud mask is derived using a rolling window applied to the TWC element temperature, with the aircraft assumed to be in cloud whenever the temperature range within the rolling window exceeds a specified range, or where the temperature withing the window exceeds a specified high or low value.

Parameters

Temperature of evaporation, \(T_{\text{evap}}\), and latent heat of evaporation, \(L_{\text{evap}}\), are given by

\[\begin{split}T_{\text{evap}} &= 32.16 + 0.1901 P - 2.391\times 10^{-4} P^2 + 1.785\times 10^{-7} P^3 - 5.19\times 10^4, \\ L_\text{evap} &= 4.1868\left( 594.4 - 0.484 T_\text{evap} - 7\times 10^{-4} T_\text{evap}^2 \right),\end{split}\]

where \(P\) is the static pressure from the aircraft’s air data system.

The specific energies for evaporation and sublimination, \(L_\text{liq}\) and \(L_\text{ice}\), are given by

\[L_\text{liq} = C_\text{liq}(T_\text{evap} - T_a) + L_\text{evap},\]

where \(T_a\) is the ambient air temperature, and

\[C_\text{liq}\left(T\right) = 4.169828 + (0.000364(T+100)^{5.26})\cdot10^{-10} + 0.046709 \cdot 10^{-0.036 T},\]

and

\[L_\text{ice} = C_\text{ice}(T) + L_\text{ice} + C_\text{liq}(T_\text{evap}) + L_\text{evap},\]

where \(L_\text{ice} = 333.5\), and \(C_\text{ice}\) is given by an interpolant between \(T = [77, 173, 273]\) and \(C = [0.686, 1.372, 2.097]\).

Dry air term

The dry air compensation term is calculated in two methods, with the method which gives the best fit meing used

  • Method 1: Calculate dry air power term by fitting constants for 1st principles.

The calculation of the dry air power term is based on method three as described on page 58 of the WCM-2000 manual. This uses a fit between the theoretical and measured (in cloud-free conditions) sense powers to find the fitting constants \(k_1\) and \(k_2\) (\(k_2\approx0.5\)).

\[\begin{split}P_\text{sense,dry} &= k_1 (T - T_a) (P \times \text{TAS})^{k_2} \\ P_\text{sense,total} &= P_\text{sense,dry} + P_\text{sense,wet} \\ &\rightarrow P_\text{sense,total} - P_\text{sense,dry} = 0 \text{ in cloud-free conditions.}\end{split}\]
  • Method 2: Calculate dry air power term from compensation element measurements.

The calculation of the dry air power term (DAT) is based on the use of the compensation element as described on page 56 of the WCM-2000 manual. This finds the slope and offset for conversion of the compensation power to dry air sense element power.

\[\begin{split}P_\text{sense,dry} &= P0 + K P_\text{comp} \\ P_\text{sense,total} &= P0 + K P_\text{comp} \text{ when in clear air}\end{split}\]

This will be TAS and \(P\) dependent (possibly \(T_a\)). This function determines optimum fitting parameters for the entire dataset, thus any baseline drift shall be lost.

Sense element water content

The water content for an element is given by

\[W = \frac{(2.389 \times 10^5) P_\text{sense}} {L_\text{evap} + (T_\text{evap} - T_a) \times \text{TAS} \times w \times h},\]

where \(P_\text{sense}\) is the (wet) sense element power, and \(w\) and \(h\) are the width and height of the sense element, respectively.

Note

The flags on upstream variables TAT_DI_R and TAS_RVSM are not included in the dependency_is_flagged flag of this variable, as these are likely to be flagged whenever the aircraft is in cloud.

Outputs

  • SEA_TWC_021
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SEA_TWC_021_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 20

    • instrument_manufacturer: Science Engineering Associates, Inc.

    • instrument_model: WCM-2000

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Total water content from the SEA WCM-2000 probe, element 021

    • units: g m-3

  • SEA_TWC_083
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SEA_TWC_083_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 20

    • instrument_manufacturer: Science Engineering Associates, Inc.

    • instrument_model: WCM-2000

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Total water content from the SEA WCM-2000 probe, element 083

    • units: g m-3

  • SEA_LWC_021
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SEA_LWC_021_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 20

    • instrument_manufacturer: Science Engineering Associates, Inc.

    • instrument_model: WCM-2000

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Liquid water content from the SEA WCM-2000 probe, element 021

    • standard_name: mass_concentration_of_liquid_water_in_air

    • units: g m-3

  • SEA_LWC_083
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SEA_LWC_083_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 20

    • instrument_manufacturer: Science Engineering Associates, Inc.

    • instrument_model: WCM-2000

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Liquid water content from the SEA WCM-2000 probe, element 083

    • standard_name: mass_concentration_of_liquid_water_in_air

    • units: g m-3

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • element_temperature_out_of_range - No flag description provided.

  • aircraft_on_ground - No flag description provided.

SignalRegister

p_signal_register.py

The DECADES signal register is a packed representation of some boolean state variables, which is used internally in DECADES. Here we reproduce part of the register from flag variables reported in the TCP data, for use in other processing modules. No outputs defined here are expected to ever be written to file.

Outputs

  • SREG
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SREG_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 2

    • long_name: Signal Register

    • units: None

Flags

Variables in this module use classic, value based flagging.

  • SREG_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

SolarAngles

p_solar.py

Calculates solar azimuth and zenith angles at the aircraft location. Uses the third party python module pysolar.

Outputs

  • SOL_ZEN
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SOL_ZEN_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Solar zenith derived from aircraft position and time

    • standard_name: solar_zenith_angle

    • units: degree

  • SOL_AZIM
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SOL_AZIM_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Solar azimuth derived from aircraft position and time

    • standard_name: solar_azimuth_angle

    • units: degree

Flags

Variables in this module use classic, value based flagging.

  • SOL_ZEN_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

  • SOL_AZIM_FLAG
    • -128: data_not_flagged - A fill value. No flagging information has been provided

SpeedOfSound

p_speed_of_sound.py

Calculates the speed of sound local to the aircraft.

Speed of sound, \(a\), is given as

\[a = \sqrt{\gamma \cdot \frac{p_0}{\rho_0} \cdot \frac{T}{T_0}},\]

where \(\gamma\) is the specific heat ratio, \(p_0\) is the reference pressure, \(\rho_0\) is the reference density, \(T\) is the local temperature, from the deiced temperature probe, and \(T_0\) is the reference temperature.

See also:

Outputs

  • SPEED_OF_SOUND
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SPEED_OF_SOUND_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Local speed of sound

    • units: m s-1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable. No flagging information provided.

TPress

p_tpress.py

This module calculates turbulence probe pressure differentials between P0-S10, left-right, and up-down.

The raw inputs are DLU counts from the differential pressure transducers. Pressures are calculated with polynomial fits to the raw counts, which encompass both the pressure to volts calibration of the transducer, and the volts to counts calibration of the DLU. These are given in the constant parameters CALTP1, CALTP2, and CALTP3, for P0-S10, up-down, and left right, respectively.

Data are flagged when outside specified limits.

Outputs

  • P0_S10
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: P0_S10_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Calibrated differential pressure between centre (P0) port and S10 static

    • sensor_manufacturer: Rosemount Aerospace. Inc.

    • sensor_model: 1221F2

    • sensor_serial_number: <str: derived_from_file>

    • units: hPa

  • PA_TURB
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PA_TURB_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Calibrated differential pressure between turbulence probe vertical ports

    • sensor_manufacturer: Rosemount Aerospace. Inc.

    • sensor_model: 1221F2

    • sensor_serial_number: <str: derived_from_file>

    • units: hPa

  • PB_TURB
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PB_TURB_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Calibrated differential pressure between turbulence probe horizontal ports

    • sensor_manufacturer: Rosemount Aerospace. Inc.

    • sensor_model: 1221F2

    • sensor_serial_number: <str: derived_from_file>

    • units: hPa

Flags

Variables in this module use classic, value based flagging.

  • P0_S10_FLAG
    • 0: data_good - None

    • 1: data_out_of_range - None

  • PA_TURB_FLAG
    • 0: data_good - None

    • 1: data_out_of_range - None

  • PB_TURB_FLAG
    • 0: data_good - None

    • 1: data_out_of_range - None

TecoSO2

p_tei_so2.py

Warning

This module depreciated for flights after 2021-01-09

Calculate SO\(_2\) concentration from the TECO 43 instrument. The instrument reports a nominal concentration and sensitivity, valve states V6 (indicating cylinder air) and V8 (indicating cabin air), and a status flag.

Zeros are taken whenever the instrument in sampling cylinder or cabin air, and interploated back to 1 Hz, assuming a linear drift of the offsets between zeros. SO\(_2\) concentration is then given by

\[\left[\text{SO}_2\right] = \frac{\left[\text{SO}_{2|\text{INS}}\right] - Z}{S},\]

where \(\left[\text{SO}_{2|\text{INS}}\right]\) is the concentration reported by the instrument, \(Z\) is the zero obtained from sampling cylinder or cabin air, and \(S\) is the sensitivity reported by the instrument.

Flagging is based on valve states and the instrument status flag.

Outputs

  • SO2_TECO
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SO2_TECO_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: Thermo Fisher Scientific, Inc.

    • instrument_model: 43i TLE pulsed fluorescence SO2 spectrometer

    • long_name: Mole fraction of Sulphur Dioxide in air from TECO 43 instrument

    • standard_name: mole_fraction_of_sulfur_dioxide_in_air

    • units: ppb

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - Aircraft is on the ground

  • before_first_zero - The instrument has not yet sampled cylinder or cabin air, the zero is invalid

  • in_zero - The instrument is currently sampling cylinder or cabin air for a zero reading

  • in_alarm - The instrument status flag is currently indicating an alarm state

TecoSO2V2

p_tei_so2_v2.py

Note

This module only active for flights after 2021-01-09

Calculate SO\(_2\) concentration from the TECO 43 instrument.

Zeros are taken whenever valve states V7 or V8 are 1, and are interpolated back to 1 Hz, assuming a linear drift of the offsets between zeros. SO\(_2\) concentration is then given by

\[\left[\text{SO}_2\right] = \frac{\left[\text{SO}_{2|\text{INS}}\right] - Z}{S},\]

where \(\left[\text{SO}_{2|\text{INS}}\right]\) is the concentration reported by the instrument, \(Z\) is the zero obtained from sampling scrubbed ambient air, and \(S\) is the instrument sensitivity given in the flight constants.

Flagging is based on valve states, weight on wheels, and the instrument status flag.

Outputs

  • SO2_TECO
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SO2_TECO_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_description: None

    • instrument_manufacturer: Thermo Fisher Scientific, Inc.

    • instrument_model: 43i Trace Level-Enhanced pulsed fluorescence SO2 spectrometer

    • instrument_serial_number: 1505564557

    • long_name: Mole fraction of Sulphur Dioxide in air from TECO 43 instrument

    • standard_name: mole_fraction_of_sulfur_dioxide_in_air

    • units: ppb

  • SO2_TECO_ZERO
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_description: None

    • instrument_manufacturer: Thermo Fisher Scientific, Inc.

    • instrument_model: 43i Trace Level-Enhanced pulsed fluorescence SO2 spectrometer

    • instrument_serial_number: 1505564557

    • long_name: TECO 43 SO2 interpolated zero

    • units: ppb

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground, as indicated by the weight on wheels flag. An additional 10 seconds are addedafter take-off to allow for instrument flushing.

  • instrument_flagged - The instrument is reporting an alarm for one of the following: internal or fluorescence cell temperatures, lamp intensity or voltage, PMT voltage or fluorscence cell pressure.

  • inlet_flow_out_of_range - The inlet sample overflow is out of range.

  • sample_flow_out_of_range - The spectrometer sample mass flow rate is out of range.

  • instrument_in_cal_mode - The instrument is being calibrated for either span or zero

TeiOzone

p_tei_ozone.py

Provides ozone concentration from the TE49C O\(_3\) analyser. Ozone data are taken as-is from the instrument; this module provides flagging information based on threshold values and instrument status flags.

Outputs

  • O3_TECO
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: O3_TECO_FLAG

    • calibration_date: None

    • calibration_information: None

    • calibration_url: None

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_description: None

    • instrument_manufacturer: Thermo Fisher Scientific, Inc.

    • instrument_model: 49i UV absorption ozone photometer

    • instrument_serial_number: 1162390004

    • long_name: Mole fraction of Ozone in air from the TECO 49 instrument

    • standard_name: mole_fraction_of_ozone_in_air

    • units: ppb

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • instrument_alarm - The status flag provided by the instrument is indicating an alarm state

  • conc_out_of_range - Reported ozone concentration is below the valid minimum of -10

  • flow_out_of_range - At least one of the recorded flow rates is below the valid minimum of 0.5

  • aircraft_on_ground - The aircraft is on the ground

ThermistorV1Temperatures

p_thermistor_temps.py

Calculate indicated and true (static) air temperatures from the Rosemount temperature probes, for the V1 (prototype) thermistor circuit. Note that when using this circuit, only one of the housings may host a thermistor type sensor.

  • Processes the NPL calibrations to produce a resistance to probe temperature relationship. The NPL calibration is performed with two different applied voltages so that self-heating can be calculated. This allows the probe temperature to be inferred by adding the calibration chamber temperature to the self-heating in order to produce a useable probe temperature to resistance calibration.}

  • Processes the NPL calibrations for a temperature to dissipation constant relationship. The dissipation constant measured in the calibration chamber for a given temperature is used later in the removal of self-heating in flight.}

  • Calculates the indicated temperature of the thermistor sensor by applying the NPL calibration and the DECADES counts to voltage calibration.

  • Calculates the dissipation constant at that indicated temperature based on the calibration dissipation constant and the flight dissipation multiplier (as described in FAAM013004A).}

  • Calculates the in-flight self-heating for each measurement, based on the voltage measurements and in-flight dissipation constants.}

  • Produces an indicated temperature corrected for self-heating by subtracting the self-heating from the temperature of the sensor.}

The deiced indicated temperature is subject to a heating correction term when the heater is active, given by

\[\Delta T_{\text{IAT}} = \frac{1}{10}\exp{\left(\exp{\left(a + \left(\log\left(M\right)+b\right)\left(c\left(q+P\right)+d\right)\right) }\right),}\]

where \(M\) is the Mach number, \(q\) is the dynamic pressure and \(P\) the static pressure. The parameters \(a\), \(b\), \(c\), and \(d\) are

\[\left[1.171, 2.738, -0.000568, -0.452\right].\]

True air temperatures are a function of indicated temperatures, Mach number and housing recovery factor, and are given by

\[T_\text{TAT} = \frac{T_\text{IAT}}{1 + \left(0.2 R_f M^2\right)},\]

where \(M\) is the Mach number and \(R_f\) the recovery factor. Recovery factors are currently considered constant, and are specified in the flight constants parameters RM_RECFAC/DI and RM\_RECFAC/ND.

A flag is applied to the data when the Mach number is out of range. Further flags may be added by standalone flagging modules.

Outputs

  • IAT_ND_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IAT_ND_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 non-deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Indicated air temperature from the Rosemount non-deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: thermistor

    • units: K

  • TAT_ND_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAT_ND_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 non-deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: True air temperature from the Rosemount non-deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: thermistor

    • standard_name: air_temperature

    • units: K

  • IAT_DI_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: IAT_DI_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Indicated air temperature from the Rosemount deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: thermistor

    • units: K

  • TAT_DI_R
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAT_DI_R_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • comment: Sensor housed in Rosemount Aerospace Inc. Type 102 deiced Total Temperature Housing

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: True air temperature from the Rosemount deiced temperature sensor

    • sensor_serial_number: <str: derived_from_file>

    • sensor_type: thermistor

    • standard_name: air_temperature

    • units: K

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • mach_out_of_range - No flag description provided.

TurbulenceProbe

p_turbwinds.py

This module produces flow angles and airspeed from the turbulence probe pressure differentials, and combines these with inertial/GPS measurements to derive 3-dimensional winds. These two processes are performed iteratively so that covariances between inferred winds and inertial measurements can be used to calculate on-the-fly flow angle correction terms. Alternatively, flow angle corrections can be provided in the flight constants.

Flow angles, dynamic pressure, and TAS

Initial estimates for angle of attack, \(\alpha\), and angle of sideslip, \(\beta\), are given by

\[\begin{split}\alpha &= \left(P_a / q - a_0\right) / a_1,\\ \beta &= \left(P_b / q - b_0\right) / b_1.\end{split}\]

Here, \(P_a\) and \(P_b\) are the pressure differentials between the top/bottom and left/right probe ports, \(a_n\) and \(b_n\) are calibration coefficients derived from flight data, and \(q\) is the RVSM-derived dynamic pressure.

Correction terms to these flow angles, required as stagnation points do not correspond exactly with probe ports, calculated by BAeS during the probe commissioning, are given by

\[\begin{split}\delta_\alpha &= 0.0273 + \alpha\left(-0.0141 + \alpha\left(0.00193 - 0.000052\alpha\right)\right),\\ \delta_\beta &= 0.00076172\beta^2.\end{split}\]

An initial estimate of dynamic pressure from the turbulence probe, \(q_t\), is then given by

\[q_t = \Delta_{P_0S_{10}} + q(\delta_\alpha + \delta_\beta),\]

where \(\Delta_{P_0S_{10}}\) is the pressure differential between \(P_0\) and \(S_{10}\).

This whole process is then iteratively repeated with \(q = q_t\), either until the difference in both flow angles between iterations is less than 0.2 degrees, or 5 iterations have been completed.

Mach number, \(M\), is given by

\[M = \sqrt{5\left(\left(1 + \frac{q_t}{p}\right)^\frac{2}{7} - 1\right)},\]

where \(p\) is the static pressure from the RVSM system.

True airspeed, TAS, is then given by

\[\text{TAS} = \text{TAS}_c C_0 M \sqrt{T_\text{air} / T_0},\]

where \(\text{TAS}_c\) is a correction term derived from flight data, \(C_0\) is the speed of sound at ICAO STP, \(T_\text{air}\) is the (deiced) true air temperature, and \(T_0\) is the temperature at ICAO STP.

Wind vector

First let us define rotation matricies which provide the transformations between geographical and aircraft-relative coordinate systems.

\[\begin{split}\mathbf{A_1} &= \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(r) & -\sin(r) \\ 0 & sin(r) & cos(r) \end{bmatrix},\\ \mathbf{A_2} &= \begin{bmatrix} \cos(\theta) & 0 & -\sin(\theta) \\ 0 & 1 & 0 \\ \sin(\theta) & 0 & \cos(\theta) \end{bmatrix}, \\ \mathbf{A_3} &= \begin{bmatrix} \cos(\phi) & \sin(\phi) & 0 \\ -\sin(\phi) & \cos(\phi) & 0 \\ 0 & 0 & 1 \end{bmatrix},\end{split}\]

where \(r\), \(\theta\), and \(\phi\) are the aircraft roll, pitch, and yaw, respectively. We can combine these into a single transformation tensor, \(\mathbf{R} = (\mathbf{A_3}\cdot\mathbf{A_2}) \cdot\mathbf{A_1}\).

The wind vector \(\mathbf{U}\), is given by

\[\mathbf{U} = \mathbf{V} + \mathbf{T} + \mathbf{L},\]

where \(\mathbf{V}\) is the aircraft velocity vector, \(\mathbf{T}\) is the aircraft TAS vector, relative to the earth, and \(\mathbf{L}\) is a correction term which accounts for the offset between the aircraft inertial measurement and the turbulence probe.

The correction term \(\mathbf{L}\) is given by

\[\mathbf{L} = \mathbf{L_L} \times \mathbf{L_R},\]

where \(\mathbf{L_R} = \mathbf{R} \cdot \mathbf{l}\) and \(\mathbf{L_L} = \mathbf{L_1} + \mathbf{L_2} + \mathbf{L_3}\).

Here \(\mathbf{l}\) is the position vector describing the offset of the inertial measurement from the turbulence probe, and

\[\begin{split}\mathbf{L_1} &= [0, 0, -\dot\phi],\\ \mathbf{L_2} &= \mathbf{A_3} \cdot [0, \dot\theta, 0],\\ \mathbf{L_3} &= (\mathbf{A_3}\cdot\mathbf{A_2})\cdot[\dot{r}, 0, 0],\end{split}\]

where an overdot represents a time derivative.

The TAS term \(\mathbf{T}\) is given by

\[R = \mathbf{R} \cdot [-T_p, -T_p\tan(\beta), T_p\tan(\alpha)],\]

where

\[T_p = \frac{\text{TAS}}{\sqrt{1 + \tan(\beta)^2 + \tan(\alpha)^2}}.\]

Flow angle corrections

The derivation of the variables above assumes no flow angle corrections, which are generally required. We take the approach of calculating flow angle corrections on line. This is done in an iterative loop where, after calculation of the flow angles and wind vector, flow angle corrections are calulated by 1) minimising the covariance between platform roll and vertical wind in the turns, and 2) minimising the mean vertical wind when the platform is straight and level. Flow angles and are then recalculated, and so on until the flow angle corrections converge suitably. This has been seen to occur rapidly, and only two iterations after the initial calculations are performed.

Outputs

  • TAS
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: TAS_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: True airspeed (dry-air) from turbulence probe

    • standard_name: platform_speed_wrt_air

    • units: m s-1

  • AOA
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: AOA_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Angle of attack from the turbulence probe (positive, flow upwards wrt a/c axes)

    • units: degree

  • AOSS
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: AOSS_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Angle of sideslip from the turbulence probe (positive, flow from left)

    • units: degree

  • PSP_TURB
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: PSP_TURB_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Pitot-static pressure from centre-port measurements corrrected for AoA and AoSS

    • units: hPa

  • U_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: U_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Eastward wind component from turbulence probe and GIN

    • standard_name: eastward_wind

    • units: m s-1

  • V_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: V_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Northward wind component from turbulence probe and GIN

    • standard_name: northward_wind

    • units: m s-1

  • W_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: W_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Vertical wind component from turbulence probe and GIN

    • standard_name: upward_air_velocity

    • units: m s-1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • data_out_of_range - V_C is outside the specified valid range [(-60, 60)] m/s

  • aircraft_on_ground - aircraft on ground

  • mach_out_of_range - Mach # is outside the specified valid range [(0.05, 0.8)]

TwoBOzone

p_2b_ozone.py

Note

This module only active for flights after 2021-01-09

Provides ozone concentration from the 2B Tech Ozone instrument. The instrument natively provides an ozone concentration, however this may be zero adjusted and scaled by zero and senstivity parameters given in the flight constants as TWBOZO_ZERO and TWBOZO_SENS.

\[\text{O}_3 = \frac{\text{O}_3 - z}{S},\]

where \(z\) is the given zero offset and \(S\) is the given sensitivity.

Additional calibration information for metadata can be provided through the constant parameters TWBOZO_CALINFO_DATE, TWBOZO_CALINFO_INFO, and TWBOZO_CALINFO_URL.

Flagging information is provided based on instrument and aircraft status.

Outputs

  • O3_2BTECH
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: O3_2BTECH_FLAG

    • calibration_date: <str: derived_from_file optional>

    • calibration_information: <str: derived_from_file optional>

    • calibration_url: <str: derived_from_file optional>

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_description: <str: derived_from_file optional>

    • instrument_manufacturer: 2B Technologies Inc.

    • instrument_model: 205

    • instrument_serial_number: 1034DB

    • long_name: Mole fraction of Ozone in air from the 2BTech photometer

    • standard_name: mole_fraction_of_ozone_in_air

    • units: ppb

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground, as indicated by the weight on wheels flag. An additional 10 seconds are addedafter take-off to allow for instrument flushing.

  • inlet_flow_out_of_range - The inlet sample overflow is out of range.

  • sample_flow_out_of_range - The spectrometer sample mass flow rate is out of range.

WVSS2A

p_wvss2.py

Process data from the WVSS-II water vapour spectrometers. The WVSS2 report volume mixing ratio and other parameters approximately every 2.3 seconds. This represents ~2 s of sampling at ~4 Hz, followed by around 0.3 seconds of processing. This module simply linearly interpolates these data onto a regular 1 Hz index, and provides flagging and metadata.

Outputs

  • WVSS2F_VMR_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: WVSS2F_VMR_U_FLAG

    • comment: WVSS-II measurements rely on manufacturer calibrations, and are not tracable to national standards

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: SpectraSensors

    • long_name: Water Vapour Measurement from WVSS2F linearly interpolated to 1 Hz

    • units: ppmv

  • WVSS2F_PRESS_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: WVSS2F_PRESS_U_FLAG

    • comment: WVSS-II measurements rely on manufacturer calibrations, and are not tracable to national standards

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: SpectraSensors

    • long_name: Pressure inside WVSS2F sample cell linearly interpolated to 1 Hz

    • units: hPa

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • data_out_of_range - No flag description provided.

  • data_missing - No flag description provided.

  • aircraft_on_ground - No flag description provided.

WVSS2B

p_wvss2.py

Process data from the WVSS-II water vapour spectrometers. The WVSS2 report volume mixing ratio and other parameters approximately every 2.3 seconds. This represents ~2 s of sampling at ~4 Hz, followed by around 0.3 seconds of processing. This module simply linearly interpolates these data onto a regular 1 Hz index, and provides flagging and metadata.

Outputs

  • WVSS2R_VMR_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: WVSS2R_VMR_U_FLAG

    • comment: WVSS-II measurements rely on manufacturer calibrations, and are not tracable to national standards

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: SpectraSensors

    • long_name: Water Vapour Measurement from WVSS2R linearly interpolated to 1 Hz

    • units: ppmv

  • WVSS2R_PRESS_U
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: WVSS2R_PRESS_U_FLAG

    • comment: WVSS-II measurements rely on manufacturer calibrations, and are not tracable to national standards

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: SpectraSensors

    • long_name: Pressure inside WVSS2R sample cell linearly interpolated to 1 Hz

    • units: hPa

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • data_out_of_range - No flag description provided.

  • data_missing - No flag description provided.

  • aircraft_on_ground - No flag description provided.

WVSS2Calibrated

p_wvss2_cal.py

For further details see the FAAM Met. Handbook.

This module provides a calibrated WVSS2 volume mixing ratio, along with its uncertainty estimate, from the flush mounted instrument. The calibration is a polynomial in VMR, with coefficients provided in the constants parameter WVSS2_F_CAL. The calibration is assumed to only be valid within a certain VMR range, specified in the constants parameter WVSS2_F_CAL_RANGE. Outside of this range, data are set to NaN.

The uncertainty estimate, \(U_c\), is given by

\[U_c = \sqrt{\sigma_f^2 + \sigma_r^2 + \sigma_b^2},\]

where

\[\begin{split}\sigma_f &= \sigma_0 + \sigma_1 V + ... + \sigma_n V^n\\ \sigma_b &= \frac{l_0 + l_1 V}{2}\\ \sigma_r &= V\left(p_0 V^{p_1}\right)\end{split}\]

where \(V\) is the uncorrected volume mixing ratio, \(\sigma_0, ..., \sigma_n\) are specified in the constants parameter WVSS2_F_UNC_FITPARAMS, \(l_0 \text{ and} l_1\) are specified in the constants parameter WVSS2_F_UNC_BUCK and \(p_0 \text{ and} p_1\) are specified in the constants parameter WVSS2_F_UNC_FITRES.

Outputs

  • WVSS2F_VMR_C
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: WVSS2F_VMR_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • instrument_manufacturer: SpectraSensors

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Calibrated volume mixing ratio from WVSS2F

    • units: ppm

  • WVSS2F_VMR_C_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: WVSS2F_VMR_C_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 1

    • instrument_manufacturer: SpectraSensors

    • instrument_serial_number: <str: derived_from_file>

    • long_name: Uncertainty estimate for calibrated volume mixing ratio from WVSS2F

    • units: ppm

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • data_out_of_range - VMR is outside calibration range [0 20000]

  • aircraft_on_ground - Aircraft is on the ground, as indicated by the weight-on-wheels indicator.

WVSS2RH

p_wvss2_rh.py

This module provides estimates of relative humidity with respect to both water and ice, along with their combined uncertainty estimates, derived from the WVSS2 water vapour mixing ratio and Rosemount temperatures.

For full details of the methodology, see the FAAM Met. Handbook.

Outputs

  • RH_ICE
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: RH_ICE_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Relative humidity wrt ice water, derived from corrected WVSS-II VMR and Rosemount temperatures

    • standard_name: relative_humidity

    • units: %

  • RH_LIQ
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: RH_LIQ_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Relative humidity wrt liquid water, derived from corrected WVSS-II VMR and Rosemount temperatures

    • standard_name: relative_humidity

    • units: %

  • RH_ICE_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: RH_ICE_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 1

    • long_name: Combined uncertainty estimate for RH_ICE

    • units: %

  • RH_LIQ_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: RH_LIQ_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 1

    • long_name: Combined uncertainty estimate for RH_LIQ

    • units: %

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground, as indicated by weight-on-wheels

  • data_out_of_range - RH is outside the range [0, 150]

WeightOnWheels

p_wow.py

This module simply provides the aircraft weight-on-wheels flag, recorded on the rear core console. A value of 1 indicates weight on wheels (i.e. the aircraft is on the ground) and a value of 0 indicates no weight on wheels (i.e. the aircraft is airborne).

Outputs

  • WOW_IND
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 1

    • long_name: Weight on wheels indicator

    • units: 1

Flags

No flags are defined in this module.

WetMach

p_wet_mach.py

This module calculate a moist-air Mach number using RVSM pressure measurements and the volume mixing ratio from the flush mounted WVSSII (assumed to identify itself as WVSS2A).

Moist-air Mach number, \(M\), is given by

\[M = \sqrt{\left(\frac{2c_v}{R_a}\right)\left(\left(\frac{p+q}{q}\right)^\frac{R_a}{c_p} - 1\right)},\]

where

\[R_a = c_p - c_v\]

and

\[\begin{split}c_p &= c_{pd} \left(1 + q_h\left(\frac{8}{7\epsilon} - 1\right)\right)\\ c_v &= c_{vd} \left(1 + q_h\left(\frac{6}{5\epsilon} - 1\right)\right)\\\end{split}\]

Here \(c_{pd}\) and \(c_{vd}\) are specific heats for dry air at constant pressure and volume, respectively, \(\epsilon\) is the ratio of the molecular mass of water to that of dry air, and the specific humidity, \(q_h\), is given by

\[q_h = \frac{\epsilon V}{\epsilon V + 1},\]

where \(V = 1000000\times\text{vmr}_\text{WVSS2F}\).

The module also provides the parameter SH_GAMMA, which is the ratio of specific heats at constant pressure and constant volume, along with uncertainty estimates for MACH and SH_GAMMA. The former is a combination from uncertainties in the corrected WVSS2 VMR and the uncertainty reported in BAe Reoprt 126, while the latter arises from the uncertainty in the corrected WVSS2 VMR.

Outputs

  • MACH
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: MACH_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Moist air Mach derived from WVSS-II(F) and RVSM

    • units: 1

  • MACH_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: MACH_CU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: auxiliaryInformation

    • frequency: 32

    • long_name: Uncertainty estimate for moist-air Mach

    • units: 1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable.

  • aircraft_on_ground - The aircraft is on the ground, as indicated by the weight-on-wheels indicator

WetSpecificHeat

p_specific_heat.py

Calculate the specific heats at constant pressure, \(c_p\) and constant volume, \(c_v\), and the ratio of specific heats, \(\gamma\), using the moist-air Mach number, \(M\), and the volume mixing ratio from the WVSSII.

The specific humidity, \(q_h\), is given by

\[q_h = \frac{\epsilon \cdot \text{VMR}}{1 + \epsilon \cdot \text{VMR}},\]

where \(\epsilon\) is the ratio of the molecular mass of water to that of dry air, and \(\text{VMR}\) is the volume mixing ratio.

Specific heat at constant pressure, \(c_p\), is given by

\[c_p = c_{pd} \cdot \left(1 + q_h \cdot \left(\frac{8}{7 \cdot \epsilon} - 1\right)\right),\]

where \(c_{pd}\) is the specific heat of dry air at constant pressure.

Specific heat at constant volume, \(c_v\), is given by

\[c_v = c_{vd} \cdot \left(1 + q_h \cdot \left(\frac{6}{5 \cdot \epsilon} - 1\right)\right),\]

where \(c_{vd}\) is the specific heat of dry air at constant volume.

The ratio of specific heats is given by

\[\gamma = \frac{c_p}{c_v}.\]

The uncertainty in the ratio of specific heats, \(\sigma_\gamma\), is given as polynomial coefficients for VMR in the flight constants file, and is evaluated here to produce an uncertainty estimate.

See also:

Outputs

  • SH_GAMMA
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SH_GAMMA_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Ratio of specific heats at constant pressure and constant volume

    • units: 1

  • SH_GAMMA_CU
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: SH_GAMMA_CU_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Uncertainty in the ratio of specific heats at constant pressure and constant volume, corrected for humidity

    • units: 1

  • C_P
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: C_P_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Specific heat at constant pressure, corrected for humidity

    • units: J kg-1 K-1

  • C_V
    • _FillValue: -9999

    • actual_range: [‘<float32: derived_from_file>’, ‘<float32: derived_from_file>’]

    • ancillary_variables: C_V_FLAG

    • coordinates: <str: derived_from_file optional>

    • coverage_content_type: physicalMeasurement

    • frequency: 32

    • long_name: Specific heat at constant volume, corrected for humidity

    • units: J kg-1 K-1

Flags

Variables in this module use bitmask flags. Some, all or none of these flags may be applied to each variable. Interrogate flag variable attributes flag_masks and flag_meanings to find the flags for each variable. No flagging information provided.