Exemple #1
0
 def __init__(self,linkid=None, path = None, ExtraParams = None, model_uid = 604,
     build_rvr = True):
     '''Depending on the linkid or in the path the class starts a table
     to set up a new project fro HLM model.
         - linkid = number of link id to search for in the database.
         - path =  path to search for a WMF.SimuBasin project .nc
         - ExtraParams: name of external params stored in the dataBase.
         - model_uid: the id of the model at the global.
         - build_rvr: if there is going to be an rvr or already exists.
     Optional:
         -ExtraParams: List with the names of the extra params extracted from the database'''
     #Type of model to be used 
     self.model_uid = model_uid
     #Make an action depending on each case.
     if build_rvr:
         if linkid is not None and path is None:
             self.Table = db.SQL_Get_WatershedFromMaster(linkid, ExtraParams)
             self.linkid = linkid
         elif path is not None and linkid is None:
             self.wmfBasin = wmf.SimuBasin(rute=path)
             self.wmfBasin.GetGeo_Cell_Basics()
             self.Table = cu.Transform_Basin2Asnych('/tmp/tmp.rvr',
                 lookup='/tmp/tmp.look',
                 prm='/tmp/tmp.prm')
         self.build_rvr = True
     else:
         self.build_rvr = False
Exemple #2
0
def Genera_riskvectorMap(rutaConfig, cuenca, figSZ):
    ''' Genera un mapa en .png con el risk_vector, esta funcion no es de uso operacional.
        Por lo que necesita leer directamente el ConfigFile.'''
    #Lee el archivo de configuracion
    ListConfig = get_rutesList(rutaConfig)
    #Lectura de rutas de salida de la imagen
    ruta_out = get_ruta(ListConfig, 'ruta_map_riskvector')

    #Lectura de cuenca
    cu = wmf.SimuBasin(rute=cuenca, SimSlides=True)
    wmf.models.slide_allocate(cu.ncells, 10)
    #Mapa risk vector.
    R = wmf.models.sl_riskvector  #np.copy(wmf.models.sl_riskvector)
    #Plot
    cu.Plot_basinClean(R,
                       figsize=(figSZ[0], figSZ[1]),
                       cmap=pl.get_cmap('viridis', 3),
                       ruta=ruta_out)
Exemple #3
0
                    help="Escribe archivo con coordenadas",
                    default=False,
                    type=bool)
parser.add_argument("-r",
                    "--record",
                    help="Record de lectura en el binario para graficar",
                    default=1,
                    type=int)

#lee todos los argumentos
args = parser.parse_args()

#-------------------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------------------
#Lectura de cuenc ay variables
cu = wmf.SimuBasin(rute=args.cuenca)
v, r = wmf.models.read_float_basin_ncol(args.storage, args.record, cu.ncells,
                                        5)
#lectura de constantes
qmed = cu.Load_BasinVar('qmed')
horton = cu.Load_BasinVar('horton')
cauce = cu.Load_BasinVar('cauce')

#-------------------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------------------
#Configura rutas
if args.ruta.endswith('.png'):
    ruta_texto = args.ruta[:-4] + '.txt'
    ruta_plot = args.ruta
else:
    ruta_texto = args.ruta + '.txt'
wmf.models.show_storage = 1
wmf.models.separate_fluxes = 1
wmf.models.dt = 300
#Set para deslizamientos
wmf.models.sl_fs = 0.5
wmf.models.sim_slides = 1
#Variables de caudales y lluvia en simulacion
Caudales = {}
Rain = wmf.read_mean_rain(args.rutaCampo[:-4] + '.hdr')
#Ejecucion del modelo
for k in Proyectos:
    # Se fija que el proyecto tenga calibracion
    if Proyectos[k]['calibValues'] <> None:
        #Si si, comienza a cargar las cosas para la ejecuicion
        if args.rutaSlides <> None:
            cu = wmf.SimuBasin(rute=Proyectos[k]['cuenca'], SimSlides=True)
        else:
            cu = wmf.SimuBasin(rute=Proyectos[k]['cuenca'], SimSlides=False)
        Caudales.update({k: {}})
        posControl = wmf.models.control[wmf.models.control <> 0]
        MapSlides = []
        DictSlides = {}
        #Itera para cada almacenamiento
        for k2 in Proyectos[k]['calibValues'].keys():
            #Obtiene la calibracion
            Calib = Proyectos[k]['calibValues'][k2]
            #Obtiene el almacenamiento
            try:
                #Mira si hay almacenamiento para esa calibracion
                p = Proyectos[k]['storeFile'].keys().index(k2)
                # obtiene las rutas del binario y del encabezado de almacenamiento
