

Last update
May. 5, 2026

# TIR Level-3 product

The data are the observed brightness temperatures projected onto the shape model of Ryugu.
The data include the following values:

polygon_id,pixel_x,pixel_y,brightness_temperature,phase_angle,incidence_angle,emission_angle,longitude,latitude,local_solar_time,longitude_normal_vector,latitude_normal_vector,local_solar_time_normal_vector


# TIR Level-3 Preview

equirements:
```
!pip install pyvista
!pip install spicepy
```

STL file of the Ryugu shape model
```python
import spiceypy as spice

STRLEN = 256

# kernels
spice.furnsh("/Volumes/Hayabusa2/spice/kernels/mk/hyb2_2018_v02.tm")

# Error action
spice.erract("SET", STRLEN, "IGNORE")

# DSK
handle = spice.dasopr("/Volumes/Hayabusa2/spice/kernels/dsk/ryugu_shape_spc_200k_v20200323.bds")
dladsc = spice.dlabfs(handle)

nv, np = spice.dskz02(handle, dladsc)

print("solid untitled")

for i in range(1, np + 1):

    # Normal vector
    norm = spice.dskn02(handle, dladsc, i)
    print(f"facet normal {norm[0]} {norm[1]} {norm[2]}")
    print("  outer loop")

    # Plate (triangle vertex indices)
    plates = spice.dskp02(handle, dladsc, i, 1)
    plate = plates[0]  # 3 vertex indices

    verts = []
    for idx in plate:
        v = spice.dskv02(handle, dladsc, idx, 1)
        verts.append(v[0])

    for v in verts:
        print(f"    vertex {v[0]} {v[1]} {v[2]}")

    print("  endloop")
    print("endfacet")

print("endsolid untitled")

spice.dascls(handle)
```

Temperatures on the shape model of Ryugu
```python
import pyvista as pv
import spiceypy
import numpy as np

spiceypy.furnsh('/Volumes/Hayabusa2/spice/kernels/mk/hyb2_2018_v02.tm')

mesh = pv.read('ryugu_shape_spc_200k_v20200323.stl')
data = np.loadtxt('hyb2_tir_20180801_160520_l3.csv', delimiter=',', skiprows=1)
et   = spiceypy.str2et('2018-08-01T16:05:20')

sc_pos = spiceypy.spkpos("HAYABUSA2", et, "RYUGU_FIXED", "LT+S", "2162173")
print('Hayabusa2 position = ', sc_pos[0][0], sc_pos[0][1], sc_pos[0][2])

sun_pos = spiceypy.spkpos("SUN",       et, "RYUGU_FIXED", "LT+S", "2162173")
print('Sun position = ', sun_pos[0][0], sun_pos[0][1], sun_pos[0][2])

temperature = np.zeros(196608)
for i in range(len(data)):
    temperature[(int)(data[i][0])-1] = data[i][3];

pv.global_theme.cmap = 'turbo'
pv.global_theme.colorbar_horizontal.position_x = 0.2
pv.global_theme.colorbar_horizontal.position_y = 0.15
pv.global_theme.font.label_size = 24
pv.global_theme.font.title_size = 24

pl = pv.Plotter(lighting=None)
light = pv.Light(position  = (sun_pos[0][0], sun_pos[0][1], sun_pos[0][2]))
pl.camera.position         = ( sc_pos[0][0],  sc_pos[0][1],  sc_pos[0][2])

pl.add_mesh(mesh, scalars=temperature, clim=[270,370]) 
pl.show()
```