GFESuite Automated Test Case - RoutineLevel5_2_TestScript


0      # ----------------------------------------------------------------------------
1      # This software is in the public domain, furnished "as is", without technical
2      # support, and with no warranty, express or implied, as to its usefulness for
3      # any purpose.
4      #
5      # Miscellaneous Tests for various products
6      # Can have "definitions" and "overrides"
7      #
8      # Author: Dave Metze, hansen
9      # ----------------------------------------------------------------------------
10     ###########
11     ## FWF LAL
12     ## "editAreaSuffix" Test
13     ## Humidity Recovery Local Effects
14     import TestScript, CreateGrids
15    
16     # Overrides to FWF for Humidity Recovery Local Effects
17     humRec = """
18    
19         def getFirePeriod_phraseList(self):
20             if self._useRH:
21                 dayRH = "RH"
22                 nightRH = "RH"
23             else:
24                 dayRH = "MinRH"
25                 nightRH = "MaxRH"
26             phraseList =  [
27                 self.skyWeather_byTimeRange_compoundPhrase,
28                 self.lal_phrase,
29                 (self.dayOrNight_phrase, ["MaxT", "MinT", 1, 1],
30                  self._tempLocalEffects_list()),
31                 (self.trend_DayOrNight_phrase, ["MaxT", "MinT", "Ttrend", 1, 1],
32                  self._tempTrendLocalEffects_list()),
33                 (self.dayOrNight_phrase, [dayRH, nightRH, 1, 1], self._rhLocalEffects_list()),
34                 (self.trend_DayOrNight_phrase, [dayRH, nightRH, "RHtrend", 1, 1],
35                  self._rhTrendLocalEffects_list()),
36                 (self.humidityRecovery_phrase, self._humRecLocalEffects_list()),
37                 #self.humidityRecovery_phrase,
38                 self.fireWind_compoundPhrase,
39                 self.fireWind_label_phrase,  
40                 self.fireValleyWind_compoundPhrase,  
41                 self.fireRidgeWind_compoundPhrase,  
42                 self.haines_phrase,
43                 self.smokeDispersal_phrase,
44                 self.mixingHgt_phrase,
45                 self.transportWind_phrase,
46                 #self.freeWind_phrase,  
47                 self.cwr_phrase,
48                 #self.marineLayer_phrase,
49                 ]
50             # Remove trend methods
51             if self._includeTrends != 1:
52                 newList = []
53                 for phrase in phraseList:
54                     if type(phrase) is types.TupleType:
55                         phraseMethod = phrase[0]
56                         if phraseMethod == self.trend_DayOrNight_phrase:
57                            continue
58                     newList.append(phrase)
59                 phraseList = newList
60             # Add multipleElementTable
61             if self._includeMultipleElementTable_perPeriod:
62                 phraseList.append(self.multipleElementTable_perPeriod_phrase)
63             return phraseList
64                 
65         def _humRecLocalEffects_list(self):
66             leArea1 = self.LocalEffectArea("Valleys", "")
67             leArea2 = self.LocalEffectArea("Ridges", " on the ridges")
68             return [self.LocalEffect([leArea1, leArea2], self._humRecTrigger, "...except ")]
69    
70         def _humRecTrigger(self, tree, node, localEffect, leArea1Label, leArea2Label):
71             leNode = self._makeLEnode(tree, node, leArea1Label)
72             self.humidityRecovery_words(tree, leNode)
73             words1 = leNode.get("words")
74             leNode = self._makeLEnode(tree, node, leArea2Label)
75             self.humidityRecovery_words(tree, leNode)
76             words2 = leNode.get("words")
77             if words1 == words2:
78                 return 0
79             else:
80                 return 1
81    
82         def _makeLEnode(self, tree, node, leArea):
83             leNode = tree.makeNode([],[],node.parent)
84             timeRange = node.getTimeRange()
85             if self._useRH:
86                 elementName = "RH"
87             else:
88                 elementName = "MaxRH"
89             stats = tree.stats.get(
90                 elementName, timeRange, leArea, mergeMethod="Average")
91             statDict = {}
92             statDict[elementName] = stats
93             leNode.set("statDict", statDict)
94             leNode.set("timeRange", timeRange)
95             return leNode
96    
97         # Need to add humidity recovery local effect areas
98         def getFirePeriod_intersectAreas(self):
99             tempList = []
100            windList = []
101            if self._tempLocalEffects:
102                tempList = [
103                    ("MinT", ["BelowElev", "AboveElev"]),
104                    ("MaxT", ["BelowElev", "AboveElev"]),
105                    ("MinRH", ["BelowElev", "AboveElev"]),
106                    ("MaxRH", ["BelowElev", "AboveElev"]),
107                    ("RH", ["BelowElev", "AboveElev"]),
108                    ("Ttrend", ["BelowElev", "AboveElev"]),
109                    ("RHtrend", ["BelowElev", "AboveElev"]),
110                    ]
111            if self._windLocalEffects:
112                windList = [
113                    ("Wind", ["Valleys", "Ridges"]),
114                    ("Wind20ft", ["Valleys", "Ridges"]),
115                    ("WindGust", ["Valleys", "Ridges"]),
116                    ]
117            humRecList = [
118                   ("RH", ["Valleys", "Ridges"]),
119                   ("MaxRH", ["Valleys", "Ridges"]),
120                   ]
121            return tempList + windList + humRecList
122   
123    """
124   
125   
126    localHazard = """
127   
128        def allowedHazards(self):
129            allActions = ["NEW", "EXA", "EXB", "EXT", "CAN", "CON", "EXP"]
130            tropicalActions = ["NEW", "EXA", "EXB", "EXT", "UPG", "CAN", "CON", 
131              "EXP"]
132            return [
133                ('LocalHazard1', allActions, 'Convective'),   # SEVERE THUNDERSTORM WATCH
134                 ]
135    """
136   
137    hazardHook = """
138        def hazard_hook(self, tree, node, hazardPhen, hazardSig, hazardAct,
139                        hazardStart, hazardEnd):
140            hazTR = self.makeTimeRange(hazardStart, hazardEnd)
141            phenSig = hazardPhen + "." + hazardSig
142            print "hazTr, phenSig", hazTR, phenSig
143            return "in the mountains"
144   
145    """
146   
147    localHeadlinesTiming1 = """  
148   
149        def headlinesTiming(self, tree, node, key, timeRange, areaLabel, issuanceTime):
150            return "NONE", "FUZZY4"
151   
152    """
153    localHeadlinesTiming2 = """
154   
155        def startPhraseMethod(self, issueTime, eventTime, timeZone, timeType):
156            return "NONE", None
157        
158        def endPhraseMethod(self, issueTime, eventTime, timeZone, timeType):
159            return "FUZZY4", self.timingWordTableFUZZY4(issueTime, eventTime, timeZone, timeType)
160   
161        def headlinesTiming(self, tree, node, key, timeRange, areaLabel, issuanceTime):
162            return (self.startPhraseMethod, self.endPhraseMethod)
163   
164    """
165   
166    scripts = [
167        
168        ### FWF LAL
169        
170    ##########
171    #LAL of 1#
172    ##########
173   
174        {
175        "name":"FWF_LAL1",
176        "commentary": "LAL 1 from LAL1, PoP 0, NoWx",
177        "productType":"FWF",
178        "comboFlag": 1,
179        "orderStrings": 1,
180        "checkStrings": ["TODAY", "LAL.................1","TONIGHT"],
181        "createGrids": [
182           ("Fcst", "LAL", "SCALAR", 0, 12,  1, "all", 1),
183           ("Fcst", "PoP", "SCALAR", 0, 12, 0, "all", 1),
184           ("Fcst", "Wx", "WEATHER", 0, 12, "NoWx", "all"),
185         ],
186        },
187   
188        {
189        "name":"FWF_LAL2", 
190        "commentary": "LAL 1 from LAL1, PoP 10, SChc RW-",
191        "productType":"FWF",
192        "comboFlag": 1,
193        "orderStrings": 1,
194        "checkStrings": ["TODAY", "LAL.................1","TONIGHT"],
195        "createGrids" : [
196           ("Fcst", "LAL", "SCALAR", 0, 12,  1, "all", 1),
197           ("Fcst", "PoP", "SCALAR", 0, 12, 10, "all", 1),
198           ("Fcst", "Wx", "WEATHER", 0, 12, "SChc:RW:-:<NoVis>:", "all"),
199         ],
200        },
201   
202        {
203        "name":"FWF_LAL3", 
204        "commentary": "LAL 1 from LAL1, PoP 20, Iso RW-",
205        "productType":"FWF",
206        "comboFlag": 1,
207        "orderStrings": 1,
208        "checkStrings": ["TODAY",
209             "ISOLATED SHOWERS",
210             "LAL.................1","TONIGHT"],
211        "createGrids" : [
212           ("Fcst", "LAL", "SCALAR", 0, 12,  1, "all", 1),
213           ("Fcst", "PoP", "SCALAR", 0, 12, 20, "all", 1),
214           ("Fcst", "Wx", "WEATHER", 0, 12, "Iso:RW:-:<NoVis>:", "all"),
215         ],
216        },
217   
218        {
219        "name":"FWF_LAL4", 
220        "commentary": "LAL 1 from LAL1, PoP 30, Chc RW-",
221        "productType":"FWF",
222        "comboFlag": 1,
223        "orderStrings": 1,
224        "checkStrings": ["TODAY",
225             ("CHANCE OF RAIN SHOWERS", "CHANCE OF SHOWERS"),
226             "LAL.................1","TONIGHT"],
227        "createGrids" : [
228           ("Fcst", "LAL", "SCALAR", 0, 12,  1, "all", 1),
229           ("Fcst", "PoP", "SCALAR", 0, 12, 30, "all", 1),
230           ("Fcst", "Wx", "WEATHER", 0, 12, "Chc:RW:-:<NoVis>:", "all"),
231         ],
232        },
233      
234   
235   
236    ##########
237    #LAL of 2#
238    ##########
239   
240         {
241        "name":"FWF_LAL5", 
242        "commentary": "LAL 2 from LAL 2, PoP 20, SChc T SChc RW-",
243        "productType":"FWF",
244        "comboFlag": 1,
245        "orderStrings": 1,
246        "checkStrings": ["TODAY", "SLIGHT CHANCE OF SHOWERS AND THUNDERSTORMS",
247             "LAL.................2","TONIGHT"],
248        "createGrids" : [
249           ("Fcst", "LAL", "SCALAR", 0, 12,  2, "all", 1),
250           ("Fcst", "PoP", "SCALAR", 0, 12, 20, "all", 1),
251           ("Fcst", "Wx", "WEATHER", 0, 12,
252            "SChc:T:<NoInten>:<NoVis>:^SChc:RW:-:<NoVis>:", "all"),
253         ],
254        },
255   
256   
257         {
258        "name":"FWF_LAL6", 
259        "commentary": "LAL 2 from LAL 2, PoP 20, Iso TRW-",
260        "productType":"FWF",
261        "comboFlag": 1,
262        "orderStrings": 1,
263        "checkStrings": ["TODAY", "LAL.................2","TONIGHT"],
264        "createGrids" : [
265           ("Fcst", "LAL", "SCALAR", 0, 12,  2, "all", 1),
266           ("Fcst", "PoP", "SCALAR", 0, 12, 20, "all", 1),
267           ("Fcst", "Wx", "WEATHER", 0, 12, "Iso:T:<NoInten>:<NoVis>:^Iso:RW:-:<NoVis>:", "all"),
268         ],
269        },
270   
271       
272    ##########
273    #LAL of 3#
274    ##########
275   
276        {
277        "name":"FWF_LAL7", 
278        "commentary": "LAL 3 from LAL 3, PoP 20, SChc TRW-",
279        "productType":"FWF",
280        "comboFlag": 1,
281        "orderStrings": 1,
282        "checkStrings": ["TODAY", "SLIGHT CHANCE OF SHOWERS AND THUNDERSTORMS",
283             "LAL.................3","TONIGHT"],
284        "createGrids" : [
285           ("Fcst", "LAL", "SCALAR", 0, 12,  3, "all", 1),
286           ("Fcst", "PoP", "SCALAR", 0, 12, 20, "all", 1),
287           ("Fcst", "Wx", "WEATHER", 0, 12,
288            "SChc:T:<NoInten>:<NoVis>:^SChc:RW:-:<NoVis>:", "all"),
289         ],
290        },
291   
292   
293        {
294        "name":"FWF_LAL8", 
295        "commentary": "LAL 3 from LAL 3, PoP 20, Iso TRW-",
296        "productType":"FWF",
297        "comboFlag": 1,
298        "orderStrings": 1,
299        "checkStrings": ["TODAY", "ISOLATED SHOWERS AND THUNDERSTORMS",
300             "LAL.................3", "TONIGHT"],
301        "createGrids" : [
302           ("Fcst", "LAL", "SCALAR", 0, 12,  3, "all", 1),
303           ("Fcst", "PoP", "SCALAR", 0, 12, 20, "all", 1),
304           ("Fcst", "Wx", "WEATHER", 0, 12, "Iso:T:<NoInten>:<NoVis>:^Iso:RW:-:<NoVis>:", "all"),
305         ],
306        },
307   
308   
309    ##########   
310    #LAL of 4#
311    ##########
312   
313        {
314        "name":"FWF_LAL9", 
315        "commentary": "LAL 4 from LAL 4, PoP 40, Chc TRW-",
316        "productType":"FWF",
317        "comboFlag": 1,
318        "orderStrings": 1,
319        "checkStrings": ["TODAY", "CHANCE OF SHOWERS AND THUNDERSTORMS",
320             "LAL.................4","TONIGHT"],
321        "createGrids" : [
322           ("Fcst", "LAL", "SCALAR", 0, 12,  4, "all", 1),
323           ("Fcst", "PoP", "SCALAR", 0, 12, 40, "all", 1),
324           ("Fcst", "Wx", "WEATHER", 0, 12, "Chc:T:<NoInten>:<NoVis>:^Chc:RW:-:<NoVis>:", "all"),
325         ],
326        },
327   
328        {
329        "name":"FWF_LAL10", 
330        "commentary": "LAL 4 from LAL 4, PoP 40, Sct TRW-",
331        "productType":"FWF",
332        "comboFlag": 1,
333        "orderStrings": 1,
334        "checkStrings": ["TODAY", "SCATTERED SHOWERS AND THUNDERSTORMS",
335             "LAL.................4","TONIGHT"],
336        "createGrids" : [
337           ("Fcst", "LAL", "SCALAR", 0, 12,  4, "all", 1),
338           ("Fcst", "PoP", "SCALAR", 0, 12, 40, "all", 1),
339           ("Fcst", "Wx", "WEATHER", 0, 12, "Sct:T:<NoInten>:<NoVis>:^Sct:RW:-:<NoVis>:", "all"),
340         ],
341        },
342   
343   
344    ##########   
345    #LAL of 5#
346    ##########
347   
348        {
349        "name":"FWF_LAL11", 
350        "commentary": "LAL 5 from LAL 5, PoP 60, Lkly TRW-",
351        "productType":"FWF",
352        "comboFlag": 1,
353        "orderStrings": 1,
354        "checkStrings": ["TODAY", "SHOWERS AND THUNDERSTORMS LIKELY",
355             "LAL.................5","TONIGHT"],
356        "createGrids" : [
357           ("Fcst", "LAL", "SCALAR", 0, 12,  5, "all", 1),
358           ("Fcst", "PoP", "SCALAR", 0, 12, 60, "all", 1),
359           ("Fcst", "Wx", "WEATHER", 0, 12,
360            "Lkly:T:<NoInten>:<NoVis>:^Lkly:RW:-:<NoVis>:", "all"),
361         ],
362        },
363   
364        {
365        "name":"FWF_LAL12", 
366        "commentary": "LAL 5 from LAL 5, PoP 60, Num TRW-",
367        "productType":"FWF",
368        "comboFlag": 1,
369        "orderStrings": 1,
370        "checkStrings": ["TODAY", "NUMEROUS SHOWERS AND THUNDERSTORMS",
371             "LAL.................5","TONIGHT"],
372        "createGrids" : [
373           ("Fcst", "LAL", "SCALAR", 0, 12,  5, "all", 1),
374           ("Fcst", "PoP", "SCALAR", 0, 12, 60, "all", 1),
375           ("Fcst", "Wx", "WEATHER", 0, 12, "Num:T:<NoInten>:<NoVis>:^Num:RW:-:<NoVis>:", "all"),
376         ],
377        },
378   
379   
380    ##########   
381    #LAL of 6#
382    ##########
383   
384        {
385        "name":"FWF_LAL13", 
386        "commentary": "LAL 6 from LAL 6, PoP 20, SChc T (Dry)",
387        "productType":"FWF",
388        "comboFlag": 1,
389        "orderStrings": 1,
390        "checkStrings": ["TODAY", "SLIGHT CHANCE OF DRY THUNDERSTORMS",
391             "LAL.................6","TONIGHT"],
392        "createGrids" : [
393           ("Fcst", "LAL", "SCALAR", 0, 12,  6, "all", 1),
394           ("Fcst", "PoP", "SCALAR", 0, 12, 20, "all", 1),
395           ("Fcst", "Wx", "WEATHER", 0, 12, "SChc:T:<NoInten>:<NoVis>:Dry", "all"),
396         ],
397        },
398   
399        {
400        "name":"FWF_LAL14", 
401        "commentary": "LAL 6 from LAL 6, PoP 20, Iso T (Dry)",
402        "productType":"FWF",
403        "comboFlag": 1,
404        "orderStrings": 1,
405        "checkStrings": ["TODAY", "ISOLATED DRY THUNDERSTORMS",
406             "LAL.................6","TONIGHT"],
407        "createGrids" : [
408           ("Fcst", "LAL", "SCALAR", 0, 12,  6, "all", 1),
409           ("Fcst", "PoP", "SCALAR", 0, 12, 20, "all", 1),
410           ("Fcst", "Wx", "WEATHER", 0, 12, "Iso:T:<NoInten>:<NoVis>:Dry", "all"),
411         ],
412        },
413   
414   
415   
416    #########################################################
417    # More Complex Cases - temporally, spatially and weather#
418    #########################################################
419   
420        #----------------------
421        # changing through time
422        #----------------------
423   
424        {
425        "name":"FWF_LAL15", 
426        "commentary": "Changing LAL 1->2, PoP 0->20, NoWx->IsoTRW-",
427        "productType":"FWF",
428        "comboFlag": 1,
429        "orderStrings": 1,
430        "checkStrings": ["TODAY", "ISOLATED SHOWERS AND THUNDERSTORMS AFTER 0900",
431             "LAL.................1 UNTIL 0900...THEN 2","TONIGHT"],
432        "createGrids" : [
433           ("Fcst", "LAL", "SCALAR", 0, 3,  1, "all", 1),
434           ("Fcst", "LAL", "SCALAR", 3, 12,  2, "all", 1),
435           ("Fcst", "PoP", "SCALAR", 0, 3, 0, "all", 1),
436           ("Fcst", "PoP", "SCALAR", 3, 12, 20, "all", 1),
437           ("Fcst", "Wx", "WEATHER", 0, 3, "NoWx", "all"),
438           ("Fcst", "Wx", "WEATHER", 3, 12, "Iso:T:<NoInten>:<NoVis>:^Iso:RW:-:<NoVis>:", "all"),
439         ],
440        },
441   
442        {
443        "name":"FWF_LAL16", 
444        "commentary": "Changing LAL 1->2, PoP 0->20, NoWx->SChcTRW-",
445        "productType":"FWF",
446        "comboFlag": 1,
447        "orderStrings": 1,
448        "checkStrings": ["TODAY", "SLIGHT CHANCE OF SHOWERS AND THUNDERSTORMS AFTER 0900",
449             "LAL.................1 UNTIL 0900...THEN 2","TONIGHT"],
450        "createGrids" : [
451           ("Fcst", "LAL", "SCALAR", 0, 3,  1, "all", 1),
452           ("Fcst", "LAL", "SCALAR", 3, 12,  2, "all", 1),
453           ("Fcst", "PoP", "SCALAR", 0, 3, 0, "all", 1),
454           ("Fcst", "PoP", "SCALAR", 3, 12, 20, "all", 1),
455           ("Fcst", "Wx", "WEATHER", 0, 3, "NoWx", "all"),
456           ("Fcst", "Wx", "WEATHER", 3, 12,
457            "SChc:T:<NoInten>:<NoVis>:^SChc:RW:-:<NoVis>:", "all"),
458         ],
459        },
460   
461        {
462        "name":"FWF_LAL17", 
463        "commentary": "Changing LAL 3->4, PoP 20->40, Iso TRW- -> Sct RW-",
464        "productType":"FWF",
465        "comboFlag": 1,
466        "orderStrings": 1,
467        "checkStrings": ["TODAY", "ISOLATED SHOWERS AND THUNDERSTORMS UNTIL 1100...THEN SCATTERED SHOWERS AND THUNDERSTORMS",
468             "LAL.................3 UNTIL 1100...THEN 4","TONIGHT"],
469        "createGrids" : [
470           ("Fcst", "LAL", "SCALAR", 0, 5,  3, "all", 1),
471           ("Fcst", "LAL", "SCALAR", 5, 12,  4, "all", 1),
472           ("Fcst", "PoP", "SCALAR", 0, 5, 20, "all", 1),
473           ("Fcst", "PoP", "SCALAR", 5, 12, 40, "all", 1),
474           ("Fcst", "Wx", "WEATHER", 0, 5,
475            "Iso:T:<NoInten>:<NoVis>:^Iso:RW:-:<NoVis>:", "all"),
476           ("Fcst", "Wx", "WEATHER", 5, 12,
477            "Sct:T:<NoInten>:<NoVis>:^Sct:RW:-:<NoVis>:", "all"),
478         ],
479        },
480   
481   
482        {
483        "name":"FWF_LAL18", 
484        "commentary": "Changing LAL 5->3, PoP 70->20, Lkly TRW- -> SChc RW-",
485        "productType":"FWF",
486        "comboFlag": 1,
487        "orderStrings": 1,
488        "checkStrings": ["TODAY",
489             "SHOWERS AND THUNDERSTORMS LIKELY UNTIL 1500...THEN SLIGHT CHANCE OF SHOWERS AND THUNDERSTORMS",
490             "LAL.................5 UNTIL 1500...THEN 3",
491             "TONIGHT"],
492        "createGrids" : [
493           ("Fcst", "LAL", "SCALAR", 0, 9,  5, "all", 1),
494           ("Fcst", "LAL", "SCALAR", 9, 12,  3, "all", 1),
495           ("Fcst", "PoP", "SCALAR", 0, 9, 70, "all", 1),
496           ("Fcst", "PoP", "SCALAR", 9, 12, 20, "all", 1),
497           ("Fcst", "Wx", "WEATHER", 0, 9, "Lkly:T:<NoInten>:<NoVis>:^Lkly:RW:-:<NoVis>:", "all"),
498           ("Fcst", "Wx", "WEATHER", 9, 12,
499            "SChc:T:<NoInten>:<NoVis>:^SChc:RW:-:<NoVis>:", "all"),
500         ],
501        },
502   
503        {
504        "name":"FWF_LAL19", 
505        "commentary": "Changing LAL 1->2->4, PoP 5->20->50, NoWx -> Iso TRW- -> Sct TRW-",
506        "productType":"FWF",
507        "comboFlag": 1,
508        "orderStrings": 1,
509        "checkStrings": ["TODAY",
510             "ISOLATED SHOWERS AND THUNDERSTORMS AFTER 0900 UNTIL 1300...THEN SCATTERED SHOWERS AND THUNDERSTORMS",
511             "LAL.................1 UNTIL 0900...THEN 2 UNTIL 1300...THEN 4",
512             "TONIGHT"],
513        "createGrids" : [
514           ("Fcst", "LAL", "SCALAR", 0, 3,  1, "all", 1),
515           ("Fcst", "LAL", "SCALAR", 3, 7,  2, "all", 1),
516           ("Fcst", "LAL", "SCALAR", 7, 12,  4, "all", 1),
517           ("Fcst", "PoP", "SCALAR", 0, 3, 5, "all", 1),
518           ("Fcst", "PoP", "SCALAR", 3, 7, 20, "all", 1),
519           ("Fcst", "PoP", "SCALAR", 7, 12, 50, "all", 1),
520           ("Fcst", "Wx", "WEATHER", 0, 3, "NoWx", "all"),
521           ("Fcst", "Wx", "WEATHER", 3, 7, "Iso:T:<NoInten>:<NoVis>:^Iso:RW:-:<NoVis>:", "all"),
522           ("Fcst", "Wx", "WEATHER", 7, 12, "Sct:T:<NoInten>:<NoVis>:^Sct:RW:-:<NoVis>:", "all"),
523   
524         ],
525        },
526   
527   
528        #-------------------------
529        # Varous weather occurring
530        #-------------------------
531   
532        {
533        "name":"FWF_LAL20", 
534        "commentary": "LAL4, PoP 60, Num RW- Sct T",
535        "productType":"FWF",
536        "comboFlag": 1,
537        "orderStrings": 1,
538        "checkStrings": ["TODAY", "NUMEROUS SHOWERS AND SCATTERED THUNDERSTORMS",
539             "LAL.................4","TONIGHT"],
540        "createGrids" : [
541           ("Fcst", "LAL", "SCALAR", 0, 12,  4, "all", 1),
542           ("Fcst", "PoP", "SCALAR", 0, 12, 60, "all", 1),
543           ("Fcst", "Wx", "WEATHER", 0, 12, "Num:RW:-:<NoVis>:^Sct:T:<NoInten>:<NoVis>:", "all"),
544         ],
545        },
546   
547        {
548        "name":"FWF_LAL21", 
549        "commentary": "LAL3, PoP 30, Sct RW- Iso T",
550        "productType":"FWF",
551        "comboFlag": 1, 
552        "orderStrings": 1,
553        "checkStrings": ["TODAY", "SCATTERED SHOWERS AND ISOLATED THUNDERSTORMS",
554             "LAL.................3", "TONIGHT"],
555        "createGrids" : [
556          ("Fcst", "LAL", "SCALAR", 0, 12,  3, "all", 1),
557          ("Fcst", "PoP", "SCALAR", 0, 12, 30, "all", 1),
558          ("Fcst", "Wx", "WEATHER", 0, 12, "Sct:RW:-:<NoVis>:^Iso:T:<NoInten>:<NoVis>:", "all"),
559         ],
560        },
561   
562   
563        {
564        "name":"FWF_LAL22", 
565        "commentary": "LAL with local effects (2,4)",
566        "productType":"FWF",
567        "comboFlag": 1,
568        "orderStrings": 1,
569        "checkStrings": ["TODAY", "CHANCE OF SHOWERS AND THUNDERSTORMS",
570             "LAL.................4", "TONIGHT"],
571        "createGrids" : [ 
572           ("Fcst", "LAL", "SCALAR", 0, 12,  2, ["BelowElev"], 1),
573           ("Fcst", "LAL", "SCALAR", 0, 12,  4, ["AboveElev"], 1),
574           ("Fcst", "Wx", "WEATHER", 0, 12, "Chc:RW:-:<NoVis>:^Chc:T:<NoInten>:<NoVis>:", "all"),
575         ],
576        },
577        
578        {
579        "name":"FWF_LAL23", 
580        "commentary": "LAL with local effects (2,2)",
581        "productType":"FWF",
582        "comboFlag": 1,
583        "orderStrings": 1,
584        "checkStrings": ["TODAY", "CHANCE OF SHOWERS AND THUNDERSTORMS",
585             "LAL.................2", "TONIGHT"],
586        "createGrids": [ 
587           ("Fcst", "LAL", "SCALAR", 0, 12,  2, ["BelowElev"], 1),
588           ("Fcst", "LAL", "SCALAR", 0, 12,  2, ["AboveElev"], 1),
589           ("Fcst", "Wx", "WEATHER", 0, 12, "Chc:RW:-:<NoVis>:^Chc:T:<NoInten>:<NoVis>:", "all"),
590         ],
591        },
592        
593        {
594        "name":"FWF_LAL24", 
595        "commentary": "LAL with local effects (2,2), NoWx, results LAL1",
596        "productType":"FWF",
597        "comboFlag": 1,
598        "orderStrings": 1,
599        "checkStrings": ["TODAY", "LAL.................1", "TONIGHT"],
600        "createGrids" : [ 
601           ("Fcst", "LAL", "SCALAR", 0, 12,  2, ["BelowElev"], 1),
602           ("Fcst", "LAL", "SCALAR", 0, 12,  2, ["AboveElev"], 1),
603           ("Fcst", "Wx", "WEATHER", 0, 12, "NoWx", "all"),
604         ],
605        },
606        
607        {
608        "name":"FWF_LAL25", 
609        "commentary": "LAL 1->4, NoWx -> Chc T",
610        "productType":"FWF",
611        "comboFlag": 1,
612        "orderStrings": 1,
613        "checkStrings": ["TODAY","CHANCE OF THUNDERSTORMS AFTER 0900",
614             "LAL.................1 UNTIL 0900...THEN 4", "TONIGHT"],
615        "createGrids" : [ 
616           ("Fcst", "LAL", "SCALAR", 0, 3,  1, "all", 1),
617           ("Fcst", "LAL", "SCALAR", 3, 12,  4, "all", 1),
618           ("Fcst", "Wx", "WEATHER", 0, 3, "NoWx", "all"),
619           ("Fcst", "Wx", "WEATHER", 3, 12, "Chc:T:<NoInten>:<NoVis>:", "all"),
620         ],
621        },
622   
623        {
624        "name":"FWF_LAL26", 
625        "productType":"FWF",
626        "commentary": "Iso T does not get into wording",
627        "comboFlag": 1,
628        "orderStrings": 1,
629        "checkStrings": ["TODAY", "SCATTERED SHOWERS",
630             "LAL.................1", "TONIGHT"],
631        "createGrids" : [
632           ("Fcst", "LAL", "SCALAR", 0, 12,  1, ["area3"], 1),
633           ("Fcst", "LAL", "SCALAR", 0, 12,  2, ["area3_pt"], 1),
634           ("Fcst", "PoP", "SCALAR", 0, 12, 30, ["area3"], 1),
635           ("Fcst", "PoP", "SCALAR", 0, 12, 30, ["area3_pt"], 1),
636           ("Fcst", "Wx", "WEATHER", 0, 12, "Sct:RW:-:<NoVis>:", ["area3"]),
637           ("Fcst", "Wx", "WEATHER", 0, 12, "Iso:T:<NoInten>:<NoVis>:", ["area3_pt"]),
638         ],
639        }, 
640   
641        {
642        "name":"FWF_LAL27", 
643        "productType":"FWF",
644        "commentary": "Matching Iso T, Takes Max LAL = 2 even tho for small area",
645        "comboFlag": 1,
646        "orderStrings": 1,
647        "checkStrings": ["TODAY", "SCATTERED SHOWERS AND ISOLATED THUNDERSTORMS",
648             "LAL.................2", "TONIGHT"],
649        "createGrids" : [
650           ("Fcst", "LAL", "SCALAR", 0, 12,  1, ["area3"], 1),
651           ("Fcst", "LAL", "SCALAR", 0, 12,  2, ["area3_pt"], 1),
652           ("Fcst", "PoP", "SCALAR", 0, 12, 30, "all", 1),
653           ("Fcst", "Wx", "WEATHER", 0, 12,
654            "Sct:RW:-:<NoVis>:^Iso:T:<NoInten>:<NoVis>:", ["area3"]),
655         ],
656        },
657   
658        # Matching Iso T, can't find 3.
659        # If the resultValue value (4) is greater than the binHighVal (3), use binHighVal 
660        {
661        "name":"FWF_LAL28", 
662        "productType":"FWF",
663        "commentary": "Matching Iso T, can't find 3. If the resultValue value (4) is greater than the binHighVal (3), use binHighVal", 
664        "comboFlag": 1,
665        "orderStrings": 1,
666        "checkStrings": ["TODAY", "SCATTERED SHOWERS AND ISOLATED THUNDERSTORMS",
667             "LAL.................3", "TONIGHT"],
668        "createGrids" : [
669           ("Fcst", "LAL", "SCALAR", 0, 12,  1, ["area3"], 1),
670           ("Fcst", "LAL", "SCALAR", 0, 12,  4, ["area3_pt"], 1),
671           ("Fcst", "PoP", "SCALAR", 0, 12, 30, "all", 1),
672           ("Fcst", "Wx", "WEATHER", 0, 12,
673            "Sct:RW:-:<NoVis>:^Iso:T:<NoInten>:<NoVis>:", ["area3"]),
674         ],
675        },
676   
677        {
678        "name":"FWF_LAL29", 
679        "productType":"FWF",
680        "commentary": "Matching Iso T, LAL = 2",
681        "comboFlag": 1,
682        "orderStrings": 1,
683        "checkStrings": ["TODAY", "SCATTERED SHOWERS AND ISOLATED THUNDERSTORMS",
684             "LAL.................3", "TONIGHT"],
685        "createGrids" : [
686           ("Fcst", "LAL", "SCALAR", 0, 12,  3, ["area3"], 1),
687           ("Fcst", "LAL", "SCALAR", 0, 12,  4, ["area3_pt"], 1),
688           ("Fcst", "PoP", "SCALAR", 0, 12, 30, "all", 1),
689           ("Fcst", "Wx", "WEATHER", 0, 12,
690            "Sct:RW:-:<NoVis>:^Iso:T:<NoInten>:<NoVis>:", ["area3"]),
691         ],
692        },
693   
694        
695        {
696        "name":"FWF_LAL30", 
697        "productType":"FWF", 
698        "commentary": "LAL (4,5), PoP (50,30), (Sct TRW-,Num TRW-)",
699        "comboFlag": 1,
700        "orderStrings": 1,
701        "checkStrings": ["TODAY", "SCATTERED SHOWERS AND THUNDERSTORMS",
702             "LAL.................4", "TONIGHT"],
703        "createGrids" : [
704           ("Fcst", "LAL", "SCALAR", 0, 12,  4, ["area3"], 1),
705           ("Fcst", "LAL", "SCALAR", 0, 12,  5, ["area3_pt"], 1),
706           ("Fcst", "PoP", "SCALAR", 0, 12, 50, ["area3"], 1),
707           ("Fcst", "PoP", "SCALAR", 0, 12, 30, ["area3_pt"], 1),
708           ("Fcst", "Wx", "WEATHER", 0, 12,
709            "Sct:T:<NoInten>:<NoVis>:^Sct:RW:-:<NoVis>:", ["area3"]),
710           ("Fcst", "Wx", "WEATHER", 0, 12,
711            "Num:T:<NoInten>:<NoVis>:^Num:RW:-:<NoVis>:", ["area3_pt"]),
712         ],
713        },
714        
715        {
716        "name":"FWF_LAL31", 
717        "productType":"FWF", 
718        "commentary": "LAL (4,6), PoP (50,20), (Chc TRW-,Chc TRW- Dry)",
719        "comboFlag": 1,
720        "orderStrings": 1,
721        "checkStrings": ["TODAY", "CHANCE OF THUNDERSTORMS",
722             "LAL.................4", "TONIGHT"],
723        "createGrids" : [
724           ("Fcst", "LAL", "SCALAR", 0, 12,  4, ["area3"], 1),
725           ("Fcst", "LAL", "SCALAR", 0, 12,  6, ["area3_pt"], 1),
726           ("Fcst", "PoP", "SCALAR", 0, 12, 50, ["area3"], 1),
727           ("Fcst", "PoP", "SCALAR", 0, 12, 20, ["area3_pt"], 1),
728           ("Fcst", "Wx", "WEATHER", 0, 12,"Chc:T:<NoInten>:<NoVis>:", ["area3"]),
729           ("Fcst", "Wx", "WEATHER", 0, 12,"Chc:T:<NoInten>:<NoVis>:Dry", ["area3_pt"]),
730         ],
731        },
732        
733        #### editAreaSuffix
734        {
735        "name":"EditAreaSuffix1", 
736        "productType":"ZFP",
737        "commentary": "PoP 0%, Sky (0,75), (WS.W,None)",
738        "comboFlag": 1,
739         # checkStrings
740        "checkStrings": [
741           "WINTER STORM WARNING",
742           ".TODAY...", "MOSTLY CLOUDY",
743           ".TONIGHT...",
744          ],  
745        "orderStrings": 1,
746         # createGrids
747        "createGrids" : [      
748           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
749           ("Fcst", "Sky", "SCALAR", 0, 12,  0, ["area3"]),
750           ("Fcst", "Sky", "SCALAR", 0, 12,  75, ["area3_pt"]),
751           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "WS.W", ["area3"]),
752           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "<None>", ["area3_pt"]),
753         ],     
754        "fileChanges": [("ZFP_<site>_Definition", "TextUtility", "add",
755               "\nDefinition['editAreaSuffix'] = '_pt'\n", "delete")],
756        "gridsStartTime": "6am Local",
757        "drtTime": "4am Local",
758         },
759   
760        {  # Tests for TK4577
761        "name":"EditAreaSuffix2", 
762        "productType":"ZFP",
763        "commentary": "Set up editAreaSuffix via commandline (tk4577)",
764        "cmdLineVars" :"{('Product Issuance', 'productIssuance'): 'Morning', ('Issued By', 'issuedBy'): None, 'editAreaSuffix':'_pt'}",
765        "comboFlag": 1,
766         # checkStrings
767        "checkStrings": [
768           "WINTER STORM WARNING",
769           ".TODAY...", "MOSTLY CLOUDY",
770           ".TONIGHT...",
771          ],  
772        "orderStrings": 1,
773         # createGrids
774        "createGrids" : [      
775           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
776           ("Fcst", "Sky", "SCALAR", 0, 12,  0, ["area3"]),
777           ("Fcst", "Sky", "SCALAR", 0, 12,  75, ["area3_pt"]),
778           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "WS.W", ["area3"]),
779           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "<None>", ["area3_pt"]),
780         ],     
781        "gridsStartTime": "6am Local",
782        "drtTime": "4am Local",
783         },
784        {  # Tests for TK4577
785        "name":"EditAreaSuffix3", 
786        "productType":"ZFP",
787        "commentary": "Set up editAreaSuffix via commandline (tk4577)",
788        "cmdLineVars" :"{('Product Issuance', 'productIssuance'): 'Morning', ('Issued By', 'issuedBy'): None, ('Enter Edit Area Suffix if desired:', 'editAreaSuffix'):'_pt'}",
789        "comboFlag": 1,
790         # checkStrings
791        "checkStrings": [
792           "WINTER STORM WARNING",
793           ".TODAY...", "MOSTLY CLOUDY",
794           ".TONIGHT...",
795          ],  
796        "orderStrings": 1,
797         # createGrids
798        "createGrids" : [      
799           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
800           ("Fcst", "Sky", "SCALAR", 0, 12,  0, ["area3"]),
801           ("Fcst", "Sky", "SCALAR", 0, 12,  75, ["area3_pt"]),
802           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "WS.W", ["area3"]),
803           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "<None>", ["area3_pt"]),
804         ],     
805        "gridsStartTime": "6am Local",
806        "drtTime": "4am Local",
807         },
808   
809         # TK 4674
810         {
811        "name":"EditAreaSuffix4", 
812        "productType":"ZFP",
813        "commentary": """
814             Edit Areas Suffix with Local Hazard using hazard_hook (tk4674)
815             """,
816        "comboFlag": 1,
817        "checkStrings": [
818           ".LOCAL HAZARD IN EFFECT UNTIL 6 PM EST THIS AFTERNOON IN THE MOUNTAINS",
819           ".TODAY...", "MOSTLY CLOUDY",
820           ".TONIGHT...",
821          ],  
822        "orderStrings": 1,
823        "createGrids" : [      
824           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
825           ("Fcst", "Sky", "SCALAR", 0, 12,  0, ["area3"]),
826           ("Fcst", "Sky", "SCALAR", 0, 12,  75, ["area3_pt"]),
827           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "LocalHazard1", ["area3"]),
828           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "<None>", ["area3_pt"]),
829         ],     
830        "fileChanges": [
831            ("ZFP_<site>_Definition", "TextUtility", "add",
832            "\nDefinition['editAreaSuffix'] = '_pt'\n", "delete"),
833            ("ZFP_<site>_Overrides", "TextUtility", "add", localHazard, "undo"),
834            ("ZFP_<site>_Overrides", "TextUtility", "add", hazardHook, "undo"),
835            ],
836        "gridsStartTime": "6am Local",
837        "drtTime": "4am Local",
838         },
839         
840        {
841        "name":"EditAreaSuffix5", 
842        "productType":"ZFP",
843        "commentary": """
844             Edit Areas Suffix with Local Hazard calling "getLocalHeadlinesTiming"
845             instead of using hard-coded phrasing for local headlines
846             """,
847        "comboFlag": 1,
848        "checkStrings": [
849           "...LOCAL HAZARD IN EFFECT THROUGH THIS AFTERNOON...",
850           ".TODAY...", "MOSTLY CLOUDY",
851           ".TONIGHT...",
852          ],  
853        "orderStrings": 1,
854        "createGrids" : [      
855           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
856           ("Fcst", "Sky", "SCALAR", 0, 12,  0, ["area3"]),
857           ("Fcst", "Sky", "SCALAR", 0, 12,  75, ["area3_pt"]),
858           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "LocalHazard1", ["area3"]),
859           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "<None>", ["area3_pt"]),
860         ],     
861        "fileChanges": [
862            ("ZFP_<site>_Definition", "TextUtility", "add",
863            "\nDefinition['editAreaSuffix'] = '_pt'\n", "undo"),
864            ("ZFP_<site>_Overrides", "TextUtility", "add", localHazard, "undo"),
865            ("ZFP_<site>_Overrides", "TextUtility", "add", localHeadlinesTiming1, "undo"),
866            ],
867        "gridsStartTime": "6am Local",
868        "drtTime": "4am Local",
869         },
870        {
871        "name":"EditAreaSuffix6", 
872        "productType":"ZFP",
873        "commentary": """
874             Edit Areas Suffix with Local Hazard using methods for headinesTiming
875             """,
876        "comboFlag": 1,
877        "checkStrings": [
878           "...LOCAL HAZARD IN EFFECT THROUGH THIS AFTERNOON...",
879           ".TODAY...", "MOSTLY CLOUDY",
880           ".TONIGHT...",
881          ],  
882        "orderStrings": 1,
883        "createGrids" : [      
884           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
885           ("Fcst", "Sky", "SCALAR", 0, 12,  0, ["area3"]),
886           ("Fcst", "Sky", "SCALAR", 0, 12,  75, ["area3_pt"]),
887           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "LocalHazard1", ["area3"]),
888           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "<None>", ["area3_pt"]),
889         ],     
890        "fileChanges": [
891            ("ZFP_<site>_Definition", "TextUtility", "add",
892            "\nDefinition['editAreaSuffix'] = '_pt'\n", "undo"),
893            ("ZFP_<site>_Overrides", "TextUtility", "add", localHazard, "undo"),
894            ("ZFP_<site>_Overrides", "TextUtility", "add", localHeadlinesTiming2, "undo"),
895            ],
896        "gridsStartTime": "6am Local",
897        "drtTime": "4am Local",
898         },
899   
900   
901   
902        # Allow lower case TK 4669 
903        {
904        "name":"LowerCaseHeadlines", 
905        "productType":"ZFP",
906        "commentary": """
907             Lower case with Local Hazard
908             """,
909        "comboFlag": 1,
910         # checkStrings
911        "checkStrings": [
912           "...Local Hazard in effect through this afternoon...",
913           ".Today...", "Mostly cloudy. Patchy dense fog.",
914           "Ice accumulation around 2 inches. Highs in the upper 70s.",
915           "Near steady temperature in the mid 50s.",
916           ".Tonight...", "Very windy.", "Widespread thunderstorms.",
917           "Lows around 60.", "Near steady temperature in the mid 40s.",
918           ],  
919        "orderStrings": 1,
920        "createGrids" : CreateGrids.Public_createGrids + [      
921           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
922           ("Fcst", "Sky", "SCALAR", 0, 12,  0, ["area3"]),
923           ("Fcst", "Sky", "SCALAR", 0, 12,  75, ["area3_pt"]),
924           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "LocalHazard1", ["area3"]),
925           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "<None>", ["area3_pt"]),
926         ],     
927        "fileChanges": [
928            ("ZFP_<site>_Definition", "TextUtility", "add",
929            "\nDefinition['editAreaSuffix'] = '_pt'\n", "delete"),
930            ("ZFP_<site>_Definition", "TextUtility", "add",
931            "\nDefinition['lowerCase'] = 1\n", "undo"),
932            ("ZFP_<site>_Overrides", "TextUtility", "add", localHazard, "undo"),
933            ("ZFP_<site>_Overrides", "TextUtility", "add", localHeadlinesTiming1, "undo"),
934            ],
935        "gridsStartTime": "6am Local",
936        "drtTime": "4am Local",
937         },
938        {
939        "name":"LowerCaseHazards", 
940        "productType":"ZFP",
941        "commentary": """
942             Lower Case with a Hazard
943             """,
944        "comboFlag": 1,
945         # checkStrings
946        "checkStrings": [
947           "...Winter Storm Warning in effect until 6 PM EST this afternoon...",
948           ".Today...", "Mostly cloudy. Patchy dense fog.",
949           "Ice accumulation around 2 inches. Highs in the upper 70s.",
950           "Near steady temperature in the mid 50s.",
951           ".Tonight...", "Very windy.", "Widespread thunderstorms.",
952           "Lows around 60.", "Near steady temperature in the mid 40s.",
953          ],  
954        "orderStrings": 1,
955         # createGrids
956        "createGrids" : CreateGrids.Public_createGrids + [      
957           ("Fcst", "PoP", "SCALAR", 0, 12,  0, "all"),
958           ("Fcst", "Sky", "SCALAR", 0, 12,  0, "all"),
959           ("Fcst", "Sky", "SCALAR", 0, 12,  75, "all"),
960           ("Fcst", "Hazards", "DISCRETE", 0, 12,  "WS.W", "all"),
961         ],     
962        "fileChanges": [
963            ("ZFP_<site>_Definition", "TextUtility", "add",
964            "\nDefinition['lowerCase'] = 1\n", "delete"),
965            ],
966        "gridsStartTime": "6am Local",
967        "drtTime": "4am Local",
968         },
969         
970         ## Humidity Recovery Local Effect
971         {
972         "name":"FWF_HumRecLE1",
973         "commentary": "Testing Humidity Recovery Local Effect: No Local Effect",
974         "productType":"FWF",
975         "comboFlag": 1,
976         "orderStrings": 1,
977         "checkStrings": ["HUMIDITY RECOVERY...POOR"],
978         "createGrids": [
979           ("Fcst", "MaxRH", "SCALAR", "MaxRHBegin-24", "MaxRHEnd-24", 10, ["Valleys"], 1),
980           ("Fcst", "MaxRH", "SCALAR", "MaxRHBegin-24", "MaxRHEnd-24", 10, ["Ridges"], 1),
981           ("Fcst", "MaxRH", "SCA16LAR", "MaxRHBegin", "MaxRHEnd", 20, ["Valleys"], 1),
982           ("Fcst", "MaxRH", "SCALAR", "MaxRHBegin", "MaxRHEnd", 20, ["Ridges"], 1),
983           ],
984           "fileChanges": [("FWF_<site>_Overrides", "TextUtility", "add", humRec, "delete")],
985          },
986   
987         ## Humidity Recovery Local Effect
988         {
989         "name":"FWF_HumRecLE2",
990         "commentary": "Testing Humidity Recovery Local Effect: Local Effect",
991         "productType":"FWF",
992         "comboFlag": 1,
993         "orderStrings": 1,
994         "checkStrings": ["HUMIDITY RECOVERY...POOR...EXCEPT EXCELLENT ON THE RIDGES."],
995         "createGrids": [
996           ("Fcst", "MaxRH", "SCALAR", "MaxRHBegin-24", "MaxRHEnd-24", 10, ["Valleys"], 1),
997           ("Fcst", "MaxRH", "SCALAR", "MaxRHBegin-24", "MaxRHEnd-24", 10, ["Ridges"], 1),
998           ("Fcst", "MaxRH", "SCALAR", "MaxRHBegin", "MaxRHEnd", 10, ["Valleys"], 1),
999           ("Fcst", "MaxRH", "SCALAR", "MaxRHBegin", "MaxRHEnd", 75, ["Ridges"], 1),
1000          ],
1001          "fileChanges": [("FWF_<site>_Overrides", "TextUtility", "add", humRec, "delete")],
1002         },
1003         
1004  
1005         {    
1006         "name":"General_CleanUp",
1007         "commentary": "Clean out grids",
1008         "productType": None,
1009         "deleteGrids": TestScript.general_deleteGrids,
1010         "gridsStartTime": "6am Local",
1011         },
1012  
1013       ]     
1014  
1015  
1016   import TestScript
1017   def testScript(self, dataMgr):
1018       defaults = {
1019           "cmdLineVars" :"{('Product Issuance', 'productIssuance'): 'Morning', ('Issued By', 'issuedBy'): None}",
1020           }
1021       # Necessary to do drt for scripts 
1022       # that start the product with current time
1023       time_4am = self.getAbsFromLocal(2010, 1, 1, 4, 0)
1024       time_6am = self.getAbsFromLocal(2010, 1, 1, 6, 0)
1025       for script in scripts:
1026           if script.get("gridsStartTime", None) == "6am Local":
1027               script["gridsStartTime"] = time_6am
1028           if script.get("drtTime", None) == "4am Local":
1029               script["drtTime"] = time_6am
1030       return TestScript.generalTestScript(self, dataMgr, scripts, defaults)
1031  
1032