In [1]:
from wmf import wmf 
import numpy as np
import pylab as pl
import pandas as pd
import pickle
import datetime
from datetime import timedelta
%matplotlib inline
import matplotlib.pyplot as plt
import collections
import warnings
warnings.filterwarnings('ignore')
import scipy as scp
import os
import aforos as af
from IPython.display import IFrame
import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import xlsxwriter
import codecs
from multiprocessing import Pool
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.patches import PathPatch
import matplotlib.patches as patche
from IPython.core.display import HTML
css = open('style-table.css').read() + open('style-notebook.css').read()
HTML('<style>{}</style>'.format(css))
Out[1]:
In [2]:
mainfolder = 'Salidas_Redrio' # nombre de la carpeta principal
hora_inicial = '06:00' # hora de inicio de todas las campaƱas
hora_final = '18:00' # hora de finalización de todas las campañas
fechas = pd.to_datetime(['2017-02-22','2017-03-08','2017-03-09','2017-04-26','2017-06-21','2017-06-22'])
In [3]:
def aforo(codigo,DEM='dem_amva60',DIR='dir_amva60',aforo=1):
    '''runs aforos module
    Parameters
    ----------
    codigo: id in dbase
    salida: campain folder name
    DEM : dem name
    DIR : dir name
    aforo : flow measurement number or id
    -------
    Returns
        ------
        out: self
        sets module aforos up 
        '''
    self = af.aforos(codigo,aforo=int(aforo),
                    nombre = df_informacion.loc[codigo,'FolderName'])
    self.ruta_dem = '/media/nicolas/Home/nicolas/01_SIATA/raster/%s.tif'%DEM
    self.ruta_dir = '/media/nicolas/Home/nicolas/01_SIATA/raster/%s.tif'%DIR
    self.longitud = float(df_informacion.loc[codigo,'Longitud'])
    self.latitud = float(df_informacion.loc[codigo,'Latitud'])
    self.name = df_informacion.loc[codigo,'Nombre']
    self.municipio = df_informacion.loc[codigo,'Municipio']
    self.direccion = df_informacion.loc[codigo,'Direccion']
    self.barrio = df_informacion.loc[codigo,'Barrio']
    self.subcuenca = df_informacion.loc[codigo,'Subcuenca']
    return self

def runbyid(dfe_id):
    self = aforo(int(dfe.loc[dfe_id,'id_estacion_asociada']),aforo=dfe.loc[dfe_id,'aforo'])
    self.fecha = pd.to_datetime(dfe.loc[dfe_id,'fecha'])
    self.date = self.fecha.strftime('%Y-%m-%d %H:%M')
    return self
In [4]:
hora_inicial = '06:00'
hora_final = '18:00'
df_informacion = pd.read_csv('../information/info_redrio.csv',index_col=0)
#dfe = pd.read_csv('../information/salidas_21y22_junio.csv',index_col=0)
texto = ['% ----------------------------------------------',
         '% ---------------------TEXTO AQUƍ---------------',
         '% ----------------------------------------------']

Salida 21 de junio

In [5]:
fecha = pd.to_datetime('2017-06-21')
dfe = pd.read_csv('../information/20170621_dfe.csv',index_col=0)
nombre_salida = u'CampaƱa 21 de Junio'

lluvia

para la lluvia se usa la estación puente gabino

In [6]:
fecha = pd.to_datetime('2017-06-21')
self = aforo(1052)
self.fecha = fecha+datetime.timedelta(hours=18)
#self.get_rain()
self.simubasin(rute=True,show=False)
rain = self.plot_lluvia_aforo(ax2color='darkslategrey',
                  fecha=self.fecha.strftime('%Y-%m-%d')+' 18:00',
                  ruta='%s/%s_rain.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d')),
                  formato='png')
In [7]:
resumen = df_informacion.loc[dfe['id_estacion_asociada'].values].set_index('Nombre')
resumen['caudal_medio']= dfe['caudal_medio'].values
self.plot_resumen_flow(resumen['caudal_medio'],'%s/%s_flux.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d')))

Tiempo promedio

In [22]:
t = [4.01,3.02,3.05,3.02,2.43,2.51,2.53,2.54,2.75,2.79]
tm = np.mean(t)

Velocidad superficial

In [27]:
Vs = [0.9,0.9,0.8,0.9,0.9,0.8,0.9,0.9,0.8,0.7]
Vsm = np.mean(Vs)

Velocidad media

