-
Notifications
You must be signed in to change notification settings - Fork 1
/
tracking.py
119 lines (84 loc) · 4.07 KB
/
tracking.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = "Andres Giordano"
__version__ = "0.1"
__maintainer__ = "Andres Giordano"
__email__ = "[email protected]"
__status__ = "Produccion"
import os
os.environ['PYART_QUIET'] = 'True'
from tint.tracks import Cell_tracks
from tint.visualization import animate
from Procesador.RainbowRadar import RainbowRadar,dBZ
import Procesador.RainbowRadar
from os.path import basename,dirname
import codecs
import json
import argparse
from argparse import RawTextHelpFormatter
import re
import datetime
parser = argparse.ArgumentParser(description='Procesamiento de radares.', formatter_class=RawTextHelpFormatter)
parser.add_argument('-f', type=str, required=True,
help='Archivo que contiene una lista de volumenes a procesar. El tracking se generará en el orden'
' indicado por la lista.')
parser.add_argument('-m', type=str, choices=['anim','table'],default='table',
help='Modo de salida:\n'
' anim: guarda una animacion en formato mp4. No se permiten mas de 6 volumenes.\n'
' table: guarda la tabla de tracking en un archivo csv. DEFAULT')
parser.add_argument('-ele', metavar='--elevation', type=int, required=True,
help='Numero de elevación (sweep)')
parser.add_argument('-tparams', type=json.loads, required=True,
help='Parametros para el tracking. Ver `Cell_tracks.params` en `tint.tracks`. '
'Se espera un diccionario con clave:valor.\n'
'Ejemplo:\n'
' \'{"MIN_SIZE":50,"FIELD_THRESH":40}\' ')
parser.add_argument('-do', metavar='--dir-output', type=str,
help='Carpeta donde se almacenarán los resultados. Por defecto será la misma carpeta del primer archivo.')
parser.add_argument('-o', metavar='--suffix', type=str,
help='Sufijo del nombre del archivo de salida.')
parser.add_argument('-v', action='store_true',
help='Verbose')
args = vars(parser.parse_args())
auto_var_re = re.compile(r'\d+(\w+)[\.vol|\.azi]', re.IGNORECASE | re.UNICODE)
if __name__ == '__main__':
filenames = []
with codecs.open(args['f'], mode='r', encoding='utf-8') as in_f:
for l in in_f.readlines():
filenames.append(l.strip())
dir_output = args['do']
if dir_output is None:
dir_output = dirname(filenames[0]) + '/'
for ffile_name in filenames:
file_name = basename(ffile_name)
if file_name.endswith('.vol') or file_name.endswith('.azi'):
finds = auto_var_re.findall(file_name)
if Procesador.RainbowRadar.dBZ[0].upper() != finds[0].upper():
raise Exception('dBZ es la unica variable permitida, usted esta usando ' + finds[0])
else:
raise Exception('Formato de archivo no permitido '+file_name)
grid_gen = []
for file in filenames:
rr = RainbowRadar('', file, radarVariable=dBZ)
grid_gen.append(rr.getCartesianGrid())
# Instantiate tracks object and view parameter defaults
tracks_obj = Cell_tracks()
if args['tparams'] is not None:
tracks_obj.params.update(args['tparams'])
# Get tracks from grid generator
tracks_obj.get_tracks((g for g in grid_gen))
# Inspect tracks
if args['m'] == 'table':
if args['o'] is not None:
file_out = 'tracking_table_' + args['o'] + '.csv'
else:
file_out = 'tracking_table.csv'
tracks_obj.tracks.to_csv(file_out, sep=' ', decimal='.')
else:
if len(filenames) > 6:
raise Exception('No se permiten mas de 6 archivos para generar la animacion.')
else:
file_out = 'tracking_animation_'+datetime.date.today().strftime('%Y-%m-%d_%H:%M:%S')
if args['o'] is not None:
file_out = 'tracking_animation_' + args['o']+'_'+datetime.date.today().strftime('%Y-%m-%d %H:%M:%S')
animate(tracks_obj, grid_gen, file_out, style='full', alt=0, vmin=-30, vmax=70)