diff --git a/joss.05074/10.21105.joss.05074.crossref.xml b/joss.05074/10.21105.joss.05074.crossref.xml new file mode 100644 index 0000000000..12107901e8 --- /dev/null +++ b/joss.05074/10.21105.joss.05074.crossref.xml @@ -0,0 +1,218 @@ + + + + 20230613T142003-2c19b37f0c27300c5b154473fba879e2c7488f68 + 20230613142003 + + JOSS Admin + admin@theoj.org + + The Open Journal + + + + + Journal of Open Source Software + JOSS + 2475-9066 + + 10.21105/joss + https://joss.theoj.org/ + + + + + 06 + 2023 + + + 8 + + 86 + + + + pycoxmunk: A python package for computing sea surface +reflectance + + + + Simon R. + Proud + https://orcid.org/0000-0003-3880-6774 + + + + 06 + 13 + 2023 + + + 5074 + + + 10.21105/joss.05074 + + + http://creativecommons.org/licenses/by/4.0/ + http://creativecommons.org/licenses/by/4.0/ + http://creativecommons.org/licenses/by/4.0/ + + + + Software archive + 10.5281/zenodo.8020079 + + + GitHub review issue + https://github.com/openjournals/joss-reviews/issues/5074 + + + + 10.21105/joss.05074 + https://joss.theoj.org/papers/10.21105/joss.05074 + + + https://joss.theoj.org/papers/10.21105/joss.05074.pdf + + + + + + A sea surface reflectance model for (A)ATSR, +and application to aerosol retrievals + Sayer + Atmospheric Measurement +Techniques + 4 + 3 + 10.5194/amt-3-813-2010 + 2010 + Sayer, A., Thomas, G., & +Grainger, R. (2010). A sea surface reflectance model for (A)ATSR, and +application to aerosol retrievals. Atmospheric Measurement Techniques, +3(4), 813–838. +https://doi.org/10.5194/amt-3-813-2010 + + + Cloud retrievals from satellite data using +optimal estimation: Evaluation and application to ATSR + Poulsen + Atmospheric Measurement +Techniques + 8 + 5 + 10.5194/amt-5-1889-2012 + 2012 + Poulsen, C., Siddans, R., Thomas, G., +Sayer, A., Grainger, R., Campmany, E., Dean, S., Arnold, C., & +Watts, P. (2012). Cloud retrievals from satellite data using optimal +estimation: Evaluation and application to ATSR. Atmospheric Measurement +Techniques, 5(8), 1889–1910. +https://doi.org/10.5194/amt-5-1889-2012 + + + ORAC: Optimal retrieval of aerosol and +cloud + A. C. Povey + GitHub repository + 2022 + A. C. Povey, S. R. P., G. McGarragh. +(2022). ORAC: Optimal retrieval of aerosol and cloud. In GitHub +repository. GitHub. +https://github.com/ORAC-CC/orac + + + Statistics of the sea surface derived from +sun glitter + Cox + J. mar. Res. + 13 + 1954 + Cox, C. (1954). Statistics of the sea +surface derived from sun glitter. J. Mar. Res., 13, +198–227. + + + Measurement of the roughness of the sea +surface from photographs of the sun’s glitter + Cox + Josa + 11 + 44 + 10.1364/josa.44.000838 + 1954 + Cox, C., & Munk, W. (1954). +Measurement of the roughness of the sea surface from photographs of the +sun’s glitter. Josa, 44(11), 838–850. +https://doi.org/10.1364/josa.44.000838 + + + Pytroll: An open-source, community-driven +python framework to process earth observation satellite +data + Raspaud + Bulletin of the American Meteorological +Society + 7 + 99 + 10.1175/bams-d-17-0277.1 + 2018 + Raspaud, M., Hoese, D., Dybbroe, A., +Lahtinen, P., Devasthale, A., Itkin, M., Hamann, U., Rasmussen, L. Ø., +Nielsen, E. S., Leppelt, T., & others. (2018). Pytroll: An +open-source, community-driven python framework to process earth +observation satellite data. Bulletin of the American Meteorological +Society, 99(7), 1329–1336. +https://doi.org/10.1175/bams-d-17-0277.1 + + + Dask: Parallel computation with blocked +algorithms and task scheduling + Rocklin + Proceedings of the 14th python in science +conference + 10.25080/majora-7b98e3ed-013 + 2015 + Rocklin, M. (2015). Dask: Parallel +computation with blocked algorithms and task scheduling. Proceedings of +the 14th Python in Science Conference. +https://doi.org/10.25080/majora-7b98e3ed-013 + + + Evaluation of sun glint models using MODIS +measurements + Zhang + Journal of Quantitative Spectroscopy and +Radiative Transfer + 3 + 111 + 10.1016/j.jqsrt.2009.10.001 + 2010 + Zhang, H., & Wang, M. (2010). +Evaluation of sun glint models using MODIS measurements. Journal of +Quantitative Spectroscopy and Radiative Transfer, 111(3), 492–506. +https://doi.org/10.1016/j.jqsrt.2009.10.001 + + + Numba: A llvm-based python jit +compiler + Lam + Proceedings of the second workshop on the +LLVM compiler infrastructure in HPC + 2015 + Lam, S. K., Pitrou, A., & +Seibert, S. (2015). Numba: A llvm-based python jit compiler. Proceedings +of the Second Workshop on the LLVM Compiler Infrastructure in HPC, +1–6. + + + + + + diff --git a/joss.05074/10.21105.joss.05074.jats b/joss.05074/10.21105.joss.05074.jats new file mode 100644 index 0000000000..2b2490666e --- /dev/null +++ b/joss.05074/10.21105.joss.05074.jats @@ -0,0 +1,410 @@ + + +
+ + + + +Journal of Open Source Software +JOSS + +2475-9066 + +Open Journals + + + +5074 +10.21105/joss.05074 + +pycoxmunk: A python package for computing sea surface +reflectance + + + +https://orcid.org/0000-0003-3880-6774 + +Proud +Simon R. + + + + + +National Centre for Earth Observation, RAL Space, STFC +Rutherford Appleton Laboratory, Harwell, OX11 + + + + +27 +10 +2022 + +8 +86 +5074 + +Authors of papers retain copyright and release the +work under a Creative Commons Attribution 4.0 International License (CC +BY 4.0) +2022 +The article authors + +Authors of papers retain copyright and release the work under +a Creative Commons Attribution 4.0 International License (CC BY +4.0) + + + +Python +remote sensing +earth observation +oceanography +satellite + + + + + + Summary +

Knowledge of how the sea surface reflects incoming sunlight is of + key importance within satellite remote sensing of the Earth. For + example, estimating the amount of dust or pollution in the atmosphere + requires precise knowledge of the surface reflectance in order to be + accurate. This paper introduces pycoxmunk, a python + library that computes both the sea surface reflectance and the + so-called Bidirectional Reflectance Distribution Function (BRDF) + across the visible and near-infrared spectrum. Pycoxmunk is designed + to work with data from many of the most commonly used satellite + sensors and provides output that can be used within retrieval + algorithms or as a standalone product in its own right.

+
+ + Statement of need +

The amount of sunlight reflected by a water surface depends upon + factors such as the wavelength of light being examined, the wind speed + - which affects wave height and the presence of white + caps atop the waves - and the presence of pigments such as + chlorophyll. Satellite sensors typically look down from space towards + the water surface and hence have a good view of surface reflectance if + we assume clear sky conditions. However, the presence of clouds or + aerosols (smoke, dust, etc) can affect the measured top of + atmosphere reflectance. There exist a multitude of algorithms + to detect and analyse these cloud and aerosol features, and they + typically require accurate information on the surface reflectance in + order to retrieve the atmospheric properties.

+

Therefore, a tool to calculate the expected sea surface reflectance + for a given set of satellite measurements and weather conditions can + provide a valuable input into such retrieval algorithms.

+
+ + State of the field +

Previously, most retrieval algorithms have their own inbuilt method + of computing this reflectance via a wide range of approaches and + algorithms. A particularly well-used approach is that first described + by Cox and Munk + (Cox, + 1954; + Cox + & Munk, 1954), and expanded upon by subsequent research + (Sayer + et al., 2010). For example, the ORAC algorithm that can + retrieve both cloud and aerosol properties uses Cox-Munk at the core + of its surface reflectance simulation + (A. + C. Povey, 2022; + Poulsen + et al., 2012). However, both ORAC and other projects have their + implementations of Cox-Munk tightly bound with the rest of their + codebase, meaning that users cannot easily run just the sea surface + reflectance calculation. Many remaining tools, such as the + commonly-used HydroLight algorithm that requires a purchased license + to function, are therefore also of limited accessibility. An overview + of some alternative models is given in + (Zhang + & Wang, 2010), showing both the limited availability of + suitable reflectance models and the good performance of the Cox-Munk + technique.

+

The library introduced here, pycoxmunk, implements + the Cox-Munk method in a python library that is widely accessible + without relying on custom code unique to a given retrieval system such + as ORAC. This enables a more widely applicable version of Cox-Munk + than has previously been available. In writing this library, ORAC’s + fortran implementation of Cox-Munk was used as a reference to ensure + pycoxmunk produced correct output.

+
+ + Algorithm details +

The sea surface has an intrinsic reflectance that depends on how + much light is absorbed on the surface and reflected deeper within the + water. This primarily depends on the chlorophyll content. At present, + pycoxmunk assumes a fixed fraction of clorophyll and + hence a fixed intrinsic reflectance at a given wavelength that in calm + conditions, depends on the viewing geometry:

+

+ + θs: + The angle between the sun and vertical such that an angle of 0° + specifies that the sun is directly above the target and an angle of + 90° specifies that the sun is at the horizon.

+

+ + θv: + The angle between the satellite and vertical, defined as above.

+

+ + ϕs: + The angle between the sun and North, defined such that 0° and 180° + specify that the sun is directly North and directly South of the + target respectively and likewise 90° and 270° specify the sun being + due East and West respectively.

+

+ + ϕv: + The angle between the satellite and North, defined as above.

+

Where the sun and satellite geometry is favourably aligned, on + opposing sides of the target, the sea acts like a mirror, known as + specular reflection, and there is a large peak in sea surface + reflectance in the sun glint region - as shown in Fig + 1b. In other geometrical conditions the reflectance is significantly + lower.

+

In windy conditions, the assumption of specular reflection breaks + down due to wave activity that, for high wind speeds, generates white + caps atop the waves that appear very bright. + pycoxmunk accounts for white caps using a simple + relation(Sayer + et al., 2010):

+

+ + ρwc=Rwc2.951e6vwind3.52

+

Where + + Rwc + is the predefined whitecap reflectance at a given wavelength and + + + vwind + is the wind speed.

+
+ + Usage and integration with other libraries +

pycoxmunk is designed to work in tandem with the + satpy library + (Raspaud + et al., 2018) that reads, calibrates and provides geometry + information for many satellite sensors across a wide range of use + cases. Once a user has loaded satellite data with satpy they can then + pass satpy’s main class, the Scene, to + pycoxmunk along with optional arguments to define the + user-required processing. pycoxmunk will then compute + the sea surface reflectance and store the results as additional + datasets within the Scene, which are directly + accessible to the user. A key feature of satpy, which + pycoxmunk builds upon, is the use of + dask arrays + (Rocklin, + 2015) to facilitate processing of datasets larger than the + user’s total system memory. Internally, all of + pycoxmunk’s processing is done via dask. If computing + the BRDF parameters, pycoxmunk will use the + numba library + (Lam + et al., 2015) to speed up computation of the + rho_0d, rho_0v and + rho_dd terms.

+

To use pycoxmunk, a user first needs to load their + satellite data via satpy, then pass this to + pycoxmunk’s main class, PyCoxMunk, + along with a list of sensor channels to be processed. Optionally, the + user can then supply wind information in the U and V directions, + preferably at 10m height above the surface. These can be passed as + either two floats (for constant wind across the satellite image) or as + arrays of equal size to the satellite data for the case of per-pixel + wind data. The user can also supply ‘masks’ that remove areas of no + interest, such as land pixels and cloud filled portions of the image. + Lastly, the user calls retr_coxmunk_refl to + compute the final reflectances, which can then be used by accessing + the PyCoxMunk.scn.