ListaFin = [i for i in Lista if i.startswith(FechaStart)]
Fechas = [
    dt.datetime.strptime(i[:12], '%Y%m%d%H%M') +
    dt.timedelta(minutes=int(i[-7:-4])) for i in ListaFin
]
Fechas = [i - dt.timedelta(hours=5) for i in Fechas]
#Obtiene el punto de inicio para que las imagenes sean chevres
Diferencias = [i - fecha for i in Fechas]
Segundos = np.array([i.seconds for i in Diferencias])
pos = np.argmin(Segundos)

#------------------------------------------------------------------------------
#LEE Y DETERMINA FECHAS DE ARCHIVOS CORRESPONDINTES
#------------------------------------------------------------------------------
#inicia la variable de radar y la variable cuenca
cuAMVA = wmf.SimuBasin(rute=args.cuenca)
rad = radar.radar_process()
Lprop = radar.RadProp
Lprop.insert(4, Lprop[-2])

#Trabaja sobre la lista para adicionar campos
rvec = {'media': [], 'baja': [], 'alta': []}
for c, l in enumerate(ListaFin[pos:pos + 12]):
    #convierte imagen de radar en lluvia
    rad.read_bin(args.ruta + l)
    rad.detect_clouds(umbral=500)
    rad.ref = rad.ref * rad.binario
    rad.DBZ2Rain()
    for k in ['media', 'baja', 'alta']:
        rv = cuAMVA.Transform_Map2Basin(rad.ppt[k] / 12.0, Lprop)
        rvec[k].append(rv)
    "Ruta donde se guarda el pickle con el diccionario con las propiedades geomorfologicas de los tramos"
)
parser.add_argument(
    "-u",
    "--umbral",
    help="Umbral para la generacion de red hidrica en la cuenca",
    type=float,
    default=30)

#lee todos los argumentos
args = parser.parse_args()

#-----------------------------------------------------------------------------------------------------
#Carga la cuenca
#-----------------------------------------------------------------------------------------------------
cu = wmf.SimuBasin(0, 0, 0, 0, rute=args.cuencaNC)
#Carga los nodos
nodos = wmf.models.control[wmf.models.control <> 0]
posicion = np.where(wmf.models.control <> 0)[1]
#Obtiene parametros en los demas lugares (nodos)
x, y = wmf.cu.basin_coordxy(cu.structure, cu.ncells)
DictParam = {}
for pos, nodo in zip(posicion, nodos):
    #Calcula la cuenca y param
    cu2 = wmf.Basin(x[pos], y[pos], cu.DEM, cu.DIR, umbral=args.umbral)
    cu2.GetGeo_Parameters(GetPerim=False)
    #Guarda los parametros
    DictParam.update({str(nodo): {'Geo': cu2.GeoParameters, 'Tc': cu2.Tc}})

print 'Tiempos de concentracion calculados'
Exemple #7
0
print '\n'
print '###################################### Fecha de Ejecucion: ' + dateText + ' #############################\n'

#Lee el archivo de configuracion
ruta_configuracion_1 = '/media/nicolas/Home/Jupyter/Soraya/git/Alarmas/03_modelo/Op_AMVA60m/configfile.md'
RutasList = al.get_rutesList(ruta_configuracion_1)

# Lee rutas de objetos de entrada
ruta_cuenca = al.get_ruta(RutasList, 'ruta_cuenca')
ruta_campos = al.get_ruta(RutasList, 'ruta_campos')
# Lee rutas de salida - lluvia radar
ruta_out_rain = al.get_ruta(RutasList, 'ruta_rain')
ruta_out_rain_png = al.get_ruta(RutasList, 'ruta_rain_png')

############################################## Se carga la cuenca ########################################################
cuenca = wmf.SimuBasin(rute=ruta_cuenca, SimSlides=True)
##########################################################################################################################

#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

print '###################################### CONSULTA DE LA LLUVIA Y EXTRAPOLACION ############################\n'

#-------------------------------------------------------------------
#GENERA EL CAMPO DE LLUVIA DE LOS ULTIMOS 10MIN Y LOS PROXIMOS 60
#-------------------------------------------------------------------
# Obtiene el datetime
fecha_1 = date + dt.timedelta(hours=5) - dt.timedelta(minutes=10)
fecha_2 = date + dt.timedelta(hours=5) + dt.timedelta(minutes=60)
# Lo convierte en texto
fecha1 = fecha_1.strftime('%Y-%m-%d')
Exemple #8
0
def Graph_AcumRain(fechaI,
                   fechaF,
                   cuenca,
                   rutaRain,
                   rutaFigura,
                   vmin=0,
                   vmax=100,
                   verbose=True):
    ''' Si hay lluvia en el periodo definido devuelve 1 si no 0.
	Grafica si figure=True.
	Siempre se debe poner la ruta de la figura.
	##Falta poner ventanas mas grandes de pronostico de lluvia ya que el calentamiento con las par y CI actuales se toma unos 25 pasos.'''

    #Se lee la informacion
    rutebin, rutehdr = wmf.__Add_hdr_bin_2route__(rutaRain)
    cu = wmf.SimuBasin(rute=cuenca)
    DictRain = wmf.read_rain_struct(rutehdr)
    R = DictRain[u' Record']

    #Se cuadran las fechas para que casen con las de los archivos de radar.

    #Se obtienen las fechas con minutos en 00 o 05.
    ####FechaF######
    #Obtiene las fechas por dias
    fecha_f = pd.to_datetime(fechaF)
    fecha_f = fecha_f - pd.Timedelta(str(fecha_f.second) + ' seconds')
    fecha_f = fecha_f - pd.Timedelta(str(fecha_f.microsecond) + ' microsecond')
    #corrige las fechas
    cont = 0
    while fecha_f.minute % 5 <> 0 and cont < 10:
        fecha_f = fecha_f - pd.Timedelta('1 minutes')
        cont += 1

    ####FechaI######
    #Obtiene las fechas por dias
    fecha_i = pd.to_datetime(fechaI)
    fecha_i = fecha_i - pd.Timedelta(str(fecha_f.second) + ' seconds')
    fecha_i = fecha_i - pd.Timedelta(str(fecha_f.microsecond) + ' microsecond')
    #corrige las fechas
    cont = 0
    while fecha_i.minute % 5 <> 0 and cont < 10:
        fecha_i = fecha_i - pd.Timedelta('1 minutes')
        cont += 1

    #Evalua que las fechas solicitadas existan, si no para aqui y no se grafica nada - if solo sirve para ensayos.. operacionalmente no debe hacer nada.
    try:
        lol = R[fecha_i:fecha_f]

        #Ensaya si las fechas solicitadas cuentan con campo de radar en el binario historico, si no escoge la fecha anterior a esa. Este debe existir tambien, lo ideal es que se mantenga el dt, existan campos cada 5 min.
        ####FechaF######
        Flag = True
        cont = 0
        while Flag:
            try:
                lol = R.index.get_loc(fecha_f)
                Flag = False
            except:
                print 'Aviso: no existe campo de lluvia para fecha_f en la serie entregada, se intenta buscar el de 5 min antes'
                fecha_f = fecha_f - pd.Timedelta('5 minutes')
            cont += 1
            if cont > 1:
                Flag = False
        ####FechaI######
        Flag = True
        cont = 0
        while Flag:
            try:
                lol = R.index.get_loc(fecha_i)
                Flag = False
            except:
                print 'Aviso: no existe campo de lluvia para fecha_i en la serie entregada, se intenta buscar el de 5 min antes'
                fecha_i = fecha_i - pd.Timedelta('5 minutes')
            cont += 1
            if cont > 1:
                Flag = False

        #Escoge pos de campos con lluvia dentro del periodo solicitado.
        pos = R[fecha_i:fecha_f].values
        pos = pos[pos <> 1]

        #~ #imprime el tamano de lo que esta haciendo
        #~ if verbose:
        #~ print fecha_f - fecha_i

        #si hay barridos para graficar
        if len(pos) > 0:
            #-------
            #Grafica
            #-------
            #Textos para la legenda
            #~ lab = np.linspace(vmin, vmax, 4)
            #~ texto = ['Bajo', 'Medio', 'Alto', 'Muy alto']
            #~ labText = ['%dmm\n%s'%(i,j) for i,j in zip(lab, texto)]
            #Acumula la lluvia para el periodo
            Vsum = np.zeros(cu.ncells)
            for i in pos:
                v, r = wmf.models.read_int_basin(rutebin, i, cu.ncells)
                v = v.astype(float)
                v = v / 1000.0
                Vsum += v
            #Genera la figura
            c = cu.Plot_basinClean(
                Vsum,
                cmap=pl.get_cmap('viridis', 10),
                vmin=vmin,
                vmax=vmax,  #~ show_cbar=True,
                #~ cbar_ticksize = 16,
                #~ cbar_ticks= lab,
                #~ cbar_ticklabels = labText,
                #~ cbar_aspect = 17,
                ruta=rutaFigura,
                figsize=(10, 12),
                show=False)
            c[1].set_title('Mapa Lluvia de Radar Acumulada', fontsize=16)
            if verbose:
                print 'Aviso: Se ha producido una grafica nueva con valores diferentes de cero para ' + rutaFigura[
                    49:-4]
                print fecha_f - fecha_i
            return 1

        #si no hay barridos
        else:
            #-------
            #Grafica
            #-------
            Vsum = np.zeros(cu.ncells)
            c = cu.Plot_basinClean(
                Vsum,
                cmap=pl.get_cmap('viridis', 10),
                vmin=vmin,
                vmax=vmax,  #show_cbar=True,
                #~ cbar_ticksize = 16,
                #~ cbar_ticks= lab,
                #~ cbar_ticklabels = labText,
                #~ cbar_aspect = 17,
                ruta=rutaFigura,
                figsize=(10, 12),
                show=False)
            #~ c[1].set_title('Mapa Lluvia de Radar Acumulada', fontsize=16)
            if verbose:
                print 'Aviso: Se ha producido un campo sin lluvia  para ' + rutaFigura[
                    49:-4]
                print fecha_f - fecha_i
            return 0
    except:
        #si no lo logra que no haga nada.
        print 'Aviso: no se puede construir una serie porque las fechas solicitada no existen, no se genera png de acumulado ' + str(
            fecha_f - fecha_i)
        pass
