1. Introduction

This package provides tools for running quality control (QC) on rain gauge data in a flexible, user-driven way. It is designed to help everyone, from individual researchers to industrial-scale users, apply standardised QC checks to rainfall observations whether you have one rain gauge or a whole network of rain gauges.

At its core, the package offers:

  • 27 QC checks for rainfall data as of v0.2.5 (25 from IntenseQC and 2 from pyPWSQC)

  • Customizable parameters – adjust thresholds, streak or accumulation lengths, and distances to neighboring gauges

  • A modular QC framework – users can select which QC methods to apply, and configure them according to their project’s requirements

This approach allows you to build a tailored QC pipeline: include only the checks you need, set thresholds that match your research purposes, and run consistent, reproducible quality control.

1.1. What type of checks are in the package?

The RainfallQC package breaks down the QC checks into four distinct types:

  • Gauge checks – For detecting abnormalities in summary and descriptive statistics.

  • Comparison checks – For detecting abnormalities based on rainfall benchmarks.

  • Time-series checks – For detecting abnormalities in patterns of the data record.

  • Neighbourhood checks – For detecting abnormalities based on measurements in neighbouring rain gauges.

  • pypwsqc filters – For applying quality assurance protocols and filters for rainfall data.

These different types of rainfall checks are either rainfall-specific or not and need different amounts of data to run (Figure 1).

rainfallQC quadrant

Figure 1. Types of checks within RainfallQC

1.2. All QC checks in package

These are the quality control checks currently implemented in the package:

All QC checks

Check

Sub-module

QC Framework

Note

Percentiles

Gauge checks

IntenseQC

QC1

K-largest

Gauge checks

IntenseQC

QC2

Days of week

Gauge checks

IntenseQC

QC3

Hours of day

Gauge checks

IntenseQC

QC4

Intermittency

Gauge checks

IntenseQC

QC5

Breakpoints

Gauge checks

IntenseQC

QC6

Minimum value change

Gauge checks

IntenseQC

QC7

R99p

Comparison checks

IntenseQC

QC8

PRCPTOT

Comparison checks

IntenseQC

QC9

World Record

Comparison checks

IntenseQC

QC10

Rx1day

Comparison checks

IntenseQC

QC11

CDD (Dry spells)

Timeseries checks

IntenseQC

QC12

Daily accumulations

Timeseries checks

IntenseQC

QC13

Monthly accumulations

Timeseries checks

IntenseQC

QC14

Streaks

Timeseries checks

IntenseQC

QC15

Daily neighbours (wet)

Neighbourhood checks

IntenseQC

QC16

Hourly neighbours (wet)

Neighbourhood checks

IntenseQC

QC17

Daily neighbours (dry)

Neighbourhood checks

IntenseQC

QC18

Daily neighbours (dry)

Neighbourhood checks

IntenseQC

QC19

Monthly neighbours

Neighbourhood checks

IntenseQC

QC20

Timing offset

Neighbourhood checks

IntenseQC

QC21

Pre-QC affinity index

Neighbourhood checks

IntenseQC

QC22

Pre-QC pearson correlation

Neighbourhood checks

IntenseQC

QC23

Daily factor

Neighbourhood checks

IntenseQC

QC24

Monthly factor

Neighbourhood checks

IntenseQC

QC25

Faulty Zeros

pyPWSQC filters

pyPWSQC

FZ

Station Outliers

pyPWSQC filters

pyPWSQC

SO