awips.tables   B
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 2026
Duplicated Lines 0.99 %

Importance

Changes 0
Metric Value
wmc 10
eloc 1821
dl 20
loc 2026
rs 8.8
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A checkForUpgrade() 10 10 3
A checkForDowngrade() 10 10 3

1 Method

Rating   Name   Duplication   Size   Complexity  
A Item.__init__() 0 6 4

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
2
class Item(object):
3
    def __init__(self, *initial_data, **kwargs):
4
        for dictionary in initial_data:
5
            for key in dictionary:
6
                setattr(self, key, dictionary[key])
7
        for key in kwargs:
8
            setattr(self, key, kwargs[key])
9
10
11
#class GenerateNexradTable(object):
12
#	import numpy as np
13
#	import json
14
#	# find this file locally and confirm location
15
#	filename = '~/awips2-builds/edexOsgi/com.raytheon.edex.plugin.radar/utility/common_static/base/radarInfoSimple.txt'
16
#	data = np.genfromtxt(
17
#		filename,
18
#		delimiter=",",
19
#		autostrip=True,
20
#		skip_header=0,
21
#		names=True,
22
#		dtype=None)
23
#
24
#	for x in data:
25
#		defn = Item(dict(zip(data.dtype.names, x)))
26
#		prod = dict(zip(data.dtype.names, x))
27
#		nexrad[defn.id] = prod
28
#
29
#	return json.dumps(nexrad, indent=1)
30
31
32
profiler = {
33
	"74997" : {
34
		"profilerId": "ASTC1",
35
		"latitude": 46.16,
36
		"longitude": -123.88,
37
		"elevation": 3,
38
		"profilerName": "Astoria OR"},
39
	"74996" : {
40
		"profilerId": "BGDC1",
41
		"latitude": 38.32,
42
		"longitude": -123.07,
43
		"elevation": 13,
44
		"profilerName": "Bodega Bay CA"},
45
	"74995" : {
46
		"profilerId": "FKSC1",
47
		"latitude": 47.97,
48
		"longitude": -124.40,
49
		"elevation": 92,
50
		"profilerName": "Forks WA"},
51
	"74998" : {
52
		"profilerId": "ACVC1",
53
		"latitude": 40.97,
54
		"longitude": -124.11,
55
		"elevation": 56,
56
		"profilerName": "McKinleyville CA"},
57
	"74994" : {
58
		"profilerId": "OTHC1",
59
		"latitude": 43.42,
60
		"longitude": -124.24,
61
		"elevation": 5,
62
		"profilerName": "North Bend OR"},
63
	"74993" : {
64
		"profilerId": "PTSC1",
65
		"latitude": 36.30,
66
		"longitude": -121.89,
67
		"elevation": 11,
68
		"profilerName": "Point Sur CA"},
69
	"74992" : {
70
		"profilerId": "SBAC1",
71
		"latitude": 34.43,
72
		"longitude": -119.85,
73
		"elevation": 4,
74
		"profilerName": "Santa Barbara CA"},
75
	"74991" : {
76
		"profilerId": "PVLC1",
77
		"latitude": 40.18,
78
		"longitude": -104.73,
79
		"elevation": 1503,
80
		"profilerName": "Platteville CO"},
81
	"74990" : {
82
		"profilerId": "TDEC1",
83
		"latitude": 45.55,
84
		"longitude": -122.39,
85
		"elevation": 12,
86
		"profilerName": "Troutdale OR"},
87
	"74989" : {
88
		"profilerId": "CCOC1",
89
		"latitude": 39.70,
90
		"longitude": -121.91,
91
		"elevation": 42,
92
		"profilerName": "Chico CA"}
93
}
94
95
nexrad = {
96
	"2": {
97
		"layer": 0,
98
		"name": "NEXRAD Unit Status Msg",
99
		"res": 0.0,
100
		"mnemo": "GSM",
101
		"range": 0,
102
		"lvls": 0,
103
		"id": 2,
104
		"unit": ""
105
	},
106
	"3": {
107
		"layer": 0,
108
		"name": "Product Request Resp",
109
		"res": 0.0,
110
		"mnemo": "PRR",
111
		"range": 0,
112
		"lvls": 0,
113
		"id": 3,
114
		"unit": ""
115
	},
116
	"8": {
117
		"layer": 0,
118
		"name": "Product List",
119
		"res": 0.0,
120
		"mnemo": "PTL",
121
		"range": 0,
122
		"lvls": 0,
123
		"id": 8,
124
		"unit": ""
125
	},
126
	"12": {
127
		"layer": 0,
128
		"name": "Command Parameter Msg",
129
		"res": 0.0,
130
		"mnemo": "CPM",
131
		"range": 0,
132
		"lvls": 0,
133
		"id": 12,
134
		"unit": ""
135
	},
136
	"14": {
137
		"layer": 0,
138
		"name": "Command Control Msg",
139
		"res": 0.0,
140
		"mnemo": "CCM",
141
		"range": 0,
142
		"lvls": 0,
143
		"id": 14,
144
		"unit": ""
145
	},
146
	"16": {
147
		"layer": 0,
148
		"name": "Reflectivity",
149
		"res": 1.0,
150
		"mnemo": "Z",
151
		"range": 230,
152
		"lvls": 8,
153
		"id": 16,
154
		"unit": "dBZ"
155
	},
156
	"17": {
157
		"layer": 0,
158
		"name": "Reflectivity",
159
		"res": 2.0,
160
		"mnemo": "Z",
161
		"range": 460,
162
		"lvls": 8,
163
		"id": 17,
164
		"unit": "dBZ"
165
	},
166
	"18": {
167
		"layer": 0,
168
		"name": "Reflectivity",
169
		"res": 4.0,
170
		"mnemo": "Z",
171
		"range": 460,
172
		"lvls": 8,
173
		"id": 18,
174
		"unit": "dBZ"
175
	},
176
	"19": {
177
		"layer": 0,
178
		"name": "Reflectivity",
179
		"res": 1.0,
180
		"mnemo": "Z",
181
		"range": 230,
182
		"lvls": 16,
183
		"id": 19,
184
		"unit": "dBZ"
185
	},
186
	"20": {
187
		"layer": 0,
188
		"name": "Reflectivity",
189
		"res": 2.0,
190
		"mnemo": "Z",
191
		"range": 460,
192
		"lvls": 16,
193
		"id": 20,
194
		"unit": "dBZ"
195
	},
196
	"21": {
197
		"layer": 0,
198
		"name": "Reflectivity",
199
		"res": 4.0,
200
		"mnemo": "Z",
201
		"range": 460,
202
		"lvls": 16,
203
		"id": 21,
204
		"unit": "dBZ"
205
	},
206
	"22": {
207
		"layer": 0,
208
		"name": "Velocity",
209
		"res": 0.25,
210
		"mnemo": "V",
211
		"ctable": ['NWS8bitVel', -100., 1.],
212
		"scale": [-100, 100],
213
		"range": 60,
214
		"lvls": 8,
215
		"id": 22,
216
		"unit": "kts"
217
	},
218
	"23": {
219
		"layer": 0,
220
		"name": "Velocity",
221
		"ctable": ['NWS8bitVel', -100., 1.],
222
		"scale": [-100, 100],
223
		"res": 0.5,
224
		"mnemo": "V",
225
		"range": 115,
226
		"lvls": 8,
227
		"id": 23,
228
		"unit": "kts"
229
	},
230
	"24": {
231
		"layer": 0,
232
		"name": "Velocity",
233
		"ctable": ['NWS8bitVel', -100., 1.],
234
		"scale": [-100, 100],
235
		"res": 1.0,
236
		"mnemo": "V",
237
		"range": 230,
238
		"lvls": 8,
239
		"id": 24,
240
		"unit": "kts"
241
	},
242
	"25": {
243
		"layer": 0,
244
		"name": "Velocity",
245
		"ctable": ['NWS8bitVel', -100., 1.],
246
		"scale": [-100, 100],
247
		"res": 0.25,
248
		"mnemo": "V",
249
		"range": 60,
250
		"lvls": 16,
251
		"id": 25,
252
		"unit": "kts"
253
	},
254
	"26": {
255
		"layer": 0,
256
		"name": "Velocity",
257
		"ctable": ['NWS8bitVel', -100., 1.],
258
		"scale": [-100, 100],
259
		"res": 0.5,
260
		"mnemo": "V",
261
		"range": 115,
262
		"lvls": 16,
263
		"id": 26,
264
		"unit": "kts"
265
	},
266
	"27": {
267
		"layer": 0,
268
		"name": "Velocity",
269
		"ctable": ['NWS8bitVel', -100., 1.],
270
		"scale": [-100, 100],
271
		"res": 1.0,
272
		"mnemo": "V",
273
		"range": 230,
274
		"lvls": 16,
275
		"id": 27,
276
		"unit": "kts"
277
	},
278
	"28": {
279
		"layer": 0,
280
		"name": "Spectrum Width",
281
		"res": 0.25,
282
		"mnemo": "SW",
283
		"range": 60,
284
		"lvls": 8,
285
		"id": 28,
286
		"unit": "kts"
287
	},
288
	"29": {
289
		"layer": 0,
290
		"name": "Spectrum Width",
291
		"res": 0.5,
292
		"mnemo": "SW",
293
		"range": 115,
294
		"lvls": 8,
295
		"id": 29,
296
		"unit": "kts"
297
	},
298
	"30": {
299
		"layer": 0,
300
		"name": "Spectrum Width",
301
		"res": 1.0,
302
		"mnemo": "SW",
303
		"range": 230,
304
		"lvls": 8,
305
		"id": 30,
306
		"unit": "kts"
307
	},
308
	"31": {
309
		"layer": 0,
310
		"name": "User Select Precip",
311
		"res": 2.0,
312
		"mnemo": "USP",
313
		"range": 460,
314
		"lvls": 16,
315
		"id": 31,
316
		"unit": "in"
317
	},
318
	"32": {
319
		"layer": 0,
320
		"name": "Digital Hybrid Scan Refl",
321
		"res": 1.0,
322
		"mnemo": "DHR",
323
		"ctable": ['NWSStormClearReflectivity', -20., 0.5],
324
		"scale": [-32.0, 94.5],
325
		"range": 230,
326
		"lvls": 256,
327
		"id": 32,
328
		"unit": "dBZ/10"
329
	},
330
	"33": {
331
		"layer": 0,
332
		"name": "Hybrid Scan Reflectivity",
333
		"res": 1.0,
334
		"mnemo": "HSR",
335
		"range": 230,
336
		"lvls": 16,
337
		"id": 33,
338
		"unit": "dBZ"
339
	},
340
	"34": {
341
		"layer": 0,
342
		"name": "Clutter Filter Control",
343
		"res": 1.0,
344
		"mnemo": "CFC",
345
		"range": 230,
346
		"lvls": 8,
347
		"id": 34,
348
		"unit": ""
349
	},
350
	"35": {
351
		"layer": 0,
352
		"name": "Composite Refl",
353
		"res": 1.0,
354
		"mnemo": "CZ",
355
		"range": 230,
356
		"lvls": 8,
357
		"id": 35,
358
		"unit": "dBZ"
359
	},
360
	"36": {
361
		"layer": 0,
362
		"name": "Composite Refl",
363
		"res": 4.0,
364
		"mnemo": "CZ",
365
		"range": 460,
366
		"lvls": 8,
367
		"id": 36,
368
		"unit": "dBZ"
369
	},
370
	"37": {
371
		"layer": 0,
372
		"name": "Composite Refl",
373
		"res": 1.0,
374
		"mnemo": "CZ",
375
		"range": 230,
376
		"lvls": 16,
377
		"id": 37,
378
		"unit": "dBZ"
379
	},
380
	"38": {
381
		"layer": 0,
382
		"name": "Composite Refl",
383
		"res": 4.0,
384
		"mnemo": "CZ",
385
		"range": 460,
386
		"lvls": 16,
387
		"id": 38,
388
		"unit": "dBZ"
389
	},
390
	"41": {
391
		"layer": 0,
392
		"name": "Echo Tops",
393
		"res": 4.0,
394
		"mnemo": "ET",
395
		"range": 230,
396
		"lvls": 16,
397
		"id": 41,
398
		"unit": "ft*1000"
399
	},
400
	"43": {
401
		"layer": 0,
402
		"name": "Svr Wx Analysis - Ref",
403
		"res": 1.0,
404
		"mnemo": "SWR",
405
		"range": 230,
406
		"lvls": 16,
407
		"id": 43,
408
		"unit": ""
409
	},
410
	"44": {
411
		"layer": 0,
412
		"name": "Svr Wx Analysis - Vel",
413
		"res": 0.25,
414
		"mnemo": "SWV",
415
		"range": 230,
416
		"lvls": 16,
417
		"id": 44,
418
		"unit": ""
419
	},
420
	"45": {
421
		"layer": 0,
422
		"name": "Svr Wx Analysis - SW",
423
		"res": 0.25,
424
		"mnemo": "SWW",
425
		"range": 230,
426
		"lvls": 8,
427
		"id": 45,
428
		"unit": ""
429
	},
430
	"46": {
431
		"layer": 0,
432
		"name": "Svr Wx Analysis - Shear",
433
		"res": 0.5,
434
		"mnemo": "SWS",
435
		"range": 230,
436
		"lvls": 16,
437
		"id": 46,
438
		"unit": ""
439
	},
440
	"47": {
441
		"layer": 0,
442
		"name": "Severe Wx Prob",
443
		"res": 4.0,
444
		"mnemo": "SWP",
445
		"range": 230,
446
		"lvls": 0,
447
		"id": 47,
448
		"unit": ""
449
	},
450
	"48": {
451
		"layer": 0,
452
		"name": "VAD Wind Profile",
453
		"res": 0.0,
454
		"mnemo": "VWP",
455
		"range": 0,
456
		"lvls": 8,
457
		"id": 48,
458
		"unit": "kts"
459
	},
460
	"50": {
461
		"layer": 0,
462
		"name": "Ref X-Sect",
463
		"res": 1.0,
464
		"mnemo": "RCS",
465
		"range": 230,
466
		"lvls": 16,
467
		"id": 50,
468
		"unit": "dBZ"
469
	},
470
	"51": {
471
		"layer": 0,
472
		"name": "Vel X-Sect",
473
		"res": 0.5,
474
		"mnemo": "VCS",
475
		"range": 230,
476
		"lvls": 16,
477
		"id": 51,
478
		"unit": "kts"
479
	},
480
	"55": {
481
		"layer": 0,
482
		"name": "Storm Rel Vel Region",
483
		"res": 0.5,
484
		"mnemo": "SRR",
485
		"range": 230,
486
		"lvls": 16,
487
		"id": 55,
488
		"unit": "kts"
489
	},
490
	"56": {
491
		"layer": 0,
492
		"name": "Storm Rel Velocity",
493
		"ctable": ['NWS8bitVel', -100., 1.],
494
		"scale": [-100, 100],
495
		"res": 1.0,
496
		"mnemo": "SRM",
497
		"range": 230,
498
		"lvls": 16,
499
		"id": 56,
500
		"unit": "kts"
501
	},
502
	"57": {
503
		"layer": 0,
504
		"name": "Vert Integ Liq",
505
		"res": 4.0,
506
		"mnemo": "VIL",
507
		"range": 230,
508
		"lvls": 16,
509
		"id": 57,
510
		"unit": "kg/m\u00b2"
511
	},
512
	"58": {
513
		"layer": 0,
514
		"name": "Storm Track",
515
		"res": 0.0,
516
		"mnemo": "STI",
517
		"range": 345,
518
		"lvls": 0,
519
		"id": 58,
520
		"unit": ""
521
	},
522
	"59": {
523
		"layer": 0,
524
		"name": "Hail Index",
525
		"res": 0.0,
526
		"mnemo": "HI",
527
		"range": 230,
528
		"lvls": 0,
529
		"id": 59,
530
		"unit": ""
531
	},
532
	"60": {
533
		"layer": 0,
534
		"name": "Legacy Meso",
535
		"res": 0.0,
536
		"mnemo": "M",
537
		"range": 230,
538
		"lvls": 0,
539
		"id": 60,
540
		"unit": ""
541
	},
542
	"61": {
543
		"layer": 0,
544
		"name": "Tornadic Vortex Sig",
545
		"res": 0.0,
546
		"mnemo": "TVS",
547
		"range": 230,
548
		"lvls": 0,
549
		"id": 61,
550
		"unit": ""
551
	},
552
	"62": {
553
		"layer": 0,
554
		"name": "Storm Structure",
555
		"res": 0.0,
556
		"mnemo": "SS",
557
		"range": 460,
558
		"lvls": 0,
559
		"id": 62,
560
		"unit": ""
561
	},
562
	"65": {
563
		"layer": 1,
564
		"name": "Layer 1 Max Refl",
565
		"res": 4.0,
566
		"mnemo": "LRM",
567
		"range": 460,
568
		"lvls": 8,
569
		"id": 65,
570
		"unit": "dBZ"
571
	},
572
	"66": {
573
		"layer": 2,
574
		"name": "Lyr 2 Comp Ref Max",
575
		"res": 4.0,
576
		"mnemo": "LRM",
577
		"range": 460,
578
		"lvls": 8,
579
		"id": 66,
580
		"unit": "dBZ"
581
	},
582
	"67": {
583
		"layer": 1,
584
		"name": "Lyr 1 Comp Ref Max",
585
		"res": 4.0,
586
		"mnemo": "APR",
587
		"range": 460,
588
		"lvls": 8,
589
		"id": 67,
590
		"unit": "dBZ"
591
	},
592
	"74": {
593
		"layer": 0,
594
		"name": "Radar Coded Message",
595
		"res": 0.0,
596
		"mnemo": "RCM",
597
		"range": 460,
598
		"lvls": 0,
599
		"id": 74,
600
		"unit": ""
601
	},
602
	"75": {
603
		"layer": 0,
604
		"name": "Free Text Message",
605
		"res": 0.0,
606
		"mnemo": "FTM",
607
		"range": 0,
608
		"lvls": 0,
609
		"id": 75,
610
		"unit": ""
611
	},
612
	"77": {
613
		"layer": 0,
614
		"name": "PUP Text Message",
615
		"res": 0.0,
616
		"mnemo": "PTM",
617
		"range": 0,
618
		"lvls": 0,
619
		"id": 77,
620
		"unit": ""
621
	},
622
	"78": {
623
		"layer": 0,
624
		"name": "One Hour Precip",
625
		"res": 2.0,
626
		"mnemo": "OHP",
627
		"range": 460,
628
		"lvls": 16,
629
		"id": 78,
630
		"unit": "in"
631
	},
632
	"79": {
633
		"layer": 0,
634
		"name": "Three Hour Precip",
635
		"res": 2.0,
636
		"mnemo": "THP",
637
		"range": 460,
638
		"lvls": 16,
639
		"id": 79,
640
		"unit": "in"
641
	},
642
	"80": {
643
		"layer": 0,
644
		"name": "Storm Total Precip",
645
		"res": 2.0,
646
		"mnemo": "STP",
647
		"range": 460,
648
		"lvls": 16,
649
		"id": 80,
650
		"unit": "in"
651
	},
652
	"81": {
653
		"layer": 0,
654
		"name": "Digital Precip Array",
655
		"res": 4.0,
656
		"mnemo": "DPA",
657
		"range": 230,
658
		"lvls": 256,
659
		"id": 81,
660
		"unit": ""
661
	},
662
	"82": {
663
		"layer": 0,
664
		"name": "Supplemental Precip Data",
665
		"res": 40.0,
666
		"mnemo": "SPD",
667
		"range": 230,
668
		"lvls": 8,
669
		"id": 82,
670
		"unit": ""
671
	},
672
	"83": {
673
		"layer": 0,
674
		"name": "Intermediate Radar Message",
675
		"res": 0.0,
676
		"mnemo": "IRM",
677
		"range": 0,
678
		"lvls": 0,
679
		"id": 83,
680
		"unit": ""
681
	},
682
	"84": {
683
		"layer": 0,
684
		"name": "Velocity Azimuth Disp",
685
		"res": 0.0,
686
		"mnemo": "VAD",
687
		"range": 0,
688
		"lvls": 8,
689
		"id": 84,
690
		"unit": "dBZ"
691
	},
692
	"85": {
693
		"layer": 0,
694
		"name": "Ref X-Sect",
695
		"res": 1.0,
696
		"mnemo": "RCS",
697
		"range": 230,
698
		"lvls": 8,
699
		"id": 85,
700
		"unit": "dBZ"
701
	},
702
	"86": {
703
		"layer": 0,
704
		"name": "Vel X-Sect",
705
		"res": 0.5,
706
		"mnemo": "VCS",
707
		"range": 230,
708
		"lvls": 8,
709
		"id": 86,
710
		"unit": "kts"
711
	},
712
	"87": {
713
		"layer": 0,
714
		"name": "Combined Shear",
715
		"res": 2.0,
716
		"mnemo": "CS",
717
		"range": 230,
718
		"lvls": 16,
719
		"id": 87,
720
		"unit": ""
721
	},
722
	"90": {
723
		"layer": 3,
724
		"name": "Lyr 3 Comp Ref Max",
725
		"res": 4.0,
726
		"mnemo": "LRM",
727
		"range": 460,
728
		"lvls": 8,
729
		"id": 90,
730
		"unit": "dBZ"
731
	},
732
	"93": {
733
		"layer": 0,
734
		"name": "ITWS Digital Velocity",
735
		"res": 1.0,
736
		"mnemo": "DBV",
737
		"range": 115,
738
		"lvls": 256,
739
		"id": 93,
740
		"unit": "(m/s)/10"
741
	},
742
	"94": {
743
		"layer": 0,
744
		"name": "Reflectivity",
745
		"res": 1.0,
746
		"mnemo": "Z",
747
		"range": 460,
748
		"ctable": ['NWSStormClearReflectivity', -20., 0.5],
749
		"scale": [-32.0, 94.5],
750
		"lvls": 256,
751
		"id": 94,
752
		"unit": "dBZ/10"
753
	},
754
	"95": {
755
		"layer": 0,
756
		"name": "Comp Refl Edited for AP",
757
		"res": 1.0,
758
		"mnemo": "CZE",
759
		"range": 230,
760
		"lvls": 8,
761
		"id": 95,
762
		"unit": "dBZ"
763
	},
764
	"96": {
765
		"layer": 0,
766
		"name": "Comp Refl Edited for AP",
767
		"res": 4.0,
768
		"mnemo": "CZE",
769
		"range": 460,
770
		"lvls": 8,
771
		"id": 96,
772
		"unit": "dBZ"
773
	},
774
	"97": {
775
		"layer": 0,
776
		"name": "Comp Refl Edited for AP",
777
		"res": 1.0,
778
		"mnemo": "CZE",
779
		"range": 230,
780
		"lvls": 16,
781
		"id": 97,
782
		"unit": "dBZ"
783
	},
784
	"98": {
785
		"layer": 0,
786
		"name": "Comp Refl Edited for AP",
787
		"res": 4.0,
788
		"mnemo": "CZE",
789
		"range": 460,
790
		"lvls": 16,
791
		"id": 98,
792
		"unit": "dBZ"
793
	},
794
	"99": {
795
		"layer": 0,
796
		"name": "Velocity",
797
		"res": 0.25,
798
		"mnemo": "V",
799
		"range": 300,
800
        	"ctable": ['NWS8bitVel', -100., 1.],
801
        	"scale": [-100, 100],
802
		"lvls": 256,
803
		"id": 99,
804
		"unit": "(m/s)/10"
805
	},
806
	"100": {
807
		"layer": 0,
808
		"name": "VAD Site Adapt Params",
809
		"res": 0.0,
810
		"mnemo": "VSDT",
811
		"range": 0,
812
		"lvls": 0,
813
		"id": 100,
814
		"unit": ""
815
	},
816
	"101": {
817
		"layer": 0,
818
		"name": "Storm Track Alpha block",
819
		"res": 0.0,
820
		"mnemo": "STIT",
821
		"range": 0,
822
		"lvls": 0,
823
		"id": 101,
824
		"unit": ""
825
	},
826
	"102": {
827
		"layer": 0,
828
		"name": "Hail Index Alpha block",
829
		"res": 0.0,
830
		"mnemo": "HIT",
831
		"range": 0,
832
		"lvls": 0,
833
		"id": 102,
834
		"unit": ""
835
	},
836
	"103": {
837
		"layer": 0,
838
		"name": "Mesocyclone Alpha block",
839
		"res": 0.0,
840
		"mnemo": "MT",
841
		"range": 0,
842
		"lvls": 0,
843
		"id": 103,
844
		"unit": ""
845
	},
846
	"104": {
847
		"layer": 0,
848
		"name": "TVS Alpha block",
849
		"res": 0.0,
850
		"mnemo": "TVST",
851
		"range": 0,
852
		"lvls": 0,
853
		"id": 104,
854
		"unit": ""
855
	},
856
	"105": {
857
		"layer": 0,
858
		"name": "Combined Shear Params",
859
		"res": 0.0,
860
		"mnemo": "CST",
861
		"range": 0,
862
		"lvls": 0,
863
		"id": 105,
864
		"unit": ""
865
	},
866
	"107": {
867
		"layer": 0,
868
		"name": "1hr Rainfall Params",
869
		"res": 0.0,
870
		"mnemo": "OHPT",
871
		"range": 0,
872
		"lvls": 0,
873
		"id": 107,
874
		"unit": ""
875
	},
876
	"108": {
877
		"layer": 0,
878
		"name": "3hr Rainfall Params",
879
		"res": 0.0,
880
		"mnemo": "THPT",
881
		"range": 0,
882
		"lvls": 0,
883
		"id": 108,
884
		"unit": ""
885
	},
886
	"109": {
887
		"layer": 0,
888
		"name": "Storm Total Params",
889
		"res": 0.0,
890
		"mnemo": "STPT",
891
		"range": 0,
892
		"lvls": 0,
893
		"id": 109,
894
		"unit": ""
895
	},
896
	"132": {
897
		"layer": 0,
898
		"name": "Clutter Likelihood Refl",
899
		"res": 1.0,
900
		"mnemo": "CLR",
901
		"range": 230,
902
		"lvls": 16,
903
		"id": 132,
904
		"unit": "%"
905
	},
906
	"133": {
907
		"layer": 0,
908
		"name": "Clutter Likelihood Dopp",
909
		"res": 1.0,
910
		"mnemo": "CLD",
911
		"range": 230,
912
		"lvls": 16,
913
		"id": 133,
914
		"unit": "%"
915
	},
916
	"134": {
917
		"layer": 0,
918
		"name": "Digital Vert Integ Liq",
919
		"res": 1.0,
920
		"mnemo": "DVL",
921
		"range": 460,
922
		"lvls": 256,
923
		"id": 134,
924
		"unit": "kg/m\u00b2"
925
	},
926
	"135": {
927
		"layer": 0,
928
		"name": "Enhanced Echo Tops",
929
		"res": 1.0,
930
		"mnemo": "EET",
931
		"ctable": ['NWSEnhancedEchoTops', 2, 1],
932
		"scale": [0, 255],
933
		"range": 460,
934
		"lvls": 256,
935
		"id": 135,
936
		"unit": "ft*1000"
937
	},
938
	"136": {
939
		"layer": 0,
940
		"name": "SuperOb",
941
		"res": 4.0,
942
		"mnemo": "SO",
943
		"range": 0,
944
		"lvls": 256,
945
		"id": 136,
946
		"unit": ""
947
	},
948
	"137": {
949
		"layer": 9,
950
		"name": "User Selectable Lyr Refl",
951
		"res": 1.0,
952
		"mnemo": "ULR",
953
		"range": 230,
954
		"lvls": 16,
955
		"id": 137,
956
		"unit": "dBZ"
957
	},
958
	"138": {
959
		"layer": 0,
960
		"name": "Storm Total Precip",
961
		"res": 2.0,
962
		"mnemo": "STP",
963
		"ctable": ['NWSStormClearReflectivity', -100., 1.],
964
		"scale": [0, 10],
965
		"range": 460,
966
		"lvls": 256,
967
		"id": 138,
968
		"unit": "in/100"
969
	},
970
	"139": {
971
		"layer": 0,
972
		"name": "Rapid Update Mesocyclone",
973
		"res": 0.0,
974
		"mnemo": "MRU",
975
		"range": 230,
976
		"lvls": 0,
977
		"id": 139,
978
		"unit": ""
979
	},
980
	"140": {
981
		"layer": 0,
982
		"name": "Gust Front MIGFA",
983
		"res": 0.0,
984
		"mnemo": "GFM",
985
		"range": 230,
986
		"lvls": 0,
987
		"id": 140,
988
		"unit": ""
989
	},
990
	"141": {
991
		"layer": 0,
992
		"name": "Mesocyclone",
993
		"res": 0.0,
994
		"mnemo": "MD",
995
		"range": 230,
996
		"lvls": 0,
997
		"id": 141,
998
		"unit": ""
999
	},
1000
	"143": {
1001
		"layer": 0,
1002
		"name": "TVS Rapid Update",
1003
		"res": 0.0,
1004
		"mnemo": "TRU",
1005
		"range": 230,
1006
		"lvls": 0,
1007
		"id": 143,
1008
		"unit": ""
1009
	},
1010
	"144": {
1011
		"layer": 0,
1012
		"name": "1-Hour Snow-Water Equiv",
1013
		"res": 1.0,
1014
		"mnemo": "OSW",
1015
		"range": 230,
1016
		"lvls": 16,
1017
		"id": 144,
1018
		"unit": "in"
1019
	},
1020
	"145": {
1021
		"layer": 0,
1022
		"name": "1-Hour Snow Depth",
1023
		"res": 1.0,
1024
		"mnemo": "OSD",
1025
		"range": 230,
1026
		"lvls": 16,
1027
		"id": 145,
1028
		"unit": "in"
1029
	},
1030
	"146": {
1031
		"layer": 0,
1032
		"name": "Storm Tot Snow-Water Equiv",
1033
		"res": 1.0,
1034
		"mnemo": "SSW",
1035
		"range": 230,
1036
		"lvls": 16,
1037
		"id": 146,
1038
		"unit": "in"
1039
	},
1040
	"147": {
1041
		"layer": 0,
1042
		"name": "Storm Tot Snow Depth",
1043
		"res": 1.0,
1044
		"mnemo": "SSD",
1045
		"range": 230,
1046
		"lvls": 16,
1047
		"id": 147,
1048
		"unit": "in"
1049
	},
1050
	"149": {
1051
		"layer": 0,
1052
		"name": "Digital Mesocyclone Data",
1053
		"res": 0.0,
1054
		"mnemo": "DMD",
1055
		"range": 230,
1056
		"lvls": 0,
1057
		"id": 149,
1058
		"unit": ""
1059
	},
1060
	"150": {
1061
		"layer": 0,
1062
		"name": "User Sel Snow-Water Equiv",
1063
		"res": 1.0,
1064
		"mnemo": "USW",
1065
		"range": 230,
1066
		"lvls": 16,
1067
		"id": 150,
1068
		"unit": "in"
1069
	},
1070
	"151": {
1071
		"layer": 0,
1072
		"name": "User Sel Snow Depth",
1073
		"res": 1.0,
1074
		"mnemo": "USD",
1075
		"range": 230,
1076
		"lvls": 16,
1077
		"id": 151,
1078
		"unit": "in"
1079
	},
1080
	"152": {
1081
		"layer": 0,
1082
		"name": "RPG System Status",
1083
		"res": 0.0,
1084
		"mnemo": "RSS",
1085
		"range": 0,
1086
		"lvls": 0,
1087
		"id": 152,
1088
		"unit": ""
1089
	},
1090
	"153": {
1091
		"layer": 0,
1092
		"name": "Reflectivity",
1093
		"res": 0.25,
1094
		"mnemo": "HZ",
1095
		"range": 460,
1096
		"lvls": 256,
1097
		"id": 153,
1098
		"unit": "dBZ/10"
1099
	},
1100
	"154": {
1101
		"layer": 0,
1102
		"name": "Velocity",
1103
		"res": 0.25,
1104
		"mnemo": "HV",
1105
		"range": 300,
1106
		"lvls": 256,
1107
		"id": 154,
1108
		"unit": "(m/s)/10"
1109
	},
1110
	"155": {
1111
		"layer": 0,
1112
		"name": "Spec Width",
1113
		"res": 0.25,
1114
		"mnemo": "HSW",
1115
		"range": 300,
1116
		"lvls": 256,
1117
		"id": 155,
1118
		"unit": "(m/s)/10"
1119
	},
1120
	"158": {
1121
		"layer": 0,
1122
		"name": "Diff Reflectivity",
1123
		"res": 1.0,
1124
		"mnemo": "ZDR",
1125
		"range": 230,
1126
		"ctable": ['NWSStormClearReflectivity', -4.0, 5.0],
1127
		"lvls": 16,
1128
		"id": 158,
1129
		"unit": "dB"
1130
	},
1131
	"159": {
1132
		"layer": 0,
1133
		"name": "Diff Reflectivity",
1134
		"res": 0.25,
1135
		"mnemo": "ZDR",
1136
		"range": 300,
1137
    	"ctable": ['NWSStormClearReflectivity', -4.0, 5.0],
1138
		"lvls": 256,
1139
		"id": 159,
1140
		"unit": "dB"
1141
	},
1142
	"160": {
1143
		"layer": 0,
1144
		"name": "Correlation Coeff",
1145
		"res": 1.0,
1146
		"mnemo": "CC",
1147
		"range": 230,
1148
		"lvls": 16,
1149
		"id": 160,
1150
		"unit": ""
1151
	},
1152
	"161": {
1153
		"layer": 0,
1154
		"name": "Correlation Coeff",
1155
		"res": 0.25,
1156
		"mnemo": "CC",
1157
		"range": 300,
1158
		"lvls": 256,
1159
		"id": 161,
1160
		"unit": ""
1161
	},
1162
	"162": {
1163
		"layer": 0,
1164
		"name": "Specific Diff Phase",
1165
		"res": 1.0,
1166
		"mnemo": "KDP",
1167
		"range": 230,
1168
		"lvls": 16,
1169
		"id": 162,
1170
		"unit": "deg/km"
1171
	},
1172
	"163": {
1173
		"layer": 0,
1174
		"name": "Specific Diff Phase",
1175
		"res": 0.25,
1176
		"mnemo": "KDP",
1177
		"range": 300,
1178
		"lvls": 256,
1179
		"id": 163,
1180
		"unit": "deg/km"
1181
	},
1182
	"164": {
1183
		"layer": 0,
1184
		"name": "Hydrometeor Class",
1185
		"res": 1.0,
1186
		"mnemo": "HC",
1187
		"range": 230,
1188
		"lvls": 16,
1189
		"id": 164,
1190
		"unit": ""
1191
	},
1192
	"165": {
1193
		"layer": 0,
1194
		"name": "Hydrometeor Class",
1195
		"res": 0.25,
1196
		"mnemo": "HC",
1197
		"range": 300,
1198
		"lvls": 256,
1199
		"id": 165,
1200
		"unit": "/10"
1201
	},
1202
	"166": {
1203
		"layer": 0,
1204
		"name": "Melting Layer",
1205
		"res": 0.0,
1206
		"mnemo": "ML",
1207
		"range": 230,
1208
		"lvls": 0,
1209
		"id": 166,
1210
		"unit": ""
1211
	},
1212
	"167": {
1213
		"layer": 0,
1214
		"name": "Raw CC",
1215
		"res": 0.25,
1216
		"mnemo": "SDC",
1217
		"range": 300,
1218
		"lvls": 256,
1219
		"id": 167,
1220
		"unit": ""
1221
	},
1222
	"168": {
1223
		"layer": 0,
1224
		"name": "Raw PHIDP",
1225
		"res": 0.25,
1226
		"mnemo": "SDP",
1227
		"range": 300,
1228
		"lvls": 256,
1229
		"id": 168,
1230
		"unit": "deg"
1231
	},
1232
	"169": {
1233
		"layer": 0,
1234
		"name": "One Hour Accum",
1235
		"res": 2.0,
1236
		"mnemo": "OHA",
1237
		"ctable": ['NWSStormClearReflectivity', -100., 1.],
1238
		"scale": [0, 10],
1239
		"range": 230,
1240
		"lvls": 16,
1241
		"id": 169,
1242
		"unit": "in"
1243
	},
1244
	"170": {
1245
		"layer": 0,
1246
		"name": "One Hour Unbiased Accum",
1247
		"res": 0.25,
1248
		"mnemo": "DAA",
1249
		"ctable": ['NWSStormClearReflectivity', -100., 1.],
1250
		"scale": [0, 10],
1251
		"range": 230,
1252
		"lvls": 256,
1253
		"id": 170,
1254
		"unit": "in/100"
1255
	},
1256
	"171": {
1257
		"layer": 0,
1258
		"name": "Storm Total Accum",
1259
		"res": 2.0,
1260
		"mnemo": "STA",
1261
		"ctable": ['NWSStormClearReflectivity', -100., 1.],
1262
		"scale": [0, 30],
1263
		"range": 230,
1264
		"lvls": 16,
1265
		"id": 171,
1266
		"unit": "in"
1267
	},
1268
	"172": {
1269
		"layer": 0,
1270
		"name": "Storm Total Accum",
1271
		"res": 0.25,
1272
		"mnemo": "STA",
1273
		"ctable": ['NWSStormClearReflectivity', -100., 1.],
1274
		"scale": [0, 30],
1275
		"range": 230,
1276
		"lvls": 256,
1277
		"id": 172,
1278
		"unit": "in/100"
1279
	},
1280
	"173": {
1281
		"layer": 0,
1282
		"name": "User Select Accum",
1283
		"res": 0.25,
1284
		"mnemo": "DUA",
1285
		"ctable": ['NWSStormClearReflectivity', -100., 1.],
1286
		"scale": [0, 30],
1287
		"range": 230,
1288
		"lvls": 256,
1289
		"id": 173,
1290
		"unit": "in/100"
1291
	},
1292
	"174": {
1293
		"layer": 0,
1294
		"name": "One Hour Diff",
1295
		"res": 0.25,
1296
		"mnemo": "DOD",
1297
		"range": 230,
1298
		"lvls": 256,
1299
		"id": 174,
1300
		"unit": "in/100"
1301
	},
1302
	"175": {
1303
		"layer": 0,
1304
		"name": "Storm Total Diff",
1305
		"res": 0.25,
1306
		"mnemo": "DSD",
1307
		"range": 230,
1308
		"lvls": 256,
1309
		"id": 175,
1310
		"unit": "in/100"
1311
	},
1312
	"176": {
1313
		"layer": 0,
1314
		"name": "Digital Inst Precip Rate",
1315
		"res": 0.25,
1316
		"mnemo": "DPR",
1317
		"ctable": ['NWS8bitVel', -100., 1.],
1318
		"scale": [0, 16],
1319
		"range": 230,
1320
		"lvls": 65536,
1321
		"id": 176,
1322
		"unit": "in/h"
1323
	},
1324
	"177": {
1325
		"layer": 0,
1326
		"name": "Hybrid Hydrometeor Class",
1327
		"res": 0.25,
1328
		"mnemo": "HHC",
1329
		"range": 230,
1330
		"lvls": 256,
1331
		"id": 177,
1332
		"unit": "/10"
1333
	},
1334
	"180": {
1335
		"layer": 0,
1336
		"name": "Reflectivity",
1337
		"res": 0.15,
1338
		"mnemo": "Z",
1339
		"range": 90,
1340
		"lvls": 256,
1341
		"id": 180,
1342
		"unit": "dBZ/10"
1343
	},
1344
	"181": {
1345
		"layer": 0,
1346
		"name": "Reflectivity",
1347
		"res": 0.15,
1348
		"mnemo": "Z",
1349
		"range": 90,
1350
		"lvls": 16,
1351
		"id": 181,
1352
		"unit": "dBZ"
1353
	},
1354
	"182": {
1355
		"layer": 0,
1356
		"name": "Velocity",
1357
		"res": 0.15,
1358
		"mnemo": "V",
1359
		"range": 90,
1360
		"lvls": 256,
1361
		"id": 182,
1362
		"unit": "(m/s)/10"
1363
	},
1364
	"183": {
1365
		"layer": 0,
1366
		"name": "Velocity",
1367
		"res": 0.15,
1368
		"mnemo": "V",
1369
		"range": 90,
1370
		"lvls": 16,
1371
		"id": 183,
1372
		"unit": "kts"
1373
	},
1374
	"184": {
1375
		"layer": 0,
1376
		"name": "Spec Width",
1377
		"res": 0.15,
1378
		"mnemo": "SW",
1379
		"range": 90,
1380
		"lvls": 256,
1381
		"id": 184,
1382
		"unit": "(m/s)/10"
1383
	},
1384
	"185": {
1385
		"layer": 0,
1386
		"name": "Spectrum Width",
1387
		"res": 0.15,
1388
		"mnemo": "SW",
1389
		"range": 90,
1390
		"lvls": 8,
1391
		"id": 185,
1392
		"unit": "kts"
1393
	},
1394
	"186": {
1395
		"layer": 0,
1396
		"name": "Long Range Refl",
1397
		"res": 0.3,
1398
		"mnemo": "Z",
1399
		"range": 460,
1400
		"lvls": 256,
1401
		"id": 186,
1402
		"unit": "dBZ/10"
1403
	},
1404
	"187": {
1405
		"layer": 0,
1406
		"name": "Long Range Refl",
1407
		"res": 0.3,
1408
		"mnemo": "Z",
1409
		"range": 460,
1410
		"lvls": 16,
1411
		"id": 187,
1412
		"unit": "dBZ"
1413
	},
1414
	"196": {
1415
		"layer": 0,
1416
		"name": "Microburst AMDA",
1417
		"res": 0.0,
1418
		"mnemo": "MBA",
1419
		"range": 50,
1420
		"lvls": 0,
1421
		"id": 196,
1422
		"unit": ""
1423
	},
1424
	"202": {
1425
		"layer": 0,
1426
		"name": "Shift Change Checklist",
1427
		"res": 0.0,
1428
		"mnemo": "SCC",
1429
		"range": 0,
1430
		"lvls": 0,
1431
		"id": 202,
1432
		"unit": ""
1433
	},
1434
	"550": {
1435
		"layer": 0,
1436
		"name": "Reflectivity",
1437
		"res": 0.926,
1438
		"mnemo": "Z",
1439
		"range": 111,
1440
		"lvls": 8,
1441
		"id": 550,
1442
		"unit": "dBZ"
1443
	},
1444
	"300": {
1445
		"layer": 0,
1446
		"name": "Level II Reflectivity",
1447
		"res": 1.0,
1448
		"mnemo": "Z",
1449
		"range": 460,
1450
		"lvls": 256,
1451
		"id": 300,
1452
		"unit": "dBZ/10"
1453
	},
1454
	"301": {
1455
		"layer": 0,
1456
		"name": "Level II Velocity",
1457
		"res": 0.25,
1458
		"mnemo": "V",
1459
		"range": 230,
1460
		"lvls": 256,
1461
		"id": 301,
1462
		"unit": "kts"
1463
	},
1464
	"500": {
1465
		"layer": 0,
1466
		"name": "Reflectivity",
1467
		"res": 0.463,
1468
		"mnemo": "Z",
1469
		"range": 463,
1470
		"lvls": 8,
1471
		"id": 500,
1472
		"unit": "dBZ"
1473
	}
1474
}
1475
1476
#
1477
# Dictionary that maps VTEC codes to headlines
1478
# Modified from com.raytheon.uf.edex.activetable/utility/common_static/base/vtec/VTECTable.py
1479
# Colornames from:
1480
# 1) https://www.weather.gov/bro/mapcolors
1481
# 2) https://digital.weather.gov/staticpages/definitions.php
1482
# 3) https://www.w3schools.com/colors/colors_names.asp
1483
#
1484
vtec = {
1485
    'AF.W' : {'phen': 'AF',
1486
              'sig': 'W',
1487
              'color': 'gray',
1488
              'hdln': 'Ashfall Warning'},
1489
    'AF.Y' : {'phen': 'AF',
1490
              'sig': 'Y',
1491
              'color': 'gray',
1492
              'hdln': 'Ashfall Advisory'},
1493
    'AQ.Y' : {'phen': 'AQ',
1494
              'sig': 'Y',
1495
              'color': 'gray',
1496
              'hdln': 'Air Quality Alert'},
1497
    'AS.O' : {'phen': 'AS',
1498
              'sig': 'O',
1499
              'color': 'gray',
1500
              'hdln': 'Air Stagnation Outlook'},
1501
    'AS.Y' : {'phen': 'AS',
1502
              'sig': 'Y',
1503
              'color': 'gray',
1504
              'hdln': 'Air Stagnation Advisory'},
1505
    'BH.S' : {'phen': 'BH',
1506
              'sig': 'S',
1507
              'color': 'turquoise',
1508
              'hdln': 'Beach Hazards Statement'},
1509
    'BW.Y' : {'phen': 'BW',
1510
              'sig': 'Y',
1511
              'color': 'thistle',
1512
              'hdln': 'Brisk Wind Advisory'},
1513
    'BZ.A' : {'phen' : 'BZ',
1514
              'sig' : 'A',
1515
              'color': 'greenyellow',
1516
              'hdln' : 'Blizzard Watch'},
1517
    'BZ.W' : {'phen' : 'BZ',
1518
              'sig' : 'W',
1519
              'color': 'orangered',
1520
              'hdln' : 'Blizzard Warning'},
1521
    'CF.A' : {'phen': 'CF',
1522
              'sig': 'A',
1523
              'color': 'mediumaquamarine',
1524
              'hdln': 'Coastal Flood Watch'},
1525
    'CF.W' : {'phen': 'CF',
1526
              'sig': 'W',
1527
              'color': 'forestgreen',
1528
              'hdln': 'Coastal Flood Warning'},
1529
    'CF.Y' : {'phen': 'CF',
1530
              'sig': 'Y',
1531
              'color': 'lawngreen',
1532
              'hdln': 'Coastal Flood Advisory'},
1533
    'CF.S' : {'phen': 'CF',
1534
              'sig': 'S',
1535
              'color': 'olivedrab',
1536
              'hdln': 'Coastal Flood Statement'},
1537
    'DS.W' : {'phen': 'DS',
1538
              'sig': 'W',
1539
              'color': 'bisque',
1540
              'hdln': 'Dust Storm Warning'},
1541
    'DU.Y' : {'phen': 'DU',
1542
              'sig': 'Y',
1543
              'color': 'darkkhaki',
1544
              'hdln': 'Blowing Dust Advisory'},
1545
    'EC.A' : {'phen': 'EC',
1546
              'sig': 'A',
1547
              'color': 'blue',
1548
              'hdln': 'Extreme Cold Watch'},
1549
    'EC.W' : {'phen': 'EC',
1550
              'sig': 'W',
1551
              'color': 'blue',
1552
              'hdln': 'Extreme Cold Warning'},
1553
    'EH.A' : {'phen': 'EH',
1554
              'sig': 'A',
1555
              'color': 'maroon',
1556
              'hdln': 'Excessive Heat Watch'},
1557
    'EH.W' : {'phen': 'EH',
1558
              'sig': 'W',
1559
              'color': 'mediumvioletred',
1560
              'hdln': 'Excessive Heat Warning'},
1561
    'EW.W' : {'phen': 'EW',
1562
              'sig': 'W',
1563
              'color': 'deeppink',
1564
              'hdln': 'Excessive Wind Warning'},
1565
    'FA.A' : {'phen': 'FA',
1566
              'sig': 'A',
1567
              'color': 'seagreen',
1568
              'hdln': 'Flood Watch'},
1569
    'FA.W' : {'phen': 'FA',
1570
              'sig': 'W',
1571
              'color': 'seagreen',
1572
              'hdln': 'Areal Flood Warning'},
1573
    'FA.Y' : {'phen': 'FA',
1574
              'sig': 'Y',
1575
              'color': 'seagreen',
1576
              'hdln': 'Areal Flood Advisory'},
1577
    'FF.A' : {'phen': 'FF',
1578
              'sig': 'A',
1579
              'color': 'limegreen',
1580
              'hdln': 'Flash Flood Watch'},
1581
    'FF.S' : {'phen': 'FF',
1582
              'sig': 'S',
1583
              'color': 'yellowgreen',
1584
              'hdln': 'Flash Flood Statement'},
1585
    'FF.W' : {'phen': 'FF',
1586
              'sig': 'W',
1587
              'color': 'darkred',
1588
              'hdln': 'Flash Flood Warning'},
1589
    'FG.Y' : {'phen': 'FG',
1590
              'sig': 'Y',
1591
              'color': 'slategray',
1592
              'hdln': 'Dense Fog Advisory'},
1593
    'FL.A' : {'phen': 'FL',
1594
              'sig': 'A',
1595
              'color': 'seagreen',
1596
              'hdln': 'Flood Watch'},
1597
    'FL.W' : {'phen': 'FL',
1598
              'sig': 'W',
1599
              'color': 'green',
1600
              'hdln': 'Flood Warning'},
1601
    'HY.S' : {'phen': 'FL',
1602
              'sig': 'S',
1603
              'color': '#00ff7f',
1604
              'hdln': 'Hydrological Statement'},
1605
    'FL.S' : {'phen': 'FL',
1606
              'sig': 'S',
1607
              'color': '#00ff7f',
1608
              'hdln': 'Flood Statement'},
1609
    'FL.Y' : {'phen': 'FL',
1610
              'sig': 'Y',
1611
              'color': '#00ff7f',
1612
              'hdln': 'Flood Advisory'},
1613
    'FR.Y' : {'phen': 'FR',
1614
              'sig': 'Y',
1615
              'color': 'cornflowerblue',
1616
              'hdln': 'Frost Advisory'},
1617
    'FW.A' : {'phen': 'FW',
1618
              'sig': 'A',
1619
              'color': 'navajowhite',
1620
              'hdln': 'Fire Weather Watch'},
1621
    'FW.W' : {'phen': 'FW',
1622
              'sig': 'W',
1623
              'color': 'deeppink',
1624
              'hdln': 'Red Flag Warning'},
1625
    'FZ.A' : {'phen': 'FZ',
1626
              'sig': 'A',
1627
              'color': 'royalblue',
1628
              'hdln': 'Freeze Watch'},
1629
    'FZ.W' : {'phen': 'FZ',
1630
              'sig': 'W',
1631
              'color': 'cyan',
1632
              'hdln': 'Freeze Warning'},
1633
    'GL.A' : {'phen': 'GL',
1634
              'sig': 'A',
1635
              'color': 'pink',
1636
              'hdln': 'Gale Watch'},
1637
    'GL.W' : {'phen': 'GL',
1638
              'sig': 'W',
1639
              'color': '#dda0dd',
1640
              'hdln': 'Gale Warning'},
1641
    'HF.A' : {'phen': 'HF',
1642
              'sig': 'A',
1643
              'color': 'darkorchid',
1644
              'hdln': 'Hurricane Force Wind Watch'},
1645
    'HF.W' : {'phen': 'HF',
1646
              'sig': 'W',
1647
              'color': '#cd5c5c',
1648
              'hdln': 'Hurricane Force Wind Warning'},
1649
    'HT.Y' : {'phen': 'HT',
1650
              'sig': 'Y',
1651
              'color': '#ff7f4e',
1652
              'hdln': 'Heat Advisory'},
1653
    'HU.A' : {'phen': 'HU',
1654
              'sig': 'A',
1655
              'color': '#ff00ff',
1656
              'hdln': 'Hurricane Watch'},
1657
    'HU.S' : {'phen': 'HU',
1658
              'sig': 'S',
1659
              'color': 'yellow',
1660
              'hdln': 'Hurricane Statement'},
1661
    'HU.W' : {'phen': 'HU',
1662
              'sig': 'W',
1663
              'color': '#dc143c',
1664
              'hdln': 'Hurricane Warning'},
1665
    'HW.A' : {'phen': 'HW',
1666
              'sig': 'A',
1667
              'color': 'darkgoldenrod',
1668
              'hdln': 'High Wind Watch'},
1669
    'HW.W' : {'phen': 'HW',
1670
              'sig': 'W',
1671
              'color': 'goldenrod',
1672
              'hdln': 'High Wind Warning'},
1673
    'HZ.A' : {'phen': 'HZ',
1674
              'sig': 'A',
1675
              'color': 'royalblue',
1676
              'hdln': 'Hard Freeze Watch'},
1677
    'HZ.W' : {'phen': 'HZ',
1678
              'sig': 'W',
1679
              'color': 'blue',
1680
              'hdln': 'Hard Freeze Warning'},
1681
    'IS.W' : {'phen': 'IS',
1682
              'sig': 'W',
1683
              'color': 'darkmagenta',
1684
              'hdln': 'Ice Storm Warning'},
1685
    'LE.A' : {'phen': 'LE',
1686
              'sig': 'A',
1687
              'color': 'LightSkyBlue',
1688
              'hdln': 'Lake Effect Snow Watch'},
1689
    'LE.W' : {'phen': 'LE',
1690
              'sig': 'W',
1691
              'color': 'DarkCyan',
1692
              'hdln': 'Lake Effect Snow Warning'},
1693
    'LE.Y' : {'phen': 'LE',
1694
              'sig': 'Y',
1695
              'color': 'MediumTurquoise',
1696
              'hdln': 'Lake Effect Snow Advisory'},
1697
    'LO.Y' : {'phen': 'LO',
1698
              'sig': 'Y',
1699
              'color': 'maroon',
1700
              'hdln': 'Low Water Advisory'},
1701
    'LS.A' : {'phen': 'LS',
1702
              'sig': 'A',
1703
              'color': 'MediumAquaMarine',
1704
              'hdln': 'Lakeshore Flood Watch'},
1705
    'LS.S' : {'phen': 'LS',
1706
              'sig': 'S',
1707
              'color': 'lawngreen',
1708
              'hdln': 'Lakeshore Flood Statement'},
1709
    'LS.W' : {'phen': 'LS',
1710
              'sig': 'W',
1711
              'color': 'forestgreen',
1712
              'hdln': 'Lakeshore Flood Warning'},
1713
    'LS.Y' : {'phen': 'LS',
1714
              'sig': 'Y',
1715
              'color': 'lawngreen',
1716
              'hdln': 'Lakeshore Flood Advisory'},
1717
    'LW.Y' : {'phen': 'LW',
1718
              'sig': 'Y',
1719
              'color': 'tan',
1720
              'hdln': 'Lake Wind Advisory'},
1721
    'MA.A' : {'phen': 'MA',
1722
              'sig': 'A',
1723
              'color': 'peachpuff',
1724
              'hdln': 'Special Marine Advisory'},
1725
    'MA.S' : {'phen': 'MA',
1726
              'sig': 'S',
1727
              'color': 'peachpuff',
1728
              'hdln': 'Special Marine Statement'},
1729
    'MA.W' : {'phen': 'MA',
1730
              'sig': 'W',
1731
              'color': 'palevioletred',
1732
              'hdln': 'Special Marine Warning'},
1733
    'MF.Y' : {'phen': 'MF',
1734
              'sig': 'Y',
1735
              'color': 'slategray',
1736
              'hdln': 'Dense Fog Advisory'}, # Marine Fog
1737
    'MH.W' : {'phen': 'MH',
1738
              'sig': 'W',
1739
              'color': 'darkgray',
1740
              'hdln': 'Ashfall Warning'}, # Marine Ashfall
1741
    'MH.Y' : {'phen': 'MH',
1742
              'sig': 'Y',
1743
              'color': 'dimgray',
1744
              'hdln': 'Ashfall Advisory'}, # Marine Ashfall
1745
    'MS.Y' : {'phen': 'MS',
1746
              'sig': 'Y',
1747
              'color': 'khaki',
1748
              'hdln': 'Dense Smoke Advisory'}, # Marine Smoke
1749
    'RB.Y' : {'phen': 'RB',
1750
              'sig': 'Y',
1751
              'color': 'thistle',
1752
              'hdln': 'Small Craft Advisory for rough bar'},
1753
    'RP.S' : {'phen': 'RP',
1754
              'sig' : 'S',
1755
              'color': 'turquoise',
1756
              'hdln': 'High Rip Current Risk'},
1757
    'SC.Y' : {'phen': 'SC',
1758
              'sig': 'Y',
1759
              'color': 'thistle',
1760
              'hdln': 'Small Craft Advisory'},
1761
    'SE.A' : {'phen': 'SE',
1762
              'sig': 'A',
1763
              'color': 'darkslateblue',
1764
              'hdln': 'Hazardous Seas Watch'},
1765
    'SE.W' : {'phen': 'SE',
1766
              'sig': 'W',
1767
              'color': 'thistle',
1768
              'hdln': 'Hazardous Seas Warning'},
1769
    'SI.Y' : {'phen': 'SI',
1770
              'sig': 'Y',
1771
              'color': 'thistle',
1772
              'hdln': 'Small Craft Advisory for winds'},
1773
    'SM.Y' : {'phen': 'SM',
1774
              'sig': 'Y',
1775
              'color': 'khaki',
1776
              'hdln': 'Dense Smoke Advisory'},
1777
    'SR.A' : {'phen': 'SR',
1778
              'sig': 'A',
1779
              'color': 'violet',
1780
              'hdln': 'Storm Watch'},
1781
    'SR.W' : {'phen': 'SR',
1782
              'sig': 'W',
1783
              'color': 'darkorchid',
1784
              'hdln': 'Storm Warning'},
1785
    'SS.A' : {'phen': 'SS',
1786
              'sig': 'A',
1787
              'color': '#DB7FF7',
1788
              'hdln': 'Storm Surge Watch'},
1789
    'SS.W' : {'phen': 'SS',
1790
              'sig': 'W',
1791
              'color': '#B524F7',
1792
              'hdln': 'Storm Surge Warning'},
1793
    'SU.W' : {'phen': 'SU',
1794
              'sig': 'W',
1795
              'color': 'forestgreen',
1796
              'hdln': 'High Surf Warning'},
1797
    'SU.Y' : {'phen': 'SU',
1798
              'sig': 'Y',
1799
              'color': 'mediumorchid',
1800
              'hdln': 'High Surf Advisory'},
1801
    'SV.A' : {'phen': 'SV',
1802
              'sig': 'A',
1803
              'color': 'palevioletred',
1804
              'hdln': 'Severe Thunderstorm Watch'},
1805
    'SV.S' : {'phen': 'SV',
1806
              'sig': 'S',
1807
              'color': 'aqua',
1808
              'hdln': 'Severe Weather Statement'},
1809
    'SV.W' : {'phen': 'SV',
1810
              'sig': 'W',
1811
              'color': 'orange',
1812
              'hdln': 'Severe Thunderstorm Warning'},
1813
    'SW.Y' : {'phen': 'SW',
1814
              'sig': 'Y',
1815
              'color': 'thistle',
1816
              'hdln': 'Small Craft Advisory for hazardous seas'},
1817
    'TO.A' : {'phen': 'TO',
1818
              'sig': 'A',
1819
              'color': 'yellow',
1820
              'hdln': 'Tornado Watch'},
1821
    'TO.W' : {'phen': 'TO',
1822
              'sig': 'W',
1823
              'color': 'red',
1824
              'hdln': 'Tornado Warning'},
1825
    'TR.A' : {'phen': 'TR',
1826
              'sig': 'A',
1827
              'color': '#f08080',
1828
              'hdln': 'Tropical Storm Watch'},
1829
    'TR.W' : {'phen': 'TR',
1830
              'sig': 'W',
1831
              'color': '#b22222',
1832
              'hdln': 'Tropical Storm Warning'},
1833
    'TS.A' : {'phen': 'TS',
1834
              'sig': 'A',
1835
              'color': 'fuchsia',
1836
              'hdln': 'Tsunami Watch'},
1837
    'TS.W' : {'phen': 'TS',
1838
              'sig': 'W',
1839
              'color': '#FD6347',
1840
              'hdln': 'Tsunami Warning'},
1841
    'TS.Y' : {'phen': 'TS',
1842
              'sig': 'Y',
1843
              'color': 'chocolate',
1844
              'hdln': 'Tsunami Advisory'},
1845
    'TY.A' : {'phen': 'TY',
1846
              'sig': 'A',
1847
              'color': 'fuchsia',
1848
              'hdln': 'Typhoon Watch'},
1849
    'TY.W' : {'phen': 'TY',
1850
              'sig': 'W',
1851
              'color': '#FD6347',
1852
              'hdln': 'Typhoon Warning'},
1853
    'UP.A' : {'phen': 'UP',
1854
              'sig': 'A',
1855
              'color': 'RosyBrown',
1856
              'hdln': 'Heavy Freezing Spray Watch'},
1857
    'UP.W' : {'phen': 'UP',
1858
              'sig': 'W',
1859
              'color': '#00C0FF',
1860
              'hdln': 'Heavy Freezing Spray Warning'},
1861
    'UP.Y' : {'phen': 'UP',
1862
              'sig': 'Y',
1863
              'color': '#00C0FF',
1864
              'hdln': 'Freezing Spray Advisory'},
1865
    'WC.A' : {'phen': 'WC',
1866
              'sig': 'A',
1867
              'color': 'cadetblue',
1868
              'hdln': 'Wind Chill Watch'},
1869
    'WC.W' : {'phen': 'WC',
1870
              'sig': 'W',
1871
              'color': 'lightsteelblue',
1872
              'hdln': 'Wind Chill Warning'},
1873
    'WC.Y' : {'phen': 'WC',
1874
              'sig': 'Y',
1875
              'color': 'paleturquoise',
1876
              'hdln': 'Wind Chill Advisory'},
1877
    'WI.Y' : {'phen': 'WI',
1878
              'sig': 'Y',
1879
              'color': 'tan',
1880
              'hdln': 'Wind Advisory'},
1881
    'WS.A' : {'phen': 'WS',
1882
              'sig': 'A',
1883
              'color': '#4682b4',
1884
              'hdln': 'Winter Storm Watch'},
1885
    'WS.W' : {'phen': 'WS',
1886
              'sig': 'W',
1887
              'color': 'hotpink',
1888
              'hdln': 'Winter Storm Warning'},
1889
    'WW.Y' : {'phen': 'WW',
1890
              'sig': 'Y',
1891
              'color': '#7b68ee',
1892
              'hdln': 'Winter Weather Advisory'},
1893
    'ZF.Y' : {'phen': 'ZF',
1894
              'sig': 'Y',
1895
              'color': 'teal',
1896
              'hdln': 'Freezing Fog Advisory'},
1897
    'ZR.Y' : {'phen': 'ZR',
1898
              'sig': 'Y',
1899
              'color': 'orchid',
1900
              'hdln': 'Freezing Rain Advisory'},
1901
    }
