Skip to content

Commit b2fbced

Browse files
committed
dev log
1 parent 4759e80 commit b2fbced

File tree

2 files changed

+164
-156
lines changed

2 files changed

+164
-156
lines changed
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
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

Comments
 (0)