python-awips/examples/notebooks/Model_Sounding_Data.ipynb

1298 lines
192 KiB
Text
Raw Normal View History

2018-09-05 15:52:38 -06:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The EDEX modelsounding plugin creates 64-level vertical profiles from GFS and ETA (NAM) BUFR products distirubted over NOAAport. Paramters which are requestable are **pressure**, **temperature**, **specHum**, **uComp**, **vComp**, **omega**, **cldCvr**."
]
},
{
"cell_type": "code",
"execution_count": 1,
2018-09-05 15:52:38 -06:00
"metadata": {
"scrolled": true
},
"outputs": [],
"source": [
"from awips.dataaccess import DataAccessLayer\n",
"import matplotlib.tri as mtri\n",
"import matplotlib.pyplot as plt\n",
"from mpl_toolkits.axes_grid1.inset_locator import inset_axes\n",
"from math import exp, log\n",
"import numpy as np\n",
"from metpy.calc import get_wind_components, lcl, dry_lapse, parcel_profile, dewpoint\n",
"from metpy.calc import wind_speed, wind_direction, thermo, vapor_pressure\n",
2018-09-05 15:52:38 -06:00
"from metpy.plots import SkewT, Hodograph\n",
"from metpy.units import units, concatenate\n",
2018-10-11 14:56:26 -06:00
"import warnings\n",
"warnings.filterwarnings(\"ignore\",category =RuntimeWarning)\n",
2018-09-05 15:52:38 -06:00
"\n",
2018-09-06 13:05:37 -06:00
"DataAccessLayer.changeEDEXHost(\"edex-cloud.unidata.ucar.edu\")\n",
2018-10-11 14:56:26 -06:00
"request = DataAccessLayer.newDataRequest(\"modelsounding\")\n",
2018-09-05 15:52:38 -06:00
"forecastModel = \"GFS\"\n",
"request.addIdentifier(\"reportType\", forecastModel)\n",
"request.setParameters(\"pressure\",\"temperature\",\"specHum\",\"uComp\",\"vComp\",\"omega\",\"cldCvr\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Available Locations"
]
},
{
"cell_type": "code",
"execution_count": 2,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['',\n",
" '1V4',\n",
" '3J2',\n",
" '4BL',\n",
" '4BQ',\n",
" '4HV',\n",
" '4OM',\n",
" '5AF',\n",
" '5AG',\n",
" '5SZ',\n",
" '6RO',\n",
" '8V7',\n",
" '9B6',\n",
" 'A#2',\n",
" 'A#3',\n",
" 'A#4',\n",
" 'A#5',\n",
" 'A#6',\n",
" 'A#7',\n",
" 'A#8',\n",
" 'A#9',\n",
" 'A#A',\n",
" 'A#B',\n",
" 'ABL',\n",
" 'ADM',\n",
" 'AFA',\n",
" 'AGR',\n",
" 'AHN',\n",
" 'AIA',\n",
" 'AIH',\n",
" 'AJO',\n",
" 'ANJ',\n",
" 'APX',\n",
" 'AQQ',\n",
" 'ATH',\n",
" 'ATL1',\n",
" 'ATL2',\n",
" 'ATL3',\n",
" 'ATL4',\n",
" 'ATLH',\n",
" 'AWH',\n",
" 'AWR',\n",
" 'B#1',\n",
" 'B#2',\n",
" 'B#3',\n",
" 'B#4',\n",
" 'B#5',\n",
" 'B#6',\n",
" 'B#7',\n",
" 'B#8',\n",
" 'B#9',\n",
" 'B#A',\n",
" 'B#B',\n",
" 'B#C',\n",
" 'B#D',\n",
" 'B#E',\n",
" 'B#F',\n",
" 'B#G',\n",
" 'B#H',\n",
" 'B#J',\n",
" 'B#K',\n",
" 'B#L',\n",
" 'B#M',\n",
" 'B#N',\n",
" 'B#O',\n",
" 'B#P',\n",
" 'B#Q',\n",
" 'B#S',\n",
" 'BAB',\n",
" 'BDG',\n",
" 'BDP',\n",
" 'BFL',\n",
" 'BGTL',\n",
" 'BH1',\n",
" 'BH2',\n",
" 'BH3',\n",
" 'BH4',\n",
" 'BH5',\n",
" 'BHK',\n",
" 'BID',\n",
" 'BIR',\n",
" 'BLS',\n",
" 'BLU',\n",
" 'BMX',\n",
" 'BNA',\n",
" 'BOD',\n",
" 'BRA',\n",
" 'BTL',\n",
" 'BVR',\n",
" 'C01',\n",
" 'C02',\n",
" 'C03',\n",
" 'C04',\n",
" 'C06',\n",
" 'C07',\n",
" 'C08',\n",
" 'C09',\n",
" 'C10',\n",
" 'C11',\n",
" 'C12',\n",
" 'C13',\n",
" 'C14',\n",
" 'C17',\n",
" 'C18',\n",
" 'C19',\n",
" 'C20',\n",
" 'C21',\n",
" 'C22',\n",
" 'C23',\n",
" 'C24',\n",
" 'C25',\n",
" 'C27',\n",
" 'C28',\n",
" 'C30',\n",
" 'C31',\n",
" 'C32',\n",
" 'C33',\n",
" 'C34',\n",
" 'C35',\n",
" 'C36',\n",
" 'C7H',\n",
" 'CAI',\n",
" 'CAN',\n",
" 'CBE',\n",
" 'CBN',\n",
" 'CHE',\n",
" 'CKN',\n",
" 'CLD',\n",
" 'CLE',\n",
" 'CLN',\n",
" 'COL1',\n",
" 'COL2',\n",
" 'COL3',\n",
" 'COL4',\n",
" 'COT',\n",
" 'CQV',\n",
" 'CRL',\n",
" 'CRR',\n",
" 'CTY',\n",
" 'CVM',\n",
" 'CVS',\n",
" 'CWEU',\n",
" 'CWFN',\n",
" 'CWKX',\n",
" 'CWLB',\n",
" 'CWLO',\n",
" 'CWLT',\n",
" 'CWLW',\n",
" 'CWMW',\n",
" 'CWOS',\n",
" 'CWPH',\n",
" 'CWQG',\n",
" 'CWSA',\n",
" 'CWSE',\n",
" 'CWZB',\n",
" 'CWZC',\n",
" 'CWZV',\n",
" 'CYAH',\n",
" 'CYAW',\n",
" 'CYBK',\n",
" 'CYBU',\n",
" 'CYCB',\n",
" 'CYCG',\n",
" 'CYCX',\n",
" 'CYDA',\n",
" 'CYEG',\n",
" 'CYEV',\n",
" 'CYFB',\n",
" 'CYFO',\n",
" 'CYFS',\n",
" 'CYGQ',\n",
" 'CYHM',\n",
" 'CYHZ',\n",
" 'CYJT',\n",
" 'CYLH',\n",
" 'CYLJ',\n",
" 'CYMD',\n",
" 'CYMO',\n",
" 'CYMT',\n",
" 'CYMX',\n",
" 'CYOC',\n",
" 'CYOW',\n",
" 'CYPA',\n",
" 'CYPE',\n",
" 'CYPL',\n",
" 'CYPQ',\n",
" 'CYQA',\n",
" 'CYQD',\n",
" 'CYQG',\n",
" 'CYQH',\n",
" 'CYQI',\n",
" 'CYQK',\n",
" 'CYQQ',\n",
" 'CYQR',\n",
" 'CYQT',\n",
" 'CYQX',\n",
" 'CYQY',\n",
" 'CYRB',\n",
" 'CYSM',\n",
" 'CYSY',\n",
" 'CYTH',\n",
" 'CYTL',\n",
" 'CYTS',\n",
" 'CYUL',\n",
" 'CYUX',\n",
" 'CYVO',\n",
" 'CYVP',\n",
" 'CYVQ',\n",
" 'CYVR',\n",
" 'CYVV',\n",
" 'CYWA',\n",
" 'CYWG',\n",
" 'CYWO',\n",
" 'CYXC',\n",
" 'CYXE',\n",
" 'CYXH',\n",
" 'CYXS',\n",
" 'CYXU',\n",
" 'CYXX',\n",
" 'CYXY',\n",
" 'CYXZ',\n",
" 'CYYB',\n",
" 'CYYC',\n",
" 'CYYE',\n",
" 'CYYJ',\n",
" 'CYYQ',\n",
" 'CYYR',\n",
" 'CYYT',\n",
" 'CYYZ',\n",
" 'CYZF',\n",
" 'CYZS',\n",
" 'CYZT',\n",
" 'CYZV',\n",
" 'DEN',\n",
" 'DOV',\n",
" 'DPG',\n",
" 'DSC',\n",
" 'DSD',\n",
" 'DTX',\n",
" 'DVN',\n",
" 'DYS',\n",
" 'E28',\n",
" 'E74',\n",
" 'EAT',\n",
" 'EAX',\n",
" 'EDW',\n",
" 'EFL',\n",
" 'EMP',\n",
" 'END',\n",
" 'ENL',\n",
" 'ESTC',\n",
" 'FCS',\n",
" 'FDR',\n",
" 'FFC',\n",
" 'FHU',\n",
" 'FLG',\n",
" 'FLP',\n",
" 'FPK',\n",
" 'FRI',\n",
" 'FSI',\n",
" 'FTR',\n",
" 'FWD',\n",
" 'G#1',\n",
" 'G#2',\n",
" 'G#3',\n",
" 'G#4',\n",
" 'G#5',\n",
" 'G#6',\n",
" 'G#7',\n",
" 'G#8',\n",
" 'G#9',\n",
" 'G#A',\n",
" 'G#B',\n",
" 'G#C',\n",
" 'G#D',\n",
" 'G#E',\n",
" 'G#F',\n",
" 'G#G',\n",
" 'G001',\n",
" 'G003',\n",
" 'G004',\n",
" 'G005',\n",
" 'G007',\n",
" 'G009',\n",
" 'GDP',\n",
" 'GDV',\n",
" 'GLRY',\n",
" 'GMX1',\n",
" 'GNB',\n",
" 'GNC',\n",
" 'GRF',\n",
" 'GTB',\n",
" 'GTP',\n",
" 'GVL',\n",
" 'GVS',\n",
" 'GYX',\n",
" 'H02',\n",
" 'HAY',\n",
" 'HGR',\n",
" 'HMN',\n",
" 'HOM',\n",
" 'HOO',\n",
" 'HSI',\n",
" 'HYR',\n",
" 'HYS',\n",
" 'ICC',\n",
" 'IGM',\n",
" 'ILN',\n",
" 'ILS',\n",
" 'ILX',\n",
" 'IMT',\n",
" 'INK',\n",
" 'IPX',\n",
" 'JACK',\n",
" 'JDN',\n",
" 'K40B',\n",
" 'K9V9',\n",
" 'KABE',\n",
" 'KABI',\n",
" 'KABQ',\n",
" 'KABR',\n",
" 'KABY',\n",
" 'KACK',\n",
" 'KACT',\n",
" 'KACV',\n",
" 'KACY',\n",
" 'KAGC',\n",
" 'KAGS',\n",
" 'KAHN',\n",
" 'KAK',\n",
" 'KALB',\n",
" 'KALI',\n",
" 'KALO',\n",
" 'KALS',\n",
" 'KALW',\n",
" 'KAMA',\n",
" 'KAN',\n",
" 'KANB',\n",
" 'KAND',\n",
" 'KAOO',\n",
" 'KAPA',\n",
" 'KAPN',\n",
" 'KART',\n",
" 'KASE',\n",
" 'KAST',\n",
" 'KATL',\n",
" 'KATY',\n",
" 'KAUG',\n",
" 'KAUS',\n",
" 'KAUW',\n",
" 'KAVL',\n",
" 'KAVP',\n",
" 'KAXN',\n",
" 'KAYS',\n",
" 'KAZO',\n",
" 'KBAF',\n",
" 'KBCE',\n",
" 'KBDE',\n",
" 'KBDL',\n",
" 'KBDR',\n",
" 'KBED',\n",
" 'KBFD',\n",
" 'KBFF',\n",
" 'KBFI',\n",
" 'KBFL',\n",
" 'KBGM',\n",
" 'KBGR',\n",
" 'KBHB',\n",
" 'KBHM',\n",
" 'KBIH',\n",
" 'KBIL',\n",
" 'KBIS',\n",
" 'KBJC',\n",
" 'KBJI',\n",
" 'KBKE',\n",
" 'KBKW',\n",
" 'KBLF',\n",
" 'KBLH',\n",
" 'KBLI',\n",
" 'KBML',\n",
" 'KBNA',\n",
" 'KBNO',\n",
" 'KBNV',\n",
" 'KBOI',\n",
" 'KBOS',\n",
" 'KBPT',\n",
" 'KBQK',\n",
" 'KBRD',\n",
" 'KBRL',\n",
" 'KBRO',\n",
" 'KBTL',\n",
" 'KBTM',\n",
" 'KBTR',\n",
" 'KBTV',\n",
" 'KBUF',\n",
" 'KBUR',\n",
" 'KBVI',\n",
" 'KBVX',\n",
" 'KBVY',\n",
" 'KBWG',\n",
" 'KBWI',\n",
" 'KBYI',\n",
" 'KBZN',\n",
" 'KCAE',\n",
" 'KCAK',\n",
" 'KCAR',\n",
" 'KCDC',\n",
" 'KCDR',\n",
" 'KCDS',\n",
" 'KCEC',\n",
" 'KCEF',\n",
" 'KCGI',\n",
" 'KCGX',\n",
" 'KCHA',\n",
" 'KCHH',\n",
" 'KCHO',\n",
" 'KCHS',\n",
" 'KCID',\n",
" 'KCIU',\n",
" 'KCKB',\n",
" 'KCKL',\n",
" 'KCLE',\n",
" 'KCLL',\n",
" 'KCLM',\n",
" 'KCLT',\n",
" 'KCMH',\n",
" 'KCMI',\n",
" 'KCMX',\n",
" 'KCNM',\n",
" 'KCNU',\n",
" 'KCOD',\n",
" 'KCOE',\n",
" 'KCON',\n",
" 'KCOS',\n",
" 'KCOU',\n",
" 'KCPR',\n",
" 'KCRE',\n",
" 'KCRP',\n",
" 'KCRQ',\n",
" 'KCRW',\n",
" 'KCSG',\n",
" 'KCSV',\n",
" 'KCTB',\n",
" 'KCVG',\n",
" 'KCWA',\n",
" 'KCYS',\n",
" 'KDAB',\n",
" 'KDAG',\n",
" 'KDAL',\n",
" 'KDAN',\n",
" 'KDAY',\n",
" 'KDBQ',\n",
" 'KDCA',\n",
" 'KDDC',\n",
" 'KDEC',\n",
" 'KDEN',\n",
" 'KDET',\n",
" 'KDFW',\n",
" 'KDHN',\n",
" 'KDHT',\n",
" 'KDIK',\n",
" 'KDLH',\n",
" 'KDLS',\n",
" 'KDMN',\n",
" 'KDPA',\n",
" 'KDRA',\n",
" 'KDRO',\n",
" 'KDRT',\n",
" 'KDSM',\n",
" 'KDTW',\n",
" 'KDUG',\n",
" 'KDUJ',\n",
" 'KEAT',\n",
" 'KEAU',\n",
" 'KECG',\n",
" 'KEED',\n",
" 'KEGE',\n",
" 'KEKN',\n",
" 'KEKO',\n",
" 'KEL',\n",
" 'KELD',\n",
" 'KELM',\n",
" 'KELO',\n",
" 'KELP',\n",
" 'KELY',\n",
" 'KENV',\n",
" 'KEPH',\n",
" 'KEPO',\n",
" 'KEPZ',\n",
" 'KERI',\n",
" 'KESF',\n",
" 'KEUG',\n",
" 'KEVV',\n",
" 'KEWB',\n",
" 'KEWN',\n",
" 'KEWR',\n",
" 'KEYW',\n",
" 'KFAM',\n",
" 'KFAR',\n",
" 'KFAT',\n",
" 'KFAY',\n",
" 'KFCA',\n",
" 'KFDY',\n",
" 'KFKL',\n",
" 'KFLG',\n",
" 'KFLL',\n",
" 'KFLO',\n",
" 'KFMN',\n",
" 'KFMY',\n",
" 'KFNT',\n",
" 'KFOE',\n",
" 'KFPR',\n",
" 'KFRM',\n",
" 'KFSD',\n",
" 'KFSM',\n",
" 'KFTW',\n",
" 'KFTY',\n",
" 'KFVE',\n",
" 'KFVX',\n",
" 'KFWA',\n",
" 'KFXE',\n",
" 'KFYV',\n",
" 'KGAG',\n",
" 'KGCC',\n",
" 'KGCK',\n",
" 'KGCN',\n",
" 'KGEG',\n",
" 'KGFK',\n",
" 'KGFL',\n",
" 'KGGG',\n",
" 'KGGW',\n",
" 'KGJT',\n",
" 'KGLD',\n",
" 'KGLH',\n",
" 'KGLS',\n",
" 'KGMU',\n",
" 'KGNR',\n",
" 'KGNV',\n",
" 'KGON',\n",
" 'KGPT',\n",
" 'KGRB',\n",
" 'KGRI',\n",
" 'KGRR',\n",
" 'KGSO',\n",
" 'KGSP',\n",
" 'KGTF',\n",
" 'KGUC',\n",
" 'KGUP',\n",
" 'KGWO',\n",
" 'KGYY',\n",
" 'KGZH',\n",
" 'KHAT',\n",
" 'KHBR',\n",
" 'KHDN',\n",
" 'KHIB',\n",
" 'KHIO',\n",
" 'KHKY',\n",
" 'KHLG',\n",
" 'KHLN',\n",
" 'KHOB',\n",
" 'KHON',\n",
" 'KHOT',\n",
" 'KHOU',\n",
" 'KHPN',\n",
" 'KHQM',\n",
" 'KHRL',\n",
" 'KHRO',\n",
" 'KHSV',\n",
" 'KHTH',\n",
" 'KHTS',\n",
" 'KHUF',\n",
" 'KHUL',\n",
" 'KHUT',\n",
" 'KHVN',\n",
" 'KHVR',\n",
" 'KHYA',\n",
" 'KIAD',\n",
" 'KIAG',\n",
" 'KIAH',\n",
" 'KICT',\n",
" 'KIDA',\n",
" 'KIL',\n",
" 'KILG',\n",
" 'KILM',\n",
" 'KIND',\n",
" 'KINK',\n",
" 'KINL',\n",
" 'KINT',\n",
" 'KINW',\n",
" 'KIPL',\n",
" 'KIPT',\n",
" 'KISN',\n",
" 'KISP',\n",
" 'KITH',\n",
" 'KIWD',\n",
" 'KJAC',\n",
" 'KJAN',\n",
" 'KJAX',\n",
" 'KJBR',\n",
" 'KJFK',\n",
" 'KJHW',\n",
" 'KJKL',\n",
" 'KJLN',\n",
" 'KJMS',\n",
" 'KJST',\n",
" 'KJXN',\n",
" 'KKL',\n",
" 'KLAF',\n",
" 'KLAN',\n",
" 'KLAR',\n",
" 'KLAS',\n",
" 'KLAX',\n",
" 'KLBB',\n",
" 'KLBE',\n",
" 'KLBF',\n",
" 'KLCB',\n",
" 'KLCH',\n",
" 'KLEB',\n",
" 'KLEX',\n",
" 'KLFK',\n",
" 'KLFT',\n",
" 'KLGA',\n",
" 'KLGB',\n",
" 'KLGU',\n",
" 'KLIT',\n",
" 'KLMT',\n",
" 'KLND',\n",
" 'KLNK',\n",
" 'KLOL',\n",
" 'KLOZ',\n",
" 'KLRD',\n",
" 'KLSE',\n",
" 'KLUK',\n",
" 'KLVS',\n",
" 'KLWB',\n",
" 'KLWM',\n",
" 'KLWS',\n",
" 'KLWT',\n",
" 'KLYH',\n",
" 'KLZK',\n",
" 'KMAF',\n",
" 'KMBS',\n",
" 'KMCB',\n",
" 'KMCE',\n",
" 'KMCI',\n",
" 'KMCN',\n",
" 'KMCO',\n",
" 'KMCW',\n",
" 'KMDN',\n",
" 'KMDT',\n",
" 'KMDW',\n",
" 'KMEI',\n",
" 'KMEM',\n",
" 'KMFD',\n",
" 'KMFE',\n",
" 'KMFR',\n",
" 'KMGM',\n",
" 'KMGW',\n",
" 'KMHE',\n",
" 'KMHK',\n",
" 'KMHT',\n",
" 'KMHX',\n",
" 'KMIA',\n",
" 'KMIV',\n",
" 'KMKC',\n",
" 'KMKE',\n",
" 'KMKG',\n",
" 'KMKL',\n",
" 'KMLB',\n",
" 'KMLC',\n",
" 'KMLI',\n",
" 'KMLS',\n",
" 'KMLT',\n",
" 'KMLU',\n",
" 'KMMU',\n",
" 'KMOB',\n",
" 'KMOT',\n",
" 'KMPV',\n",
" 'KMQT',\n",
" 'KMRB',\n",
" 'KMRY',\n",
" 'KMSL',\n",
" 'KMSN',\n",
" 'KMSO',\n",
" 'KMSP',\n",
" 'KMSS',\n",
" 'KMSY',\n",
" 'KMTJ',\n",
" 'KMTN',\n",
" 'KMWH',\n",
" 'KMYR',\n",
" 'KNA',\n",
" 'KNEW',\n",
" 'KNL',\n",
" 'KNSI',\n",
" 'KOAK',\n",
" 'KOFK',\n",
" 'KOGD',\n",
" 'KOKC',\n",
" 'KOLM',\n",
" 'KOMA',\n",
" 'KONT',\n",
" 'KOPF',\n",
" 'KOQU',\n",
" 'KORD',\n",
" 'KORF',\n",
" 'KORH',\n",
" 'KOSH',\n",
" 'KOTH',\n",
" 'KOTM',\n",
" 'KP11',\n",
" 'KP38',\n",
" 'KPAE',\n",
" 'KPAH',\n",
" 'KPBF',\n",
" 'KPBI',\n",
" 'KPDK',\n",
" 'KPDT',\n",
" 'KPDX',\n",
" 'KPFN',\n",
" 'KPGA',\n",
" 'KPHF',\n",
" 'KPHL',\n",
" 'KPHN',\n",
" 'KPHX',\n",
" 'KPIA',\n",
" 'KPIB',\n",
" 'KPIE',\n",
" 'KPIH',\n",
" 'KPIR',\n",
" 'KPIT',\n",
" 'KPKB',\n",
" 'KPLN',\n",
" 'KPMD',\n",
" 'KPNC',\n",
" 'KPNE',\n",
" 'KPNS',\n",
" 'KPOU',\n",
" 'KPQI',\n",
" 'KPRB',\n",
" 'KPRC',\n",
" 'KPSC',\n",
" 'KPSM',\n",
" 'KPSP',\n",
" 'KPTK',\n",
" 'KPUB',\n",
" 'KPVD',\n",
" 'KPVU',\n",
" 'KPWM',\n",
" 'KRAD',\n",
" 'KRAP',\n",
" 'KRBL',\n",
" 'KRDD',\n",
" 'KRDG',\n",
" 'KRDM',\n",
" 'KRDU',\n",
" 'KRFD',\n",
" 'KRIC',\n",
" 'KRIW',\n",
" 'KRKD',\n",
" 'KRKS',\n",
" 'KRNO',\n",
" 'KRNT',\n",
" 'KROA',\n",
" 'KROC',\n",
" 'KROW',\n",
" 'KRSL',\n",
" 'KRST',\n",
" 'KRSW',\n",
" 'KRUM',\n",
" 'KRWF',\n",
" 'KRWI',\n",
" 'KRWL',\n",
" 'KSAC',\n",
" 'KSAF',\n",
" 'KSAN',\n",
" 'KSAT',\n",
" 'KSAV',\n",
" 'KSBA',\n",
" 'KSBN',\n",
" 'KSBP',\n",
" 'KSBY',\n",
" 'KSCH',\n",
" 'KSCK',\n",
" 'KSDF',\n",
" 'KSDM',\n",
" 'KSDY',\n",
" 'KSEA',\n",
" 'KSEP',\n",
" 'KSFF',\n",
" 'KSFO',\n",
" 'KSGF',\n",
" 'KSGU',\n",
" 'KSHR',\n",
" 'KSHV',\n",
" 'KSJC',\n",
" 'KSJT',\n",
" 'KSLC',\n",
" 'KSLE',\n",
" 'KSLK',\n",
" 'KSLN',\n",
" 'KSMF',\n",
" 'KSMX',\n",
" 'KSNA',\n",
" 'KSNS',\n",
" 'KSPI',\n",
" 'KSPS',\n",
" 'KSRQ',\n",
" 'KSSI',\n",
" 'KSTJ',\n",
" 'KSTL',\n",
" 'KSTP',\n",
" 'KSTS',\n",
" 'KSUN',\n",
" 'KSUS',\n",
" 'KSUX',\n",
" 'KSVE',\n",
" 'KSWF',\n",
" 'KSYR',\n",
" 'KTCC',\n",
" 'KTCL',\n",
" 'KTCS',\n",
" 'KTEB',\n",
" 'KTIW',\n",
" 'KTLH',\n",
" 'KTMB',\n",
" 'KTOL',\n",
" 'KTOP',\n",
" 'KTPA',\n",
" 'KTPH',\n",
" 'KTRI',\n",
" 'KTRK',\n",
" 'KTRM',\n",
" 'KTTD',\n",
" 'KTTN',\n",
" 'KTUL',\n",
" 'KTUP',\n",
" 'KTUS',\n",
" 'KTVC',\n",
" 'KTVL',\n",
" 'KTWF',\n",
" 'KTXK',\n",
" 'KTYR',\n",
" 'KTYS',\n",
" 'KUCA',\n",
" 'KUIN',\n",
" 'KUKI',\n",
" 'KUNV',\n",
" 'KVCT',\n",
" 'KVEL',\n",
" 'KVLD',\n",
" 'KVNY',\n",
" 'KVRB',\n",
" 'KWJF',\n",
" 'KWMC',\n",
" 'KWRL',\n",
" 'KWYS',\n",
" 'KY22',\n",
" 'KY26',\n",
" 'KYKM',\n",
" 'KYKN',\n",
" 'KYNG',\n",
" 'KYUM',\n",
" 'KZZV',\n",
" 'LAA',\n",
" 'LAP',\n",
" 'LBY',\n",
" 'LDL',\n",
" 'LHX',\n",
" 'LIC',\n",
" 'LOR',\n",
" 'LRR',\n",
" 'LSF',\n",
" 'LUS',\n",
" 'LVM',\n",
" 'LW1',\n",
" 'MAC',\n",
" 'MAX',\n",
" 'MAZ',\n",
" 'MDPC',\n",
" 'MDPP',\n",
" 'MDSD',\n",
" 'MDST',\n",
" 'MGFL',\n",
" 'MGGT',\n",
" 'MGHT',\n",
" 'MGPB',\n",
" 'MGSJ',\n",
" 'MHAM',\n",
" 'MHCA',\n",
" 'MHCH',\n",
" 'MHLC',\n",
" 'MHLE',\n",
" 'MHLM',\n",
" 'MHNJ',\n",
" 'MHPL',\n",
" 'MHRO',\n",
" 'MHSR',\n",
" 'MHTE',\n",
" 'MHTG',\n",
" 'MHYR',\n",
" 'MIB',\n",
" 'MIE',\n",
" 'MKJP',\n",
" 'MKJS',\n",
" 'MLD',\n",
" 'MMAA',\n",
" 'MMAS',\n",
" 'MMBT',\n",
" 'MMCE',\n",
" 'MMCL',\n",
" 'MMCN',\n",
" 'MMCS',\n",
" 'MMCU',\n",
" 'MMCV',\n",
" 'MMCZ',\n",
" 'MMDO',\n",
" 'MMGL',\n",
" 'MMGM',\n",
" 'MMHO',\n",
" 'MMLP',\n",
" 'MMMA',\n",
" 'MMMD',\n",
" 'MMML',\n",
" 'MMMM',\n",
" 'MMMT',\n",
" 'MMMX',\n",
" 'MMMY',\n",
" 'MMMZ',\n",
" 'MMNL',\n",
" 'MMPR',\n",
" 'MMRX',\n",
" 'MMSD',\n",
" 'MMSP',\n",
" 'MMTC',\n",
" 'MMTJ',\n",
" 'MMTM',\n",
" 'MMTO',\n",
" 'MMTP',\n",
" 'MMUN',\n",
" 'MMVR',\n",
" 'MMZC',\n",
" 'MMZH',\n",
" 'MMZO',\n",
" 'MNMG',\n",
" 'MNPC',\n",
" 'MOR',\n",
" 'MPBO',\n",
" 'MPCH',\n",
" 'MPDA',\n",
" 'MPMG',\n",
" 'MPSA',\n",
" 'MPTO',\n",
" 'MPX',\n",
" 'MRCH',\n",
" 'MRF',\n",
" 'MRLB',\n",
" 'MRLM',\n",
" 'MROC',\n",
" 'MRPV',\n",
" 'MRS',\n",
" 'MSAC',\n",
" 'MSLP',\n",
" 'MSSS',\n",
" 'MTCH',\n",
" 'MTL',\n",
" 'MTPP',\n",
" 'MTV',\n",
" 'MTY',\n",
" 'MUBA',\n",
" 'MUBY',\n",
" 'MUCA',\n",
" 'MUCL',\n",
" 'MUCM',\n",
" 'MUCU',\n",
" 'MUGM',\n",
" 'MUGT',\n",
" 'MUHA',\n",
" 'MUMO',\n",
" 'MUMZ',\n",
" 'MUNG',\n",
" 'MUVR',\n",
" 'MUVT',\n",
" 'MWCR',\n",
" 'MYBS',\n",
" 'MYEG',\n",
" 'MYGF',\n",
" 'MYGW',\n",
" 'MYL',\n",
" 'MYNN',\n",
" 'MZBZ',\n",
" 'MZT',\n",
" 'NCK',\n",
" 'NGX',\n",
" 'NHK',\n",
" 'NID',\n",
" 'NKX',\n",
" 'NOA',\n",
" 'NRU',\n",
" 'NTD',\n",
2018-10-05 17:09:43 -06:00
" ...]"
2018-09-05 15:52:38 -06:00
]
},
"execution_count": 2,
2018-09-05 15:52:38 -06:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"locations = DataAccessLayer.getAvailableLocationNames(request)\n",
"locations.sort()\n",
"list(locations)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [],
"source": [
"request.setLocationNames(\"KFRM\")\n",
"cycles = DataAccessLayer.getAvailableTimes(request, True)\n",
"times = DataAccessLayer.getAvailableTimes(request)\n",
"\n",
"try:\n",
" fcstRun = DataAccessLayer.getForecastRun(cycles[-1], times)\n",
" list(fcstRun)\n",
" response = DataAccessLayer.getGeometryData(request,[fcstRun[0]])\n",
"except:\n",
" print('No times available')\n",
" exit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Model Sounding Parameters\n",
"\n",
"Construct arrays for each parameter to plot (temperature, pressure, moisutre (spec. humidity), wind components, and cloud cover)"
]
},
{
"cell_type": "code",
"execution_count": 4,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"parms = ['temperature', 'pressure', 'vComp', 'uComp', 'cldCvr', 'specHum', 'omega']\n",
"site = KFRM\n",
2018-09-05 15:52:38 -06:00
"geom = POINT (-94.41999816894531 43.65000152587891)\n",
2018-10-11 14:56:26 -06:00
"datetime = 2018-10-11 12:00:00\n",
"reftime = Oct 11 18 12:00:00 GMT\n",
"fcstHour = 0\n",
2018-10-11 14:56:26 -06:00
"period = (Oct 11 18 12:00:00 , Oct 11 18 12:00:00 )\n"
2018-09-05 15:52:38 -06:00
]
}
],
"source": [
"tmp,prs,sh = np.array([]),np.array([]),np.array([])\n",
"uc,vc,om,cld = np.array([]),np.array([]),np.array([]),np.array([])\n",
"\n",
"for ob in response:\n",
2018-10-05 17:09:43 -06:00
" tmp = np.append(tmp,ob.getNumber(\"temperature\"))\n",
" prs = np.append(prs,ob.getNumber(\"pressure\"))\n",
" sh = np.append(sh,ob.getNumber(\"specHum\"))\n",
" uc = np.append(uc,ob.getNumber(\"uComp\"))\n",
" vc = np.append(vc,ob.getNumber(\"vComp\"))\n",
" om = np.append(om,ob.getNumber(\"omega\"))\n",
" cld = np.append(cld,ob.getNumber(\"cldCvr\"))\n",
2018-09-05 15:52:38 -06:00
"\n",
"print(\"parms = \" + str(ob.getParameters()))\n",
"print(\"site = \" + str(ob.getLocationName()))\n",
"print(\"geom = \" + str(ob.getGeometry()))\n",
"print(\"datetime = \" + str(ob.getDataTime()))\n",
"print(\"reftime = \" + str(ob.getDataTime().getRefTime()))\n",
"print(\"fcstHour = \" + str(ob.getDataTime().getFcstTime()))\n",
"print(\"period = \" + str(ob.getDataTime().getValidPeriod()))"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Calculating Dewpoint from Specific Humidity\n",
"\n",
"Because the modelsounding plugin does not return dewpoint values, we must calculate the profile ourselves. Here are three examples of dewpoint calculated from specific humidity, including a manual calculation following NCEP AWIPS/NSHARP. \n",
"\n",
"**1) MetPy calculated mixing ratio and vapor pressure**"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
2018-09-05 15:52:38 -06:00
"outputs": [],
"source": [
"t = (tmp-273.15) * units.degC\n",
"p = prs/100 * units.mbar\n",
"\n",
"u,v = uc*1.94384,vc*1.94384 # m/s to knots\n",
"spd = wind_speed(u, v) * units.knots\n",
"dir = wind_direction(u, v) * units.deg"
2018-09-05 15:52:38 -06:00
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
2018-10-11 14:56:26 -06:00
"outputs": [],
2018-09-05 15:52:38 -06:00
"source": [
"rmix = (sh/(1-sh)) *1000 * units('g/kg')\n",
"e = vapor_pressure(p, rmix)\n",
"td = dewpoint(e)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**2) metpy calculated assuming spec. humidity = mixing ratio**"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
2018-10-05 17:09:43 -06:00
"outputs": [],
2018-09-05 15:52:38 -06:00
"source": [
"td2 = dewpoint(vapor_pressure(p, sh))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**3) NCEP AWIPS soundingrequest plugin**\n",
"\n",
"based on GEMPAK/NSHARP, from https://github.com/Unidata/awips2-ncep/blob/unidata_16.2.2/edex/gov.noaa.nws.ncep.edex.plugin.soundingrequest/src/gov/noaa/nws/ncep/edex/plugin/soundingrequest/handler/MergeSounding.java#L1783"
]
},
{
"cell_type": "code",
"execution_count": 8,
2018-09-05 15:52:38 -06:00
"metadata": {},
2018-10-11 14:56:26 -06:00
"outputs": [],
2018-09-05 15:52:38 -06:00
"source": [
"# new arrays\n",
"ntmp = tmp\n",
"\n",
"# where p=pressure(pa), T=temp(C), T0=reference temp(273.16)\n",
"rh = 0.263*prs*sh / (np.exp(17.67*ntmp/(ntmp+273.15-29.65)))\n",
"vaps = 6.112 * np.exp((17.67 * ntmp) / (ntmp + 243.5))\n",
"vapr = rh * vaps / 100\n",
"dwpc = np.array(243.5 * (np.log(6.112) - np.log(vapr)) / (np.log(vapr) - np.log(6.112) - 17.67)) * units.degC"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## MetPy SkewT and Hodograph"
]
},
{
"cell_type": "code",
"execution_count": 9,
2018-09-05 15:52:38 -06:00
"metadata": {},
"outputs": [
{
"data": {
2018-10-11 14:56:26 -06:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAANjCAYAAADrja/LAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzsvXl4VdW5+P9ZmckABJJAEghhHmUSqKgIKCCKgqICgiBaq6J0sK223t623ra/a29t+723gzigRQEHsDgUixWpODAoQREQEoRAQuaRkPkk56zfH3uf7JOQEZKzT5L38zznSfa01rvXXnvvd737Xe+rtNYIgiAIgiAIguAd/OwWQBAEQRAEQRC6E6KAC4IgCIIgCIIXEQVcEARBEARBELyIKOCCIAiCIAiC4EVEARcEQRAEQRAELyIKuCAIgiAIgiB4EVHABUEQBEEQBKGNKKU+VUpppdS0th4b0BECCYIgCIIgCEJXRSmVBiQAN2mtP2/r8aKAC4IgCIIgCEIrUEopwGUuXq213nMx5YgCLgiCIAiCIAgtoJTyB2rNxfFa6yMXW5Yo4IIgCIIgCILQDEqpIKDaXByitT59KeWJAi4IgiAIgiAITaCUCgdKzcX+WuvcSy1TFHBBEARBEARBaASlVBSQby720lqfb49yJQyhIAiCIAiC0KUxwwVqpVRig/WxSqnTSqm4Ro5JwFK+e7SX8g2igAuCIAiCIAhdn4nm39NKqeNKqR7mchmQCGQqpT43fb1RSo0G0sx9ArXWVe0pjCjggiAIgiAIQpdDKRVpWr03AYe11gpYCYwCKpRSTwNl5voHgKlAtVLqn8Axsxg/rXVtY+Vfkmxa6/YuUxAEQRAEQRBsRyn1W+An5uIDWuvnzFjefwXWmOtXaq03meuzgX4ApmLeIYgFXBAEQRAEQegyKKVWm5bvWVrrnwLBwOfAs0opDUzTWj8EhALJwEZz/W8wlO8vO1L5BrGAC4IgCIIgCF0IpVRPoAjwN1cN1FpnmBMtMz127ae1zjMnZrrjem/XWt/c0TKKBVwQBEEQBEHoMmitz2utA4Bp5qqzSqmDQKFp2b7GXJ+rlPoI+I65/Jw3lG8QC7ggCIIgCILQhVFKfRtYby7+QWv9Y3P994H/Ndf/Smv9S6/JJAq4IAiCIAiC0JUxJ1i+ANxjrroduBu4GXhMa/2UV+URBVwQBEEQBEHoDphp5Y8Cg8xVd2qtX/O6HKKAC4IgCIIgCN0Jc+Kln9Y61Zb6RQEXBEEQBEEQBO8hUVAEQRAEQRAEwYuIAi4IgiAIgiAIXkQUcEEQBEEQBEHwIqKAC4IgCIIgCIIXEQVcEARBEARBELyIKOCCIAiCIAiC4EVEARcEQRAEQRAELyIKuCAIgiAIgiB4EVHABUEQBEEQBMGLiAIuCIIgCIIgCF5EFHBBEARBEARB8CKigAuCIAiCIAiCFxEFXBAEQRAEQRC8iCjggiAIgiAIguBFRAEXBEEQBEEQBC8iCrggCIIgCIIgeBFRwAVBEARBEATBi4gCLgiCIAiCIAheRBRwQRAEQRAEQfAiooALgiAIgiAIghcRBVwQBEEQBEEQvIgo4IIgCIIgCILgRUQBFwRBEARBEAQvIgq4IAiCIAiCIFwESqm5Sql+bT0uoCOEEQRBEARBEISuilIqACgAegEzgdy2HC8WcEEQBEEQBEFoJUqpCUANhvJ9ldb647aWIQq4IABKqTFKqSS75WgLSqkHlFL/a7ccgiD4Dkqp8UqpvQ3W/VEp9aBdMgmCr6CUClVK/V4ppS6hjN8Dh8zFHlrrvc3t3yRaa/nJ74IfsAz4DCgH8sz/HwKUuX0D4ADKPH5LzW1XA3uBEqAI2ANMbaKeJ4BNHsvxQDLwJ0ABu4GqBvVMN/fVpnxlQCbwR8Dfo6zd5j4TGtT5lrl+lse6vwPLPJbPAJVm2bnA34Bwj+03AZ+b9RcCm4EBHttXA582KC8XCPNYd58pY0KD8/M8rzJgRiPtFgScBeKbuYbxwNvmNcgAHmxiv7vNOu9rRb8Ybl4Pz2sWC7wDZJnlJLZFDuBm4Kh5rnuBMR7bgoH/Z5ZdDDwNBHpsTwT+aW7LAf4CBHhsfw5IAVzA6kbOZwiwHSjF+JT4uzaU3aTcDer4t9kunsd69q8y4P0G914Kxv2TB7wE9PTYvhZIAqqBDW24p/9myjHMY90mIBs4D5xoqQ+00F67qX+vpjQ4djmQhtG33wL6eGzrA7xpbksDlrfh2Cbbw7yGmvr31889tv8e+MY8n2RgVYPjG96L6xv0zWcw7usi4B943I8N6iwDnMCfPbYvAY6bdR8DbmlDv2+2D2D025sb3KNngaBW9pUFwKfAOYy+/zwQ0UC+F81+kwP8sMGz6Q2MPl7vOduadmtElnHAv8z+phvZ3mzfaWT/XwNHgFrgiQbbmn2WNVJWc33vCmCneY75wFYgtpmyFPA/GO+TQuB3mO9bc/tE4CBQYf6d6I2yutoP6GdeWw0ktPHYUI9jf3XJstjdGPLzvR/wI/PheDsQYd7MkzCUzGBznw3Abxo5tqf50L4T8Ad6APOA8U3U9QSmMgcMAk5x4Uu9UaUAD2UCGIahhH+nwbEpwB881vXFeGHkuV8M5kO3CAjx2O8MMMf8Px5D0fqtuXw7xotnhXl+/TFeRmeASHOf1VyogBcC/+Gx7j5gd3Pn1cw1ugPY2cI+HwL/CwQCE8xznN1gn0gMxeNoU+3cYP/3gU+or4D3wxicTadxBbxJOTAU+vMYg7YA4HHgJKayCvzSrK8PEA3sB/7Lo+x/mn0xxLwOR4DveWx/GLgO4yW5uoFcQWZ/+yEQZpYxvjVltyS3RxkrgI9pXAGf00QbDwSizP/DMe67P3lsXwzcAqyjlQq4KadbDk8FfCzWPT0K4964vIkyWmqv3U31IbOeUuAa85xeAV7z2P4q8Lq57WqMwcfYVh7bZHtgKeABTcj1X+Z5+wHfwlB2r2zNvQg8BnyF0f9DgI3Atib2DcNQwq/xeKY4gBswnq8LMJShmFb2+2b7gNnvtjdYtxO4vZX9ZTkwH0PhiAR2AM94bH/SlC8SGG32m/ke/eQH5nXM5kIFvNXtZu4/Evg2sIjGFfAm+04T5d1ttvvbXKiAN/ssa6Ss5vreDRjP6Z5mO74IvNdMWQ9gvK8GmP3jGKaxwmzTNOARjAHM98zlRgdU7VlWV/mZ1+gX5v+9sRTpta08frbHMY0aW9osk92NIj/f+mH4M5UDt7Ww3wYaV8CnAOfaUN8TGFa4oeZD4NcNtu+mFQq4ubwF+GuDY3+BYXX1N9etNW/EDCwFfBXwQYOyz+ChIAFPYVj+lCnnYw3298NQYn9lLq/mQgX8pxjKZ29z3aUo4C8C/9nM9nCznGiPdc8BGxvs9wzGC6fJdvbYd5nZxk/goYB7bA+gwUurJTnM6/Fug3asBK4zl5OAOzy2LwfOeiwfB25scJ2ebUS2T7lQAb8f+KSZ822y7Jbk9riXTmBYwlqtgDdyHV8G/tnItt/QCgXcvC5fAuOb61sYik42sKSJ7S21V5N9CPhv4BWP5aEYCmgEhnLqAEZ4bN+INeBt8tiW2oMWFPBG5HwH+JHHcnPttY76xoIFNLD6e2y7G0jF+oL4LSCvwT75WF/3mu33LfUBDKWrEnNwZa77GfC31rRDI+UtBo54LGcC8zyWf43HoMhjfd1z9mLarcFxw2iggLfUd1oobxMNFPAG90yLCnhL16HBPpOB0ma27wXu91j+NrDf/H+e2eaeVux0zEFPR5bVVX7AT7AUaLfRYZO5nIPH1/NGjn3d3O9sc/u19Sc+4EJDpmOMit++yONPAE6l1EtKqRuUUpGtOGYIhnXuWa31zy+mUqXUKGAGhhXSkyyM0f88c3kVhkLjyWUY1oKmyh4I3IihxIzEcBnZ6rmP1tqF4cYytxkxkzCUlB83s09raVZmjIGC51/3/+PqFpSahjFgeqalypRSPYFfYXwdaQstyaEa2dbS9gFKqV7m8v8By0y/vngMq9N7rZTtCuCMUmqHUqpAKbVbKXWZx/bmym5
2018-09-05 15:52:38 -06:00
"text/plain": [
"<Figure size 864x1008 with 2 Axes>"
2018-09-05 15:52:38 -06:00
]
},
"metadata": {
"needs_background": "light"
},
2018-09-05 15:52:38 -06:00
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"\n",
"plt.rcParams['figure.figsize'] = (12, 14)\n",
"\n",
"# Create a skewT plot\n",
"skew = SkewT()\n",
"\n",
"# Plot the data\n",
"skew.plot(p, t, 'r', linewidth=2)\n",
"skew.plot(p, td, 'b', linewidth=2)\n",
"skew.plot(p, td2, 'y')\n",
"skew.plot(p, dwpc, 'g', linewidth=2)\n",
"\n",
"skew.plot_barbs(p, u, v)\n",
"skew.ax.set_ylim(1000, 100)\n",
"skew.ax.set_xlim(-40, 60)\n",
"\n",
"plt.title( forecastModel + \" \" \\\n",
" + ob.getLocationName() \\\n",
" + \"(\"+ str(ob.getGeometry()) + \")\" \\\n",
" + \", \" + str(ob.getDataTime())\n",
")\n",
2018-09-05 15:52:38 -06:00
"\n",
"# An example of a slanted line at constant T -- in this case the 0 isotherm\n",
"l = skew.ax.axvline(0, color='c', linestyle='--', linewidth=2)\n",
"\n",
"# Draw hodograph\n",
"ax_hod = inset_axes(skew.ax, '40%', '40%', loc=2)\n",
"h = Hodograph(ax_hod, component_range=wind_speed(u, v).max())\n",
2018-09-05 15:52:38 -06:00
"h.add_grid(increment=20)\n",
"h.plot_colormapped(u, v, spd)\n",
"\n",
"# Show the plot\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
2018-09-05 15:52:38 -06:00
"language": "python",
"name": "python3"
2018-09-05 15:52:38 -06:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
2018-09-05 15:52:38 -06:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.6"
2018-09-05 15:52:38 -06:00
}
},
"nbformat": 4,
"nbformat_minor": 1
}