1902
1903
#
1904
# Upgrade Hazards Dictionary - upgradeHazardsDict is a dictionary of
1905
# phen/sig combinations defining upgrades. Each key is the proposed hazard.
1906
# The associated list are the hazards which are upgraded by the
1907
# proposed hazard.
1908
#
1909
1910
upgradeHazardsDict = {
1911
'WC.W': ['WC.A', 'WC.Y'],
1912
'WC.Y': ['WC.A'],
1913
'BZ.W': ['WS.W', 'LE.W', 'ZR.Y', 'LE.Y', 'WW.Y',
1914
         'BZ.A', 'WS.A', 'LE.A'],
1915
'IS.W': ['WS.W', 'LE.W', 'ZR.Y', 'LE.Y', 'WW.Y',
1916
         'BZ.A', 'WS.A', 'LE.A'],
1917
'LE.W': ['ZR.Y', 'LE.Y', 'WW.Y',
1918
         'BZ.A', 'WS.A', 'LE.A'],
1919
'WS.W': ['ZR.Y', 'LE.Y', 'WW.Y',
1920
         'BZ.A', 'WS.A', 'LE.A'],
1921
'ZR.Y': ['BZ.A', 'WS.A', 'LE.A'],
1922
'LE.Y': ['BZ.A', 'WS.A', 'LE.A'],
1923
'WW.Y': ['BZ.A', 'WS.A', 'LE.A'],
1924
'EH.W': ['EH.A', 'HT.Y'],
1925
'HT.Y': ['EH.A'],
1926
'FZ.W': ['FZ.A', 'FR.Y', 'HZ.A'],
1927
'HZ.W': ['FZ.A', 'FR.Y', 'HZ.A'],
1928
'FR.Y': ['FZ.A', 'HZ.A'],
1929
'HW.W': ['DU.Y', 'LW.Y', 'WI.Y', 'HW.A'],
1930
'DS.W': ['DU.Y', 'LW.Y', 'WI.Y', 'HW.A'],
1931
'WI.Y': ['HW.A'],
1932
'EC.W': ['EC.A'],
1933
'FW.W': ['FW.A'],
1934
'CF.W': ['CF.A', 'CF.Y'],
1935
'CF.Y': ['CF.A'],
1936
'LS.W': ['LS.A', 'LS.Y'],
1937
'LS.Y': ['LS.A'],
1938
'BW.Y': ['GL.A', 'SR.A', 'HF.A', 'SE.A'],
1939
'RB.Y': ['GL.A', 'SR.A', 'HF.A', 'SE.A'],
1940
'SC.Y': ['GL.A', 'SR.A', 'HF.A', 'SE.A'],
1941
'SI.Y': ['GL.A', 'SR.A', 'HF.A', 'SE.A'],
1942
'SW.Y': ['SE.A'],
1943
'UP.Y': ['UP.A'],
1944
'HF.W': ['SR.W', 'GL.W', 'SC.Y', 'SW.Y', 'BW.Y', 'SI.Y', 'RB.Y', 'GL.A', 'SR.A', 'HF.A', 'SE.A'],
1945
'SR.W': ['GL.W', 'SC.Y', 'SW.Y', 'BW.Y', 'SI.Y', 'RB.Y', 'GL.A', 'SR.A', 'HF.A', 'SE.A'],
1946
'GL.W': ['SC.Y', 'SW.Y', 'BW.Y', 'SI.Y', 'RB.Y', 'GL.A', 'SR.A', 'HF.A', 'SE.A'],
1947
'SE.W': ['SC.Y', 'RB.Y', 'GL.A', 'SR.A', 'HF.A', 'SE.A'],
1948
'UP.W': ['UP.Y', 'UP.A'],
1949
'SU.W': ['SU.Y'],
1950
'SS.W': ['SS.A'],
1951
'HU.W': ['HU.A', 'TR.W', 'TR.A'],
1952
'HU.A': ['TR.A'],
1953
'TR.W': ['TR.A', 'HU.A', 'TY.A'],
1954
'TY.W': ['TY.A', 'TR.W', 'TR.A'],
1955
'TY.A': ['TR.A'],
1956
'AF.W': ['AF.Y'],
1957
'MH.W': ['MH.Y'],
1958
 }