+
+ + Figures + +

(a) An image from Japan’s Himawari-8 satellite at 04:10 + UTC on 13th Sept 2016, Super Typhoon Meranti is visible in the + upper-center. (b) The corresponding Cox-Munk surface reflectance for + the 0.47, 0.51 and 0.64 micron channels, showing regions of sunglint + and wind driven white + caps.

+ +
+
+ + Acknowledgements +

I acknowledge the contributions of the ORAC development team for + their initial creation of the Cox-Munk code within ORAC. In particular + Greg McGarragh for writing numerous versions of the Fortran code and + Andy Sayer for the original Cox-Munk formulation. This work was funded + by the Natural Environment Research Council (NERC) through the + National Centre for Earth Observation award ref. NE/R016518/1 and by a + NERC Innovation fellowship, award ref. NE/R013144/1.

+
+ + + + + + + SayerAM + ThomasGE + GraingerRG + + A sea surface reflectance model for (A)ATSR, and application to aerosol retrievals + Atmospheric Measurement Techniques + Copernicus GmbH + 2010 + 3 + 4 + 10.5194/amt-3-813-2010 + 813 + 838 + + + + + + PoulsenCA + SiddansR + ThomasGE + SayerAM + GraingerRG + CampmanyE + DeanSM + ArnoldC + WattsPD + + Cloud retrievals from satellite data using optimal estimation: Evaluation and application to ATSR + Atmospheric Measurement Techniques + Copernicus GmbH + 2012 + 5 + 8 + 10.5194/amt-5-1889-2012 + 1889 + 1910 + + + + + + A. C. PoveyS. R. ProudG. McGarragh + + ORAC: Optimal retrieval of aerosol and cloud + GitHub repository + GitHub + 2022 + https://github.com/ORAC-CC/orac + + + + + + CoxCharles + + Statistics of the sea surface derived from sun glitter + J. mar. Res. + 1954 + 13 + 198 + 227 + + + + + + CoxCharles + MunkWalter + + Measurement of the roughness of the sea surface from photographs of the sun’s glitter + Josa + Optica Publishing Group + 1954 + 44 + 11 + 10.1364/josa.44.000838 + 838 + 850 + + + + + + RaspaudMartin + HoeseDavid + DybbroeAdam + LahtinenPanu + DevasthaleAbhay + ItkinMikhail + HamannUlrich + RasmussenLars Ørum + NielsenEsben Stigård + LeppeltThomas + others + + Pytroll: An open-source, community-driven python framework to process earth observation satellite data + Bulletin of the American Meteorological Society + 2018 + 99 + 7 + 10.1175/bams-d-17-0277.1 + 1329 + 1336 + + + + + + RocklinMatthew + + Dask: Parallel computation with blocked algorithms and task scheduling + Proceedings of the 14th python in science conference + Citeseer + 2015 + 10.25080/majora-7b98e3ed-013 + + + + + + ZhangHao + WangMenghua + + Evaluation of sun glint models using MODIS measurements + Journal of Quantitative Spectroscopy and Radiative Transfer + Elsevier + 2010 + 111 + 3 + 10.1016/j.jqsrt.2009.10.001 + 492 + 506 + + + + + + LamSiu Kwan + PitrouAntoine + SeibertStanley + + Numba: A llvm-based python jit compiler + Proceedings of the second workshop on the LLVM compiler infrastructure in HPC + 2015 + 1 + 6 + + + + +
diff --git a/joss.05074/10.21105.joss.05074.pdf b/joss.05074/10.21105.joss.05074.pdf new file mode 100644 index 0000000000..92bd909ed9 Binary files /dev/null and b/joss.05074/10.21105.joss.05074.pdf differ diff --git a/joss.05074/media/Fig1.jpg b/joss.05074/media/Fig1.jpg new file mode 100644 index 0000000000..af47f8e2ee Binary files /dev/null and b/joss.05074/media/Fig1.jpg differ