3 import sys, logging, collections
32 print>>sys.stderr,
"""ERROR: Format: rocoto-from-vitals.py [-n] /path/to/vitals-file1 [/path/to/vitals-file2 [...]]
33 -n = disable renumbering (do this for invests)
35 ERROR: Script requires at least one argument."""
38 logger=logging.getLogger(
'rocoto_from_vitals')
40 logger.info(
'Read input files: '+repr(args))
41 revital.readfiles(args,raise_all=
False)
43 logger.info(
'Renumber invests.')
46 logger.info(
'Not renumbering vitals. Just clean them up')
47 revital.clean_up_vitals()
51 storms=collections.defaultdict(set)
52 epsilon=to_timedelta(5)
53 six_hours=to_timedelta(6*3600)
56 storms[vit.longstormid].add(vit.when.strftime(
'%Y%m%d%H'))
57 basins[vit.longstormid]=vit.basin1.upper()
58 numbers[vit.longstormid]=vit.stnum
60 sortstorms=[ x
for x
in storms.iterkeys() ]
63 for storm
in sortstorms:
64 unsorted_cycles=storms[storm]
65 cycles=list(unsorted_cycles)
66 cycles = [ to_datetime(x)
for x
in cycles ]
72 sys.stderr.write(
"Skipping %02d%s\n"%(number,basin1))
75 sys.stdout.write(
'<!ENTITY %ssid "%02d%s">\n'%(storm,number,basin1))
76 sys.stdout.write(
'<!ENTITY %ssidlc "%02d%s">\n'
77 %(storm,number,basin1.lower()))
78 sys.stdout.write(
'<!ENTITY %scyc "'%(storm,))
81 sent=cycles[0]-six_hours
83 if to_datetime(cycle) > to_datetime(last)+six_hours+epsilon:
85 sys.stdout.write(
'<cycledef>%s00 %s00 06:00:00</cycledef> '
86 %(first.strftime(
'%Y%m%d%H'),
87 last.strftime(
'%Y%m%d%H')))
93 if sent+epsilon < last:
95 sys.stdout.write(
'<cycledef>%s00 %s00 06:00:00</cycledef> '
96 %(first.strftime(
'%Y%m%d%H'),
97 last.strftime(
'%Y%m%d%H')))
98 sys.stdout.write(
'">\n')
100 if __name__==
'__main__': main()
Contains setup(), which initializes the produtil package.
Defines the Revital class which manipulates tcvitals files.
def setup(ignore_hup=False, dbnalert_logger=None, jobname=None, cluster=None, send_dbn=None, thread_logger=False, thread_stack=2 **24, kwargs)
Initializes the produtil package.
Time manipulation and other numerical routines.
This class reads one or more tcvitals files and rewrites them as requested.