1959
1960
#
1961
# When passed a phen/sig for both the current hazard and the proposed hazard,
1962
# checkForUpgrade returns a 1 if the proposed hazard is an upgrade, otherwise 0
1963
#
1964
1965 View Code Duplication
def checkForUpgrade(pPhen, pSig, cPhen, cSig):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
1966
    proposed = pPhen + "." + pSig
1967
    current = cPhen + "." + cSig
1968
    if proposed in upgradeHazardsDict:
1969
        if current in upgradeHazardsDict[proposed]:
1970
            return 1
1971
        else:
1972
            return 0
1973
    else:
1974
        return 0
1975
1976
#
1977
# Downgrade Hazards Dictionary - downgradeHazardsDict is a dictionary of
1978
# phen/sig combinations defining downgrades. Each key is the proposed hazard.
1979
# The associated list are the hazards which are downgraded by the
1980
# proposed hazard.
1981
#
1982
1983
downgradeHazardsDict = {
1984
'ZR.Y': ['BZ.W', 'LE.W', 'IS.W', 'WS.W'],
1985
'LE.Y': ['BZ.W', 'LE.W', 'IS.W', 'WS.W'],
1986
'WW.Y': ['BZ.W', 'LE.W', 'IS.W', 'WS.W'],
1987
'WC.Y': ['WC.W'],
1988
'WS.W': ['BZ.W', 'IS.W'],
1989
'LE.W': ['BZ.W', 'IS.W'],
1990
'DU.Y': ['DS.W', 'HW.W'],
1991
'LW.Y': ['DS.W', 'HW.W', 'WI.Y'],
1992
'WI.Y': ['DS.W', 'HW.W'],
1993
'HT.Y': ['EH.W'],
1994
'FR.Y': ['FZ.W', 'HZ.W'],
1995
'TR.W': ['HU.W', 'TY.W'],
1996
'UP.Y': ['UP.W'],
1997
'SR.W': ['HF.W'],
1998
'GL.W': ['HF.W', 'SR.W'],
1999
'SC.Y': ['HF.W', 'SR.W', 'GL.W', 'SE.W'],
2000
'SW.Y': ['SE.W'],
2001
'RB.Y': ['HF.W', 'SR.W', 'GL.W', 'SE.W'],
2002
'SU.Y': ['SU.W'],
2003
'BW.Y': ['HF.W', 'SR.W', 'GL.W'],
2004
'SI.Y': ['HF.W', 'SR.W', 'GL.W'],
2005
'LS.Y': ['LS.W'],
2006
'CF.Y': ['CF.W'],
2007
'AF.Y': ['AF.W'],
2008
'MH.Y': ['MH.W'],
2009
}
2010
2011
#
2012
# When passed a phen/sig for both the current hazard and the proposed hazard,
2013
# checkForDowngrade returns a 1 if the proposed hazard is an downgrade, otherwise 0
2014
#
2015
2016 View Code Duplication
def checkForDowngrade(pPhen, pSig, cPhen, cSig):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
2017
    proposed = pPhen + "." + pSig
2018
    current = cPhen + "." + cSig
2019
    if proposed in downgradeHazardsDict:
2020
        if current in downgradeHazardsDict[proposed]:
2021
            return 1
2022
        else:
2023
            return 0
2024
    else:
2025
        return 0
2026