=== versions === python 3.12.0 | pystac-client 0.9.0 | planetary-computer 1.0.0 | h5py 3.16.0 | fsspec 2026.9.0 | numpy 2.5.4 | pandas 3.0.6 === STAC search === 1242 OFFL NO2 files intersect the box in 2025; 954 are daytime orbits days with no file on the Planetary Computer, by month: {7: 29, 8: 11, 12: 5} added 186 daytime files for 45 missing days from the AWS mirror 1140 files on 365 days; daytime orbits per day 2 to 5 files by source: {'Planetary Computer': 954, 'AWS Open Data': 186} processor versions: {'020800': 1015, '020901': 125} === one file === S5P_L2_NO2____20250408T113622_20250408T131752_38790 nitrogendioxide_tropospheric_column float32 shape (1, 4173, 450) chunks (1, 2087, 225) {'units': 'mol m-2', '_FillValue': 9.969209968386869e+36, 'multiplication_factor_to_convert_to_molecules_percm2': 6.022139974343092e+19} qa_value uint8 shape (1, 4173, 450) chunks (1, 4173, 450) {'units': '1', 'scale_factor': 0.009999999776482582, '_FillValue': 255.0} latitude float32 shape (1, 4173, 450) chunks (1, 2087, 225) {'units': 'degrees_north', '_FillValue': 9.969209968386869e+36} === QA filter on the sample orbit === 75,551 pixels in the box; 60,352 (80%) pass qa_value > 0.75 good pixels: median 38.3, 99th percentile 191.9 umol/m2; 1.0% are negative rejected pixels: median 16.4 umol/m2 250/1140 orbits gridded 500/1140 orbits gridded 750/1140 orbits gridded 1000/1140 orbits gridded === year gridded === 1140 orbits on 365 days: 12,829,397 good-quality pixels on a 420 x 250 grid of 0.05 deg === annual mean === saved s5p_no2_2025_mean.tif: band 1 = mean column (umol/m2), band 2 = pixel count good pixels per 0.05 deg cell in 2025: median 124, 5th percentile 79, minimum 22 annual mean over the box: median 23.4, max 147.9 umol/m2 (8.9 x 10^15 molecules/cm2) highest cell: 51.275 N, 4.275 E === city ranking: mean column within 10 km of the centre, 2025 (umol/m2) === annual weekday saturday sunday sat_vs_wkday_% sun_vs_wkday_% Antwerp 110.3 115.4 98.7 95.0 -14.5 -17.7 London 108.1 113.5 99.2 88.9 -12.6 -21.7 Rotterdam 99.4 104.1 86.7 87.0 -16.7 -16.4 Essen (Ruhr) 96.7 103.8 79.6 76.5 -23.3 -26.3 Paris 96.4 102.3 81.7 80.1 -20.1 -21.7 Cologne 90.6 94.9 82.6 76.4 -13.0 -19.5 Amsterdam 87.2 89.6 81.6 80.4 -9.0 -10.3 Manchester 80.8 84.2 75.2 63.3 -10.7 -24.8 Brussels 79.5 83.0 70.2 70.8 -15.4 -14.7 Leeds 68.4 70.9 64.5 57.5 -9.1 -19.0 Birmingham 67.0 70.3 61.4 51.8 -12.7 -26.3 Lille 66.9 68.5 67.9 57.9 -0.8 -15.4 Sheffield 66.6 67.9 64.4 61.4 -5.1 -9.6 Liverpool 59.0 60.6 51.8 56.8 -14.4 -6.2 Bristol 49.6 51.9 44.1 42.7 -14.9 -17.7 Cardiff 44.9 46.7 41.7 38.3 -10.6 -17.9 Newcastle 43.6 43.7 48.4 38.1 10.6 -13.0 Dublin 42.4 44.9 37.4 32.0 -16.6 -28.7 Glasgow 40.0 41.0 33.3 39.8 -18.7 -2.8 Edinburgh 35.8 36.9 32.3 32.9 -12.5 -10.8 Belfast 32.6 33.5 28.5 31.0 -14.7 -7.5 UK cities (median): Saturday -13%, Sunday -15% vs weekdays rural background (Scottish Highlands): 17.5 umol/m2 === seasonal composites (umol/m2) === Winter (DJF) London 116.1 | Manchester 86.6 | box median 25.6 | cells with >= 5 good pixels 99% Spring (MAM) London 129.0 | Manchester 94.2 | box median 27.4 | cells with >= 5 good pixels 100% Summer (JJA) London 74.9 | Manchester 58.3 | box median 20.2 | cells with >= 5 good pixels 100% Autumn (SON) London 95.6 | Manchester 61.3 | box median 19.9 | cells with >= 5 good pixels 100% === monthly composites (city columns in umol/m2) === cover_% London Manchester Glasgow London_days Jan 23.7 122.8 105.7 32.5 12 Feb 26.3 163.4 96.4 51.5 10 Mar 35.4 138.8 107.4 55.6 21 Apr 42.4 136.3 96.7 48.7 23 May 41.4 101.1 77.5 41.0 19 Jun 31.2 70.9 54.1 25.8 20 Jul 26.5 85.1 64.8 30.6 10 Aug 31.6 72.3 55.0 32.2 18 Sep 30.4 103.4 61.5 25.1 17 Oct 18.1 98.3 63.4 28.8 7 Nov 25.4 88.4 58.1 32.6 15 Dec 20.5 87.3 61.9 44.8 15 figures and CSVs written to output