Map Sentinel 5p CH4, SO2 and CO Data (Visan)

Thanks! The CO worked!

The SO2 didn’t change it still has the grey background stuff but I’m confused, is that bad? I assumed thats just what the data looks like.

I am not sure what you mean with ‘grey background’. Do you mean the white spots? Those are locations where it wasn’t possible to calculate good SO2 values (due to our filtering on the quality flag). This could be because of clouds or other reasons. Having those gaps in a daily plot is quite normal.

No its difficult to explain so I just annotated the image and cicled the grey spots I’m referring to. It’s probably normal and I assume this is what the data should look like but I just want to make sure. If it is ok then we’ve basically worked through all the issues and so I want to thank you again.

Ah. Those black areas. This is also due to the color range clipping. If you would use a colorrange of e.g. [-3,3] you would also see values below 0.

These negative values are due to the high noise level. When you average over a longer time period this noise level should decrease. Another way to decrease the noise level is to use a coarser spatial grid.

I tried the NO2 code and found the single quotation marks-- ’ – should be changed to double quotation marks, then it can be run at VISAN.

Can this be done for NO2? I’m using following code:

harp.import_product(paths_2[i],
operations=“tropospheric_NO2_column_volume_mixing_ratio_validity>75;keep(latitude_bounds,longitude_bounds**,tropospheric_NO2_column_volume_mixing_ratio**);bin_spatial(7,35.7,0.1,7,14.1,0.1);derive(tropospheric_NO2_column_volume_mixing_ratio [ppbv])”,
post_operations= “bin();squash(time, (latitude_bounds,longitude_bounds));derive(latitude {latitude});derive(longitude {longitude});exclude(latitude_bounds,longitude_bounds,latitude_bounds_weight,longitude_bounds_weight,count,weight)”))

and getting the error: cannot filter on non-existent variable tropospheric_NO2_column_volume_mixing_ratio_validity

Thanks!

1 Like

Can this be done for NO2?

Why do you want the tropospheric NO2 in volume mixing ratios? This is not the natural quantity for NO2. It is also not what is in the product.
The way to handle NO2 is already shown in the first post of this topic.

Yes I was working fine with “tropospheric_NO2_column_number_density” but now I wish to correlate S5-P data with ground-base NO2 dataset in ppb. So this is not possible with the NO2 product?

If your ground based data is surface data, then this might be difficult. S5P provides a full tropospheric column, but is actually almost non sensitive at the surface (you can see this from the averaging kernel).
For validation you can check out what is done on the official validation server for S5P

1 Like

Hi I have been reading the conversation and has caused me a question.
If my purpose of evaluating air quality with satellite information and information from surface stations, wath variable I should use?.
And the variable nitrogendioxide_tropospheric_colum I find negative values, these ones refer to?.
Thanks

Hello @svniemeijer Sir,
Can I get to know the units for all the parametrs in which sentinel 5P is providing data and in which units we may use for better analysis

Thank You

The units in the products can be found in the user manuals of S5P.
The units that you get when ingesting with HARP are defined in the HARP ingestion documentation.
And what units to use for analysis is up to you. It depends on what you want to do.

Hello @svniemeijer Sir,
I have a query regarding the availability of Sentinel 5P Near Real Time data for 2019 now it was not available for whole world, is there any specific reason?

If you are looking at 2019 data then you should only be using Offline or Reprocessed data. NRTI data is only for when you need the most recent measurements and can’t wait for the Offline data.

I have one querry reading the Validity filter values as I read the Product read me files for CO and found the qa_value>0.7 and if we multiply this by a scale factor 100 it will be 70. Kindly guide me.

The values of the validity variables in HARP are indeed a factor 100 times the value of the qa_value from the ingested products. This was done to allow the validity variable to be represented as an 8 bit integer (instead of having to use an inefficient 32 bit floating point value).

1 Like

export_path=‘sentinel.nc’
product = harp.import_product(r"S5P_OFFL_L2__NO2____20181101T054736_20181101T072905_05446_01_010200_20181107T073552.nc",
operations= “latitude >= 5[degree_north] ; latitude <= 38[degree_north] ;
longitude>=67 [degree_east];longitude<=98 [degree_east];tropospheric_NO2_column_number_density_validity>75;
bin_spatial(661,5,0.05,621,67,0.05);
derive(latitude {latitude});derive(longitude {longitude});
exclude(latitude_bounds,longitude_bounds,latitude_bounds_weight,longitude_bounds_weight,count,weight);
derive(tropospheric_NO2_column_number_density [Pmolec/cm2]);
keep(latitude,longitude,tropospheric_NO2_column_number_density)”,
post_operations=“bin(); squash(time, (latitude_bounds,longitude_bounds))”
)

harp.export_product(product, export_path,file_format=“netcdf”)

I used these above codes and when i tried to export it in nc file and saved the new file it exported in .nc format. But when I tried to plot this it shows error. Is their any problem with the codes?

What do you mean with i open this it did not show anything? Open where? What does it show? What did you expect?

file=xr.open_dataset(‘sentinel1.nc’)
no2=file[‘tropospheric_NO2_column_number_density’]*10**3
fig=plt.figure(figsize=(40,15))
ax = plt.axes(projection=ccrs.PlateCarree())
extent = [60,100,0,40]
no2[0].plot.pcolormesh(ax=ax, x=‘longitude’, y=‘latitude’,
add_colorbar=True, cmap=‘seismic’,
transform=ccrs.PlateCarree(),vmin=0,vmax=0.2)
ax.set_extent(extent)
ax.add_feature(cartopy.feature.RIVERS)
ax.set_title('S-5p L2 NO$_2$ ({}) '.format(str(date[0])))
ax.coastlines(‘10m’)
ax.stock_img()
ax.gridlines()


NameError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_12484\3434193819.py in
9 ax.set_extent(extent)
10 ax.add_feature(cartopy.feature.RIVERS) # add river
—> 11 ax.set_title('S-5p L2 NO$_2$ ({}) '.format(str(date[0]))) # add title
12 ax.coastlines(‘10m’) # add coastline
13 ax.stock_img() # add the color of earth

NameError: name ‘date’ is not defined

Please have a look at this use case. It shows you how to create a grid with HARP and then use cartopy to plot the results.

1 Like