Exemple #9
0
PosDates = []
pos1 = [0]
for d1,d2 in zip(datesDt[:-1],datesDt[1:]):
        pos2 = np.where((datesDias<d2) & (datesDias>=d1))[0].tolist()
        if len(pos2) == 0:
                pos2 = pos1
        else:
                pos1 = pos2
        PosDates.append(pos2)


#-------------------------------------------------------------------------------------------------------------------------------------
#CARGADO DE LA CUENCA SOBRE LA CUAL SE REALIZA EL TRABAJO DE OBTENER CAMPOS
#-------------------------------------------------------------------------------------------------------------------------------------
#Carga la cuenca del AMVA
cuAMVA = wmf.SimuBasin(rute = args.cuenca)
cuConv = wmf.SimuBasin(rute = args.cuenca)
cuStra = wmf.SimuBasin(rute = args.cuenca)
cuHigh = wmf.SimuBasin(rute = args.cuenca)
cuLow = wmf.SimuBasin(rute = args.cuenca)

#si el binario el viejo, establece las variables para actualizar
if args.old:
    cuAMVA.rain_radar2basin_from_array(status='old',ruta_out= args.rutaRes)
    if args.save_class:
		cuAMVA.rain_radar2basin_from_array(status='old',ruta_out= args.rutaRes + '_conv')
		cuAMVA.rain_radar2basin_from_array(status='old',ruta_out= args.rutaRes + '_stra')
    if args.save_escenarios:
		cuHigh.rain_radar2basin_from_array(status='old',ruta_out= args.rutaRes + '_high')
		cuLow.rain_radar2basin_from_array(status='old',ruta_out= args.rutaRes + '_low')
#Itera sobre las fechas para actualizar el binario de campos
Exemple #10
0
                    "--coord",
                    help="Escribe archivo con coordenadas",
                    default=False,
                    type=bool)
parser.add_argument("-v",
                    "--verbose",
                    help="Informa sobre la fecha que esta agregando",
                    action='store_true')

#lee todos los argumentos
args = parser.parse_args()

#-------------------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------------------------------
#Lectura de cuenca y variables
cu = wmf.SimuBasin(rute=args.cuenca, SimSlides=True)
wmf.models.slide_allocate(cu.ncells, 10)
#Se marcan con 1 las celdas incondicionalmente inestables.
R = np.copy(wmf.models.sl_riskvector)
R1 = np.zeros(cu.ncells)
pos_ever = np.where(R == 2)[1]
R1[pos_ever] = 1

#Lee el archivo de configuracion
ListConfig = al.get_rutesList(args.rutaConfig)
#Se define ruta donde se leeran los resultados a plotear
ruta_in = al.get_ruta(ListConfig, 'ruta_slides')
#Lectura de rutas de salida de la imagen
ruta_out = al.get_ruta(ListConfig, 'ruta_map_slides')
#Diccionario con info de plot: se lee la info de todos los parametrizaciones
ListPlotVar = al.get_modelConfig_lines(ListConfig,
Exemple #11
0
def plot_acum_radar():

    #DEFINICION DE COSAS
    rutafig = '/media/nicolas/Home/Jupyter/Soraya/Op_Alarmas/Result_to_web/operacional/acum_radar/'
    selfN = cprv1.Nivel(codigo=260,
                        user='******',
                        passwd='s@mple_p@ss',
                        SimuBasin=True)
    codigos = selfN.infost.index[:]
    #setting the est indexes and order.
    pos_1st = [51, 36, 37, 40, 54, 64]
    codigos = np.delete(codigos, pos_1st)
    codigos = np.insert(codigos, 0, 260)
    #time windows
    windows_t = ['30m_ahead', '10m', '5m', '3h']  #,'6h','24h','3d']

    #PLOTS
    for window_t in windows_t[:2]:
        print window_t
        if window_t == '30m_ahead':
            start = pd.to_datetime('2019-05-09 22:00')
            #             start= fs.round_time(dt.datetime.now())
            end = start + pd.Timedelta('30m')
        else:
            end = pd.to_datetime('2019-05-09 22:00')
            #             end = fs.round_time(dt.datetime.now())
            start = end - pd.Timedelta(window_t)

        path_basins = '/media/nicolas/maso/Mario/basins/'

        #acumulado para la cuenca mas grande
        path_radtif = '/media/nicolas/maso/Soraya/op_files/radar/tifs/260-' + window_t + '.tif'
        dfAll, rvec = fs.get_radar_rain(
            start,
            end,
            300.,
            path_basins + '%s.nc' % (260),
            codigos,
            accum=True,
            path_tif=
            path_radtif,  #+start.strftime('%Y%m%d%H%M')+'_'+start.strftime('%Y%m%d%H%M')+'.tif',
            meanrain_ALL=True)
        dfAll.to_csv(rutafig + window_t + '/dfAcum' + window_t + '.csv')

        #plots
        for codigo in codigos[0:]:
            if '%s.nc' % (codigo) in os.listdir(path_basins):
                cu = wmf.SimuBasin(rute=path_basins + '%s.nc' % (codigo))
                a, b = wmf.read_map_raster(path_radtif)
                vec_rain = cu.Transform_Map2Basin(a, b)
                #Plot
                fig = pl.figure(figsize=(10, 12))
                ax = fig.add_subplot(111)
                if window_t == '30m_ahead':
                    fs.plot_basin_rain(cu,
                                       vec_rain,
                                       codigo,
                                       window_t='30m',
                                       ax=ax,
                                       cbar=True)
                else:
                    fs.plot_basin_rain(cu,
                                       vec_rain,
                                       codigo,
                                       window_t='30m',
                                       ax=ax,
                                       cbar=True)
                ax.set_title('Est. ' + str(codigo) + ' | ' +
                             selfN.infost.loc[codigo].nombre + '\n' +
                             pd.to_datetime(start).strftime('%Y%m%d%H%M') +
                             '-' + pd.to_datetime(end).strftime('%Y%m%d%H%M'))
                pl.savefig(rutafig + window_t + '/' +
                           selfN.infost.loc[codigo].slug + '.png',
                           bbox_inches='tight')