In [28]:
Vm = Vsm*0.8
In [34]:
h = 0.46
D = 0.38
Volumen = h*np.pi*D**2/4.
In [36]:
Caudal = Volumen/tm
In [37]:
Caudal
Out[37]:
0.018209175429498119

Para el cÔlculo se utilizó un recipiente en forma de paralelepípedo, con un diÔmetro de 0.38 [m], una altura de 0.46 [m], y una capacidad de 0.0522 [m^3]. El procedimiento consiste en registrar el tiempo que tarda el recipiente en ser llenado en varias ocaciones, hasta tener un estimado promedio de este. Los tiempos registrados se pueden observar en la \ref{fig:tvolumetrico}. El tiempo promedio obtenido es de 2.8655 [s]. El Caudal estimado es la razón entre el volumen del recipiente y el tiempo promedio estimado que tarda en llenarse, así $Q\ =\ 0.0522\ [m^3]/ 2.8655\ [s]\ =\ 0.0182\ [m^3/s]$. AdemÔs del cÔlculo del caudal, se estimó la velocidad media del flujo a partir de velocidades superficiales de este, estas se pueden observar en la figura \ref{fig:vvolumetrico}, la velocidad superficial promedio estimada fue de 0.85 [m/s], y se reportó una velocidad media de 0.68 [m/s] obtenida al multiplicar la velocidad superficial por 0.8. El ancho de la sección es de 0.55 m y la profundidad mÔxima del flujo tiene un valor de 15 [cm].

In [ ]:
 
In [24]:
self.plot_bars(pd.Series(t,index = range(1,11)),ylabel='Tiempo (s)')
Out[24]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7f1c43d390>
In [26]:
self.plot_bars(pd.Series(Vs,index = range(1,11)),ylabel='Velocidad superficial (m/s)')
Out[26]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f7eaecd0c50>
In [ ]:
 
In [ ]:
 
In [8]:
dfe
Out[8]:
id_estacion_asociada salida fecha Nombres caudal_medio velocidad_media area_total perimetro altura_media radio_hidraulico aforo aforo_especial
0 1065.0 21_junio 2017-06-21 08:25:00 M1 0.018200 0.680000 NaN NaN NaN NaN 1.0 1
1 1066.0 21_junio 2017-06-21 10:04:00 M2 0.074579 0.421462 0.176952 1.83909 0.092167 0.096218 1.0 0
2 1080.0 21_junio 2017-06-21 11:01:00 Q. La Negra 0.032134 0.208662 0.154000 1.27968 0.112857 0.120342 1.0 0
3 1067.0 21_junio 2017-06-21 11:12:00 M3 0.123576 0.160696 0.769000 4.54402 0.166083 0.169233 1.0 0
4 1068.0 21_junio 2017-06-21 12:27:00 M4 0.248475 0.365915 0.679050 2.87095 0.240100 0.236524 1.0 0
In [16]:
j=u'CampaƱa 21 de Junio'
k = '21_junio'
df = dfe
longitud = df_informacion.loc[df['id_estacion_asociada'].values]['Longitud'].values
latitud = df_informacion.loc[df['id_estacion_asociada'].values]['Latitud'].values

self.Plot_Mapa2(add_scatter=[longitud,latitud],\
                title = '%s'%j,\
                add_stations = map(lambda x:x.decode('utf-8'),df_informacion.loc[dfe['id_estacion_asociada']]['Nombre'].values),\
                georef=[6.3200,6.2980,-75.596, -75.555],\
                clim=[1000,2500],\
                fontsize=20,\
                Logo='SIATA2.png',\
                Basin='/media/nicolas/maso/Mario/shapes/basins/Q_La_Madera_1052/Q_La_Madera_1052',\
                Drainage = '/media/nicolas/maso/Mario/shapes/nets/Q_La_Madera_1052/Q_La_Madera_1052',
                decimales = 2,
                coord_format= "%.2f")
self.m.readshapefile('/media/nicolas/maso/Mario/shapes/streams/169/169','drenaje',
                     color=self.colores_siata[-3],
                     linewidth=3.0,zorder=40)

plt.savefig('%s/%s_map_campain.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d')),format='png',bbox_inches='tight')
Colombia
Antioquia

Tabla resultados

In [7]:
nombre_salida = 'CampaƱa 21 de Junio'
caption = 'ParƔmetros hidrƔulicos %s'%nombre_salida
columns = ['Caudal medio','Velocidad media','Ɓrea','Perƭmetro','Altura media','RƔdio hidrƔulico']
cellwidth = [30]+6*[70/6]
df_latex = dfe[['caudal_medio','velocidad_media','area_total','perimetro','altura_media','radio_hidraulico']]
df_latex.index = df_informacion.loc[dfe['id_estacion_asociada'].values]['Nombre'].values
tabla=self.latex_table_from_df(df_latex,caption,'tab:%s'%fecha.strftime('%Y%m%d'),columns,cellwidth,width=5.6)
In [8]:
def latex_hidrologia(self,caudal,ruta_fig,label):
        difiere = round(((caudal/self.caudales_historicos.median().values[0])-1.0)*100,3)
        plot_figure = []
        plot_figure.append('\\begin{multicols}{2}')
        plot_figure.append('La figura \\ref{%s} estÔ construida con datos de aforos históricos realizado sobre la misma sección, el recuadro superior es un histograma de frecuencias, mientras que el recuadro inferior es un resumen con los estadísticos mÔs importantes. En total se cuenta con %d aforos, el caudal observado difiere de la mediana histórica %.3f $[m^3/s]$ en un %.2f porciento.'%(label,self.caudales_historicos.index.size,self.caudales_historicos.median().values[0],difiere))                           
        plot_figure.append('{\\centering')
        plot_figure.append('\\includegraphics[width=5.0cm]{{%s}}'%(ruta_fig))
        plot_figure.append('\\captionof{figure}{\small Información de Aforos históricos %s}'%self.name)
        plot_figure.append('\\label{%s}'%label)
        plot_figure.append('}')
        plot_figure.append('\\end{multicols}')
        return plot_figure

    
def latex_results_table(self,label):
    self.alo = ['','\\ % ----------------------latex_results_table ---------------------------------------']
    #if self.aforo <> 1:
    self.alo.append('\\subsection{%s}'%self.name)
    self.alo.append('\\begin{table}[h!]')
    self.alo.append('\\caption{Resultados %s, Aforo %s}'%(self.name,self.date))
    self.alo.append('\\vspace{1.9mm}')
    self.alo.append('\\fontsize{10}{2} \\selectfont{')
    self.parametros = '\\scalebox{1.0}{\\begin{tabularx}{\\textwidth}{ p{1.4in} p{1.3in} p{1.7in} p{1.3in}}'
    self.alo.append(self.parametros)
    self.alo.append('\\rowcolor{CiceBlue2}')
    self.alo.append('\\multicolumn{4}{c}{\\textbf{\\textcolor{white}{RESULTADOS DEL AFORO}}}')
    self.alo.append('\\rule[-0.2cm]{0cm}{0.7cm}\\\\')
    self.campo = ['Caudal [$ m^{3} $]','Caudal S [$ m^{3}/s $]','Ɓrea [$ m^{2}$]',\
            'Ancho Superficial [$ m $]','Altura Media [$ m $] ' ,'Velocidad Media [$ m/s $]',\
            'Perƭmetro M [$ m $]','Radio HidrƔulico [$ m $]','Offset [$ m $]','Med-Nivel(UTH) [$ m $]']
    self.caudal = float(self.dfr.loc['caudal_medio','Resultado'])
    self.caudals = float(self.dfr.loc['caudal_superficial','Resultado'])
    self.area = float(self.dfr.loc['area_total','Resultado'])
    self.ancho = float(self.dfr.loc['ancho_superficial','Resultado'])
    self.altura = float(self.dfr.loc['altura_media','Resultado'])
    self.velm = float(self.dfr.loc['velocidad_media','Resultado'])
    self.perimetro =float(self.dfr.loc['perimetro','Resultado'])
    self.radio = float(self.dfr.loc['radio_hidraulico','Resultado'])
    self.alo.append('\\textbf{%s}'%self.campo[0]) 
    self.alo.append('& %.3f'%self.caudal)
    self.alo.append('& \\textbf{Dispositivo}')
    self.alo.append('& %s'%self.dispositivo)
    self.alo.append('\\rule[-0.1cm]{0cm}{0.5cm} \\\\ \\cline{1-4}')
    self.alo.append('\\textbf{%s}'%self.campo[2])
    self.alo.append('& %.3f'%self.area)
    self.alo.append('& \\textbf{%s}'%self.campo[3])
    self.alo.append('& %.3f'%self.ancho)
    self.alo.append('\\rule[-0.1cm]{0cm}{0.5cm} \\\\ \\cline{1-4}')
    self.alo.append('\\textbf{%s}'%self.campo[4])
    self.alo.append('& %.3f'%self.altura)
    self.alo.append('& \\textbf{%s}'%self.campo[5])
    self.alo.append('& %.3f'%self.velm)
    self.alo.append('\\rule[-0.1cm]{0cm}{0.5cm} \\\\ \\cline{1-4}')
    self.alo.append('\\textbf{%s}'%self.campo[6])
    self.alo.append('& %.3f'%self.perimetro)
    self.alo.append('& \\textbf{%s}'%self.campo[7])
    self.alo.append('& %.3f'%self.radio)
    self.alo.append('\\rule[-0.1cm]{0cm}{0.5cm} \\\\ \\cline{1-4}')
    self.alo.append('\\label{%s}'%(label))
    self.alo.append('\\end{tabularx}}}')
    self.alo.append('\\end{table}')
    self.alo.append('\\ %----------------------LABEL------------------')
    self.alo.append('\\ % -----Tabla '+'\\ref{%s}'%label)
    return self.alo

