Skip to content

Xact 625i XRF Analyzer

The Xact 625i is a continuous X-ray fluorescence (XRF) analyzer for real-time elemental analysis of particulate matter.

Instrument Overview

Specification Value
Manufacturer Cooper Environmental Services
Model Xact 625i
Measurement Elemental composition (ng/m3)
Time Resolution Hourly
Elements 72 elements (Mg to U)

Data Format

  • File format: CSV
  • Time format: MM/DD/YYYY HH:MM:SS
  • Data structure: Element concentrations with uncertainties + environmental parameters

Column Structure

The raw data file contains:

  1. Element concentrations: Element AtomicNumber (ng/m3) (e.g., Mg 12 (ng/m3))
  2. Uncertainties: Element Uncert (ng/m3) (e.g., Mg uncert (ng/m3))
  3. Environmental parameters: Temperature, pressure, flow, RH, etc.
  4. Alarm codes: Instrument status indicators

Supported Elements

ELEMENTS = [
    'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe',
    'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo',
    'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Cs', 'Ba', 'La', 'Ce',
    'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu',
    'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Th', 'Pa', 'U'
]

Usage

from datetime import datetime
from pathlib import Path
from AeroViz import RawDataReader

# Read Xact data
data = RawDataReader(
    instrument='Xact',
    path=Path('/path/to/xact/data'),
    start=datetime(2024, 1, 1),
    end=datetime(2024, 12, 31),
    mean_freq='1h'
)

# View available elements
print(data.columns.tolist())
# ['Mg', 'Al', 'Si', 'S', 'K', 'Ca', 'Fe', 'Pb', ...]

Quality Control

QC Rules Applied

Rule Condition Description
Instrument Error ALARM code 100-110 Instrument malfunction detected
Upscale Warning ALARM code 200-203 Concentration exceeds measurement range
Invalid Value < 0 or > 100,000 ng/m3 Concentration outside valid range
High Uncertainty Uncertainty > 50% of value Measurement reliability concern

Alarm Codes

Error Codes (100-110) - Invalidate data:

Code Description
100 X-ray Voltage Error
101 X-ray Current Error
102 Tube Temperature Error
103 Enclosure Temperature Error
104 Tape Error
105 Pump Error
106 Filter Wheel Error
107 Dynamic Rod Error
108 Nozzle Error
109 Energy Calibration Error
110 Software Error

Warning Codes (200-203) - Upscale warnings:

Code Description
200 Upscale Cr Warning
201 Upscale Pb Warning
202 Upscale Cd Warning
203 Upscale Nb Warning

Output Data

Element Columns

Each detected element has two columns: - Element - Concentration in ng/m3 (e.g., Pb, Fe, S) - Element_uncert - Measurement uncertainty in ng/m3

Environmental Columns

Column Description Unit
AT Ambient Temperature C
SAMPLE_T Sample Temperature C
BP Barometric Pressure mmHg
TAPE Tape Pressure mmHg
FLOW_25 Flow at 25C slpm
FLOW_ACT Actual Flow lpm
FLOW_STD Standard Flow slpm
VOLUME Sample Volume L
TUBE_T X-ray Tube Temperature C
ENCLOSURE_T Enclosure Temperature C
FILAMENT_V Filament Voltage V
SDD_T SDD Temperature C
DPP_T DPP Temperature C
RH Relative Humidity %
WIND Wind Speed m/s
WIND_DIR Wind Direction deg
SAMPLE_TIME Sample Time min
ALARM Alarm Code -

Example Analysis

from AeroViz import RawDataReader
from pathlib import Path
from datetime import datetime

# Read data
xact = RawDataReader(
    instrument='Xact',
    path=Path('./data/xact'),
    start=datetime(2024, 1, 1),
    end=datetime(2024, 3, 31)
)

# Calculate crustal elements ratio
soil_elements = ['Al', 'Si', 'Ca', 'Fe', 'Ti']
xact['Soil'] = (
    2.20 * xact['Al'] +
    2.49 * xact['Si'] +
    1.63 * xact['Ca'] +
    2.42 * xact['Fe'] +
    1.94 * xact['Ti']
) / 1000  # Convert to ug/m3

# Heavy metals analysis
heavy_metals = ['Pb', 'Cd', 'As', 'Cr', 'Ni']
print(xact[heavy_metals].describe())

Notes

  • Data is automatically rounded to hourly resolution
  • Duplicate timestamps are removed
  • Non-numeric values are coerced to NaN
  • QC flags are stored in QC_Flag column during processing
  • Units are ng/m3 (nanograms per cubic meter)

API Reference

AeroViz.rawDataReader.script.Xact.Reader

Reader(path: Path | str, reset: bool | str = False, qc: bool | str = True, **kwargs)

Bases: AbstractReader

Xact 625i XRF Analyzer Data Reader

A specialized reader for Xact 625i continuous XRF analyzer data files, which measure elemental composition of particulate matter.

Attributes

nam class-attribute instance-attribute
nam = 'Xact'
ELEMENTS class-attribute instance-attribute
ELEMENTS = ['Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K', 'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Rb', 'Sr', 'Y', 'Zr', 'Nb', 'Mo', 'Ru', 'Rh', 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I', 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', 'Ta', 'W', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', 'Pb', 'Bi', 'Th', 'Pa', 'U']
ENV_COLUMNS class-attribute instance-attribute
ENV_COLUMNS = ['AT', 'SAMPLE_T', 'BP', 'TAPE', 'FLOW_25', 'FLOW_ACT', 'FLOW_STD', 'VOLUME', 'TUBE_T', 'ENCLOSURE_T', 'FILAMENT_V', 'SDD_T', 'DPP_T', 'RH', 'WIND', 'WIND_DIR', 'SAMPLE_TIME', 'ALARM']
ERROR_CODES class-attribute instance-attribute
ERROR_CODES = {100: 'Xray Voltage Error', 101: 'Xray Current Error', 102: 'Tube Temperature Error', 103: 'Enclosure Temperature Error', 104: 'Tape Error', 105: 'Pump Error', 106: 'Filter Wheel Error', 107: 'Dynamic Rod Error', 108: 'Nozzle Error', 109: 'Energy Calibration Error', 110: 'Software Error'}
WARNING_CODES class-attribute instance-attribute
WARNING_CODES = {200: 'Upscale Cr Warning', 201: 'Upscale Pb Warning', 202: 'Upscale Cd Warning', 203: 'Upscale Nb Warning'}
MIN_VALUE class-attribute instance-attribute
MIN_VALUE = 0
MAX_VALUE class-attribute instance-attribute
MAX_VALUE = 100000

Functions

_raw_reader
_raw_reader(file)

Read and parse raw Xact 625i XRF data files.

_QC
_QC(_df)

Perform quality control on Xact XRF data.

QC Rules Applied
  1. Instrument Error : ALARM code 100-110 indicates instrument error
  2. Upscale Warning : ALARM code 200-203 indicates upscale warning
  3. Invalid Value : Element concentration outside valid range (0-100000 ng/m3)
  4. High Uncertainty : Measurement uncertainty > 50% of value
_check_high_uncertainty
_check_high_uncertainty(df, element_cols)

Check if uncertainty is > 50% of measured value.

decode_alarm
decode_alarm(alarm_code)

Decode ALARM code to human-readable message.

Parameters:

Name Type Description Default
alarm_code int

The ALARM code from the Xact data

required

Returns:

Type Description
str

Human-readable description of the alarm