In [1]:
import harp
import avl
In [2]:
product = harp.import_product("EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5")
print(product)
source product = 'ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5'

double datetime {time=5039} [seconds since 2000-01-01]
double latitude {time=5039} [degree_north]
double longitude {time=5039} [degree_east]
long orbit_index
float altitude {time=5039, vertical=246} [m]
float liquid_water_density {time=5039, vertical=246} [kg/m3]
float liquid_water_extinction_coefficient {time=5039, vertical=246} [1/m]
float liquid_particle_effective_radius {time=5039, vertical=246} [m]
float ice_water_density {time=5039, vertical=246} [kg/m3]
float ice_particle_effective_radius {time=5039, vertical=246} [m]
float ice_water_mass_flux {time=5039, vertical=246} [kg/m2/s]
float ice_water_column_density {time=5039} [kg/m2]
float rain_rate {time=5039, vertical=246} [mm/h]
float rain_water_density {time=5039, vertical=246} [kg/m3]
float aerosol_number_density {time=5039, vertical=246} [1/m3]
float aerosol_extinction_coefficient {time=5039, vertical=246} [1/m]
float aerosol_optical_depth {time=5039} []
float aerosol_density {time=5039, vertical=246} [kg/m3]
byte validity {time=5039}
long index {time=5039}

In [3]:
avl.Geo(product, value="aerosol_optical_depth")
In [4]:
avl.Geo(product, value="aerosol_optical_depth", pointsize=3, colormap="cmc.batlow", colorrange=(0,0.25))
In [5]:
avl.Scatter(product, value="aerosol_optical_depth")

HARP can derive AOD from extinction profiles: http://stcorp.github.io/harp/doc/html/algorithms/derivations/aerosol_optical_depth.html

In [6]:
filter = "exclude(aerosol_optical_depth);derive(aerosol_optical_depth {time})"
product2 = harp.import_product("EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5", filter)
print(product2)
source product = 'ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5'
history = "2023-11-15T08:45:36Z [harp-1.20.2] harp.import_product('EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5',operations='exclude(aerosol_optical_depth);derive(aerosol_optical_depth {time})')"

double datetime {time=5039} [seconds since 2000-01-01]
double latitude {time=5039} [degree_north]
double longitude {time=5039} [degree_east]
long orbit_index
float altitude {time=5039, vertical=246} [m]
float liquid_water_density {time=5039, vertical=246} [kg/m3]
float liquid_water_extinction_coefficient {time=5039, vertical=246} [1/m]
float liquid_particle_effective_radius {time=5039, vertical=246} [m]
float ice_water_density {time=5039, vertical=246} [kg/m3]
float ice_particle_effective_radius {time=5039, vertical=246} [m]
float ice_water_mass_flux {time=5039, vertical=246} [kg/m2/s]
float ice_water_column_density {time=5039} [kg/m2]
float rain_rate {time=5039, vertical=246} [mm/h]
float rain_water_density {time=5039, vertical=246} [kg/m3]
float aerosol_number_density {time=5039, vertical=246} [1/m3]
float aerosol_extinction_coefficient {time=5039, vertical=246} [1/m]
float aerosol_density {time=5039, vertical=246} [kg/m3]
byte validity {time=5039}
long index {time=5039}
double aerosol_optical_depth {time=5039} []

In [7]:
!harpdump --list-derivations -a 'exclude(aerosol_optical_depth)' -t aerosol_optical_depth EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5
aerosol_optical_depth {time} [] (double) from
  aerosol_optical_depth {time,vertical} [] (double) from
    aerosol_extinction_coefficient {time,vertical} [1/m] (double)
    altitude_bounds {time,vertical,independent(2)} [m] (double) from
      altitude {time,vertical} [m] (double)

aerosol_optical_depth {time,vertical} [] (double) from
  aerosol_extinction_coefficient {time,vertical} [1/m] (double)
  altitude_bounds {time,vertical,independent(2)} [m] (double) from
    altitude {time,vertical} [m] (double)

In [8]:
avl.Scatter(product2, value="aerosol_optical_depth")
In [9]:
avl.vis.Scatter(xdata=avl.get_timestamps(product.datetime), ydata=product.aerosol_optical_depth.data - product2.aerosol_optical_depth.data)
In [10]:
print(product.altitude)
type = float
dimension = {time=5039, vertical=246}
unit = 'm'
valid_min = -inf
valid_max = inf
description = 'joint standard grid height'
data =
[[39800.043 39300.043 38800.043 ...  -300.     -400.     -500.   ]
 [39800.043 39300.043 38800.043 ...  -300.     -400.     -500.   ]
 [39800.043 39300.043 38800.043 ...  -300.     -400.     -500.   ]
 ...
 [39800.043 39300.043 38800.043 ...  -300.     -400.     -500.   ]
 [39800.043 39300.043 38800.043 ...  -300.     -400.     -500.   ]
 [39800.043 39300.043 38800.043 ...  -300.     -400.     -500.   ]]

In [11]:
filter = "squash(time,altitude)"
product2 = harp.import_product("EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5", filter)
print(product2)
source product = 'ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5'
history = "2023-11-15T08:45:37Z [harp-1.20.2] harp.import_product('EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5',operations='squash(time,altitude)')"

double datetime {time=5039} [seconds since 2000-01-01]
double latitude {time=5039} [degree_north]
double longitude {time=5039} [degree_east]
long orbit_index
float altitude {vertical=246} [m]
float liquid_water_density {time=5039, vertical=246} [kg/m3]
float liquid_water_extinction_coefficient {time=5039, vertical=246} [1/m]
float liquid_particle_effective_radius {time=5039, vertical=246} [m]
float ice_water_density {time=5039, vertical=246} [kg/m3]
float ice_particle_effective_radius {time=5039, vertical=246} [m]
float ice_water_mass_flux {time=5039, vertical=246} [kg/m2/s]
float ice_water_column_density {time=5039} [kg/m2]
float rain_rate {time=5039, vertical=246} [mm/h]
float rain_water_density {time=5039, vertical=246} [kg/m3]
float aerosol_number_density {time=5039, vertical=246} [1/m3]
float aerosol_extinction_coefficient {time=5039, vertical=246} [1/m]
float aerosol_optical_depth {time=5039} []
float aerosol_density {time=5039, vertical=246} [kg/m3]
byte validity {time=5039}
long index {time=5039}

In [12]:
avl.Heatmap(product2, value="aerosol_density")
In [13]:
avl.Heatmap(product2, value="ice_water_density")
In [14]:
filter = ";".join([
    "datetime >= 0 [s since 2024-12-31T18:42:47]",
    "datetime < 0 [s since 2024-12-31T18:43:10]",
    "squash(time,altitude)",
    "altitude < 12 [km]",
])
product3 = harp.import_product("EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5", filter)
print(product3)
source product = 'ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5'
history = "2023-11-15T08:45:38Z [harp-1.20.2] harp.import_product('EarthCARE/ECA_EXAA_ACM_CAP_2B_20241231T183450Z_20230131T101806Z_39316D.h5',operations='datetime >= 0 [s since 2024-12-31T18:42:47];datetime < 0 [s since 2024-12-31T18:43:10];squash(time,altitude);altitude < 12 [km]')"

double datetime {time=161} [seconds since 2000-01-01]
double latitude {time=161} [degree_north]
double longitude {time=161} [degree_east]
long orbit_index
float altitude {vertical=125} [m]
float liquid_water_density {time=161, vertical=125} [kg/m3]
float liquid_water_extinction_coefficient {time=161, vertical=125} [1/m]
float liquid_particle_effective_radius {time=161, vertical=125} [m]
float ice_water_density {time=161, vertical=125} [kg/m3]
float ice_particle_effective_radius {time=161, vertical=125} [m]
float ice_water_mass_flux {time=161, vertical=125} [kg/m2/s]
float ice_water_column_density {time=161} [kg/m2]
float rain_rate {time=161, vertical=125} [mm/h]
float rain_water_density {time=161, vertical=125} [kg/m3]
float aerosol_number_density {time=161, vertical=125} [1/m3]
float aerosol_extinction_coefficient {time=161, vertical=125} [1/m]
float aerosol_optical_depth {time=161} []
float aerosol_density {time=161, vertical=125} [kg/m3]
byte validity {time=161}
long index {time=161}

In [15]:
avl.Heatmap(product3, value="ice_water_density")
In [16]:
avl.Heatmap(product3, value="rain_rate")
In [17]:
avl.Scatter(product3, value="ice_water_column_density")