Re: [ldm-users] Problem calculating GOES-16 brightness temperature from radiance

  • To: Pete Pokrandt <poker@xxxxxxxxxxxx>
  • Subject: Re: [ldm-users] Problem calculating GOES-16 brightness temperature from radiance
  • From: Arthur A Person <aap1@xxxxxxx>
  • Date: Thu, 25 Jan 2018 09:04:24 -0500 (EST)
Pete, 

No, I didn't. With your plots, I just did some more checking... Approximating 
your curve, I got similar results 
using GRB data from amazon. However, when I switch back to approximating the 
curve on 
https://www.star.nesdis.noaa.gov/GOES/GOES16_FullDisk_Band.php?band=07&length=24
 
and plotting, my image again appears warmer. How do your plots compare to 
what's on the star site? 

Thanks... Art 

> From: "Pete Pokrandt" <poker@xxxxxxxxxxxx>
> To: "ARTHUR AUGUST PERSON" <aap1@xxxxxxx>
> Cc: "ldm-users" <ldm-users@xxxxxxxxxxxxxxxx>
> Sent: Wednesday, January 24, 2018 10:48:46 PM
> Subject: Re: [ldm-users] Problem calculating GOES-16 brightness temperature 
> from
> radiance

> Art,

> Did you ever get this figured out? I plotted up an ABI full disk image from 
> the
> GRB Radiance data coming in from both the Unidata DIFAX feed and from the 
> tiled
> NOAAPORT CMI data. They seem pretty much the same to me, considering 
> resolution
> differences - 2km for GRB vs 6km for the NOAAPORT data.

