13156 10:22 wget https://atmos.uw.edu/wp-content/themes/coenv-atmos/assets/img/scale.png
13370 9:51 wget https://weather.cod.edu/assets/javascript/behavior-desk.js
13371 9:52 wget https://weather.cod.edu/forecast/assets/javascript/behavior-desk.js
13372 9:52 wget https://weather.cod.edu/forecast/assets/javascript/readoutFn.js
13373 9:52 wget https://weather.cod.edu/forecast/assets/javascript/ani-desk.js
13374 9:53 wget https://weather.cod.edu/assets/javascript/sitenavheader.js
13375 9:54 wget https://weather.cod.edu/forecast/assets/css/models-desk.css
13376 9:54 wget https://weather.cod.edu/forecast/assets/css/aniStyles-desk.css
13377 9:54 wget https://weather.cod.edu/assets/css/socialbuttons.css
13382 10:03 wget https://weather.cod.edu/wxdata/forecast/ECMWF/2025050712/NW/readout/ECMWFNW_850_spd_000.txt.gz
13384 10:04 touch commands ; h | grep wget >> commands
the modeljson stores in the information on what forecast hours, what
products for each subcategory
{"models":{"HRRR":{"id":"HRRR",
"abbr":"HRRR",
"title":"High Resolution Rapid Refresh",
"server":"wxdata",
"fileType":".png",
"fsound":false,
"runStep":1,
"finalRun":23,
"runs":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],
"daysOfRuns":1.5,
"runcol":6,
"hours":[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]],
"sectors":["NE","MA","SE","NGP","GL","NIL","MW","CGP","SGP","NW","GBSN","SW","CHI","DEN","OKC","TRACER","FLT1","FLT2"],
"productsByLevel":{"FLT2":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","avort"],"prec":["precacc","precacc6","precacc12","cloud","radar"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio"]},"NIL":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","avort"],"prec":["precacc","precacc1","precacc6","precacc12","cloud","radar"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","3kmhel","1kmhel","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow1","snow6","snow12","sndepth","kuchsnow","kuchsnow1","kuchsnow6","kuchsnow12","kratio"]},"TRACER":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","pblh"],"prec":["precacc","precacc1","precacc6","precacc12","cloud","radar","pwat"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","3kmhel","1kmhel","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio"]},"general":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","avort"],"prec":["precacc","precacc6","precacc12","cloud","radar"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","3kmhel","1kmhel","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio"]}}}
for the GFS the hours looks like this, ok so 0,6,12,18 list all of the
hours available for each of the initial hours, in case it differs,
like it does for HRRR
"hours":{"0":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384],"6":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384],"12":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384],"18":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384]},
For GFS the productsByLevel =
WLD = world, FLT1 = , FLT2 = , general, US, NIL = northern Illinois
"productsByLevel":{"WLD":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa"],"500":["spd","spdsa","uwndsa","hgtsa","avort","tempsa"],"700":["rhum"],"850":["spdsa","hgtsa","temp","tempanom","tempsa"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum"],"prec":["prec","precacc","pwat","pwatsa"],"winter":["kuchsnow","kratio"]},"NA":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa","rhum"],"500":["spd","spdsa","uwndsa","hgtsa","avort","temp","tempsa","rhum"],"700":["spd","temp","rhum"],"850":["spd","spdsa","hgtsa","temp","tempanom","tempsa","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum","thetae"],"prec":["prec","precacc","pwat","pwatsa"],"winter":["kuchsnow","kratio"]},"AO":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa"],"500":["spd","spdsa","uwndsa","hgtsa","avort","temp","tempsa"],"700":["rhum"],"850":["spdsa","hgtsa","temp","tempanom","tempsa"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum"],"prec":["prec","precacc","pwat","pwatsa"],"con":["mucape"]},"PO":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa"],"500":["spd","spdsa","uwndsa","hgtsa","avort","tempsa"],"700":["rhum"],"850":["spdsa","hgtsa","temp","tempanom","tempsa"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum"],"prec":["prec","precacc","pwat","pwatsa"],"con":["mucape"]},"NIL":{"500":["avort","vvel"],"700":["avort","vvel"],"850":["spd","temp","tadv","vvel"],"925":["spd","temp"],"sfc":["temp","tempanom","tempsa","mslpsa","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","radar","cprec","precacc","precacc6","precacc12","precacc24","pwat","cloud"],"con":["sbcape","mlcape","mucape","lsi","scp","3kmhel","3kmehi","lapse57","lapse81"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","frzra","cthk"]},"US":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa","rhum"],"500":["spd","spdsa","uwndsa","hgtsa","avort","temp","tempsa","vvel","rhum"],"700":["spd","avort","temp","vvel","rhum"],"850":["spd","spdsa","hgtsa","thetae","temp","tempanom","tempsa","tadv","dewp","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","tempanom","tempsa","mslpsa","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","radar","cprec","precacc","precacc6","precacc12","precacc24","pwat","pwatsa","cloud"],"con":["sbcape","mlcape","mucape","shear","lsi","scp","3kmhel","3kmehi","lapse57","lapse81"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","frzra","cthk"]},"general":{"2pvu":["pres"],"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","avort","temp","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","radar","cprec","precacc","precacc6","precacc12","precacc24","pwat","cloud"],"con":["sbcape","mlcape","mucape","lsi","scp","3kmhel","3kmehi","lapse57","lapse81"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","frzra","cthk"]}}}
window.modeljson = {"models":{"HRRR":{"id":"HRRR","abbr":"HRRR","title":"High Resolution Rapid Refresh","server":"wxdata","fileType":".png","fsound":false,"runStep":1,"finalRun":23,"runs":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23],"daysOfRuns":1.5,"runcol":6,"hours":[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]],"sectors":["NE","MA","SE","NGP","GL","NIL","MW","CGP","SGP","NW","GBSN","SW","CHI","DEN","OKC","TRACER","FLT1","FLT2"],"productsByLevel":{"FLT2":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","avort"],"prec":["precacc","precacc6","precacc12","cloud","radar"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio"]},"NIL":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","avort"],"prec":["precacc","precacc1","precacc6","precacc12","cloud","radar"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","3kmhel","1kmhel","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow1","snow6","snow12","sndepth","kuchsnow","kuchsnow1","kuchsnow6","kuchsnow12","kratio"]},"TRACER":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","pblh"],"prec":["precacc","precacc1","precacc6","precacc12","cloud","radar","pwat"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","3kmhel","1kmhel","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio"]},"general":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","vis","gust","avort"],"prec":["precacc","precacc6","precacc12","cloud","radar"],"con":["sbcape","mlcape","mucape","cape3km","stp","scp","uphly","uphlysw","uphlysw6","3kmhel","1kmhel","vil","ltng","etop"],"winter":["frzra","ptype","dgzdepth","snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio"]}}},"RAP":{"id":"RAP","abbr":"RAP","title":"Rapid Refresh","server":"wxdata","fileType":".png","fsound":true,"runStep":3,"finalRun":21,"runs":[0,3,6,9,12,15,18,21],"daysOfRuns":2,"runcol":4,"hours":{"0":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"3":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"6":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"9":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"12":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"15":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51],"18":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],"21":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51]},"sectors":["US","NE","MA","SE","NGP","GL","NIL","MW","CGP","SGP","NW","GBSN","SW","FLT1","FLT2"],"productsByLevel":{"FLT2":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","temp","avort","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","thetae","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc1","precacc6","precacc12","pwat","radar"],"con":["sbcape","mlcape","mucape","cape3km","lsi","mconv","massconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81","hodomap"],"winter":["snow","snow1","snow6","snow12","sndepth","kuchsnow","kuchsnow1","kuchsnow6","kuchsnow12","kratio","dgzdepth","frzra","ptype","cthk"]},"FLT1":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","temp","avort","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","pwat","radar"],"con":["sbcape","mlcape","mucape","cape3km","lsi","mconv","massconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81","hodomap"],"winter":["snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio","dgzdepth","frzra","ptype","cthk"]},"NIL":{"500":["avort","vvel"],"700":["avort","vvel"],"850":["spd","temp","tadv","vvel"],"925":["spd","temp"],"sfc":["temp","dewp","thetae","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc1","precacc6","precacc12","pwat","radar"],"con":["sbcape","mlcape","mucape","cape3km","lsi","mconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81"],"winter":["snow","snow1","snow6","snow12","sndepth","kuchsnow","kuchsnow1","kuchsnow6","kuchsnow12","kratio","dgzdepth","frzra","ptype","cthk"]},"general":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","temp","avort","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","pwat","radar"],"con":["sbcape","mlcape","mucape","cape3km","lsi","mconv","massconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81"],"winter":["snow","snow6","snow12","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kratio","dgzdepth","frzra","ptype","cthk"]}}},"NAM":{"id":"NAM","abbr":"NAM","title":"North American Mesocale Model","server":"wxdata","fileType":".png","fsound":true,"runStep":6,"finalRun":18,"runs":[0,6,12,18],"daysOfRuns":3,"runcol":4,"hours":{"0":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84],"6":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84],"12":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84],"18":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84]},"sectors":["US","NE","MA","SE","NGP","GL","NIL","MW","CGP","SGP","AK","WCAN","NW","GBSN","SW","FLT1","FLT2"],"productsByLevel":{"FLT1":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","avort","temp","fronto","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","fronto","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","precacc24","pwat","radar","cloud"],"con":["sbcape","mlcape","mucape","lsi","mconv","massconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81","hodomap"],"winter":["ptype","frzra","cthk","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio"]},"FLT2":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","avort","temp","fronto","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","fronto","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","precacc24","pwat","radar","cloud"],"con":["sbcape","mlcape","mucape","lsi","mconv","massconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81","hodomap"],"winter":["ptype","frzra","cthk","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio"]},"AK":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","avort","temp","vvel","rhum","fronto"],"850":["spd","thetae","temp","tadv","dewp","vvel","rhum","fronto"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","precacc24","pwat","radar","cloud"],"con":["sbcape","mlcape","mucape","mconv","massconv","scp","3kmhel","3kmehi","lapse57","lapse81"],"winter":["frzra","cthk","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","ptype"]},"NIL":{"500":["avort","vvel"],"700":["avort","vvel"],"850":["spd","temp","tadv","vvel"],"925":["spd","temp"],"sfc":["temp","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","precacc24","pwat","radar","cloud"],"con":["sbcape","mlcape","mucape","lsi","mconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81"],"winter":["ptype","frzra","cthk","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio"]},"US":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","avort","temp","fronto","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","fronto","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","precacc24","pwat","radar","cloud"],"con":["sbcape","mlcape","mucape","shear","lsi","mconv","massconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81"],"winter":["ptype","frzra","cthk","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio"]},"general":{"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","avort","temp","fronto","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","fronto","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","cprec","precacc","precacc6","precacc12","precacc24","pwat","radar","cloud"],"con":["sbcape","mlcape","mucape","lsi","mconv","massconv","stp","scp","3kmhel","1kmhel","3kmehi","1kmehi","lapse57","lapse81"],"winter":["ptype","frzra","cthk","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio"]}}},"NAMNST":{"id":"NAMNST","abbr":"NAM-NEST","title":"North American Mesoscale Model CONUS NEST (3km)","server":"wxdata","fileType":".png","fsound":true,"runStep":6,"finalRun":18,"runs":[0,6,12,18],"daysOfRuns":2,"runcol":4,"hours":{"0":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60],"6":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60],"12":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60],"18":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60]},"sectors":["NE","MA","SE","NGP","GL","NIL","MW","CGP","SGP","NW","GBSN","SW","DPG","TRACER","FLT1","FLT2"],"productsByLevel":{"FLT2":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","gust"],"prec":["precacc","precacc1","precacc6","precacc12","precacc24","radar","irsat"],"con":["sbcape","mlcape","mucape","scp","stp","uphlysw","uphlysw6","3kmhel","1kmhel"],"winter":["snow","snow1","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow1","kuchsnow6","kuchsnow12","kuchsnow24","kratio","ptype","frzra"]},"NIL":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","gust"],"prec":["precacc","precacc1","precacc6","precacc12","precacc24","radar","irsat"],"con":["sbcape","mlcape","mucape","scp","stp","uphlysw","uphlysw6","3kmhel","1kmhel"],"winter":["snow","snow1","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow1","kuchsnow6","kuchsnow12","kuchsnow24","kratio","ptype","frzra"]},"TRACER":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","gust","pblh"],"prec":["precacc","precacc1","precacc6","precacc12","precacc24","radar","irsat","pwat"],"con":["sbcape","mlcape","mucape","scp","stp","uphlysw","uphlysw6","3kmhel","1kmhel"],"winter":["snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","ptype","frzra"]},"general":{"700":["vvel"],"sfc":["temp","dewp","rhum","thetae","gust"],"prec":["precacc","precacc6","precacc12","precacc24","radar","irsat"],"con":["sbcape","mlcape","mucape","scp","stp","uphlysw","uphlysw6","3kmhel","1kmhel"],"winter":["snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","ptype","frzra"]}}},"RDPS":{"id":"RDPS","abbr":"GEM-RDPS","title":"Global Environmental Multiscale - Regional Deterministic Prediction System","server":"wxdata","fileType":".png","fsound":false,"runStep":6,"finalRun":18,"runs":[0,6,12,18],"daysOfRuns":3,"runcol":4,"hours":{"0":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],"6":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],"12":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],"18":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84]},"sectors":["US","CA","NE","MA","NGP","GL","NIL","MW","CGP","NW","WCAN","FLT1","FLT2"],"productsByLevel":{"NIL":{"500":["avort","vvel"],"700":["avort","vvel"],"850":["spd","temp","tadv","vvel"],"925":["spd","temp"],"sfc":["temp","dewp","thetae","wetblb","avort"],"con":["sbcape"],"prec":["precacc","precacc6","precacc12","precacc24","pwat","cloud"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","cthk"]},"general":{"250":["spd"],"500":["spd","temp","avort","vvel","rhum"],"700":["spd","temp","avort","vvel","rhum"],"850":["spd","temp","dewp","thetae","tadv","vvel","rhum"],"925":["spd","temp","thetae","rhum"],"sfc":["temp","dewp","thetae","wetblb","avort"],"con":["sbcape"],"prec":["precacc","precacc6","precacc12","precacc24","pwat","cloud"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","cthk"]}}},"SREF":{"id":"SREF","abbr":"SREF","title":"Short Range Ensemble Forecast","server":"climate","fileType":".gif","fsound":false,"runStep":6,"finalRun":21,"runs":[3,9,15,21],"daysOfRuns":1,"runcol":4,"hours":{"3":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87],"9":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87],"15":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87],"21":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87]},"sectors":["US","NE","SE","CGP","SGP","CAN","SW","FLT"],"productsByLevel":{"general":{"con":["cape500","cape1000","cape2000","cape3000"],"prec":["snowprob1","snowprob4","snowprob8","snowprob12","snowmn12"]}}},"GDPS":{"id":"GDPS","abbr":"GEM-GDPS","title":"Global Environmental Multiscale - Global Deterministic Prediction System","server":"climate","fileType":".png","fsound":false,"runStep":12,"finalRun":12,"runs":[0,12],"daysOfRuns":3,"runcol":2,"hours":{"0":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240],"12":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240]},"sectors":["NA","US","NIL","FLT1","FLT2"],"productsByLevel":{"NIL":{"500":["avort","vvel"],"700":["avort","vvel"],"850":["spd","temp","tadv","vvel"],"925":["spd","temp"],"sfc":["temp","dewp","thetae","wetblb","avort"],"con":["sbcape"],"prec":["precacc","precacc6","precacc12","precacc24","pwat","cloud","prec"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","cthk"]},"general":{"250":["spd"],"500":["spd","temp","avort","vvel","rhum"],"700":["spd","temp","avort","vvel","rhum"],"850":["spd","temp","dewp","thetae","tadv","vvel","rhum"],"925":["spd","temp","thetae","rhum"],"sfc":["temp","dewp","thetae","wetblb","avort"],"con":["sbcape"],"prec":["precacc","precacc6","precacc12","precacc24","pwat","cloud","prec"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","cthk"]}}},"ECMWF":{"id":"ECMWF","abbr":"ECMWF","title":"European Centre for Medium-Range Weather Forecasts","server":"wxdata","fileType":".png","fsound":false,"runStep":6,"finalRun":18,"runs":[0,6,12,18],"daysOfRuns":3,"runcol":4,"hours":{"0":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360],"6":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144],"12":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360],"18":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144]},"sectors":["WLD","US","NA","AO","MW","NGP","CGP","SGP","NIL","NE","MA","SE","NW","SW","GL","FLT1","FLT2"],"productsByLevel":{"US":{"250":["spd","rhum"],"500":["spd","temp","avort","rhum"],"700":["spd","temp","rhum"],"850":["spd","temp","dewp","thetae","tadv","rhum"],"925":["spd","temp","thetae","rhum"],"sfc":["temp","dewp","thetae"],"con":["mucape","shear"],"prec":["prec","precacc","pwat"],"winter":["kuchsnow","kratio","cthk"]},"general":{"250":["spd","rhum"],"500":["spd","temp","avort","rhum"],"700":["spd","temp","rhum"],"850":["spd","temp","dewp","thetae","tadv","rhum"],"925":["spd","temp","thetae","rhum"],"sfc":["temp","dewp","thetae"],"con":["mucape"],"prec":["prec","precacc","pwat"],"winter":["kuchsnow","kratio","cthk"]}}},"GFS":{"id":"GFS","abbr":"GFS","title":"Global Forecast System","server":"climate","fileType":".png","fsound":true,"runStep":6,"finalRun":18,"runs":[0,6,12,18],"daysOfRuns":3,"runcol":4,"hours":{"0":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384],"6":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384],"12":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384],"18":[0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57,60,63,66,69,72,75,78,81,84,87,90,93,96,99,102,105,108,111,114,117,120,123,126,129,132,135,138,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327,330,333,336,339,342,345,348,351,354,357,360,363,366,369,372,375,378,381,384]},"sectors":["WLD","NA","AO","PO","US","NE","MA","SE","NGP","GL","NIL","MW","CGP","SGP","AK","WCAN","NW","GBSN","SW","FLT1","FLT2"],"productsByLevel":{"WLD":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa"],"500":["spd","spdsa","uwndsa","hgtsa","avort","tempsa"],"700":["rhum"],"850":["spdsa","hgtsa","temp","tempanom","tempsa"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum"],"prec":["prec","precacc","pwat","pwatsa"],"winter":["kuchsnow","kratio"]},"NA":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa","rhum"],"500":["spd","spdsa","uwndsa","hgtsa","avort","temp","tempsa","rhum"],"700":["spd","temp","rhum"],"850":["spd","spdsa","hgtsa","temp","tempanom","tempsa","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum","thetae"],"prec":["prec","precacc","pwat","pwatsa"],"winter":["kuchsnow","kratio"]},"AO":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa"],"500":["spd","spdsa","uwndsa","hgtsa","avort","temp","tempsa"],"700":["rhum"],"850":["spdsa","hgtsa","temp","tempanom","tempsa"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum"],"prec":["prec","precacc","pwat","pwatsa"],"con":["mucape"]},"PO":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa"],"500":["spd","spdsa","uwndsa","hgtsa","avort","tempsa"],"700":["rhum"],"850":["spdsa","hgtsa","temp","tempanom","tempsa"],"sfc":["temp","tempanom","tempsa","mslpsa","rhum"],"prec":["prec","precacc","pwat","pwatsa"],"con":["mucape"]},"NIL":{"500":["avort","vvel"],"700":["avort","vvel"],"850":["spd","temp","tadv","vvel"],"925":["spd","temp"],"sfc":["temp","tempanom","tempsa","mslpsa","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","radar","cprec","precacc","precacc6","precacc12","precacc24","pwat","cloud"],"con":["sbcape","mlcape","mucape","lsi","scp","3kmhel","3kmehi","lapse57","lapse81"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","frzra","cthk"]},"US":{"2pvu":["pres"],"250":["spd","spdsa","uwndsa","hgtsa","rhum"],"500":["spd","spdsa","uwndsa","hgtsa","avort","temp","tempsa","vvel","rhum"],"700":["spd","avort","temp","vvel","rhum"],"850":["spd","spdsa","hgtsa","thetae","temp","tempanom","tempsa","tadv","dewp","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","tempanom","tempsa","mslpsa","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","radar","cprec","precacc","precacc6","precacc12","precacc24","pwat","pwatsa","cloud"],"con":["sbcape","mlcape","mucape","shear","lsi","scp","3kmhel","3kmehi","lapse57","lapse81"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","frzra","cthk"]},"general":{"2pvu":["pres"],"250":["spd","rhum"],"500":["spd","avort","temp","vvel","rhum"],"700":["spd","avort","temp","vvel","rhum"],"850":["spd","thetae","temp","tadv","dewp","vvel","rhum"],"925":["spd","thetae","temp","rhum"],"sfc":["temp","dewp","rhum","thetae","wetblb","30mbdewp","avort"],"prec":["prec","radar","cprec","precacc","precacc6","precacc12","precacc24","pwat","cloud"],"con":["sbcape","mlcape","mucape","lsi","scp","3kmhel","3kmehi","lapse57","lapse81"],"winter":["ptype","snow","snow6","snow12","snow24","sndepth","kuchsnow","kuchsnow6","kuchsnow12","kuchsnow24","kratio","frzra","cthk"]}}},"GEFS":{"id":"GEFS","abbr":"GEFS","title":"Global Ensemble Forecast System","server":"wxdata","fileType":".png","fsound":false,"runStep":6,"finalRun":18,"runs":[0,6,12,18],"daysOfRuns":3,"runcol":4,"hours":{"0":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384],"6":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384],"12":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384],"18":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384]},"sectors":["NA","US","PO","NE","MA","SE","NGP","GL","MW","CGP","SGP"],"productsByLevel":{"general":{"500":["meanwind","hghtens","windens"],"850":["meantemp","tempens"],"prec":["meanprec","meanprecacc","paccens"],"con":["cape1000","capeens","prob3kmehi","meanscp","maxscp","probscp","scpens"],"winter":["ptypens","meansnacc","snens"]}}},"CFS":{"id":"CFS","abbr":"CFS","title":"Climate Forecast System","server":"wxdata","fileType":".png","fsound":false,"runStep":6,"finalRun":18,"runs":[0,6,12,18],"daysOfRuns":3,"runcol":4,"hours":{"0":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384,390,396,402,408,414,420,426,432,438,444,450,456,462,468,474,480,486,492,498,504,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798],"6":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384,390,396,402,408,414,420,426,432,438,444,450,456,462,468,474,480,486,492,498,504,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798],"12":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384,390,396,402,408,414,420,426,432,438,444,450,456,462,468,474,480,486,492,498,504,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798],"18":[0,6,12,18,24,30,36,42,48,54,60,66,72,78,84,90,96,102,108,114,120,126,132,138,144,150,156,162,168,174,180,186,192,198,204,210,216,222,228,234,240,246,252,258,264,270,276,282,288,294,300,306,312,318,324,330,336,342,348,354,360,366,372,378,384,390,396,402,408,414,420,426,432,438,444,450,456,462,468,474,480,486,492,498,504,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,672,678,684,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798]},"sectors":["NA","US"],"productsByLevel":{"general":{"500":["spd"],"850":["temp"],"con":["sbcape","scp"]}}}},"sectors":{"US":{"id":"US","abbr":"CONUS","title":"Continental U.S.","bb":["-128","20","-65","57"],"altloc":[]},"NA":{"id":"NA","abbr":"NA","title":"North America","bb":["-165","8.5","-48","78"],"altloc":[]},"CGP":{"id":"CGP","abbr":"CGP","title":"Central Great Plains","bb":["-111.7","34.5","-90.5","47"],"altloc":[]},"SGP":{"id":"SGP","abbr":"SGP","title":"Southern Great Plains","bb":["-109","25.5","-85","39.7"],"altloc":["CGP"]},"SE":{"id":"SE","abbr":"SE","title":"Southeast","bb":["-98.5","24.5","-77.5","36.92"],"altloc":["MA"]},"SW":{"id":"SW","abbr":"SW","title":"Southwest","bb":["-123.1","29.9","-101.7","42.5"],"altloc":["GBSN","NA"]},"GBSN":{"id":"GBSN","abbr":"GBSN","title":"Great Basin","bb":["-129.5","31.9","-106.5","45.5"],"altloc":["SW","NA"]},"CA":{"id":"CA","abbr":"CA","title":"Canada","bb":["-138.8","37.3","-61.9","82.8"],"altloc":["CAN","WCAN"]},"CAN":{"id":"CAN","abbr":"CAN","title":"Northwest US \/ SW Canada","bb":["-132.5","40.1","-91.0","56.3"],"altloc":["WCAN","CA"]},"WCAN":{"id":"WCAN","abbr":"WCAN","title":"Western Canada","bb":["-132.5","45.1","-106","60.7"],"altloc":["CAN","CA"]},"NE":{"id":"NE","abbr":"NE","title":"Northeast","bb":["-84.1","38.7","-66","49.3"],"altloc":[]},"MA":{"id":"MA","abbr":"MA","title":"Mid-Atlantic","bb":["-90.5","31.6","-69.5","44"],"altloc":[]},"NW":{"id":"NW","abbr":"NW","title":"Northwest","bb":["-126.8","40.3","-105.5","52.9"],"altloc":["NA"]},"NGP":{"id":"NGP","abbr":"NGP","title":"Northern Great Plains","bb":["-110.4","41.7","-89.2","54.1"],"altloc":[]},"MW":{"id":"MW","abbr":"MW","title":"Midwest","bb":["-101","34.55","-80","47"],"altloc":[]},"WLD":{"id":"WLD","abbr":"WORLD","title":"World","bb":["-300","-100","60","100"],"altloc":["NA"]},"AO":{"id":"AO","abbr":"AO","title":"Atlantic","bb":["-110","0","3","67"],"altloc":["NA"]},"PO":{"id":"PO","abbr":"PO","title":"Pacific","bb":["-225","0","-100","74"],"altloc":["NA"]},"AK":{"id":"AK","abbr":"AK","title":"Alaska","bb":["-180","43","-121","78"],"altloc":["CA","CAN","WCAN","NA"]},"CHI":{"id":"CHI","abbr":"CHI","title":"Chicago, IL","bb":["-93","39.5","-86","43.6"],"altloc":["NIL","MW"]},"OKC":{"id":"OKC","abbr":"OKC","title":"Oklahoma City, OK","bb":["-102.5","33.2","94","38.2"],"altloc":["SGP"]},"DEN":{"id":"DEN","abbr":"DEN","title":"Denver, CO","bb":["-106 38.8 -101 42.05"],"altloc":["CGP"]},"DPG":{"id":"DPG","abbr":"DPG","title":"Dugway (KDPG)","bb":["-114.8","38.7","-108.8","42.2"],"altloc":["GBSN","SW"]},"GL":{"id":"GL","abbr":"GL","title":"Great Lakes","bb":["-95.5","39.58","-74.5","52.0"],"altloc":[]},"NIL":{"id":"NIL","abbr":"NIL","title":"Northern Illinois","bb":["-93.98","38.13","-83.9","44.05"],"altloc":["MW"]},"TRACER":{"id":"TRACER","abbr":"TRACER","title":"TRACER","bb":["-100.0","27.5","-92.2","32.0"],"altloc":["SGP"]},"FLT1":{"id":"FLT1","abbr":"FLOAT 1","title":"Floater 1","bb":["-107.21","26.66","-92.09","35.54"],"altloc":[]},"FLT2":{"id":"FLT2","abbr":"FLOAT 2","title":"Floater 2","bb":["-98.39","27.03","-83.27","35.91"],"altloc":[]}},"levels":{"2pvu":{"id":"2pvu","title":"Dynamic Tropopause"},"250":{"id":"250","title":"250mb"},"500":{"id":"500","title":"500mb"},"700":{"id":"700","title":"700mb"},"850":{"id":"850","title":"850mb"},"925":{"id":"925","title":"925mb"},"sfc":{"id":"sfc","title":"Surface"},"con":{"id":"con","title":"Convective"},"prec":{"id":"prec","title":"Precipitation"},"winter":{"id":"winter","title":"Winter"}},"products":{"shear":{"id":"shear","title":"Bulk Shear (H5-SFC BWD)","omissionHours":[0]},"uphly":{"id":"uphly","title":"Updraft Helicity","omissionHours":[0]},"uphlysw":{"id":"uphlysw","title":"UD Helicity Swaths","omissionHours":[0]},"uphlysw6":{"id":"uphlysw6","title":"6hr UD Helicity Swaths","omissionHours":[0]},"cape500":{"id":"cape500","title":"Prob. of CAPE > 500 J\/kg","omissionHours":[]},"cape1000":{"id":"cape1000","title":"Prob. of CAPE > 1000 J\/kg","omissionHours":[]},"cape2000":{"id":"cape2000","title":"Prob. of CAPE > 2000 J\/kg","omissionHours":[]},"cape3000":{"id":"cape3000","title":"Prob. of CAPE > 3000 J\/kg","omissionHours":[]},"cape3km":{"id":"cape3km","title":"0-3km CAPE","omissionHours":[]},"dgzdepth":{"id":"dgzdepth","title":"DGZ Depth","omissionHours":[]},"snow":{"id":"snow","title":"Total Snow Accum. (10:1)","omissionHours":[0]},"snow1":{"id":"snow1","title":"1h Snow Accum. (10:1)","omissionHours":[0]},"snow6":{"id":"snow6","title":"6h Snow Accum. (10:1)","omissionHours":[0]},"snow12":{"id":"snow12","title":"12h Snow Accum. (10:1)","omissionHours":[0]},"snow24":{"id":"snow24","title":"24h Snow Accum. (10:1)","omissionHours":[0]},"kuchsnow":{"id":"kuchsnow","title":"Total Snow Accum. (Kuchera)","omissionHours":[0]},"kuchsnow1":{"id":"kuchsnow1","title":"1h Snow Accum. (Kuchera)","omissionHours":[0]},"kuchsnow6":{"id":"kuchsnow6","title":"6h Snow Accum. (Kuchera)","omissionHours":[0]},"kuchsnow12":{"id":"kuchsnow12","title":"12h Snow Accum. (Kuchera)","omissionHours":[0]},"kuchsnow24":{"id":"kuchsnow24","title":"24h Snow Accum. (Kuchera)","omissionHours":[0]},"kratio":{"id":"kratio","title":"Kuchera Snow Ratio","omissionHours":[0]},"snowprob1":{"id":"snowprob1","title":"Prob. of Snow > 1 Inch","omissionHours":[0,3,6,9]},"snowprob4":{"id":"snowprob4","title":"Prob. of Snow > 4 Inches","omissionHours":[0,3,6,9]},"snowprob8":{"id":"snowprob8","title":"Prob. of Snow > 8 Inches","omissionHours":[0,3,6,9]},"snowprob12":{"id":"snowprob12","title":"Prob. of Snow > 12 Inches","omissionHours":[0,3,6,9]},"snowmn12":{"id":"snowmn12","title":"12 hr Mean Snowfall","omissionHours":[0,3,6,9]},"pvort":{"id":"pvort","title":"Potential Vorticity","omissionHours":[]},"radar":{"id":"radar","title":"Simulated Reflectivity","omissionHours":[]},"cloud":{"id":"cloud","title":"Average Cloud Cover","omissionHours":[]},"vis":{"id":"vis","title":"SFC Visibility","omissionHours":[]},"3kmehi":{"id":"3kmehi","title":"3km EHI","omissionHours":[]},"1kmehi":{"id":"1kmehi","title":"1km EHI","omissionHours":[]},"1kmhel":{"id":"1kmhel","title":"0-1km SRH","omissionHours":[]},"3kmhel":{"id":"3kmhel","title":"0-3km SRH","omissionHours":[]},"prec":{"id":"prec","title":"SLP and Precipitation","omissionHours":[0]},"precacc":{"id":"precacc","title":"Total Precip. Accumulation","omissionHours":[0]},"precacc1":{"id":"precacc1","title":"1hr Precip. Accumulation","omissionHours":[0]},"precacc6":{"id":"precacc6","title":"6hr Precip. Accumulation","omissionHours":[0]},"precacc12":{"id":"precacc12","title":"12hr Precip. Accumulation","omissionHours":[0]},"precacc24":{"id":"precacc24","title":"24hr Precip. Accumulation","omissionHours":[0]},"stp":{"id":"stp","title":"Significant Tornado Parameter","omissionHours":[]},"scp":{"id":"scp","title":"Supercell Composite","omissionHours":[]},"temp":{"id":"temp","title":"Temperature","omissionHours":[]},"dewp":{"id":"dewp","title":"Dewpoint Temp.","omissionHours":[]},"pwat":{"id":"pwat","title":"Precipitable Water","omissionHours":[]},"avort":{"id":"avort","title":"Vorticity","omissionHours":[]},"vvel":{"id":"vvel","title":"Vertical Velocity","omissionHours":[]},"thetae":{"id":"thetae","title":"Theta-E","omissionHours":[]},"rhum":{"id":"rhum","title":"Relative Humidity","omissionHours":[]},"spd":{"id":"spd","title":"Wind Speed","omissionHours":[]},"wetblb":{"id":"wetblb","title":"Wet Bulb Temp.","omissionHours":[]},"sbcape":{"id":"sbcape","title":"Surface Based CAPE\/CINH","tooltip":"SBCAPE\/SBCINH w\/ 10m Wind","omissionHours":[]},"mlcape":{"id":"mlcape","title":"Mean Layer CAPE\/CINH","tooltip":"MLCAPE\/MLCINH w\/ Storm Motion","omissionHours":[]},"mucape":{"id":"mucape","title":"Most Unstable CAPE\/Shear","tooltip":"MUCAPE w\/ SFC-500mb BWD","omissionHours":[]},"cinh":{"id":"cinh","title":"Convective Inhabition","omissionHours":[]},"lift":{"id":"lift","title":"Lifted Index","omissionHours":[]},"lapse57":{"id":"lapse57","title":"Mid-Level Lapse Rate","omissionHours":[]},"lapse81":{"id":"lapse81","title":"Low-Level Lapse Rate","omissionHours":[]},"30mbdewp":{"id":"30mbdewp","title":"Mixed Dewpoint (SFC-30mb AGL)","omissionHours":[]},"ptype":{"id":"ptype","title":"Precipitation Type","omissionHours":[0]},"frzra":{"id":"frzra","title":"Freezing Rain Accumulation","omissionHours":[0]},"cprec":{"id":"cprec","title":"Convective Precip.","omissionHours":[0]},"cthk":{"id":"cthk","title":"Critical Thickness","omissionHours":[]},"mconv":{"id":"mconv","title":"Moisture Flux Convergence","omissionHours":[]},"massconv":{"id":"massconv","title":"Mass Convergence","omissionHours":[]},"hgtsa":{"id":"hgtsa","title":"Std. Hgt. Anomalies","omissionHours":[]},"tempsa":{"id":"tempsa","title":"Std. Temp Anomalies","omissionHours":[]},"tempanom":{"id":"tempanom","title":"Temp Anomalies","omissionHours":[]},"uwndsa":{"id":"uwndsa","title":"Std. U-Wind Anomalies","omissionHours":[]},"spdsa":{"id":"spdsa","title":"Std. Wind Speed Anomalies","omissionHours":[]},"pwatsa":{"id":"pwatsa","title":"Std. PWAT Anomalies","omissionHours":[]},"mslpsa":{"id":"mslpsa","title":"Std. MSLP Anomalies","omissionHours":[]},"tadv":{"id":"tadv","title":"Temperature Advection","omissionHours":[]},"sdev":{"id":"sdev","title":"Standard Deviation","omissionHours":[]},"prob25":{"id":"prob25","title":"Prob. of Precip. > 0.25\"","omissionHours":[0]},"prob05":{"id":"prob05","title":"Prob. of Precip. > 0.5\"","omissionHours":[0]},"dwpd":{"id":"dwpd","title":"Dewpoint Depression","omissionHours":[]},"fronto":{"id":"fronto","title":"Frontogenesis","omissionHours":[]},"ens":{"id":"ens","title":"Ensemble Plot","omissionHours":[]},"gust":{"id":"gust","title":"Wind Gust","omissionHours":[]},"irsat":{"id":"irsat","title":"Sim. IR Satellite","omissionHours":[]},"hghtens":{"id":"hghtens","title":"Spaghetti Plot","omissionHours":[]},"ceil":{"id":"ceil","title":"Ceiling Height","omissionHours":[]},"pres":{"id":"pres","title":"Pressure @ 2PVU","omissionHours":[]},"meantemp":{"id":"meantemp","title":"Mean Temperature","omissionHours":[]},"meansnacc":{"id":"meansnacc","title":"Mean Snow Accumulation","omissionHours":[0]},"maxsnacc":{"id":"maxsnacc","title":"Max Snow Accumulation","omissionHours":[0]},"minsnacc":{"id":"minsnacc","title":"Min Snow Accumulation","omissionHours":[0]},"minprec":{"id":"minprec","title":"Min Precip. Accumulation","omissionHours":[0]},"maxprec":{"id":"maxprec","title":"Max Precip. Accumulation","omissionHours":[0]},"meanprec":{"id":"meanprec","title":"Mean SLP and Precipitation","omissionHours":[0]},"meanprecacc":{"id":"meanprecacc","title":"Mean Precip. Accumulation","omissionHours":[0]},"meanscp":{"id":"meanscp","title":"Mean Supercell Composite","omissionHours":[]},"maxscp":{"id":"maxscp","title":"Max Supercell Composite","omissionHours":[]},"prob3kmehi":{"id":"prob3kmehi","title":"Probability of 3km EHI","omissionHours":[]},"probscp":{"id":"probscp","title":"Probability of SCP","omissionHours":[]},"windens":{"id":"windens","title":"Ensemble Wind","omissionHours":[]},"tempens":{"id":"tempens","title":"Ensemble Temperature","omissionHours":[]},"capeens":{"id":"capeens","title":"Ensemble SBCAPE","omissionHours":[]},"scpens":{"id":"scpens","title":"Ensemble SCP","omissionHours":[]},"paccens":{"id":"paccens","title":"Ensemble Prec. Acc.","omissionHours":[0]},"ptypens":{"id":"ptypens","title":"Ensemble Prec. Type","omissionHours":[0]},"snens":{"id":"snens","title":"Ensemble Snow Acc.","omissionHours":[0]},"lsi":{"id":"lsi","title":"Lid Strength Index","omissionHours":[]},"vil":{"id":"vil","title":"Vertically Integrated Liquid","omissionHours":[]},"ltng":{"id":"ltng","title":"Lightning Density","omissionHours":[]},"etop":{"id":"etop","title":"Simulated Echo Tops","omissionHours":[]},"meanwind":{"id":"meanwind","title":"Mean Wind","omissionHours":[]},"hodomap":{"id":"hodomap","title":"Hodograph Map","omissionHours":[]},"sndepth":{"id":"sndepth","title":"Total Snow Depth","omissionHours":[]},"pblh":{"id":"pblh","title":"PBL Height","omissionHours":[]}}};
########################################################################
Gemini analysis of the above:
Overall Structure
The code you've provided defines a JavaScript object assigned to the variable window.modeljson. This object contains data related to various weather models. At the top level, this object has one key:
models: This key holds another object. The keys of this nested object are the abbreviations of different weather models (e.g., "HRRR", "RAP", "NAM").
Dissecting a Weather Model (e.g., HRRR)
Each weather model (like "HRRR") is represented by an object with several key-value pairs that describe its characteristics:
id: The unique identifier of the model (e.g., "HRRR").
abbr: The abbreviation of the model's name (e.g., "HRRR").
title: The full title of the weather model (e.g., "High Resolution Rapid Refresh").
server: The server where the model's data is located (e.g., "wxdata").
fileType: The file type of the model's output files (e.g., ".png").
fsound: A boolean indicating whether the model provides forecast soundings (vertical profiles of atmospheric conditions).
runStep: The interval (in hours) between model runs.
finalRun: The final run time.
runs: An array listing the times of the model runs.
daysOfRuns: The number of days covered by the model runs.
runcol: Likely related to how the runs are organized or displayed (the exact meaning might need more context).
hours: This is a key part. It's an array of arrays. Each inner array lists the forecast hours available for a specific model run.
sectors: An array of geographical sectors for which the model provides data (e.g., "NE", "MA", "SE").
productsByLevel: This is a crucial nested object. It organizes the model's output data (products) by atmospheric level.
Within productsByLevel, keys like "FLT2", "NIL", "TRACER", and "general" represent different categories or configurations of products.
Each of these categories ("FLT2", etc.) contains keys that specify atmospheric levels (e.g., "700", "sfc"). "sfc" likely refers to "surface". The numbers (e.g., "700") typically refer to pressure levels in millibars (mb), a common way to denote altitude in meteorological data.
The values associated with these levels are arrays of product codes (e.g., "temp", "dewp", "rhum"). These codes represent specific weather parameters like temperature, dew point, and relative humidity.
Example: Accessing Data
To access specific data within this structure, you would use JavaScript's dot notation or bracket notation. For example:
window.modeljson.models.HRRR.title would give you "High Resolution Rapid Refresh".
window.modeljson.models.HRRR.hours[0] would give you the first array of hours for the HRRR model.
window.modeljson.models.HRRR.productsByLevel.FLT2.sfc would give you the array of surface products for the FLT2 category of the HRRR model (e.g., ["temp", "dewp", "rhum", ... ]).
In Summary
This JavaScript object is a structured way to store metadata about various weather models. It allows you to programmatically access information about the models, their runs, the geographical areas they cover, and the specific weather parameters they provide at different atmospheric levels.
the text files are 52 rows by 87 columns with integer values for the
variables I think this goes in variable
readouts
in ani-desk.js
function get_readout(readText) {
$.get(readText,function (data) {
var textArr = data.trim().split("\n"),
varArr = {},
varType = false,
index;
$.each(textArr,function (i,v) {
var firstElement = v.split(" ")[0];
if (isNaN(firstElement*1) && firstElement != "nan") {
// This line is a varType label
varType = v;
index = 0;
varArr[varType] = {};
} else if (varType != false) { // create error for this event
// This line contains values for the previously declared varType
varArr[varType][index] = v;
index++;
}
});
var info = {};
$.each(varArr,function (i,v) { // this array is organized by vartype
varArr[i] = Object.assign([], v).reverse();// flip the array! but first convert the object v to an array
function countProperties(obj) {
var count = 0;
for(var prop in obj) {
if(obj.hasOwnProperty(prop))
++count;
}
return count;
}
// Get the size of an object
var range = countProperties(v),
domain = v[0].trim().split(" ").length;
info[i] = [domain,range];
});
readoutInfo = info;
readoutData = varArr;
})
}
########################################################################
here's where the readout math is done
looking at an image, sampleecmwf.png, 800x600, the topBar seems to be
25 pixels from the top, and the botBar is 25 from the bottom at y = 575
$(document).on('mousemove','#animator #canvas',function (e) {
// establish where the cursor is and some bounds
var rect = canvas.getBoundingClientRect(),
probe = {
x: e.clientX - Math.floor(rect.left),
y: e.clientY - Math.floor(rect.top) - topBar
},
frameVertRange = rect.height - (Number(topBar)+Number(botBar));
if (data.readouts != false && probe.y >= 0 && probe.y <= frameVertRange && !e.altKey) { // available, inbounds and alt not pressed
// we should display a readout
var readout = {}; // an object to store the info for the readout at the cursors location
$.each(readoutData, function(varType,varArr) {
// iterate through each parameter in the readoutData (file) for this fhr
// each parameter comes with a 2D varArr from which we will select the value based on cursor position
// cursor position determines an x/y-Index, use the yIndex to search the varArr for the correct xArr
// use the xIndex to extract the correct value from the xArr
var xIndex = Math.round((probe.x/rect.width) * (readoutInfo[varType][0]-1)),
yIndex = Math.round((probe.y/frameVertRange) * (readoutInfo[varType][1]-1)),
xArr = varArr[yIndex].trim().split(" "),
readoutValue = xArr[xIndex];
// feed the value for this parameter to the createReadout fn passing product type, system of measurement, product level,
// and the value extracted from the readout file
if (readoutValue != 'nan') {
// fn coughs up a short human readable lable, a value (converted if necessary), and a unit
var measure = $('#settings div.buttonGroup#measure span.niceButton.selected').attr('id'),
readoutObj = createReadout(varType,measure,parms[3],parms[4],readoutValue);
// we then store that in the object and move on to th next parameter available in the readout file
readout[readoutObj.label+":"] = readoutObj.value+readoutObj.unit;
}
});
// once we have all of the values, labels and units for the readout in the object, convert it to an array of arrays
readouts = Object.entries(readout); // arr of arr
$.each(readouts,function(i,data) {
// prepare each parameter with some markup
readouts[i] = ''+data[0]+''+data[1]+'';
});
// prepare the readout position
var ttw = $('#readoutVal').outerWidth(),
tth = $('#readoutVal').outerHeight(),
buffer = 5,
top,left;
top = ((probe.y - (tth + buffer)) < 0) ? probe.y + buffer : probe.y - (tth + buffer);
left = ((probe.x - (ttw + buffer)) < 0) ? probe.x + buffer : probe.x - (ttw + buffer);
top = Number(top)+Number(topBar);
// prepare the full readout markup
var readoutHTML = (readoutRequest) ? '...' : readouts.join('
');
// move the readout into position and add the markup
$('#readoutVal').html(readoutHTML).css({
'top': top+'px',
'left': left+'px'
})
// show the readout
if ($('#readoutVal').hasClass('hide')) { $('#readoutVal').removeClass('hide').addClass('show') }
} else {
// handling for when not showing a readout
if (e.altKey) { $(this).css('cursor','default') } // if alt key is tempo hiding, use a default cursor
else { $(this).css('cursor','') /*set by css*/ } // otherwise let the css take over
// if the conditions for displaying the readout tooltip are not met and it's displaying currently, hide it
if ($('#readoutVal').hasClass('show')) { $('#readoutVal').removeClass('show').addClass('hide') }
}
})