Instruments#
This module implements UATAQ instruments as classes.
Each instrument class is a subclass of the Instrument abstract base class and implements methods for reading and parsing data files.
The Instrument class provides a common interface for all instrument classes and defines abstract methods that must be implemented by each subclass.
- class lair.uataq.instruments.Instrument(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
objectAbstract base class for instrument objects.
Attributes
model
(str) Model of the instrument.
SID
(str) Site ID where the instrument is installed.
name
(str) Name of the instrument.
groups
(list[str]) Research groups that operate the instrument.
loggers
(set[str]) Loggers used by the research groups to record data.
config
(dict) Configuration settings for the instrument.
Methods
get_files(group: str, lvl: str) -> list[str]
Get list of file paths for a given level.
read_data(group: str, lvl: str, time_range: TimeRange, num_processes: int, file_pattern: str) -> pd.DataFrame
Read and parse group data files for the given level and time range using multiple processes.
- __init__(SID: str, name: str, loggers: dict, config: dict)[source]#
Initialize the Instrument object.
- Parameters:
- SIDstr
Site ID where the instrument is installed.
- namestr
Name of the instrument.
- loggersdict
Dictionary of loggers used by different research groups.
- configdict
Configuration settings for the instrument.
- get_highest_lvl(group: str) str[source]#
Get the highest data level for the instrument.
- Parameters:
- groupstr
The research group whose data to retrieve.
- Returns:
- str
The highest data level.
- get_files(group: str, lvl: str) list[str][source]#
Get list of file paths for a given level.
- Parameters:
- groupstr
The research group whose data to retrieve.
- lvlstr
The level of the data to retrieve.
- Returns:
- list[str]
A list of file paths.
- get_datafiles(group: str, lvl: str, time_range: TimeRange, pattern: str | None = None) list[DataFile][source]#
Get data files for the given level and time range from the groupspace.
- Parameters:
- groupstr
The research group whose data to retrieve.
- lvlstr
The level of the data to retrieve.
- time_rangeTimeRange
The time range of the data to retrieve.
- patternstr
A string pattern to filter the file paths.
- Returns:
- list[DataFile]
A list of data files.
- standardize_data(group: str, data: DataFrame) DataFrame[source]#
Manipulate the data to a standard format between research groups, renaming columns, converting units, mapping values, etc. as needed.
- Parameters:
- groupstr
The research group whose data to standardize.
- datapandas.DataFrame
The data to standardize.
- Returns:
- pandas.DataFrame
The standardized data.
- read_data(group: str, lvl: str | None = None, time_range: TimeRange | str | list[str | datetime | None] | tuple[str | datetime | None, str | datetime | None] | slice | None = None, num_processes: int | Literal['max'] = 1, file_pattern: str | None = None) DataFrame[source]#
Read and parse data files for the given level and time range, using multiple processes if specified.
- Parameters:
- groupstr
The research group whose data to read.
- lvlstr
The level of the data to read.
- time_rangestr | list[Union[str, dt.datetime, None]] | tuple[Union[str, dt.datetime, None], Union[str, dt.datetime, None]] | slice | None
The time range to read data. Default is None which reads all available data.
- num_processesint | ‘max’
The number of processes to use for parallelization.
- file_patternstr
A string pattern to filter the file paths.
- Returns:
- pandas.DataFrame
A concatenated DataFrame containing the parsed data from files.
- lair.uataq.instruments.configure_instrument(SID: str, name: str, config: dict, loggers: dict | None = None) Instrument[source]#
Configure an instrument object based on the given configuration settings.
- Parameters:
- SIDstr
Site ID where the instrument is installed.
- namestr
Name of the instrument.
- configdict
Configuration settings for the instrument.
- loggersdict, optional
Dictionary of loggers used by different research groups.
- Returns:
- Instrument
An instrument object configured with the given settings.
- Raises:
- ValueError
If the instrument model is not found in the catalog.
- ValueError
If no loggers are found for the instrument at the site.
- class lair.uataq.instruments.InstrumentEnsemble(SID: str, configs: dict, loggers: dict | None = None)[source]#
Bases:
objectContainer for an ensemble of instruments at a site.
Attributes
SID
(str) Site ID of the ensemble.
configs
(dict[str, dict]) Dictionary of configuration settings for each instrument.
names
(list[str]) List of instrument names in the ensemble.
loggers
(set[str]) Set of loggers used by the research groups.
groups
(set[str]) Set of research groups that operate the instruments.
pollutants
(set[str]) Set of pollutants measured by the instruments.
- __init__(SID: str, configs: dict, loggers: dict | None = None)[source]#
Initialize the InstrumentEnsemble object.
- Parameters:
- SIDstr
Site ID of the ensemble.
- configsdict[instrument, config]
Dictionary of configuration settings for each instrument.
- loggersdict[group, logger], optional
Dictionary of loggers used by different research groups.
- class lair.uataq.instruments.SensorMixin[source]#
Bases:
objectMixin for instrument objects that measure a pollutant.
- Attributes:
pollutants (tuple): Tuple of pollutants measured by the instrument.
- class lair.uataq.instruments.BB_205(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.BB_405(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.CR1000(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument
- class lair.uataq.instruments.GPS(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument- read_data(group: str, lvl: str, time_range: TimeRange | str | list[str | datetime | None] | tuple[str | datetime | None, str | datetime | None] | slice | None = [None, None], num_processes: int | Literal['max'] = 1, file_pattern: str | None = None) DataFrame[source]#
Read and parse data files for the given level and time range, using multiple processes if specified.
- Parameters:
- groupstr
The research group whose data to read.
- lvlstr
The level of the data to read.
- time_rangestr | list[Union[str, dt.datetime, None]] | tuple[Union[str, dt.datetime, None], Union[str, dt.datetime, None]] | slice | None
The time range to read data. Default is None which reads all available data.
- num_processesint | ‘max’
The number of processes to use for parallelization.
- file_patternstr
A string pattern to filter the file paths.
- Returns:
- pandas.DataFrame
A concatenated DataFrame containing the parsed data from files.
- class lair.uataq.instruments.LGR_NO2(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.LGR_UGGA(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.Licor_6262(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.Licor_7000(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Licor_6262
- class lair.uataq.instruments.Magee_AE33(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.MetOne_ES405(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.MetOne_ES642(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.Teledyne_T200(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.Teledyne_T300(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.Teledyne_T400(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.Teledyne_T500u(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- class lair.uataq.instruments.Teom_1400ab(SID: str, name: str, loggers: dict, config: dict)[source]#
Bases:
Instrument,SensorMixin
- lair.uataq.instruments.catalog: dict[str, Type[Instrument]] = {'2b_205': <class 'lair.uataq.instruments.BB_205'>, '2b_405': <class 'lair.uataq.instruments.BB_405'>, 'cr1000': <class 'lair.uataq.instruments.CR1000'>, 'gps': <class 'lair.uataq.instruments.GPS'>, 'lgr_no2': <class 'lair.uataq.instruments.LGR_NO2'>, 'lgr_ugga': <class 'lair.uataq.instruments.LGR_UGGA'>, 'licor_6262': <class 'lair.uataq.instruments.Licor_6262'>, 'licor_7000': <class 'lair.uataq.instruments.Licor_7000'>, 'magee_ae33': <class 'lair.uataq.instruments.Magee_AE33'>, 'metone_es405': <class 'lair.uataq.instruments.MetOne_ES405'>, 'metone_es642': <class 'lair.uataq.instruments.MetOne_ES642'>, 'teledyne_t200': <class 'lair.uataq.instruments.Teledyne_T200'>, 'teledyne_t300': <class 'lair.uataq.instruments.Teledyne_T300'>, 'teledyne_t400': <class 'lair.uataq.instruments.Teledyne_T400'>, 'teledyne_t500u': <class 'lair.uataq.instruments.Teledyne_T500u'>, 'teom_1400ab': <class 'lair.uataq.instruments.Teom_1400ab'>}#
Instrument catalog