resultados = ['']
resultados.append('\\section{%s}'%nombre_salida)
    #--plot map_campain
resultados+=self.latex_figure(17,'%s/%s_map_campain.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d')),'Mapa %s'%nombre_salida,'fig:%smapcamp'%(fecha.strftime('%Y%m%d')))
resultados+=self.latex_figure(17,'%s/%s_rain.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d')),'Lluvia %s'%nombre_salida,'fig:%srain'%(fecha.strftime('%Y%m%d')))
resultados+=self.latex_figure(17,'%s/%s_flux.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d')),'Resultados %s'%nombre_salida,'fig:%sflux'%(fecha.strftime('%Y%m%d')))
resultados+=tabla

df = pd.DataFrame.copy(dfe)
for i in df.index:
    self = runbyid(i)
    if df.loc[i,'aforo_especial']==1:
        self.dispositivo = '-999'
        resultados+= ['\\subsection{%s}\\'%self.name]
        if int(df.loc[i,'id_estacion_asociada'])==1061:
            resultados+= self.latex_figure(17,'%s/curva_gabino.png'%(fecha.strftime('%Y%m%d')),
                                  'Caudales estimados a partir de curva de calibración',
                                  'fig:%scurva'%(fecha.strftime('%Y%m%d')))
            resultados += ['\\clearpage'] 
    else:
        self.get_resultados_mysql()
        self.dispositivo = self.dfr.loc['dispositivo','Resultado']
        self.plot_section(wet=self.verticales,
                    lev=self.levantamiento,
                    figsize=(12,4),
                    fontsize=18,
                    sepx=0.03,
                    sepy=0.01,
                    filepath='%s/%s_section_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre))
        resultados += latex_results_table(self,'tab:%s_hidroparam_%s'%(fecha.strftime('%Y%m%d'),self.nombre))
        lbl = '\\ref{tab:%s_hidroparam_%s}'%(fecha.strftime('%Y%m%d'),self.nombre)
        resultados+=['El aforo se realizó en la fecha %s, el caudal obtenido fue de %s $[m^3/s]$. La sección aforada tiene un ancho superficial que mide %s [m], la altura promedio de la lÔmina de agua es de %s [m], la altura mÔxima se ubica a %s [m] de la margen izquierda del canal con un valor de %s [m]. Para el cÔlculo de velocidades se utilizó el dispositivo %s, el valor medio de velocidad obtenido fue de %s $[m/s]$, y el mÔximo de %s $[m/s]$. La sumatoria de Ôreas en todas las verticales deja un Ôrea total de %s $[m^2]$. Los demÔs parÔmetros se pueden observar en la tabla %s.'%(self.fecha.strftime('%Y-%m-%d %H:%M'),round(self.dfr.loc['caudal_medio','Resultado'],3),round(self.dfr.loc['ancho_superficial','Resultado'],3),round(self.dfr.loc['altura_media','Resultado'],3),
        round(abs(self.verticales.set_index('x')['y'].argmin()),3),round(abs(self.verticales['y'].min()),3),self.dfr.loc['dispositivo','Resultado'],
        round(self.dfr.loc['velocidad_media','Resultado']),round(self.verticales['velocidad04'].max(),3),round(self.dfr.loc['area_total','Resultado'],3),lbl)]
        resultados += self.latex_section('%s/%s_section_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre),
                       'fig:%s_section_%s'%(fecha.strftime('%Y%m%d'),self.nombre))+texto
        resultados+=['\\clearpage']
        
    try:
        if int(df.loc[i,'id_estacion_asociada'])==1061:
            dfe.loc[i,'alturas'] = 0
        else:
            caudal = dfe.loc[i,'caudal_medio']
            df_alturas = pd.read_csv('../information/%s_heights.csv'%fecha.strftime('%Y%m%d'),index_col=0)
            df_alturas.columns = np.array(df_alturas.columns,int)
            caudales = self.get_flow_from_heights(caudal,self.codigo,df_alturas)
            self.plot_bars(caudales,rute='%s/%s_heights_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre),decimales=2)

            resultados+= self.latex_figure(17,'%s/%s_heights_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre),
                                      'Caudales estimados  %s %s'%(nombre_salida,self.name),
                                      'fig:%sheights_%s'%(fecha.strftime('%Y%m%d'),self.nombre))
            resultados+=['Partiendo del caudal estimado mediante el aforo y de datos de nivel de la lƔmina de agua medidos en campo durante la campaƱa, se estimaron los caudales horarios desde las 6:00 hasta las 18:00, el caudal promedio durante la campaƱa fue %.3f $[m^3/s]$. Los resultados se encuentran en la Figura \\ref{%s}.'%(caudales.mean(),'fig:%sheights_%s'%(fecha.strftime('%Y%m%d'),self.nombre))]
            dfe.loc[i,'alturas'] = 1
    except:
        dfe.loc[i,'alturas'] = 0
    try:
        self.plot_compara_historicos('%s/%s_hist_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre))
        if self.caudales_historicos.index.size == 1:
            pass
        else:
            resultados+=latex_hidrologia(self,dfe.loc[i,'caudal_medio'],'%s/%s_hist_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre),
                                    'fig:%shist%s'%(fecha.strftime('%Y%m%d'),self.nombre))
        dfe.loc[i,'historico'] = 1
    except:
        dfe.loc[i,'historico'] = 0
    
    if df_informacion.loc[self.codigo,'morfo']==1.0:
        self.simubasin(rute=True,show=False)
        rain = self.plot_lluvia_aforo(ax2color='darkslategrey',
                      fecha=self.fecha.strftime('%Y-%m-%d')+' 18:00',
                      ruta='%s/%s_rain_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre),
                      formato='png')
        
        resultados+= self.latex_figure(17,'%s/%s_rain_%s.png'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre),
                                  'Lluvia %s %s'%(nombre_salida,self.name),
                                  'fig:%srain_%s'%(fecha.strftime('%Y%m%d'),self.nombre))
        if max(self.accumulated_rain)>1.0:
            resultados+=['La mayor intensidad promedio de lluvia fue registrada en la cuenca en la fecha %s, con un valor de %.3f $[mm/h]$.'%(rain.argmax().strftime('%Y-%m-%d %H:%M'),rain.max())]
            resultados+=['La distribución de la lluvia en la cuenca se puede observar en el recuadro izquierdo de la Figura \\ref{%s}, donde se reportó un valor mÔximo de %.3f $[mm]$.'%('fig:%srain_%s'%(fecha.strftime('%Y%m%d'),self.nombre),max(self.accumulated_rain))]

    try:
        self.dfr = self.dfr.fillna(-999)
        self.verticales = self.verticales.fillna(-999)
        self.levantamiento = self.levantamiento.fillna(-999)
        self.data_to_excel('%s_data/%s_%s.xlsx'%(fecha.strftime('%Y%m%d'),fecha.strftime('%Y%m%d'),self.nombre))
        dfe.loc[i,'datatoexcel']=1
    except:
        dfe.loc[i,'datatoexcel']=0
np.savetxt('%s.tex'%fecha.strftime('%Y%m%d'),resultados, fmt='%s')
In [9]:
nombre_info = 'borrar0621'
includes = ['\\include{Portada}','\\setlength{\\headsep}{40pt}',\
            '\\tableofcontents',\
            '\\listoffigures',\
            '\\listoftables',\
            '\\include{introduccion}',\
            '\\chapter{Información de las estaciones aforadas}']+texto+\
            ['\\clearpage']

self.informe(includes+['\\include{20170621}'],\
             header_filepath='figuras/header.png',\
             header_text='Informe salidas modelación',\
             logo_filepath='figuras/logo.png',\
             cover_filepath = 'figuras/cover.png',\
             foot_filepath = 'figuras/foot.png',\
             nombre_info=nombre_info)

#self.informe(includes,ruta = '../figuras',nombre_info=nombre_info)
IFrame('%s_optimizado.pdf'%nombre_info, width=1000, height=1000)
Out[9]: