|
| 1 | +.. _v3900: |
| 2 | + |
| 3 | +FORCE v. 3.9.00 |
| 4 | +=============== |
| 5 | + |
| 6 | +Release: 13.10.2025 |
| 7 | + |
| 8 | +**Read through the changelog closely. In this version, there are some important changes that may affect your workflows!** |
| 9 | + |
| 10 | +- **FORCE L2PS** |
| 11 | + |
| 12 | + - When merging chips of the same day/sensor to avoid data redundancy, the merging |
| 13 | + strategy for the QAI files has been revised. Before, it was just updating the images, |
| 14 | + i.e., merely overlaying them on top of each other. Now, the QAI files are merged feature-based |
| 15 | + on a custom logic such that the most restrictive QAI value is kept. This ensures that reproducibility |
| 16 | + is guaranteed, independent of the order in which the chips are merged. |
| 17 | + - It is now possible to specify the resampling method for the DEM. |
| 18 | + The parameter ``DEM_RESAMPLING`` can be set to ``NN`` (Nearest Neighbor), ``BL`` (Bilinear), or ``CC`` (Cubic Convolution). |
| 19 | + The default is ``BL``. This allows users to choose the resampling method that best fits their needs. |
| 20 | + Thanks to Oleg Zheleznyy for the suggestion. |
| 21 | + - When co-registering L7 SLC-Off imagery, a big portion of the data failed. |
| 22 | + This issue was addressed by altering the no-data filtering logic in the pyramid building process of LSReg. |
| 23 | + Thanks to Oleg Zheleznyy for reporting this issue. |
| 24 | + - Updated COG default parameters. COG has been set as the default output format for L2PS |
| 25 | + (note: HLPS still uses GTiff as default) |
| 26 | + - The default format for L2PS has been changed from ``GTiff`` to ``COG``. |
| 27 | + This affects the output format of the L2PS products. COGs are more efficient for cloud storage and access, |
| 28 | + making them a better choice for modern geospatial workflows. Users can still specify ``GTiff`` if needed. |
| 29 | + - The default creation options for ``GTiff`` files have been updated to include ``COMPRESS=ZSTD`` and a gridded tile layout. |
| 30 | + Refer to https://github.com/davidfrantz/force/discussions/376 for more details. |
| 31 | + These options improve the compression and efficiency of the GTiff files. |
| 32 | + Users can still use the previous parameterization through custom GDAL options if needed. |
| 33 | + - This choice has resulted in a decoupling of internal file layout and higher level processing (more below and in the issue above). |
| 34 | + As a result, the ``BLOCK_SIZE`` parameter has been deprecated and is no longer used in L2PS. |
| 35 | + Also, the block size is no longer part of the data cube definition. |
| 36 | + This comes with a new file format for the data cube definition in tag and value notification. |
| 37 | + **IMPORTANT: FORCE has backward compatibility for existing data cubes, but the new format is used |
| 38 | + when creating a new data cube. Existing data cubes do not need to be converted. |
| 39 | + However, older software versions will not be able to read data cubes created with the new format!** |
| 40 | + - The ``TILE_SIZE`` has been changed into a two-dimensional parameter. |
| 41 | + This allows users to specify different tile sizes in x and y direction, which can be useful for certain applications. |
| 42 | + The sizes should be given in the unit of the data cube's coordinate reference system (CRS), usually meters. |
| 43 | + The sizes should be a multiple of the processing resolution. |
| 44 | + Note that it is not generally recommended to make use of non-square tiles, but hey, you can now if you want to. |
| 45 | + |
| 46 | +- **FORCE HLPS** |
| 47 | + |
| 48 | + - The internal file layout (blocks) has been decoupled from the sub-tile processing chunks. This means that the |
| 49 | + penalty for using a non-optimal block size became less significant. |
| 50 | + See the details described in https://github.com/davidfrantz/force/discussions/376. |
| 51 | + This has been implemented throughout FORCE. To make this clearer, the term "block" is now only used |
| 52 | + in the context of the internal file layout, whereas "chunk" is used for the processing units. |
| 53 | + These chunks can now be specified by the user via the ``CHUNK_SIZE`` parameter. |
| 54 | + The old ``BLOCK_SIZE`` parameter has been deprecated and is no longer used in HLPS. |
| 55 | + Note that ``CHUNK_SIZE`` requires two values, i.e., the chunk size in x and y direction. |
| 56 | + The sizes should be given in the unit of the data cube's coordinate reference system (CRS), usually meters. |
| 57 | + The sizes should be a multiple of the processing resolution and the tile size should be divisible by the chunk size. |
| 58 | + This is to ensure that the chunks fit neatly into the tiles. This is the same behaviour as with the previous ``BLOCK_SIZE`` parameter. |
| 59 | + The only usage difference is that the chunk size can now follow a two-dimensional approach, i.e., different sizes in x and y direction, |
| 60 | + which e.g. can make processing way more efficient when using masks. |
| 61 | + Further note, that the chunk size must be greater than 0 and less than or equal to the tile size (in the specific direction). |
| 62 | + |
| 63 | + **IMPORTANT: When working with an old data cube, you should ensure that the chunk X-size is equal to the tile X-size to avoid a huge penalty on efficiency.** |
| 64 | + |
| 65 | + - It became apparent that using COGs is not possible when using sub-tile processing chunks. |
| 66 | + So, just don't do that. If you want to use COGs, set the chunk size to the tile size! |
| 67 | + You need enough memory to process a full tile at once, though. |
| 68 | + https://github.com/davidfrantz/force/issues/374 |
| 69 | + Alternatively, use GTiff as output format, which works with sub-tile chunks, and the new configuration is actually |
| 70 | + pretty comparable to COGs. |
| 71 | + |
| 72 | + - in ``force-higher-level``, all ARD-based modules: |
| 73 | + The ``SENSORS`` definitions were moved out of code and are now held in a the directoy ``force-misc\runtime-data``, |
| 74 | + which is installed with FORCE. This provides users with way more flexibility regarding sensors that shall be |
| 75 | + used. The files are in ``JSON`` format and can be easily modified to change sensor behavior. An example application |
| 76 | + might be the remapping of the various NIR bands if the default band mapping does not suit your analysis. |
| 77 | + Another application might be the addition of a new sensor that has not yet been supported by FORCE. |
| 78 | + When doing this, new band names can be introduced, too. As an example, this opens the door to support sensors |
| 79 | + like EnMap. As the directory name suggests, these files are evaluated at runtime, hence no recompilation is necessary. |
| 80 | + When you place a file ``EnMap.json`` in the directory, FORCE can make use of it by specifying ``SENSORS = EnMap`` in |
| 81 | + the configuration file. Note that when using containerization, individual files can be mounted into the container to |
| 82 | + make them available, and separating your user-defined sensors from the default ones. |
| 83 | + While this gives users a lot of flexibility, it also requires some responsibility: some internal logic might |
| 84 | + be affected by modifiying exising sensor definitions. Known examples are the spectral adjustment, which might |
| 85 | + become dysfunctional if the involved sensor definitions are changed. |
| 86 | + Also, the previous logic of automatically naming ouptut files with a matching sensor name is no longer possible. |
| 87 | + The user must now specify the desired output sensor name via the ``TARGET_SENSOR`` parameter. This target sensor |
| 88 | + must have a sensor definition file in the runtime-data directory, too. And it needs to match the band subset of the |
| 89 | + ``SENSORS`` combination. E.g., if ``SENSORS = LND08 SEN2A``, the ``TARGET_SENSOR`` could be ``LNDLG``, wherein the 6-Band |
| 90 | + band subset is defined. If ``SENSORS = SEN2A SEN2B SEN2C``, the ``TARGET_SENSOR`` could be ``SEN2L``, which has a 10-Band |
| 91 | + subset defined. Note that the ``SPECTRAL_ADJUST`` parameter influences the band subset as it adds additional bands to the processing, |
| 92 | + which are synthesized. As an example, if ``SPECTRAL_ADJUST = TRUE`` and ``SENSORS = LND08 SEN2A``, the ``TARGET_SENSOR`` could be ``SEN2L``. |
| 93 | + |
| 94 | + - in ``force-higher-level``, TSA-submodule: |
| 95 | + The ``INDEX`` selection has been moved out of code and is now held in a the directoy ``force-misc\runtime-data``, |
| 96 | + which is installed with FORCE. This provides users with more flexibility regarding indices that shall be |
| 97 | + used. The file ``indices.json`` is in ``JSON`` format and can be easily modified to change index behavior. |
| 98 | + As an example, NDVI can be remapped to use different bands to "create" a new, but not yet implemented index |
| 99 | + without touching the code as such. Do note however, that this only works with existing index templates implemented in the code. |
| 100 | + That said, simply adding a new index definition in the JSON file will not work, as there is no corresponding implementation in the code. |
| 101 | + However, together with the new ``SENSORS`` flexibility, this creates interesting possibilities. |
| 102 | + Also: in addition to the listed indices, the user can specify any band name defined in the ``SENSORS`` definition files. |
| 103 | + This allows users to directly use spectral bands as "indices", e.g., ``INDEX = NIR SWIR1`` |
| 104 | + (or any other "new" band name defined in the sensor definition files). |
| 105 | + Additionally, the ``SMA`` index can be used to perform a Spectral Mixture Analysis, in which case the endmember file |
| 106 | + must have the same number of bands as the selected ``SENSORS`` combination. |
| 107 | + |
| 108 | + - in ``force-higher-level``, UDF sub-module: |
| 109 | + a new feature was added to the UDF module, which allows users to add auxiliary products |
| 110 | + to the data array that is passed to the UDF. |
| 111 | + The user can specify which auxiliary products to use in the configuration file via the new |
| 112 | + ``REQUIRE_AUX_PRODUCTS`` parameter. The auxiliary products are specified as a white-space separated list, |
| 113 | + e.g. ``REQUIRE_AUX_PRODUCTS = DST VZN AOD``. Custom products may also be specified (*Int16!*), thus you can invent |
| 114 | + and use new tags. An auxiliary product is a product should always accompany the main product (usually ``BOA``). |
| 115 | + In the UDF, the auxiliary products are appended to the data array, thus increasing the number of bands. |
| 116 | + The bandnames of the auxiliary products are set to the product name, e.g. ``DST`` for the DST product. |
| 117 | + If no auxiliary products are wanted, the user can set ``REQUIRE_AUX_PRODUCTS = NULL``. |
| 118 | + |
| 119 | + - in ``force-higher-level``, UDF sub-module: |
| 120 | + the ``REQUIRE_AUX_PRODUCTS`` mechanism has been implemented here as well. |
| 121 | + You may use the ``DST``, ``HOT``, and ``VZN`` products. |
| 122 | + Before, the usage of a specific product was solely managed by using a corresponding score > 0. |
| 123 | + To prevent accidental use of a product, the user must now explicitly specify the product in addition to the score. |
| 124 | + |
| 125 | + - in ``force-higher-level``, all ARD-based modules: |
| 126 | + a new parameter ``DATE_IGNORE_LANDSAT_7`` was added. During the last years of Landsat 7's life, |
| 127 | + the satellite was slowly de-orbited, which caused the acquisition times to slowly shift away from |
| 128 | + the nominal time. Operational production continued. This parameter allows the user to ignore |
| 129 | + the Landsat 7 data after a specific point in time. The default is ``2099-12-31``, which just means |
| 130 | + that all Landsat 7 data will be used. |
| 131 | + |
| 132 | + - in ``force-higher-level``, all modules: |
| 133 | + a new parameter ``FAIL_IF_EMPTY`` was added by Florian Katerndahl. |
| 134 | + If set to ``TRUE``, the module will fail if no input data is found for the specified configuration, |
| 135 | + e.g. time range, or if no output was written. This is meant to be used in complex workflows, where |
| 136 | + one want the program to signal an error condition. |
| 137 | + The default is ``FALSE``, which is better suited for production runs, |
| 138 | + as e.g. an NRT application may not have data for a specific day or region. |
| 139 | + In this case, only a warning is displayed with some hints on how to resolve potential issues. |
| 140 | + |
| 141 | + - endmember, sampling, feature and response tables can be a csv now, i.e. "," has become an allowed column separator. |
| 142 | + Tab and whitespace are still allowed, too. |
| 143 | + @German users, take care to use English csv settings! |
| 144 | + |
| 145 | +-- **FORCE AUX** |
| 146 | + |
| 147 | + - ``force-mosaic`` was overhauled: |
| 148 | + The tool should now be much more efficient and faster as it splits the working load into smaller chunks |
| 149 | + instead of relying a singular find command. As suggested by Max Freudenberg, the tool can now be used |
| 150 | + if your data cube does not have files in *.tif or *.dat extentsion. The user can now specify the |
| 151 | + file extension with the ``-e`` option. The default is ``tif``, whereas ``dat`` is no longer part of the default. |
| 152 | + The tool can now also be used on write-protected data cubes by specifiying an output directory that no longer |
| 153 | + needs to be a subdirectoy of the data cube. The default is still a `mosaic` folder within the datacube. |
| 154 | + |
| 155 | + - added a new tool ``force-virtual-datacube``: |
| 156 | + This tool allows users to create a virtual datacube from a physical datacube. It is useful for creating |
| 157 | + a virtual representation of the data without duplicating the actual files, thus saving disk space. |
| 158 | + It can be used to combine multiple datacubes into a single virtual dataset, which can be useful for analysis. |
| 159 | + The tool can be used with various options to customize the output, such as specifying the pattern of files |
| 160 | + to include and whether to overwrite existing files. |
| 161 | + |
| 162 | + - Minor adjustments have been made in a couple of AUX tools to reflect the changes in handling chunks. |
| 163 | + |
0 commit comments