SALBEC – A PYTHON LIBRARY AND GUI APPLICATION TO CALCULATE THE DIURNAL VARIATION OF THE SOIL ALBEDO

,


Introduction
The albedo of an object is the fraction of incident solar radiation reflected from it in the range of 0.3-3 nm, and is a measure integrating the surface reflectance over all view directions (Peddle et al. 2001, Schaepman-Strub et al. 2006). Similar to other components of the Earth's surface, the albedos of bare soil surfaces provide the basic input parameters in modelling biophysical processes associated with the energy transfer between the soil, vegetation and atmosphere (Farmer, Cook 2013). With the continuous growth of available satellites and low-altitude data, the precise estimation of the diurnal variation of the albedo becomes vital (Liang et al. 2010, Qu et al. 2014. Most studies use prescribed values based on the soil maps, and thus are at low spatial resolution (He et al. 2019). In recent years, there has been an increase in the spatial and temporal resolutions of albedo observations obtained from satellite, airborne and unmanned aerial vehicle (UAV) measurements (van Leeuwen, Roujean 2002, Govaerts, Lattanzio 2007, Ortega-Farías et al. 2016, Cao et al. 2018, Canisius et al. 2019, He et al. 2019, Zhou et al. 2019, Wind et al. 2020. However, all reported experiments require the direct observation of the albedo from ground sensors during acquisition. These observations provide information on the diurnal variation of the albedo but cannot be applied to plan the optimal acquisition time. Several theoretical models of albedo have been proposed in the last 50 years (Temps, Coulson 1977, Ineichen et al. 1990, Gueymard 1987, Lucht et al. 2000, Enriquez et al. 2012. The complexity of those models varies from straightforward constant models (Baldridge 2009, Liu, Jordan 1963, through isotropic (Nkemdirim 1972, Hay 1993 and zonal (Gueymard 2009) models, to models attempting to generalise albedo as a function of soil and surface inclination (Temps, Coulson 1977). Most of those models contain a constant parameter, which refers to the generalised surface reflectance reflected as one number. Recently Ziar et al. (2019) proposed a comprehensive and advanced model based on surface reflectance supported by several input data. This model allows one to estimate the albedo at different conditions; however, its real behaviour at the specific conditions of bare soils is yet unknown. Moreover, the model requires detailed information about the irradiance, which, in practice, limits its real applications.
The overall level of the broadband blue-sky albedos (α) of bare soil surfaces depends on several components. Some of these are stable over time, such as the organic matter, iron oxide and carbonate content in the soil, whereas others, such as moisture and surface roughness, are subject to dynamic changes (Stoner, Baumgardner 1981, Ben-Dor et al. 2003. The soil roughness primarily results from agricultural treatments and preserves mid-term stability at least in the order of days. In contrast, the soil moisture and cloud cover can change significantly during a day, or even a few hours. Under clear-sky conditions, the a of the soil surfaces vary during the day ( Fig. 1) with the changing solar zenith angle (θ s ), reaching their minimum at the local solar noon and approaching 1 at sunrise and sunset (Monteith, Szeicz 1961, Wang et al. 2004, Oguntunde et al. 2006. Cierniewski et al. (2015) found that the surface roughness affects not only the overall a level of soils but also the a growth relative to θ s between the local solar noon and θ s » 75°. The a of rough soil surfaces, such as deeply ploughed soils, are almost constant in this range, while those of the same soils when smoothed (for example, by a smoothing harrow) clearly increase. The clear-sky a are also modified by the atmospheric absorption and cloud cover (Leroy et al. 1997). Generally, the diffuse radiation increases as cloud cover increases, thereby diminishing the role of θ s (Frasner 1975).
Recently, Cierniewski et al. (2018a) proposed a set of equations that could be used to calculate the diurnal variation of bare soil a, using 153 sets of soil surface measurements collected from Poland, Israel and France. The equations are used as the input data for θ s. In contrast with the procedure adopted in the study by Ziar et al. (2019), these measurements require only few simple free parameters: specific roughness, and reflectance values of soils. Soil surfaces analysed by Cierniewski et al. (2018a) represented over 54% of the major soil groups of all arable land in the world. The correctness of these equations was expressed by the coefficient of determination and the mean square error that were estimated at 0.91 and 0.03, respectively. Finally, these equations were used to quantify the annual dynamics of shortwave radiation reflected from the air-dried bare arable lands in Israel (Cierniewski et al. 2018b), the European Union (Cierniewski et al. 2019) and around the world (Cierniewski, Ceglarek 2018).
For extended periods of several days, months, seasons and years, the average diurnal a of the components are seemingly more useful than their instantaneous values (Grant et al. 2000, Cierniewski et al. 2013. Currently, the a of the Earth's surface components is often obtained from satellite and airborne observations. Cierniewski et al. (2013) proposed the observation of bare soil surfaces at the optimal time (T o ) when their a reaches the average diurnal value. It was assumed that their observation at this moment could reduce the overall error resulting from the correction of their raw a satellite data. This assumption is important in the view of Sellers et al. (1995), who defined the acceptable a error value for the Earth's surfaces as ± 2%, for modelling the Earth's climate on a global scale.
With the increasing cost of direct observations and increasing possibilities of computer sciences technology, there is a growing interest in advanced tools that simulate the behaviour of complex systems in virtual environments. Such solutions, to be widely used by natural scientists, must have good theoretical foundations and be accessible to users that do not have programming skills. This study aims to present a full-featured software: a Python library and graphical user interface distributed as a free and open source software (FOSS). Python was selected upon its growing participation in both remote sensing (Bunting et al. 2014) and soil science (Boudoire et al. 2020). The software follows the concepts described above (Cierniewski et al. 2015(Cierniewski et al. , 2018(Cierniewski et al. , 2019 and is designed to predict the diurnal variation of the clear-sky a based on the soil surface properties: 1. for any soil described by its reflectance spectrum, 2. for any place on Earth, 3. for any daylight time of any day. It also provides tools to calculate the value and timing of the mean diurnal a within a certain range. The software uses input parameters that are stable in the long term and are expressed in the form of the full range of laboratory soil spectrum and soil roughness, which are subject to change owing to agricultural treatments. The described software grew from Python scripts previously prepared to calculate T o , using the cases of arable land areas in 33 of the largest agricultural regions globally, on particular days of the year when extensive sections become bare (Cierniewski, Jasiewicz 2020). To our knowledge, a software or programming library designed to calculate the bare soil a is not publicly available. A similar model, the Albedo Calculator Model (ACM), designed to simulate the diurnal a in urban areas, was described by Chimklai et al. (2004) The rest of this paper is organised as follows: after describing the theoretical basis for calculating the a using the soil spectra and roughness parameters, we present the Soil ALBEdo Calculator (SALBEC) software design. In the case study 1 This software seems to be unavailable. section, we discuss the results of selected measurements made in Israel during a field campaign in 2015. Finally, possible extensions and future developments and improvements are discussed.

Principle of calculation
The diurnal change in θ s is an astronomic property and is well described by mathematics. The relationship between α s and θ s is computed using the set of empirical equations proposed by Cierniewski et al. (2018a) and broadly discussed ibidem. Here, the basic principles are summarised to illustrate building the computer science implementation. In the first step towards obtaining the diurnal a variation at a specific place and time, we calculate the soil a solely based on the soil spectrum and roughness. Soils spectra can easily be obtained either from European Land Use and Cover Area frame Statistical Survey (LUCAS) (Stevens et al. 2013) or from the Global Soil Spectral Library (Rossel 2009, Rossel et al. 2016. The soil roughness parameters can be calculated based on the direct measurements or estimated based on agricultural treatments according to Table 3 available in the study by Cierniewski et al. (2018b): HSD ~ 5 mm, 10 mm and 25 mm and T 3D 1.05, 1.1 and 1.25 for smooth harrow, disc harrow and plough, respectively (Cierniewski et al. 2018b). Reflectance spectra in the range of 350-2500 nm was used to describe the a of the studied soils when θ s = 45°. The first two equations transform the soil parameters into coefficients of the model: This equation computes the overall a level of the soils with a given roughness at θ s = 45° (α 45 ), where T 3D is the roughness index, defined as the ratio of the real surface area within its basic area unit to its flat horizontal area (Taconet, Ciarletti 2007). The index, d, relates to the soil reflectance data transformed to its second derivative for a specified wavelength in nanometres. The indexes are specific for bare soils and were established experimentally on 153 samples of soils from several climatic zones. The second derivative is independent on the absolute values of reflectance and stabilises the results against the total amount of reflected energy. s α = 6.26 × 10 −7 + 0.0043(HSD) −1. 418 ( 2) This equation calculates s α as the slope of the a rise relative to θ s < 75°. The HSD is another roughness index that describes the standard deviation of the relative height of a soil surface within its basic area unit (Taconet, Ciarletti 2007).
This equation calculates the a of the studied soil surfaces (α θs ) for θ s < 75°.
This equation enables the adjustment of the entire range of the relationship between a of these soils and θ s , for θ s ∈[0°, 90°]. Symbols a, b, c and d denote the fitted parameters of the equation.

Implementation of the model
The process of converting the input parameters into a soil albedo model is divided into three steps (A-C), as shown in Figure 2. As observed by Cierniewski et al. (2018), the dependency between θ s and a is almost linear if θ s ∈[0°, 75°] and can be approximated linearly by Eq. (3). The relationship between θ s ∈[75°, 90°] and a is more complex owing to its non-linearity and is approximated by a fitting process on the intermediate data using Eq. (4).
First, we calculate the values of α 45 and s α from all the input data, i.e. the soil reflectance spectra and soil roughness (T 3D and HSD) using Eqs (1) and (2). Based on this, a list of points (L θs, αθs ) is generated, where θ s < 75° and α θs are obtained from Eq. (3). The list of points is generated with a density of θ s = 1°. Finally, the last point, L 90, 1 = (90, 1), is appended to the list, where L 90, 1 corresponds to θ s = 90° and α 90 = 1 at the time of sunset (Monteith, Szeicz 1961, Wang et al. 2004, Oguntunde et al. 2006). Subsequently (Fig. 2B), we use the standard least-square fitting algorithm to fit Eq. (4) to L θs, αs . Unfortunately, the relationship between θ s and α s in the critical range of θ s ∈[75°, 90°] is not approximated by any auxiliary parameter. Therefore, the result of fitting between 75° and 90° did not fully correspond to the measurements obtained by Cierniewski et al. (2015). Through experiments, we found that the reduction of b in Eq. (4) by 0.01 resolved this problem (Fig. 2C). Finally, we have a tuple of parameters (a, b, c, d) applied to Eq. (4) to create a model:

Diurnal albedo variation
Although the model Ã allows mapping the values of θ s onto α θs , the values of θ s are not connected with the actual time of the day. The diurnal change in θ s is an astronomical expression that can be determined for each location on the Earth on any day of the year. The minimum inputs are the geographic location of the sample expressed as the latitude and longitude (l, ϕ), and the day of a year (DOY). Most astronomical software work primarily in Coordinated Universal Time (UTC). All calculations were made in solar local time (SLT), where the noontime for each location is always at 12:00 (local), as recommended as a time regime for the a calculation (Oguntunde et al. 2006), making the results comparable for each point on the Earth. To recalculate UTC to SLT, a time shift, denoted as D t , specific for each day and location, is required. This is the difference between the moment of the highest sun position, when θ s = min (θ s ). For SLT, min (θ s ) is at 12:00 AM, so D t = t noonUTC − t noonSLT .
Modelling the diurnal a variation using the time at a given location as a direct input is impossible. It requires the prior calculation of a hash table, L t, θ , where t denotes the discrete points in SLT between sunrise and sunset, and θ are values mapped onto the specific t keys. The time interval (I L ) of L t, θ defines the density of the key series and affects the balance between the computation time and the accuracy of the results. The result of the application of Eq. (4) on the θ s component of L t, θ provides a discrete list of α s assigned to specific keys of L.

Optimal observation time
Estimation of T o was the main motivation for creating SALBEC. Cierniewski and Jasiewicz (2020), following the concept of Sellers et al. (1995), had specified T o for the moment of day when a approximates its mean diurnal value ( α s ). The diurnal range of θ s depends on the geographic position and DOY; thus, α s is calculated by transforming Eq. (4) into the integral. As L t, θ, α is discrete, the following is used to calculate α s : where: -L αs are the discrete values of α s in the given day and location, and -|L| denotes the length of the list.
Through experiments, we found that L intervals denoted as I L = 1 s is a good trade-off between the computation time and prediction accuracy and allows approximation of T o with an accuracy of 1 s in reasonable computational time. A known α s allows the estimation of T o = α s ± ϵ, where ϵ is the acceptable deviation from α s . Estimating the T o requires the discrete set of L t, θ, α for the last L t , where a < α s . Accordingly, α s − ϵ and α s + ϵ are used to obtain an acceptable range of T o . All steps of the calculation are shown in Figure 3.

The design of SALBEC
SALBEC (Fig. 4) is divided into two distinct parts that are distributed together. The first part is the Python library designed to be imported into the Python environment, and the second part is its graphic user interface (GUI) front-end, which can be started directly from the operating system. The GUI is designed to provide the SALBEC functionality to non-programmers but is separated from the core library. Both environments, the Python library and the GUI, have the same functionality, except some GUI-only features that support processing in the visual environment. The Python library can be easily integrated and extended into more complex data processing scripts, while the  GUI has a workflow path limited by its functionality. The core library contains three modules (Fig. 4): Soil Database (soildatabase.py), Soil Albedo (soilalbedo.py) and Diurnal Albedo (diurnalalbedo. py). A working example of running a simple analysis using the Python script is included in the source code directory (example.py).

Soil database module
The soil database module is a supporting module designed to store and manage soil spectra. Soil spectra can be imported as text or spreadsheet files and can be imported separately during the run-time. However, considering that individual imports for each calculation could be an error-prone task, a separate module was created to import and manage the data. The database is designed as a list of soils, where each entity is stored as a single serialised binary object. Each object contains the spectrum as a wavelength-reflectance pair, geo-location of the soil sample (if available) and pre-computed spectrum derivatives necessary for Eq. (1). Soil names are a convenient way to access spectral data with intelligible names. The module is designed as a single class that facilitates basic management tasksadding, removing, modifying and renaming the individual entities -over the database. The soil database is independent of the other modules and can easily be expanded into a more universal, domain-agnostic data management tool. The software is distributed with the reflectance spectra for the 33 most extensive agricultural regions globally, averaged based on the georeferenced topsoil samples acquired from national, continental and global soil spectral libraries. These include the European LUCAS (Stevens et al. 2013) and the Global Soil Spectral Library (Rossel 2009, Rossel et al. 2016. The data set and the estimation of optimal observation time for the above-mentioned regions are extensively discussed in the study by Cierniewski and Jasiewicz (2020).

Soil surface albedo module
The soil surface albedo module is a step towards calculating the diurnal a at specific locations and times. The module soilalbdo facilitates the calculation of the a variation for the full range, [0°, 90°] of θ s . The module contains two classes (soil and soilCurve classes) and a few auxiliary functions, mostly to conduct the import and export of soil spectra from and to the soil database.

Soil class
Class soil is designed to work directly with the spectra. It facilitates reading the spectra directly from the text file or reads pre-processed data from the soil database. An individual spectral curve can be imported from the wavelength-reflectance tabular data or read from the soil database. For newly imported data, the class extracts the local second-derivative values of the wavelength/reflectance curve. The second derivative is calculated from the empirical values, initially interpolated to the standardised resolution of 1 nm and subsequently fitted to the curve at around 10 nm. The calculations are based on the SciPy built-in functions (interp1d and derivative). The class also provides an auxiliary method for drawing a spectrum in a publishable format and methods to communicate (read and write data) with the soil database.

Soil model class
Class soilCurve is designed to calculate the clear-sky a of the soil. It fits the free parameters of Eq. (4) to the full range of θ s . It accepts input values provided by the soil class and the two roughness coefficients (T 3D and HSD) provided by the user. Other class capabilities include the auxiliary functions to visualise the curve (Fig.  5A), along with the export parameters and the albedo model as a spreadsheet file.

Diurnal albedo module
The third module, diurnal albedo, contains one main class albedo and a batch of auxiliary functions. The class is the central part of the computational routines of the software and accepts l, ϕ in decimal degrees along with the DOY. These parameters are used to calculate the hash table L(t, θ, a) for a given location and day. Internally, class albedo uses the astral package to calculate specific points during the day and heights of the sun in terms of the solar height angle (θ h ), and it internally recalculates θ h = 90°−θ s . The class also calculates α s and T o .
The complete results of the albedo class include a pandas data record. The record contains all critical moments of the day, including T o ± ϵ. The class also provides methods to display the results in a graphical format (Fig. 5B) and to export them as spreadsheets. External batch functions facilitate data processing in a batch mode, for a specific period, or even an entire year. A detailed description of the class functionality is described in the software documentation and source code.

Graphic user interface (GUI)
The GUI is designed in the 'ribbon' style to provide quick and intuitive access to all the parameters accepted by the Python modules described above. The application is just one window (Fig. 6) divided into the results (Fig.  6A) and the input 'ribbon' bars ( Fig. 6B1-B3). The input bar is visually divided into three separate parts.
Soil surface (B1) is where the user can choose the soil spectrum and set the soil roughness parameters ('T3D' and 'HSD' fields). The soil spectrum as an input to the model can only be selected from the list of soils represented by their names. The roughness parameters, T 3D and HSD, must be set manually, but the GUI prevents entering values outside of the acceptable range. This part of the software facilitates the investigation of the relationship of θ s ~ α s as a line plot (Fig. 5A). The model is always re-fitted whenever a user decides to change the input parameters.
Geo-location (B2) is where the user can set the coordinates (latitude and longitude expressed as decimal degrees) of the expected location. If the soil spectrum has a geo-location, it is automatically set when a soil is selected from the list, but users can adjust the location manually, either by setting values in the input boxes or by clicking on the world map. Only valid geographical coordinates are accepted.
Days of the analysis (B3) is intended to set the date range. The day of the analysis can be set as a single day (current day by default), a range of dates or the entire year. If a range of dates or the entire year is selected, the number of days to be analysed can be reduced by increasing the daily interval (in days). The error field allows acceptable deviations from α s to be included in the results. The error values must be set as a list of percentages separated by a comma.
Pop-up dialogue windows are reduced to the minimum, except for the Soil Manager, which is a separate, GUI-only sub-module. This separate sub-module is divided into two tabs -the collection manager and the spectrum manager ( Fig.  6C1 and C2). These do not cover some functions of the underlying core library layer and are designated to manage the soil spectra visually. The additional benefit of the soil manager is the soil spectra browser and visual exporter. Each spectrum must receive a human-readable name during the import to the soil database. The collection manager offers an easy tool to limit the number of named spectra displayed in the soil surface.

Accuracy of prediction
The software presented in this study allows the modelling of the a variation of bare soil surfaces with differing roughness. The modelling is simplified to a clear-sky condition and refers to the optimal setup when soil surfaces can be viewed from a satellite. Eqs (1)-(4) used in this study are models fitted to the measurements acquired during several field campaigns in three countries (Poland, France and Israel; see Cierniewski et al. 2015Cierniewski et al. , 2018b, 2019 for details). To demonstrate how the software refers to the real situation, we used the data acquired in Israel during the field campaign in 2015 when near clear-sky conditions were observed. These data were collected at two locations: N30°59'16", E34°42'15" (Haplic Xerosol) and N30°59'16", E34°42'15" (Calcic Xerosol) on July 5th and July 7th, 2015, respectively. Each location was tested for the roughness formed by a smoothing harrow (smooth), disc harrow (rough) and plough (very rough), and its surface reached the air-dried state. Data to characterise the roughness of the tested soil surfaces by the HSD and T 3D indices were obtained using stereo photographs from a digital camera. The diurnal albedo variation of these surfaces with a size of at least 30 × 30 m was measured in the range of 35-2800 nm by an albedometer, LP PYRA 06 (by Delta OHM), placed ~1.5 m above them. The albedo measurements started soon before 12:00 SLT and were continued with a 1-minute interval until sunset. In the laboratory, a reflectance spectrum was additionally obtained for soil material collected from each surface. A Vis/ NIR FieldSpec 4 spectrometer with the Hig-Brite Muglight receptor working in the range of 335-2500 nm at 1 nm intervals was used for this purpose. Figure 7 shows that there are differences between the real measurements and the results obtained by their adequate models. The shape of the measured and modelled curves is similar, implying that the differences are systematic. Models concerning the measured data are either under-or overestimated. Such results suggest that the error does not stem from the uncertainty of measurements. As the impact of atmospheric conditions was negligible, we presume that the mentioned differences result from the imprecision of the two roughness measures -T 3D , which impacts α 45 and the height of the curve over the x-axis, and HSD, which affects the curve slope for θ s ∈[0°, 70°]. The field of view of the albedometer is larger than the area for which the roughness was estimated. Moreover, the original data collected by Cierniewski et al. (2018) show the  relationship between soil T 3D and measured α 45 . Similarly, the relationship between the HSD and the slope of the models fitted to the measured data is not ideal. Differences shown in Figure  8 do not exceed the variations of T 3D and HSD shown by Cierniewski et al. (2018) in Figures 6  and 8.
At that moment, we could not compare our results with those of other similar tools, since such tools did not exist to our knowledge. The only known software pertains to urban areas (Chimklai et al. 2004) and not cultivated soils, but the results reported by its authors show that differences between the modelled and measured values are even higher than those reported in this study. Eq. (4), which is the core of the software described in our study, works with almost the same error with all types of soils and accepted ranges of surface roughness. Future observations and more data will facilitate the formation of new, potentially more detailed models tailored to specific conditions. The general approach proposed by Ziar et al. (2019) is very promising; however, at the present moment a comparison with our proposal would be disputable. Ziar's model is based on different assumptions and requires several, not always, available data, but our model is intended to work using solely data obtained from the laboratory or public databases.

Software performance
Two factors potentially affect the computational performance of the SALBEC library. First is the procedure of model fitting accomplished by the soil albedo module that is performed once for each set of surface parameters to avoid redundant calculations. The second challenge is the calculation of the daily variation of a. Here, the computation time depends on the length of daylight for a given DOY and, thus, indirectly on the length of the L t, θ . On a desktop computer using Intel Core i5-9400F CPU 2.90 GHz, the time of the fitting procedure varied between 0.14 s and 0.171 s. Diurnal variation of a for a daylight of 12 h varied between 0.0101 s and 0.0291 s for 30 repetitions. Calculations of the entire year take <15 s inside the GUI interface, including the time taken to display a widget filled with calculation results.

Conclusions and future works
In this paper, we present SALBEC, a fully featured software including Python script and a GUI, dedicated to calculating the bare-soil albedo under clear-sky conditions, which considers the spectral properties and roughness of the soil surface. The software can be used by scientists and professionals who need to consider the albedo in their models and measurements. A unique feature of this software, prediction of the optimal observation time (Cierniewski, Jasiewicz 2020), can be used to plan observation campaigns for satellite scanning and low-altitude airborne measurements or UAV acquisitions. Inclusion of an easy-to-use GUI opens the software to all interested groups, including those without programming skills.
The future development of the software depends on the availability of new measurements, possibly including a wide variety of climate zones and different varieties of topsoil. However, we are sceptical about the possible extension of this particular model to include weather changes during the day. Such changes are challenging to define without direct observations and require the local control of many factors. These factors will also introduce several free parameters to the model, which generally increase the model complexity and, in practice, increase the error of the estimation (Hastie et al. 2009).
Although the equations used in the SALBEC software predict the albedo of air-dried bare soils in clear-sky conditions, these equations were also the basis for determining seasonal shortwave radiation of bare arable land according to soil surface roughness and real state of the atmosphere in European Union (Cierniewski et al. 2019), as well as in Poland and Israel (Cierniewski et al. 2021). The shortwave radiation reaching the examined soil surfaces was obtained from satellite data of the Spinning Enhanced Visible and Infrared Imager instrument (SEVIRI) on board the Meteosat Second Generation.
SALBEC is distributed under the MIT licence, included in distribution. SALBEC was developed in Python (www.python.org) with several Python Standard Library components, especially DateTime. The software uses the Scientific Python ecosystem (NumPy, SciPy, pandas and matplotlib; www.scipy.org) to conduct numerical computations, manage tabular data and provide visual output. The calculation of the sun position in a given location on Earth at a given time and date is handled by the astral 2.2 library (https:// github.com/sffjunkie/astral). The development started in August 2020. The entire software was developed and tested using Python 3.7.x to 3.8.x. The GUI was developed with PyQt5 Python binding to the Qt library (www.qt.io) with the latest version (version 5.15) and was tested against version 5.9.4. All used libraries are available on free licences: GNU GPL v.3, MIT or BSD-like. The software was tested on the most popular operating systems, including Windows, Linux and macOS, which support Python 3 and pyQt in versions 5.9.4 or later. Please contact the corresponding author for any support or comments regarding the SALBEC software.