Open SorooshMani-NOAA opened 1 year ago
@SorooshMani-NOAA See these scripts and best_track and advisory files here for Florence: florence_tracks_scripts.zip
The plot_nhc_adv.py
uses the tropycal
package and get_advisory.py
uses StormEvents
, but not sure if works properly for getting advisory. But it's supposed to be able to.
Plumlee et al. - 2021 - High-fidelity hurricane surge forecasting using em.pdf lynomial.chaos.framework.for.probabilistic.predictions.of.storm.surge.events.pdf)
Todo list: Soroosh:
William:
@WPringle when I download data for all the past storms from stormevents
it looks like there are only two advisory_numbers
, 01
and 03
, which I think is different from that actual advisory ID that is based on the forecast start time. This comes from the ATCF track files. Based on this, here's how I'd like to get the 48hr forecast data for past storms using stormevents
:
OFCL
tracks for the storm using VortexTrack.from_storm_name
by passing advisories=['OFCL']
and file_deck='a'
.data
or .unfiltered_data
NaturalEarth_Lowres
)track_start_date
(eqv. to date from ATCF), get the first datetime
(eqv. to date from ATCF + forecast hour) that the track point falls on land.datetime
and track_start_date
What do you think of this approach?
That sounds good to me @SorooshMani-NOAA. What do you mean by only two advisory_numbers
?
If I get the tracks using:
tracks = stormevents.nhc.track.VortexTrack.from_storm_name('florence', 2018, file_deck='a')
then this would be the result of tracks.data
basin storm_number datetime advisory_number advisory ... isowave_radius_for_NWQ isowave_radius_for_SWQ extra_values geometry track_start_time
0 AL 06 2018-08-29 06:00:00 01 CARQ ... NaN NaN <NA> POINT (-10.90000 12.90000) 2018-08-30 06:00:00
1 AL 06 2018-08-29 12:00:00 01 CARQ ... NaN NaN <NA> POINT (-12.30000 12.90000) 2018-08-30 06:00:00
2 AL 06 2018-08-29 18:00:00 01 CARQ ... NaN NaN <NA> POINT (-13.80000 12.90000) 2018-08-30 06:00:00
3 AL 06 2018-08-30 00:00:00 01 CARQ ... NaN NaN <NA> POINT (-15.40000 12.90000) 2018-08-30 06:00:00
4 AL 06 2018-08-30 06:00:00 01 CARQ ... NaN NaN <NA> POINT (-17.00000 12.90000) 2018-08-30 06:00:00
... ... ... ... ... ... ... ... ... ... ... ...
10229 AL 06 2018-09-18 12:00:00 01 CARQ ... NaN NaN <NA> POINT (-73.30000 42.20000) 2018-09-18 12:00:00
10230 AL 06 2018-09-18 12:00:00 01 CARQ ... NaN NaN <NA> POINT (-73.30000 42.20000) 2018-09-18 12:00:00
10231 AL 06 2018-09-18 12:00:00 03 OFCL ... NaN NaN <NA> POINT (-73.30000 42.20000) 2018-09-18 12:00:00
10232 AL 06 2018-09-18 15:00:00 03 OFCL ... NaN NaN <NA> POINT (-71.90000 42.60000) 2018-09-18 12:00:00
10233 AL 06 2018-09-19 00:00:00 03 OFCL ... NaN NaN <NA> POINT (-67.70000 43.50000) 2018-09-18 12:00:00
There's an advisory_number
in the columns. Before looking at the values I thought this is just a number counting advisories as they are issued, but this seems to mean something different.
yeah maybe that is being parsed incorrectly or the column in ALCF meant something else
@WPringle following our discussion about getting forecast track this is where I am:
OFCL
forecast track at ~48hr prior to landfall.VortexTrack
object, it automatically runs the correction function if OFCL
is inside the requested advisoriesBEST
track for their forcing type, so if I use a forecast OFCL
track, I need to pass it as a fake BEST
. Due to how StormEvents
triggers the correction I also need to do some gymnastics to do this:
OFCL
and CARQ
tracks with track_start_time
at ~48hr before landfallOFCL
and I only request OFCL
advisory so that after the correction CARQ
is automatically removed (some of it just relates to StormEvents
implementation details)VortexTrack
and change advisory
name from OFCL
to BEST
and also set forecast_hours
all to 0
(since I noticed that's how it is in actual best track as written by StormEvents
)After this I still get a wrong central pressure and r-max for some of the entries; for example, this is one such output (before I set forecast hours to 0) for Florence 2018:
AL, 06, 2018091306, 03, BEST, 0, 325N, 743W, 95, 0, HU, 34, NEQ, 170, 150, 110, 140, 1, 0, 0, 115, 0, , 0, DPB, 0, 0, ,,,,,,,,
AL, 06, 2018091306, 03, BEST, 0, 325N, 743W, 95, 0, HU, 50, NEQ, 100, 90, 70, 80, 1, 0, 0, 115, 0, , 0, DPB, 0, 0, ,,,,,,,,
AL, 06, 2018091306, 03, BEST, 0, 325N, 743W, 95, 0, HU, 64, NEQ, 70, 60, 50, 60, 1, 0, 0, 115, 0, , 0, DPB, 0, 0, ,,,,,,,,
AL, 06, 2018091309, 03, BEST, 3, 328N, 747W, 95, 956, HU, 34, NEQ, 170, 150, 110, 140, 957, 0, 0, 115, 0, , 0, DPB, 312, 5, ,,,,,,,,
AL, 06, 2018091309, 03, BEST, 3, 328N, 747W, 95, 956, HU, 50, NEQ, 100, 90, 70, 80, 957, 0, 0, 115, 0, , 0, DPB, 312, 5, ,,,,,,,,
AL, 06, 2018091309, 03, BEST, 3, 328N, 747W, 95, 956, HU, 64, NEQ, 70, 60, 50, 60, 957, 0, 0, 115, 0, , 0, DPB, 312, 5, ,,,,,,,,
AL, 06, 2018091318, 03, BEST, 12, 337N, 761W, 95, 0, HU, 34, NEQ, 170, 150, 110, 130, 1, 0, 0, 115, 0, , 0, DPB, 308, 5, ,,,,,,,,
AL, 06, 2018091318, 03, BEST, 12, 337N, 761W, 95, 0, HU, 50, NEQ, 100, 90, 70, 80, 1, 0, 0, 115, 0, , 0, DPB, 308, 5, ,,,,,,,,
AL, 06, 2018091318, 03, BEST, 12, 337N, 761W, 95, 0, HU, 64, NEQ, 70, 60, 50, 60, 1, 0, 0, 115, 0, , 0, DPB, 308, 5, ,,,,,,,,
AL, 06, 2018091406, 03, BEST, 24, 342N, 774W, 90, 0, HU, 34, NEQ, 160, 150, 100, 90, 1, 0, 0, 110, 0, , 0, DPB, 295, 3, ,,,,,,,,
AL, 06, 2018091406, 03, BEST, 24, 342N, 774W, 90, 0, HU, 50, NEQ, 90, 80, 60, 50, 1, 0, 0, 110, 0, , 0, DPB, 295, 3, ,,,,,,,,
AL, 06, 2018091406, 03, BEST, 24, 342N, 774W, 90, 0, HU, 64, NEQ, 60, 60, 40, 35, 1, 0, 0, 110, 0, , 0, DPB, 295, 3, ,,,,,,,,
AL, 06, 2018091418, 03, BEST, 36, 343N, 784W, 70, 0, HU, 34, NEQ, 150, 150, 100, 80, 1, 0, 0, 85, 0, , 0, DPB, 277, 2, ,,,,,,,,
AL, 06, 2018091418, 03, BEST, 36, 343N, 784W, 70, 0, HU, 50, NEQ, 80, 80, 50, 40, 1, 0, 0, 85, 0, , 0, DPB, 277, 2, ,,,,,,,,
AL, 06, 2018091418, 03, BEST, 36, 343N, 784W, 70, 0, HU, 64, NEQ, 50, 50, 30, 20, 1, 0, 0, 85, 0, , 0, DPB, 277, 2, ,,,,,,,,
AL, 06, 2018091506, 03, BEST, 48, 341N, 792W, 50, 0, TS, 34, NEQ, 140, 140, 90, 70, 1, 0, 0, 60, 0, , 0, DPB, 253, 2, ,,,,,,,,
AL, 06, 2018091506, 03, BEST, 48, 341N, 792W, 50, 0, TS, 50, NEQ, 60, 70, 40, 0, 1, 0, 0, 60, 0, , 0, DPB, 253, 2, ,,,,,,,,
AL, 06, 2018091606, 03, BEST, 72, 339N, 812W, 30, 0, TD, 34, NEQ, 0, 0, 0, 0, 1, 0, 0, 40, 0, , 0, DPB, 264, 2, ,,,,,,,,
AL, 06, 2018091706, 03, BEST, 96, 354N, 833W, 25, 0, TD, 34, NEQ, 0, 0, 0, 0, 1, 0, 0, 35, 0, , 0, DPB, 311, 3, ,,,,,,,,
AL, 06, 2018091806, 03, BEST, 120, 395N, 810W, 20, 0, LO, 34, NEQ, 0, 0, 0, 0, 1, 0, 0, 30, 0, , 0, DPB, 23, 6, ,,,,,,,,
for reference, this is part of an actual best track from a previous successfully run ensemble:
AL, 06, 2018091306, , BEST, 0, 324N, 742W, 100, 955, HU, 34, NEQ, 170, 150, 110, 140, 1010, 200, 20, 115, 0, L, 0, , 317, 6, FLORENCE,,,,,,,,
AL, 06, 2018091306, , BEST, 0, 324N, 742W, 100, 955, HU, 50, NEQ, 100, 90, 70, 80, 1010, 200, 20, 115, 0, L, 0, , 317, 6, FLORENCE,,,,,,,,
AL, 06, 2018091306, , BEST, 0, 324N, 742W, 100, 955, HU, 64, NEQ, 70, 60, 50, 60, 1010, 200, 20, 115, 0, L, 0, , 317, 6, FLORENCE,,,,,,,,
AL, 06, 2018091312, , BEST, 0, 331N, 751W, 95, 954, HU, 34, NEQ, 170, 150, 120, 140, 1011, 200, 20, 115, 0, L, 0, , 313, 5, FLORENCE,,,,,,,,
AL, 06, 2018091312, , BEST, 0, 331N, 751W, 95, 954, HU, 50, NEQ, 100, 90, 80, 80, 1011, 200, 20, 115, 0, L, 0, , 313, 5, FLORENCE,,,,,,,,
AL, 06, 2018091312, , BEST, 0, 331N, 751W, 95, 954, HU, 64, NEQ, 70, 60, 50, 60, 1011, 200, 20, 115, 0, L, 0, , 313, 5, FLORENCE,,,,,,,,
AL, 06, 2018091318, , BEST, 0, 336N, 760W, 90, 953, HU, 34, NEQ, 170, 150, 120, 140, 1011, 200, 20, 110, 0, L, 0, , 304, 5, FLORENCE,,,,,,,,
AL, 06, 2018091318, , BEST, 0, 336N, 760W, 90, 953, HU, 50, NEQ, 100, 90, 80, 80, 1011, 200, 20, 110, 0, L, 0, , 304, 5, FLORENCE,,,,,,,,
AL, 06, 2018091318, , BEST, 0, 336N, 760W, 90, 953, HU, 64, NEQ, 70, 60, 50, 60, 1011, 200, 20, 110, 0, L, 0, , 304, 5, FLORENCE,,,,,,,,
AL, 06, 2018091400, , BEST, 0, 340N, 765W, 90, 952, HU, 34, NEQ, 170, 150, 130, 100, 1012, 200, 20, 105, 0, L, 0, , 314, 3, FLORENCE,,,,,,,,
AL, 06, 2018091400, , BEST, 0, 340N, 765W, 90, 952, HU, 50, NEQ, 100, 80, 80, 70, 1012, 200, 20, 105, 0, L, 0, , 314, 3, FLORENCE,,,,,,,,
AL, 06, 2018091400, , BEST, 0, 340N, 765W, 90, 952, HU, 64, NEQ, 70, 60, 50, 50, 1012, 200, 20, 105, 0, L, 0, , 314, 3, FLORENCE,,,,,,,,
AL, 06, 2018091406, , BEST, 0, 342N, 772W, 85, 952, HU, 34, NEQ, 170, 150, 130, 100, 1012, 200, 20, 100, 0, L, 0, , 289, 3, FLORENCE,,,,,,,,
AL, 06, 2018091406, , BEST, 0, 342N, 772W, 85, 952, HU, 50, NEQ, 100, 80, 80, 70, 1012, 200, 20, 100, 0, L, 0, , 289, 3, FLORENCE,,,,,,,,
AL, 06, 2018091406, , BEST, 0, 342N, 772W, 85, 952, HU, 64, NEQ, 70, 60, 60, 50, 1012, 200, 20, 100, 0, L, 0, , 289, 3, FLORENCE,,,,,,,,
AL, 06, 2018091411, 15, BEST, 0, 342N, 778W, 80, 956, HU, 34, NEQ, 170, 150, 140, 90, 1012, 200, 25, 0, 0, , 0, , 270, 3, FLORENCE,,,,,,,,
AL, 06, 2018091411, 15, BEST, 0, 342N, 778W, 80, 956, HU, 50, NEQ, 100, 80, 80, 60, 1012, 200, 25, 0, 0, , 0, , 270, 3, FLORENCE,,,,,,,,
AL, 06, 2018091411, 15, BEST, 0, 342N, 778W, 80, 956, HU, 64, NEQ, 70, 60, 60, 40, 1012, 200, 25, 0, 0, , 0, , 270, 3, FLORENCE,,,,,,,,
AL, 06, 2018091412, , BEST, 0, 341N, 779W, 80, 957, HU, 34, NEQ, 170, 150, 140, 80, 1012, 200, 25, 90, 0, L, 0, , 220, 5, FLORENCE,,,,,,,,
AL, 06, 2018091412, , BEST, 0, 341N, 779W, 80, 957, HU, 50, NEQ, 100, 80, 80, 40, 1012, 200, 25, 90, 0, L, 0, , 220, 5, FLORENCE,,,,,,,,
AL, 06, 2018091412, , BEST, 0, 341N, 779W, 80, 957, HU, 64, NEQ, 60, 60, 60, 20, 1012, 200, 25, 90, 0, L, 0, , 220, 5, FLORENCE,,,,,,,,
AL, 06, 2018091418, , BEST, 0, 340N, 784W, 65, 969, HU, 34, NEQ, 150, 130, 120, 70, 1012, 200, 30, 80, 0, L, 0, , 257, 2, FLORENCE,,,,,,,,
AL, 06, 2018091418, , BEST, 0, 340N, 784W, 65, 969, HU, 50, NEQ, 90, 70, 60, 30, 1012, 200, 30, 80, 0, L, 0, , 257, 2, FLORENCE,,,,,,,,
AL, 06, 2018091418, , BEST, 0, 340N, 784W, 65, 969, HU, 64, NEQ, 0, 30, 30, 0, 1012, 200, 30, 80, 0, L, 0, , 257, 2, FLORENCE,,,,,,,,
AL, 06, 2018091500, , BEST, 0, 339N, 788W, 60, 978, TS, 34, NEQ, 150, 150, 100, 60, 1013, 210, 30, 65, 0, L, 0, , 253, 2, FLORENCE,,,,,,,,
AL, 06, 2018091500, , BEST, 0, 339N, 788W, 60, 978, TS, 50, NEQ, 70, 70, 50, 30, 1013, 210, 30, 65, 0, L, 0, , 253, 2, FLORENCE,,,,,,,,
AL, 06, 2018091506, , BEST, 0, 337N, 793W, 55, 986, TS, 34, NEQ, 150, 150, 90, 50, 1013, 210, 50, 60, 0, L, 0, , 245, 2, FLORENCE,,,,,,,,
AL, 06, 2018091506, , BEST, 0, 337N, 793W, 55, 986, TS, 50, NEQ, 70, 70, 0, 0, 1013, 210, 50, 60, 0, L, 0, , 245, 2, FLORENCE,,,,,,,,
AL, 06, 2018091512, , BEST, 0, 336N, 795W, 55, 992, TS, 34, NEQ, 150, 130, 80, 40, 1013, 220, 60, 55, 0, L, 0, , 239, 1, FLORENCE,,,,,,,,
AL, 06, 2018091512, , BEST, 0, 336N, 795W, 55, 992, TS, 50, NEQ, 60, 100, 0, 0, 1013, 220, 60, 55, 0, L, 0, , 239, 1, FLORENCE,,,,,,,,
AL, 06, 2018091518, , BEST, 0, 336N, 798W, 50, 997, TS, 34, NEQ, 140, 130, 0, 0, 1013, 220, 110, 50, 0, L, 0, , 270, 1, FLORENCE,,,,,,,,
AL, 06, 2018091518, , BEST, 0, 336N, 798W, 50, 997, TS, 50, NEQ, 0, 110, 0, 0, 1013, 220, 110, 50, 0, L, 0, , 270, 1, FLORENCE,,,,,,,,
AL, 06, 2018091600, , BEST, 0, 336N, 802W, 45, 998, TS, 34, NEQ, 130, 130, 0, 0, 1013, 240, 110, 50, 0, L, 0, , 270, 2, FLORENCE,,,,,,,,
AL, 06, 2018091606, , BEST, 0, 336N, 808W, 40, 999, TS, 34, NEQ, 130, 130, 0, 0, 1013, 260, 110, 40, 0, L, 0, , 270, 3, FLORENCE,,,,,,,,
AL, 06, 2018091612, , BEST, 0, 336N, 815W, 35, 1002, TS, 34, NEQ, 0, 140, 0, 0, 1013, 280, 140, 40, 0, L, 0, , 270, 3, FLORENCE,,,,,,,,
AL, 06, 2018091618, , BEST, 0, 341N, 821W, 30, 1006, TD, 0, , 0, 0, 0, 0, 1013, 300, 140, 40, 0, L, 0, , 315, 4, FLORENCE,,,,,,,,
AL, 06, 2018091700, , BEST, 0, 350N, 822W, 25, 1007, TD, 0, , 0, 0, 0, 0, 1013, 320, 150, 35, 0, L, 0, , 355, 5, FLORENCE,,,,,,,,
AL, 06, 2018091706, , BEST, 0, 364N, 826W, 25, 1008, TD, 0, , 0, 0, 0, 0, 1013, 340, 160, 35, 0, L, 0, , 347, 7, FLORENCE,,,,,,,,
AL, 06, 2018091712, , BEST, 0, 378N, 822W, 25, 1008, EX, 0, , 0, 0, 0, 0, 1013, 360, 160, 30, 0, L, 0, , 13, 7, FLORENCE,,,,,,,,
AL, 06, 2018091718, , BEST, 0, 388N, 820W, 25, 1008, EX, 0, , 0, 0, 0, 0, 1013, 360, 160, 30, 0, L, 0, , 9, 5, FLORENCE,,,,,,,,
AL, 06, 2018091800, , BEST, 0, 395N, 805W, 25, 1008, EX, 0, , 0, 0, 0, 0, 1013, 360, 160, 0, 0, , 0, , 59, 7, FLORENCE,,,,,,,,
AL, 06, 2018091806, , BEST, 0, 413N, 768W, 25, 1007, EX, 0, , 0, 0, 0, 0, 1013, 360, 170, 0, 0, , 0, , 56, 17, FLORENCE,,,,,,,,
AL, 06, 2018091812, , BEST, 0, 422N, 733W, 25, 1006, EX, 34, NEQ, 0, 0, 0, 0, 1013, 360, 180, 30, 0, L, 0, , 70, 14, FLORENCE,,,,,,,,
I'm still investigating what is actually causing the error in SCHISM, but is there anything that you see in the above example? I'm assuming the wrong pressures would maybe sufficient to throw the simulation off!
When you get a change, can you please review the correction done to the OFCL using CARQ here and see if it makes sense? Maybe we should review the StormEvents
correction scheme together soon. If you notice anything obvious there, can you please create and Issue on that repo to follow up?
UPDATE
I just saw the issue in the logs of SCHISM from PAHM:
InitLogging not called :: ProcessAsymmetricVortexData: Central pressure set to zero on first line/record when processing the best track file: hurricane-track.dat
@SorooshMani-NOAA This looks very promising, nice job! The problem you are encountering is associated with the fact that the advisories only provide the pressures at the 3-hr forecast and I think the Rmax also needs to be taken from initial time!
In my methodology the initial Rmax, maybe this is from CARQ, is assumed for all forecast times in the advisory. The 0-hr pressure is also taken from the initial CARQ value. The >3hr forecast pressures are computed as a function of Vmax by keeping Holland B constant. i.e., calculate Holland B for the 3-hr forecast and use that to get the pressures for all the forecast times in the future.
@SorooshMani-NOAA This is one of big reasons why the Rmax methodology sucks because we although have a lot of information of Vmax and r34, r50, r64 we have no estimate of Rmax in the future. So better off to use r34, r50, r64 in a GAHM implementation
@WPringle, thanks. Do you have any suggestion for how to resolve this issue based on what we get above? I looked at the CARQ for the same track_start_time
and the pressure is 0
there too.
@SorooshMani-NOAA Do you get Rmax in the CARQ?
I think I remember now that actually for the pressure at the 0-hr I used the pressure from the 3-hr in the previous advisory (3 hours prior). If that is too complicated then we can fill in 0-hr using same methodology as the forecast times.
@WPringle I believe that should be what's happening. I'm just using StormEvents
and I know that the correction code referred to above is being triggered. I believe based on the current StormEvents
logic the pressure is indeed taken from 0-hr (the first entry of CARQ for the same track start time).
I can manually modify some of the values in my workflow script to try different things., e.g. I can try setting it to 3-hr forecast pressure. Do you want us to change the logic in the StormEvents
repo as well if it works when I try here?
Interesting ... I just noticed this in my dataframe, looking only at certain columns:
8909 CARQ -24 2018-09-13 06:00:00 2018-09-12 06:00:00 0.0
8910 CARQ -18 2018-09-13 06:00:00 2018-09-12 12:00:00 0.0
8911 CARQ -12 2018-09-13 06:00:00 2018-09-12 18:00:00 0.0
8912 CARQ -6 2018-09-13 06:00:00 2018-09-13 00:00:00 0.0
8913 CARQ 0 2018-09-13 06:00:00 2018-09-13 06:00:00 956.0
8914 CARQ 0 2018-09-13 06:00:00 2018-09-13 06:00:00 956.0
8915 CARQ 0 2018-09-13 06:00:00 2018-09-13 06:00:00 956.0 9020 OFCL 0 2018-09-13 06:00:00 2018-09-13 06:00:00 0.0 9021 OFCL 0 2018-09-13 06:00:00 2018-09-13 06:00:00 0.0 9022 OFCL 0 2018-09-13 06:00:00 2018-09-13 06:00:00 0.0 9023 OFCL 3 2018-09-13 06:00:00 2018-09-13 09:00:00 956.0 9024 OFCL 3 2018-09-13 06:00:00 2018-09-13 09:00:00 956.0
I think the logic in StormEvents gets the first entry meaning -24
hour. It needs to be changed to take the hour 0
forecast instead ...
@SorooshMani-NOAA yes, what you just showed sounds good if that can be corrected
@WPringle I just realized that in the original unprocessed ATCF files, the pressure fields are not NA
or empty, they are just 0
. That's why StormEvents
doesn't actually fix them, since it only updates the fields that are NA! I'll create a ticket on StormEvents
side to keep track of updating this issue.
Update These are the tickets:
Update 2 This is another culprit:
The correction is calculated, but never stored.
There's a package called
PyMC3
that can be used for Bayesian analysis.There's a good "hacker book" available at: https://nbviewer.org/github/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Prologue/Prologue.ipynb
Initial discussion: