diff --git a/src/rivm-rio/2015091611_no2.py b/src/rivm-rio/2015091611_no2.py new file mode 100644 index 0000000..3dbdfc6 --- /dev/null +++ b/src/rivm-rio/2015091611_no2.py @@ -0,0 +1,264 @@ +# Definition from the file and zeroed. +# NO2 sample 2015091611_no2.aps +# Creates NumPy multidim array: http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html +# For testing. +array = np.array([ + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15.4, 16.7, 16.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16.4, 15.2, 15.4, 15.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 18.2, 18.4, 17.7, 17.4, 16.6, 0, 0, 0, 13.3, 14.6, 0, 0, 0, 0, 0, 0, 0, 16.8, 14.4, 19.0, 0, + 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 18.2, 17.2, 18.4, 17.8, 12.4, 15.3, 16.2, 17.2, 18.0, 18.1, 0, 0, 17.3, 17.5, 0, 0, 0, 16.3, 15.4, 14.0, + 10.5, 9.5, 10.8, 12.3, 16.8, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19.1, + 16.8, 14.8, 14.7, 16.6, 0, 0, 0, 0, 0, 0, 18.4, 18.2, 16.3, 14.5, 14.2, 15.9, 18.4, 15.5, 14.3, 11.5, 9.8, 9.5, + 11.2, 10.7, 11.7, 10.0, 10.2, 12.6, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16.1, + 16.9, 18.5, 0, 0, 0, 0, 0, 0, 0, 18.3, 15.0, 12.6, 11.7, 11.7, 11.4, 13.8, 17.1, 12.6, 10.8, 11.4, 10.5, 10.6, + 9.3, 10.2, 9.2, 9.8, 9.1, 11.0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.3, 0, + 0, 0, 0, 0, 0, 0, 0, 18.2, 15.4, 12.8, 12.2, 11.1, 17.8, 16.2, 10.7, 12.9, 15.9, 13.1, 11.0, 9.8, 9.6, 13.6, + 9.5, 9.6, 9.9, 10.3, 9.7, 18.2, 29.6, 24.0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18.1, 18.2, + 19.4, 0, 0, 0, 0, 0, 0, 0, 13.7, 12.2, 11.6, 12.9, 12.2, 11.3, 14.2, 13.2, 10.7, 13.3, 10.4, 10.2, 15.8, 10.4, + 9.6, 9.8, 11.6, 10.8, 11.1, 9.4, 10.3, 9.1, 9.6, 18.2, 12.1, 15.9, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18.4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13.9, 14.0, 15.1, 13.6, 14.8, 11.4, 13.0, 12.0, 14.3, 12.2, 15.1, 10.6, 10.3, 13.7, 17.9, 11.0, + 13.0, 14.4, 11.3, 9.6, 9.1, 10.5, 11.2, 12.2, 9.8, 9.3, 13.6, 15.4, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17.2, 19.8, 0, 0, 0, + 0, 0, 0, 0, 18.8, 13.7, 13.2, 12.1, 15.0, 26.3, 24.7, 16.9, 15.4, 16.5, 15.3, 13.2, 11.5, 11.4, 12.6, 11.5, + 10.0, 9.7, 25.0, 30.4, 22.6, 10.9, 9.1, 11.3, 9.3, 9.1, 9.1, 10.0, 9.7, 9.1, 9.6], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.1, 20.9, 0, 0, 0, 0, + 0, 0, 0, 0, 26.2, 15.7, 24.3, 12.8, 13.7, 18.5, 30.8, 26.4, 11.4, 18.5, 16.3, 14.8, 16.0, 11.8, 11.4, 10.5, + 15.0, 10.5, 11.0, 22.3, 20.9, 16.5, 20.2, 11.2, 12.5, 9.1, 15.7, 9.6, 12.8, 10.6, 10.1], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15.9, 18.4, 0, 0, 0, 0, + 0, 0, 0, 0, 19.7, 12.4, 12.8, 13.2, 12.0, 11.8, 12.4, 12.5, 13.5, 13.2, 12.0, 12.7, 10.7, 10.7, 15.8, 10.5, + 19.2, 18.6, 12.2, 16.1, 12.0, 13.0, 18.6, 16.9, 16.0, 11.4, 11.5, 25.6, 9.5, 9.6, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18.0, 18.7, 17.3, 0, 0, 0, + 0, 0, 0, 0, 20.6, 13.1, 13.8, 12.5, 14.0, 12.0, 13.0, 12.4, 12.2, 15.1, 13.2, 16.2, 30.7, 16.7, 10.5, 11.1, + 10.9, 11.6, 9.9, 9.7, 18.4, 12.1, 13.2, 9.3, 9.3, 28.1, 12.7, 14.1, 11.3, 10.1, 11.5, 9.4], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.4, 15.2, 14.0, 18.2, 0, 0, + 0, 0, 0, 0, 20.3, 21.3, 12.9, 14.2, 14.8, 12.7, 12.3, 12.0, 13.2, 16.4, 11.8, 11.3, 13.4, 16.9, 12.3, 10.8, + 11.4, 13.3, 10.3, 12.7, 11.0, 13.2, 12.9, 14.2, 10.4, 9.4, 15.1, 10.9, 13.9, 9.4, 12.1, 9.3, 9.3], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18.0, 17.4, 18.7, 0, 0, 0, 0, + 0, 0, 20.6, 0, 20.0, 14.8, 14.1, 14.0, 17.2, 24.3, 13.8, 16.1, 16.6, 12.8, 12.1, 11.2, 12.5, 10.9, 12.0, 10.5, + 10.4, 10.3, 10.1, 9.9, 13.3, 11.0, 9.6, 10.7, 9.5, 9.6, 10.2, 9.4, 10.9, 10.4, 9.9, 9.9], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18.1, 17.4, 0, 0, 0, 0, 0, 0, + 22.8, 0, 0, 20.3, 13.4, 13.1, 13.2, 15.2, 25.1, 15.4, 13.3, 11.8, 13.9, 11.8, 14.4, 16.6, 12.1, 11.2, 13.6, + 11.8, 15.4, 12.5, 12.4, 30.1, 13.0, 9.9, 17.4, 9.7, 11.6, 13.0, 15.5, 9.4, 9.7, 10.3, 9.9], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23.3, 31.1, 0, 0, 0, 0, 0, + 21.0, 0, 0, 0, 0, 20.1, 14.7, 14.3, 19.8, 13.3, 14.4, 22.6, 14.9, 33.6, 13.8, 11.4, 11.3, 11.0, 10.9, 13.2, + 16.3, 11.4, 12.1, 12.3, 14.3, 11.2, 10.5, 9.7, 10.6, 9.6, 12.5, 21.6, 9.5, 9.9, 10.0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22.3, 36.9, 0, 0, 20.6, 22.0, + 21.3, 0, 0, 0, 0, 20.7, 14.1, 15.0, 16.9, 16.3, 14.7, 14.4, 13.4, 13.5, 19.0, 22.5, 12.4, 11.8, 12.4, 11.0, + 10.8, 10.8, 10.8, 13.7, 10.3, 10.7, 10.0, 10.9, 9.8, 12.6, 10.7, 11.2, 10.2, 18.2, 9.7, 9.5, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21.2, 22.4, 19.1, 20.9, 18.0, + 14.0, 18.9, 0, 0, 0, 0, 18.6, 16.6, 15.0, 14.1, 16.6, 14.4, 13.4, 17.7, 14.6, 12.4, 14.9, 15.6, 11.4, 13.1, + 11.1, 10.9, 10.8, 11.3, 10.6, 10.4, 10.2, 10.1, 10.0, 10.3, 9.8, 11.2, 11.6, 12.7, 17.5, 9.8, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16.9, 18.5, 17.8, 16.6, 14.8, + 16.9, 15.2, 0, 0, 0, 0, 19.6, 15.3, 13.3, 13.5, 13.8, 16.2, 14.8, 14.0, 13.6, 13.2, 17.0, 16.7, 12.5, 11.3, + 13.1, 11.0, 12.6, 10.8, 10.6, 16.9, 10.3, 13.2, 10.1, 11.2, 9.9, 12.0, 12.4, 12.2, 10.2, 12.5, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16.5, 15.9, 15.4, 14.9, 15.1, + 20.2, 14.1, 20.6, 0, 0, 0, 0, 0, 0, 17.9, 20.1, 17.2, 18.9, 12.3, 12.1, 15.6, 14.1, 12.4, 11.5, 11.9, 12.7, + 11.5, 10.9, 13.1, 10.7, 10.6, 10.4, 10.3, 10.2, 10.1, 10.0, 10.0, 10.8, 10.9, 14.9, 10.0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24.1, 15.0, 25.7, 15.7, 15.0, + 14.4, 15.9, 14.2, 0, 0, 0, 0, 0, 0, 0, 0, 18.5, 13.3, 12.7, 12.4, 12.2, 15.4, 15.1, 12.7, 20.8, 18.1, 15.2, + 13.4, 11.0, 10.9, 11.2, 12.0, 10.6, 10.4, 11.1, 11.9, 11.0, 11.2, 28.8, 12.9, 11.1, 10.3, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18.6, 15.8, 17.0, 15.7, 21.6, + 14.5, 14.4, 21.4, 22.7, 21.6, 20.2, 0, 0, 0, 0, 0, 15.1, 13.6, 13.7, 12.8, 12.3, 12.9, 16.1, 12.3, 15.2, 11.9, + 11.8, 12.1, 13.4, 12.7, 11.2, 17.0, 10.6, 10.5, 11.3, 12.1, 10.9, 14.3, 26.9, 12.9, 11.3, 11.5, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16.8, 19.6, 20.5, 17.3, 14.9, + 20.8, 16.5, 15.9, 19.3, 15.5, 17.1, 21.2, 0, 0, 0, 0, 14.9, 13.3, 20.8, 19.4, 14.7, 12.2, 13.3, 16.9, 16.5, + 15.5, 20.2, 13.7, 11.3, 11.7, 19.5, 29.1, 13.7, 11.4, 11.0, 12.3, 10.3, 13.9, 14.0, 15.2, 14.4, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15.6, 19.9, 25.4, 31.9, 17.2, + 16.5, 17.2, 20.0, 18.7, 23.4, 29.1, 0, 0, 0, 0, 0, 15.5, 13.6, 21.2, 16.4, 12.4, 12.4, 15.8, 18.4, 19.0, 16.7, + 23.5, 12.8, 12.6, 11.4, 14.3, 10.9, 11.6, 11.6, 11.3, 20.3, 10.4, 11.8, 12.0, 11.5, 16.4, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22.1, 15.5, 29.5, 31.0, 24.8, 14.9, + 15.3, 21.4, 33.8, 15.7, 18.0, 0, 0, 0, 0, 0, 0, 26.0, 14.6, 15.3, 12.6, 13.7, 13.3, 15.0, 14.2, 16.5, 11.8, + 20.0, 11.6, 11.4, 11.2, 11.1, 11.0, 13.1, 15.0, 12.7, 21.4, 10.4, 10.4, 10.4, 10.5, 11.7, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22.6, 19.2, 26.4, 31.4, 15.8, 16.8, + 18.4, 19.8, 0, 20.8, 0, 0, 0, 0, 0, 0, 0, 19.5, 16.9, 16.8, 16.2, 14.8, 15.3, 14.8, 17.5, 20.1, 11.8, 14.1, + 11.8, 11.4, 12.6, 15.1, 16.3, 13.2, 11.0, 12.8, 12.0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.4, 17.4, 20.4, 15.5, 16.0, 15.0, + 14.8, 18.5, 0, 0, 0, 0, 0, 0, 0, 0, 16.1, 13.7, 17.4, 15.2, 16.4, 15.4, 28.0, 14.7, 12.1, 21.1, 11.9, 12.2, + 15.5, 13.0, 11.4, 11.2, 11.1, 11.1, 25.2, 12.5, 10.7, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22.7, 22.9, 21.2, 16.5, 17.1, 17.2, + 15.3, 14.8, 0, 0, 0, 0, 0, 0, 24.5, 19.2, 23.0, 13.2, 13.4, 22.9, 12.7, 13.4, 22.2, 16.4, 13.1, 22.3, 16.8, + 12.2, 11.6, 11.5, 11.5, 16.9, 11.2, 11.2, 11.6, 10.9, 10.9, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31.9, 30.5, 19.7, 32.0, 18.1, 15.3, + 32.1, 25.9, 25.7, 0, 0, 0, 0, 0, 32.2, 29.1, 13.4, 13.2, 13.8, 19.6, 12.7, 13.6, 12.4, 13.0, 16.5, 32.5, 28.4, + 11.8, 16.1, 11.6, 14.2, 13.5, 11.2, 11.7, 11.2, 13.2, 11.3, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25.1, 40.6, 37.3, 18.5, 25.0, 20.5, + 15.7, 16.8, 18.5, 21.1, 21.3, 0, 0, 21.3, 20.9, 15.5, 21.2, 19.0, 13.2, 14.6, 16.5, 12.8, 19.3, 13.0, 13.9, + 21.3, 21.7, 16.6, 11.8, 11.7, 11.6, 11.6, 12.7, 13.3, 18.7, 13.9, 15.1, 10.8, 10.7, 11.4, 0, 11.1, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21.3, 20.4, 24.6, 18.3, 36.6, 37.5, + 25.9, 14.9, 17.4, 20.1, 21.8, 21.6, 19.2, 18.8, 16.1, 14.4, 14.5, 13.8, 13.2, 13.4, 13.1, 15.1, 17.6, 14.7, + 14.5, 17.7, 14.3, 12.5, 12.1, 16.7, 13.1, 12.2, 11.4, 11.3, 11.5, 14.7, 12.5, 12.3, 11.6, 10.6, 14.0, 10.4, + 17.5, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.4, 27.1, 36.0, 23.6, 39.8, 39.3, + 38.6, 26.6, 18.2, 21.9, 20.5, 23.6, 34.2, 19.3, 14.8, 13.5, 13.4, 13.2, 13.2, 17.0, 17.4, 16.8, 12.9, 18.7, + 12.2, 18.4, 12.8, 17.0, 11.8, 18.2, 18.1, 12.1, 14.4, 12.7, 11.2, 22.3, 17.0, 11.6, 13.0, 10.7, 12.1, 10.5, + 15.1, 11.6, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23.4, 21.1, 31.4, 28.8, 20.1, 29.4, 35.1, + 38.2, 35.6, 22.0, 21.9, 17.3, 33.1, 24.9, 13.7, 13.6, 17.5, 23.0, 16.1, 25.6, 23.9, 13.8, 20.2, 12.4, 12.3, + 17.7, 13.8, 13.2, 13.0, 11.7, 14.5, 13.0, 12.1, 14.2, 24.2, 11.3, 26.9, 31.0, 11.7, 12.1, 12.1, 11.4, 10.5, + 10.4, 10.6, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.2, 17.0, 24.6, 26.2, 30.4, 39.8, 29.0, + 34.6, 35.9, 28.3, 18.9, 22.4, 25.4, 21.3, 17.3, 13.5, 13.3, 14.8, 25.6, 26.1, 20.2, 12.6, 15.6, 12.3, 12.2, + 14.1, 12.3, 12.8, 13.4, 11.6, 12.7, 12.1, 11.4, 11.4, 20.8, 17.8, 12.6, 18.1, 17.9, 13.2, 11.2, 20.4, 17.6, + 11.6, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25.0, 22.2, 26.7, 28.8, 35.3, 39.2, 30.5, + 22.2, 34.8, 21.0, 16.1, 26.1, 21.4, 31.4, 18.3, 14.5, 13.2, 13.1, 14.4, 21.8, 14.8, 12.5, 13.5, 12.2, 12.1, + 17.5, 13.1, 14.8, 17.2, 12.4, 11.5, 11.4, 11.4, 14.7, 13.3, 14.4, 13.0, 11.1, 15.0, 27.5, 19.7, 29.2, 12.8, + 13.4, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25.9, 24.4, 26.6, 21.0, 22.6, 24.6, 26.8, + 24.5, 15.9, 18.1, 16.7, 18.9, 20.3, 25.6, 24.2, 13.4, 20.5, 14.4, 19.3, 13.8, 22.4, 12.5, 12.7, 13.2, 12.1, + 12.0, 19.4, 14.2, 16.2, 20.7, 33.5, 16.3, 12.9, 11.3, 11.2, 13.5, 12.7, 21.4, 11.1, 16.0, 32.0, 23.8, 19.9, + 10.9, 18.6, 11.8, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30.1, 26.0, 20.2, 18.2, 21.0, 17.5, 16.2, + 25.1, 25.2, 18.8, 18.1, 22.4, 27.4, 27.6, 23.5, 20.2, 22.5, 13.0, 27.9, 12.6, 12.5, 12.4, 14.6, 13.2, 11.9, + 13.2, 31.5, 21.7, 14.1, 13.6, 13.8, 11.2, 11.8, 11.2, 11.1, 11.3, 12.0, 13.3, 11.5, 10.8, 12.1, 29.2, 29.0, + 18.9, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19.7, 38.2, 37.3, 19.2, 18.2, 16.9, 19.0, 15.0, + 16.3, 16.4, 15.0, 19.9, 20.3, 19.4, 14.7, 23.7, 20.3, 31.3, 26.4, 15.0, 15.2, 23.7, 13.0, 13.0, 11.9, 11.8, + 13.8, 32.0, 22.5, 12.3, 12.1, 12.0, 12.7, 11.1, 14.5, 19.2, 11.0, 11.0, 10.9, 10.8, 15.4, 12.4, 11.5, 13.5, + 12.5, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.6, 24.4, 29.2, 36.4, 28.1, 30.7, 32.0, 16.7, + 22.0, 16.9, 14.3, 15.3, 23.9, 16.8, 15.4, 21.8, 26.6, 17.9, 30.4, 26.2, 13.8, 15.4, 27.7, 13.0, 12.5, 12.4, + 11.6, 11.4, 12.5, 11.9, 11.1, 11.1, 27.6, 15.9, 10.9, 11.3, 15.2, 10.9, 11.7, 16.9, 12.0, 18.3, 12.7, 10.5, + 12.9, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30.9, 26.1, 28.3, 22.0, 18.8, 16.3, 20.8, 21.8, 17.9, + 15.3, 15.4, 16.3, 17.4, 26.6, 36.3, 27.8, 26.4, 25.1, 23.0, 12.4, 16.5, 12.1, 12.2, 12.0, 11.8, 11.8, 14.6, + 11.3, 11.8, 13.8, 12.6, 16.3, 12.6, 15.8, 12.7, 13.9, 10.7, 11.6, 11.5, 16.8, 10.8, 17.2, 10.6, 11.0, 0, 0, 0, + 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24.2, 35.5, 39.4, 37.3, 19.1, 33.4, 18.9, 19.5, 16.4, + 23.3, 18.7, 21.9, 23.7, 15.4, 20.4, 33.0, 31.5, 26.9, 23.0, 14.7, 15.7, 19.5, 17.2, 13.4, 15.7, 11.7, 12.4, + 11.2, 11.6, 18.6, 10.7, 10.7, 13.3, 13.7, 12.2, 10.5, 11.3, 10.6, 11.8, 11.8, 11.1, 12.6, 10.6, 10.5, 0, 0, 0, + 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24.4, 20.4, 32.0, 33.4, 27.3, 21.8, 32.4, 22.8, 18.0, 29.6, + 25.9, 16.1, 19.0, 15.5, 17.3, 18.2, 33.5, 31.0, 18.1, 18.1, 18.5, 13.9, 12.4, 12.7, 27.8, 24.6, 29.8, 11.2, + 10.8, 14.2, 21.6, 10.7, 10.4, 13.9, 15.7, 10.3, 10.3, 13.3, 10.4, 10.4, 10.4, 10.5, 16.9, 11.1, 11.2, 15.4, 0, + 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25.6, 23.5, 22.8, 26.2, 16.9, 27.8, 37.6, 19.7, 22.9, 20.2, 15.5, + 27.3, 23.9, 16.5, 15.4, 16.1, 16.6, 19.1, 28.1, 15.6, 14.4, 12.2, 13.1, 11.5, 15.2, 14.7, 24.4, 12.1, 22.2, + 11.9, 18.3, 13.9, 23.3, 23.2, 16.4, 17.1, 16.3, 10.1, 11.3, 10.6, 14.0, 10.2, 10.2, 14.2, 18.1, 10.3, 12.7, + 10.2, 10.1, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36.9, 39.8, 34.5, 20.3, 18.0, 17.5, 22.3, 34.1, 27.6, 34.9, 26.2, + 14.8, 16.0, 15.9, 16.8, 15.1, 18.3, 16.3, 23.7, 13.2, 16.2, 16.6, 20.8, 15.5, 14.2, 12.9, 17.4, 14.2, 24.4, + 19.1, 17.8, 17.0, 25.5, 28.8, 24.4, 9.7, 10.6, 11.8, 20.7, 27.5, 10.0, 10.2, 10.9, 10.7, 10.5, 10.3, 22.5, + 10.0, 10.3, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23.7, 25.3, 27.9, 35.7, 38.3, 24.8, 28.0, 38.1, 37.8, 34.6, 34.2, + 28.2, 14.0, 14.9, 18.3, 21.2, 13.6, 14.7, 13.4, 13.8, 13.4, 21.7, 12.1, 12.0, 11.7, 15.9, 11.9, 13.6, 16.8, + 11.4, 12.3, 10.1, 18.1, 15.2, 17.3, 14.8, 21.5, 15.9, 9.6, 9.8, 11.5, 19.5, 10.1, 15.1, 9.9, 18.1, 10.1, 9.9, + 11.1, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.4, 16.5, 20.9, 30.2, 39.3, 39.0, 38.8, 38.8, 36.9, 35.4, 31.5, + 21.7, 14.6, 12.9, 14.5, 14.3, 15.0, 12.2, 20.5, 12.1, 15.9, 16.3, 18.7, 11.9, 29.6, 15.6, 19.6, 20.5, 13.4, + 12.7, 13.8, 19.0, 16.9, 13.1, 12.4, 11.0, 10.7, 10.4, 14.8, 9.5, 18.3, 10.1, 9.7, 9.7, 9.7, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21.7, 24.2, 17.8, 24.8, 15.7, 31.5, 37.5, 30.7, 30.4, 25.4, 31.4, + 27.6, 30.9, 14.4, 13.9, 13.2, 15.0, 22.6, 12.8, 12.2, 11.1, 13.8, 13.7, 16.2, 13.1, 13.5, 10.3, 9.9, 11.5, + 10.7, 16.6, 22.0, 26.3, 12.5, 14.3, 11.1, 13.8, 15.3, 11.8, 20.8, 12.4, 11.0, 11.8, 15.1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20.1, 18.2, 17.5, 26.9, 23.5, 25.3, 15.7, 17.6, 22.8, 23.2, 24.4, 18.6, + 22.7, 33.7, 32.4, 33.3, 22.5, 23.4, 18.7, 26.2, 17.2, 15.4, 13.5, 14.1, 21.7, 12.1, 13.3, 12.2, 10.8, 15.1, + 9.8, 9.3, 18.7, 27.0, 27.0, 15.6, 11.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26.1, 22.9, 22.8, 17.7, 16.4, 20.5, 22.0, 16.7, 14.2, 14.0, 15.7, 16.8, + 15.5, 33.3, 27.7, 17.5, 13.9, 15.2, 15.5, 12.5, 16.6, 14.1, 13.0, 12.7, 18.1, 14.0, 12.5, 10.2, 18.1, 23.1, + 10.8, 15.0, 13.5, 10.5, 16.4, 9.8, 13.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21.3, 27.5, 24.0, 22.1, 22.2, 20.4, 16.7, 19.8, 16.7, 19.7, 15.7, 15.4, 19.3, + 12.9, 18.1, 14.4, 15.0, 16.0, 17.4, 12.7, 12.4, 11.3, 10.5, 11.2, 18.9, 13.9, 17.5, 12.9, 10.4, 10.1, 19.1, + 27.5, 12.3, 11.3, 13.6, 10.9, 19.6, 14.9, 9.7, 8.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 20.6, 17.5, 20.0, 15.4, 15.6, 17.3, 21.4, 19.2, 16.4, 15.4, 15.8, 20.6, 28.3, 20.8, + 15.2, 15.0, 22.1, 16.8, 13.4, 15.1, 26.7, 18.9, 12.2, 17.9, 15.2, 15.5, 12.7, 25.8, 30.1, 21.4, 11.8, 10.8, + 15.1, 9.0, 10.9, 9.7, 8.7, 11.0, 19.0, 14.4, 10.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 22.4, 21.2, 22.8, 19.3, 16.9, 14.9, 16.7, 23.9, 33.7, 18.0, 13.5, 16.0, 24.8, 15.3, + 15.7, 34.1, 29.9, 11.8, 11.5, 14.6, 24.4, 12.2, 13.3, 24.7, 24.1, 20.4, 16.7, 19.4, 25.3, 18.5, 11.2, 9.5, 8.9, + 14.0, 14.7, 12.9, 16.7, 10.2, 11.4, 17.7, 12.7, 8.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22.7, 25.2, 16.9, 18.3, 18.4, 22.2, 18.2, 17.3, 15.1, 23.1, 15.4, 12.9, + 17.4, 21.1, 13.0, 13.8, 10.5, 28.3, 15.6, 14.0, 15.1, 11.9, 9.4, 10.2, 16.5, 15.4, 15.1, 11.0, 12.7, 11.5, + 15.5, 22.7, 21.3, 9.1, 10.3, 11.0, 20.2, 9.9, 8.4, 9.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 19.5, 23.4, 19.6, 19.9, 17.8, 20.9, 22.2, 20.7, 17.1, 17.4, 17.3, 14.8, 14.5, 17.9, 12.0, + 17.2, 14.9, 14.0, 11.0, 11.3, 30.1, 28.4, 19.0, 20.8, 14.7, 24.6, 16.9, 15.5, 14.2, 9.8, 14.3, 10.2, 15.3, + 22.8, 23.9, 11.1, 12.1, 9.3, 8.5, 8.4, 10.5, 8.9, 10.7, 12.7, 22.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0], + [0, 0, 0, 0, 0, 20.0, 17.8, 16.2, 18.4, 17.5, 17.0, 17.5, 18.1, 21.9, 20.9, 15.8, 16.0, 13.4, 14.9, 12.9, 14.9, + 12.5, 22.9, 13.0, 15.4, 30.2, 13.0, 19.0, 22.4, 14.3, 27.6, 22.7, 26.1, 30.0, 17.9, 19.4, 9.0, 19.3, 12.3, + 11.7, 11.3, 8.6, 8.6, 11.0, 15.5, 8.5, 8.5, 8.4, 10.0, 10.2, 10.5, 9.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 17.5, 16.0, 18.5, 17.3, 18.7, 15.4, 16.1, 23.1, 17.9, 21.9, 20.4, 17.5, 17.0, 20.7, 19.6, 12.3, + 13.7, 31.7, 25.7, 18.3, 11.3, 11.0, 9.5, 11.6, 11.0, 10.8, 14.6, 19.9, 21.8, 11.1, 11.4, 8.9, 8.8, 9.4, 8.7, + 12.0, 9.5, 14.1, 12.7, 10.1, 8.4, 12.8, 15.8, 12.6, 23.8, 14.8, 10.2, 8.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 17.8, 25.2, 30.5, 25.2, 15.9, 15.6, 24.3, 18.7, 15.7, 22.2, 0, 0, 21.2, 33.3, 18.7, 11.6, + 13.9, 10.5, 10.2, 10.0, 10.5, 18.0, 11.0, 10.4, 9.0, 9.6, 12.6, 10.4, 15.3, 8.9, 8.8, 16.0, 23.2, 25.6, 23.4, + 9.3, 13.3, 18.5, 11.3, 9.1, 16.7, 10.9, 8.9, 11.0, 10.4, 10.9, 10.5, 11.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 23.9, 33.3, 23.1, 38.1, 18.3, 15.4, 17.4, 17.3, 20.6, 17.8, 0, 0, 25.8, 17.0, 22.1, 11.8, + 19.5, 17.7, 10.1, 11.4, 12.1, 14.8, 12.3, 10.1, 10.6, 9.7, 11.5, 8.8, 10.4, 10.2, 10.8, 8.6, 28.2, 27.2, 25.9, + 20.4, 14.3, 27.9, 23.4, 18.8, 13.5, 9.6, 8.2, 8.8, 14.3, 8.2, 11.5, 11.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 23.4, 23.6, 0, 24.2, 17.3, 14.3, 14.1, 20.2, 20.4, 17.8, 15.4, 14.3, 16.3, 12.5, 17.4, 11.8, + 0, 0, 10.2, 11.8, 9.5, 13.9, 9.7, 9.0, 11.1, 9.8, 11.4, 10.0, 8.8, 8.7, 9.1, 10.0, 22.5, 29.2, 27.2, 23.8, + 13.1, 8.9, 9.6, 12.2, 10.1, 12.0, 9.1, 9.6, 13.0, 10.9, 10.0, 12.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0], + [0, 0, 0, 21.2, 16.9, 16.1, 17.3, 18.4, 19.4, 21.6, 21.9, 20.1, 20.4, 20.8, 15.3, 19.6, 19.7, 18.8, 19.6, 17.9, + 14.7, 10.8, 0, 0, 0, 0, 0, 0, 0, 0, 11.5, 0, 0, 8.7, 10.3, 11.2, 10.7, 9.0, 14.7, 17.7, 14.7, 11.3, 10.4, 8.7, + 19.9, 12.6, 8.2, 8.6, 8.3, 9.4, 15.0, 26.5, 25.0, 11.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 14.8, 14.8, 18.2, 16.0, 15.0, 14.7, 17.4, 36.6, 33.4, 19.1, 13.9, 13.4, 13.1, 16.0, 19.3, 16.9, 0, + 21.1, 18.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13.1, 17.7, 14.9, 17.3, 9.9, 16.7, 18.8, 10.8, 9.8, 8.1, 10.3, + 9.0, 11.9, 11.8, 9.4, 8.2, 10.6, 20.1, 23.5, 14.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 18.4, 14.7, 14.7, 14.7, 15.3, 14.5, 15.0, 16.0, 32.3, 18.0, 14.1, 14.6, 12.8, 12.3, 12.4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14.0, 8.4, 8.4, 11.7, 14.6, 8.6, 8.2, 8.8, 12.6, 10.2, 8.0, 8.5, 8.8, 8.4, + 12.4, 15.5, 9.0, 17.7, 18.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 17.1, 14.7, 14.8, 0, 0, 15.6, 15.6, 27.8, 19.5, 14.6, 12.9, 23.2, 14.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 8.4, 8.3, 10.4, 8.2, 8.1, 10.3, 10.4, 10.7, 8.4, 15.3, 12.9, 7.9, 8.6, 8.2, 9.8, + 15.0, 8.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 16.2, 0, 0, 0, 0, 22.8, 23.9, 13.4, 13.9, 16.5, 18.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 15.7, 18.0, 0, 0, 0, 19.8, 15.9, 19.8, 23.9, 9.8, 7.8, 11.8, 12.1, 10.8, 13.6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27.2, 14.8, 14.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8.2, 7.8, 11.0, 8.5, 8.1, 9.3, 17.0, 24.7, 9.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7.9, 14.2, 8.1, 13.6, 17.2, 14.5, 20.2, 18.9, 8.5, 7.7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 13.7, 17.6, 10.9, 9.9, 11.1, 9.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12.2, 19.5, 7.9, 8.6, 12.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 11.3, 18.4, 12.4, 9.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 11.5, 19.5, 17.0, 9.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22.4, 21.6, 20.5, 9.8, 9.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 20.5, 27.3, 24.9, 11.5, 12.2, 22.3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 13.9, 20.1, 10.3, 14.8, 24.0, 15.1, 16.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22.9, 22.7, 13.0, 10.4, 9.1, 19.0, 22.8, 24.2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22.8, 26.2, 9.2, 10.6, 9.1, 7.6, 25.2, 19.6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 11.5, 20.9, 8.6, 10.4, 9.2, 7.9, 9.8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 12.5, 7.7, 7.2, 7.2, 8.1, 10.1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18.6, 0, 11.4, 10.8, 13.3, 13.9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0], + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) \ No newline at end of file diff --git a/src/rivm-rio/aps2raster.py b/src/rivm-rio/aps2raster.py new file mode 100755 index 0000000..cde4dd7 --- /dev/null +++ b/src/rivm-rio/aps2raster.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python +# +# aps2raster - convert RIVM RIO output file (.aps) to a GeoTIFF coverage file (.tif) +# +# Author: Just van den Broecke - 2015 +# License: GPL +# +# This utility reads an .aps file, parsing its first line as metadata and the +# remaining lines as arrays of floats. These arrays are put into a 2-dimensional array. +# The GDAL library is used to create a 1-band GeoTIFF coverage file from this 2-dim array. Elements of the +# APS metadata provide input parameters for the GDAL functions, in particular the origin and +# pixelsize. Projection is fixed at the Dutch EPSG:28992 (RD) projection. Although the APS +# data are floats, they are rounded and converted to ints (0-255) in order to fit into the GeoTIFF. +# Negative values in the APS data like -999.0 are assumed to be 0 (TODO: maybe GDAL.NO_DATA later). +import sys +import gdal,osr +import numpy as np + +def array2raster(out_file, origin, pixel_width, pixel_height, array, epsg_code): + cols = array.shape[1] + rows = array.shape[0] + origin_x = origin[0] + origin_y = origin[1] + n_bands = 1 + + driver = gdal.GetDriverByName('GTiff') + + # Create raster with 1-band and 1-byte cells + out_raster = driver.Create(out_file, cols, rows, n_bands, gdal.GDT_Int16) + + # affine transformation coefficients + out_raster.SetGeoTransform((origin_x, pixel_width, 0, origin_y, 0, pixel_height)) + + # Write array data to first rasterband + out_band = out_raster.GetRasterBand(1) + out_band.SetNoDataValue(-999) + out_band.WriteArray(array) + + # Project + out_raster_srs = osr.SpatialReference() + out_raster_srs.ImportFromEPSG(epsg_code) + out_raster.SetProjection(out_raster_srs.ExportToWkt()) + + # Writeout + out_band.FlushCache() + +def parse_aps_meta(meta_line): + # APS Header + # Y M D H C unit sys comment format proj orig_x orig_y cols rows pix_w pix_h + # 15 9 16 10 NO2 ug/m3 RIO uurwaarden f7.1 1 0.000 620.000 70 80 4.000 4.000 + + # Remove excess whitespace + meta_line = " ".join(meta_line.split()) + + # Now split with single whitespace + meta_arr = meta_line.split(' ') + + # Build-up dict from array, do conversions where needed + meta = dict() + + meta['year'] = int(meta_arr[0]) + meta['month'] = int(meta_arr[1]) + meta['day'] = int(meta_arr[2]) + meta['hour'] = int(meta_arr[3]) + meta['component'] = meta_arr[4] + meta['unit'] = meta_arr[5] + meta['system'] = meta_arr[6] + meta['comment'] = meta_arr[7] + meta['cell_format'] = meta_arr[8] + + # Code voor coordinatenstelsel + # 1. Amersfoortse coordinaten + # 2. Geografische coordinaten + # 3. Projectie op 50 NB (shifted pole) 4. projectie op 60 NB (shifted pole) 5. EMEP-coordinaten + # 6. IE-coordinaten (EMEP/2.) + # 7. OECD-coordinaten (EMEP/3.) + meta['projection'] = int(meta_arr[9]) + + # Upper left of upper left pixel + meta['origin_x'] = float(meta_arr[10])*1000 + meta['origin_y'] = float(meta_arr[11])*1000 + + meta['columns'] = int(meta_arr[12]) + meta['rows'] = int(meta_arr[13]) + meta['pixel_width'] = float(meta_arr[14])*1000 + meta['pixel_height'] = float(meta_arr[15])*1000 + + return meta + +def read_aps_file(file_path): + file = open(file_path, 'r') + + # First line is meta-info: read and parse + line = file.readline() + meta = parse_aps_meta(line) + + # Start with zeroed 2-dim array + raster_array = np.zeros((meta['rows'], meta['columns'])) + + # Fill array from lines in file, each line is a row to be put in 2-dim array + # Cells are floats, to be rounded and converted later to ints + line_count = 0 + while line and len(line) > 0 and line_count < meta['rows']: + line = file.readline() + + # Parse line into array of floats + line_arr = np.fromstring(line, dtype=np.float32, sep=' ') + + # Add to 2-dim array + raster_array[line_count] = line_arr + line_count += 1 + + return meta, raster_array + +if __name__ == "__main__": + args = sys.argv + + in_file = args[1] # '../../data/rivm-rio/output/2015091611_no2.aps' + out_file = args[2] # 'aps_no2.tif' + + aps_meta, aps_array = read_aps_file(in_file) + origin = (aps_meta['origin_x'], aps_meta['origin_y'], 0) + pixel_width = aps_meta['pixel_width'] + pixel_height = -aps_meta['pixel_height'] + + # http://docs.scipy.org/doc/numpy/reference/generated/numpy.around.html + # Round all floats first + aps_array = np.around(aps_array) + + # http://stackoverflow.com/questions/7994133/fast-in-place-replacement-of-some-values-in-a-numpy-array + # Make negative values zero NB maybe need NO_VALUE + # aps_array[aps_array < 0] = 0 + + # COnvert rounded floats to ints + aps_array = aps_array.astype(int) + + # Debug: convert to oridinary Python list (array) + # aps_list = aps_array.tolist() + + # Convert to raster file + array2raster(out_file, origin, pixel_width, pixel_height, aps_array, 28992) + diff --git a/src/rivm-rio/sld/aps_no2.sld b/src/rivm-rio/sld/aps_no2.sld new file mode 100644 index 0000000..f009394 --- /dev/null +++ b/src/rivm-rio/sld/aps_no2.sld @@ -0,0 +1,30 @@ + + + + rivm_aps_no2 + + rivm_aps_no2 + rivm_aps_no2 + Style for RIVM APS raster NO2 + + Feature + + + + + + + + + + + + + + + + + +