Missing Unit for Landsat_OT_L2 B10?

Hi all,

I am currently trying to request Landsat8 data using sentinelhub (3.4.2) and eo-learn (1.0.0) packages in Python.
B10 is requested by simply inputting it in bands (amongst all other bands of L8) and the data collection DataCollection.LANDSAT_OT_L2. However, our processing chain outputs the following error:

with HTTPError:
400 Client Error: Bad Request for url: https://services-uswest2.sentinel-hub.com/api/v1/process
Server response: "{"error":{"status":400,"reason":"Bad Request","message":"Invalid script! Band 'B10' of collection 'LOTL2' requested in unsupported units 'KELVIN'! Supported units for this band: [SURFACE_TEMPERATURE]. See https://shforum.sinergise.com/t/units-improvements/4442 for more information.","code":"RENDERER_EXCEPTION"}}"

As displayed in the units section of the Landsat8 documentation, B10 default unit should indeed be SURFACE_TEMPERATURE but the DataCollection.LANDSAT_OT_L2 specifies Band(name='B10', units=(<Unit.KELVIN: 'KELVIN'>,), output_types=(<class 'numpy.float32'>,)).

First of all, since the 0.10.0 update, shouldn’t the KELVIN unit be changed to SURFACE_TEMPERATURE in the default data collection?

Second, I tried to modify the collection by forcing the B10 unit to be SURFACE_TEMPERATURE. I followed this post and made the following code :

from sentinelhub import DataCollection, Band, Unit
from eolearn.io import SentinelHubInputTask
from eolearn.core import FeatureType

# making a specific data collection from L8 with unit changes for B10
fixed_bands = []
for band in DataCollection.LANDSAT_OT_L2.bands:
    if band.name == 'B10':
        fixed_band = Band('B10', (Unit.SURFACE_TEMPERATURE,), (np.uint16,))

fixed_collection = DataCollection.LANDSAT_OT_L2.define_from(

# defining tasks
tasks = []

download_task = SentinelHubInputTask(data_collection=fixed_collection, 
                                        bands_feature=(FeatureType.DATA, 'BANDS'),

tasks.append((download_task, 'download_task'))

(code non complete, after that the workflow is linearly connected to other tasks and executed)
But this outputs another error: AttributeError: SURFACE_TEMPERATURE, meaning Unit.SURFACE_TEMPERATURE does not exist, which was confirmed by looking for it in the Unit class (nothing similar exists either).
What unit should I use for B10, then?

Thank you for reading this post!
Kind regards,

1 Like

Hi @leatresch

Thanks for bringing this to our attention.

We plan to release new SH-py version tomorrow that will fix this issue. If you cannot wait, you will have to add SURFACE_TEMPERATURE to the Unit enum in the sentinelhub/data_collections_bands.py file, and then use the code you have pasted above.

Best regards,

Hi @batic,
Thanks for your quick answer! We’ll gladly wait for the new update and test that afterwards.
Also, a quick side observation in case you didn’t know yet: for LANDSAT_OT_L2, the dataMask is a data feature and not a mask feature. Something similar happened with S1 before being changed, thus why I’m pointing that out now. (:
Kind regards,

Hi @leatresch

Sentinelhub-py v3.4.4 has just been released and it fixes the Landsat surface temperature bands.

Download task:

download_task = SentinelHubInputTask(
    bands_feature=(FeatureType.DATA, 'BANDS'),
    additional_data=[(FeatureType.MASK, 'dataMask')]

now works as expected and does not produce any errors.

Regarding the feature type of dataMask, see the snippet above: you have to request dataMask in the additional_data parameter, and specify the feature type accordingly.


Hi @batic,

Thanks for the update! The new version 3.4.4 works perfectly for B10, thanks.
As for dataMask, my bad! The error was coming from a part of a self-made code. Thank you for your assistance!

Have a good day,

1 Like