> GRB image - [
> http://whirlwind.aos.wisc.edu/~wxp/goes16/test/201801210430_fulldisk_grb.jpg |
> http://whirlwind.aos.wisc.edu/~wxp/goes16/test/201801210430_fulldisk_grb.jpg ]

> NOAAPORT image - [
> http://whirlwind.aos.wisc.edu/~wxp/goes16/test/201801210430_fulldisk.jpg |
> http://whirlwind.aos.wisc.edu/~wxp/goes16/test/201801210430_fulldisk.jpg ]

> Pete

> [
> http://www.weather.com/tv/shows/wx-geeks/video/the-incredible-shrinking-cold-pool
> ] --
> Pete Pokrandt - Systems Programmer
> UW-Madison Dept of Atmospheric and Oceanic Sciences
> 608-262-3086 - poker@xxxxxxxxxxxx

> From: ldm-users-bounces@xxxxxxxxxxxxxxxx <ldm-users-bounces@xxxxxxxxxxxxxxxx> 
> on
> behalf of Arthur A Person <aap1@xxxxxxx>
> Sent: Monday, January 15, 2018 4:45 PM
> To: ldm-users
> Subject: Re: [ldm-users] Problem calculating GOES-16 brightness temperature 
> from
> radiance
> All --

> I'm starting to think there may be a problem with the GOES-16 channel 7 GRB
> NetCDF data. I wrote a short test code
> (included below) that calculates brightness temperature and produces a png 
> file
> with an abbreviated color table for comparison
> with the NESDIS https://www.star.nesdis.noaa.gov/GOES/GOES16_CONUS.php 
> imagery.
> When using the channel 7 data,
> the calculated imagery appears noticeably warmer, but when using channel 14 
> data
> (for example), the images appear
> very close in value.

> Would someone else mind taking a look at this and confirm whether this might 
> be
> the case, or whether I'm just losing my mind?

> Thanks!
> Art

> _________________________________________________________________________________________________________

> from netCDF4 import Dataset
> import numpy as np
> import matplotlib.pyplot as plt
> from matplotlib.colors import LinearSegmentedColormap

> filename =
> "amazon/OR_ABI-L1b-RadC-M3C07_G16_s20180151547235_e20180151550019_c20180151550058.nc"
> #filename =
> "amazon/OR_ABI-L1b-RadC-M3C14_G16_s20180151547235_e20180151550008_c20180151550050.nc"

> dataset = Dataset(filename,'r')

> # Get coefficients for calculation of brightness temperature
> planck_fk1 = dataset.variables['planck_fk1'][:]
> planck_fk2 = dataset.variables['planck_fk2'][:]
> planck_bc1 = dataset.variables['planck_bc1'][:]
> planck_bc2 = dataset.variables['planck_bc2'][:]
> print("planck_fk1: ",planck_fk1)
> print("planck_fk2: ",planck_fk2)
> print("planck_bc1: ",planck_bc1)
> print("planck_bc2: ",planck_bc2)

> # Read the radiance data
> rad = dataset.variables['Rad'][:]

> dataset.close()

> # Calculate brightness temperature
> bt = ( (planck_fk2 / (np.log( (planck_fk1/rad)+1 ))) - planck_bc1 ) / 
> planck_bc2
> bt = bt - 273.15

> # Create a color table to compare against
> https://www.star.nesdis.noaa.gov/GOES/GOES16_CONUS.php imagery
> red = []
> green = []
> blue = []
> valmin=-110.
> valmax=55.
> red.append( [0.0, 0.0, 0.0] )
> green.append( [0.0, 0.0, 0.0] )
> blue.append( [0.0, 0.0, 0.0] )
> red.append( [ (-50.0-valmin)/(valmax-valmin), 0.0, 0.0 ] )
> green.append( [ (-50.0-valmin)/(valmax-valmin), 1.0, 1.0 ] )
> blue.append( [ (-50.0-valmin)/(valmax-valmin), 0.0, 0.0 ] )
> red.append( [ (-40.0-valmin)/(valmax-valmin), 0.0, 0.0 ] )
> green.append( [ (-40.0-valmin)/(valmax-valmin), 0.0, 0.0 ] )
> blue.append( [ (-40.0-valmin)/(valmax-valmin), 0.4, 0.4 ] )
> red.append( [ (-30.0-valmin)/(valmax-valmin), 0.0, 0.8 ] )
> green.append( [ (-30.0-valmin)/(valmax-valmin), 1.0, 0.8 ] )
> blue.append( [ (-30.0-valmin)/(valmax-valmin), 1.0, 0.8 ] )
> red.append( [ 1.0, 0.0, 0.0 ] )
> green.append( [ 1.0, 0.0, 0.0 ] )
> blue.append( [ 1.0, 0.0, 0.0 ] )
> cdict = {'red': red, 'green': green, 'blue': blue}
> ctbl = LinearSegmentedColormap('custom', cdict)

> # Set the figure size
> fig = plt.figure(1, figsize=(23, 15))

> # Display the image
> im = plt.imshow(bt, cmap=ctbl, vmin=valmin, vmax=valmax )

> # Display a color bar
> cb = plt.colorbar( orientation='vertical', shrink=0.7, pad=0.01, aspect=30 )
> cb.set_label("Brightness Temperature (C)")

> # Save the image to a png file
> plt.savefig('plot.png', dpi=100)

>> From: "Pete Pokrandt" <poker@xxxxxxxxxxxx>
>> To: "ARTHUR AUGUST PERSON" <aap1@xxxxxxx>
>> Cc: "ldm-users" <ldm-users@xxxxxxxxxxxxxxxx>
>> Sent: Saturday, January 13, 2018 9:03:11 PM
>> Subject: Re: [ldm-users] Problem calculating GOES-16 brightness temperature 
>> from
>> radiance

>> Forgot to cc to the list.

>> Here's a commented version of the script that I'm currently using to plot ABI
>> channel 13 (clear channel IR window) but the calculation for BT should work 
>> for
>> any of the channels 7-16.

>> I am using just the radiance values read in from the netcdf files, without
>> applying any scale/offset to them. Perhaps the netcdf4 read does that for 
>> us? I
>> am reading the scale and offset info in for reference, and printing them out,
>> but I am not using them in my calculations at all.

>> If for some reason, the attachment doesn't come through, you can get the 
>> file at

>> [ http://sysadm.aos.wisc.edu/~poker/goes16_GRB_fulldisk_IR13_ircm.py |
>> http://sysadm.aos.wisc.edu/~poker/goes16_GRB_fulldisk_IR13_ircm.py ]

>> Hope this helps,
>> Pete

>> [
>> http://www.weather.com/tv/shows/wx-geeks/video/the-incredible-shrinking-cold-pool
>> ] --
>> Pete Pokrandt - Systems Programmer
>> UW-Madison Dept of Atmospheric and Oceanic Sciences
>> 608-262-3086 - poker@xxxxxxxxxxxx

>> From: Arthur A Person <aap1@xxxxxxx>
>> Sent: Saturday, January 13, 2018 9:04 AM
>> To: Pete Pokrandt
>> Cc: ldm-users
>> Subject: Re: [ldm-users] Problem calculating GOES-16 brightness temperature 
>> from
>> radiance
>> Pete,

>> Thanks for the help. Actually, I already tried adding parens to the equation,
>> including the variation you
>> suggested, but the results are the same. Do you have a few lines of code that
>> worked for you that you'd
>> be willing to share? Or, do you recall whether there's any issue with netCDF
>> auto-scaling the input data,
>> or any units conversion that has to be included that's not in the 
>> documentation?

>> Thanks... Art

>>> From: "Pete Pokrandt" <poker@xxxxxxxxxxxx>
>>> To: "ARTHUR AUGUST PERSON" <aap1@xxxxxxx>, "ldm-users"
>>> <ldm-users@xxxxxxxxxxxxxxxx>
>>> Sent: Friday, January 12, 2018 11:47:08 AM
>>> Subject: Re: [ldm-users] Problem calculating GOES-16 brightness temperature 
>>> from
>>> radiance

>>> Art,

>>> I think it may be a parenthesis/order of operations issue. I seem to recall
>>> having this same issue when I first started working with the GRB data.

>>> Try this:

>>> bt = ( planck_fk2 / ( np.log((planck_fk1 / rad) + 1 )) - planck_bc1) /
>>> planck_bc2

>>> Pete

>>> From: ldm-users-bounces@xxxxxxxxxxxxxxxx 
>>> <ldm-users-bounces@xxxxxxxxxxxxxxxx> on
>>> behalf of Arthur A Person <aap1@xxxxxxx>
>>> Sent: Friday, January 12, 2018 7:43 AM
>>> To: ldm-users@xxxxxxxxxxxxxxxx
>>> Subject: [ldm-users] Problem calculating GOES-16 brightness temperature from
>>> radiance
>>> Hi...

>>> I'm trying to calculate brightness temperature from radiance for GOES-16 IR
>>> channel 7 using rebroadcast data
>>> but my values compared to McIDAS imagery are coming out 15 to 20 degrees C 
>>> too
>>> warm. I'm using the following
>>> values and code:

>>> Test imagery:
>>> OR_ABI-L1b-RadC-M3C07_G16_s20180112232223_e20180112235008_c20180112235045.nc

>>> rad (radiance) is read in from and auto-scaled by netCDF,
>>> planck_fk1: 202263.0
>>> planck_fk2: 3698.18994140625
>>> planck_bc1: 0.4336099922657013
>>> planck_bc2: 0.9993900060653687

>>> bt = ( planck_fk2 / np.log( (planck_fk1/rad)+1 ) - planck_bc1 ) / planck_bc2
>>> bt = bt - 273.15

>>> Can anyone tell me if I'm missing a step or spot a dumb mistake?

>>> Thanks... Art

>>> --
>>> Arthur A. Person
>>> Assistant Research Professor, System Administrator
>>> Penn State Department of Meteorology and Atmospheric Science
>>> email: aap1@xxxxxxx, phone: 814-863-1563

>> --
>> Arthur A. Person
>> Assistant Research Professor, System Administrator
>> Penn State Department of Meteorology and Atmospheric Science
>> email: aap1@xxxxxxx, phone: 814-863-1563

> --
> Arthur A. Person
> Assistant Research Professor, System Administrator
> Penn State Department of Meteorology and Atmospheric Science
> email: aap1@xxxxxxx, phone: 814-863-1563

-- 
Arthur A. Person 
Assistant Research Professor, System Administrator 
Penn State Department of Meteorology and Atmospheric Science 
email: aap1@xxxxxxx, phone: 814-863-1563 
  • 2018 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the ldm-users archives: