Version1

parents
la aplicacion para completar el banco de prueba para la caracterizacion del crudo esta escrita bajo el lenguaje de programacion
PYTHON, lo que requiere que en la computadora donde se va a ajecutar dicha aplicacion tenga instalado el Python 2.7 o superior
ademas de unos modulos o librerias necesarias para que la aplicacion se ejecute sin ningun problema :
* Pandas: Librería de python destinada al análisis de datos, que proporciona unas estructuras de datos flexibles y que permiten el manejo de estos
datos de forma muy eficiente.
* Numpy: Es el encargado de añadir toda la capacidad matemática y vectorial a Python haciendo posible operar con cualquier dato numérico o array.
Incorpora operaciones tan básicas como la suma o la multiplicación u otras mucho más complejas como la transformada de Fourier o el álgebra
lineal.
* WxPython: Es una suite de librerías de interfaces gráficas para Python, nos permite el diseño de la interfaz amigable de la aplicacion para que el
usuario pueda interactuar con el sistema sin complejidad.
* csv: Normalmente el lenguaje Python ya tiene preinstalado el módulo denominado csv. este modulo permite leer y escribir archivos en estos formatos;
y provee, también, varias funciones y clases para verificar la integridad de la información, analizar o crear dialectos, comprobar si los datos
tienen un encabezamiento, etc.
ya verificado que se tiene el programa Python y los modulos instalados en la Pc, se puede ejecutar la aplicacion mediante el terminal de la PC, ubicando
en la carpeta donde esta guardado el archivo "p3_2_1.py" luego se escribe el comando "python p3_2_1.py" lo que le indica al Python que ejecute el script solicitado. con esto ya se debe mostrar en pantalla la interfaz de la aplicacion.
la aplicacion para completar el banco de prueba para la caracterizacion del crudo esta escrita bajo el lenguaje de programacion
PYTHON, lo que requiere que en la computadora donde se va a ajecutar dicha aplicacion tenga instalado el Python 2.7 o superior
ademas de unos modulos o librerias necesarias para que la aplicacion se ejecute sin ningun problema :
* Pandas: Librería de python destinada al análisis de datos, que proporciona unas estructuras de datos flexibles y que permiten el manejo de estos
datos de forma muy eficiente.
* Numpy: Es el encargado de añadir toda la capacidad matemática y vectorial a Python haciendo posible operar con cualquier dato numérico o array.
Incorpora operaciones tan básicas como la suma o la multiplicación u otras mucho más complejas como la transformada de Fourier o el álgebra
lineal.
* WxPython: Es una suite de librerías de interfaces gráficas para Python, nos permite el diseño de la interfaz amigable de la aplicacion para que el
usuario pueda interactuar con el sistema sin complejidad.
* csv: Normalmente el lenguaje Python ya tiene preinstalado el módulo denominado csv. este modulo permite leer y escribir archivos en estos formatos;
y provee, también, varias funciones y clases para verificar la integridad de la información, analizar o crear dialectos, comprobar si los datos
tienen un encabezamiento, etc.
ya verificado que se tiene el programa Python y los modulos instalados en la Pc, se puede ejecutar la aplicacion mediante el terminal de la PC, ubicando
en la carpeta donde esta guardado el archivo "p3_2_1.py" luego se escribe el comando "python p3_2_1.py" lo que le indica al Python que ejecute el script
solicitado. con esto ya se debe mostrar en pantalla la interfaz de la aplicacion.
# -*- coding: utf-8 -*-
import wx
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
from mpl_toolkits.mplot3d import axes3d
import matplotlib.animation as animation
import time
import csv
class lectorDatos:
def __init__(self,nombreArchivo):
#''' Cargado de los datos a graficar '''
self.datos=pd.read_csv(nombreArchivo,header=None,delim_whitespace=False)
global dT, Mi, Ni, longX, longY, NMed
#'''separa los parametros'''
dT=self.datos.ix[0,0] #intervalo de tiempo
Mi=int(self.datos.ix[0,1]) #intervalo eje x
Ni=int(self.datos.ix[0,2]) #intervalo eje y
longX=self.datos.ix[0,3] #ancho
longY=self.datos.ix[0,4] #largo
NMed=int(self.datos.ix[0,5]) #numero mediciones
'''separa las coordenadas y las arregla en tuplas'''
coordX=self.datos.ix[1,:]
coordY=self.datos.ix[2,:]
tama=Ni*Mi
self.coord=np.append(coordX.values.reshape(1,tama), coordY.values.reshape(1,tama),axis=0)
'''carga las mediciones solicitadas'''
tmpmat=[]
#print self.tmprtrs
for Ti in range(0,CantMed):
datosTem=self.datos.ix[Ti+3,:]
if Ti==0:
tmpmat=datosTem.values.reshape(1,tama)
else:
tmpmat=np.append(tmpmat,datosTem.values.reshape(1,tama),axis=0)
self.tmprtrs=tmpmat
print self.tmprtrs
######################## PROCESA DATOS
class procesaDatos:
def __init__(self):
self.datVisc=tmprtrs1*0.0
for mu in range(0,CantMed):
self.datVisc[mu,:]=6000*(0.95)**(tmprtrs1[mu,:])
linea1=self.datVisc[mu,:]
self.archiva(linea1)
'''Define metodo de guardar en archivo visc'''
def archiva(self,salida):
linea=salida.reshape(1,salida.size) #reorganiza la matriz a guardar en una sola linea
with open('viscosidades.visc', 'ab') as archivo: #abre archivo
writer = csv.writer(archivo) #llama la funcion de escritura csv
writer.writerows(linea) #escribe la linea
archivo.close() #cierra el archivo
###################### ANIMACION
class animaDatos:
def __init__(self,matrisDatos):
maxim=np.amax(matrisDatos,axis=None)
# Crea las mayas de X y Y.
xs = np.linspace(0, longX, 50)
ys = np.linspace(0, longY, 60)
gridX, gridY = np.meshgrid(xs, ys)
for ites in range(0,5):
ax = fig.add_subplot(111, projection='3d')
# Establece los limites del eje z para que no los recalcule en cada imagen.
ax.set_zlim(0, int(maxim))
# Inicializa el grafico.
wframe = None
tstart = time.time()
for mt in range(1,CantMed):
# Dibuja solo si ya esta removida la anterior.
if wframe:
ax.collections.remove(wframe)
# grafica y hace pausa.
datGraf=matrisDatos[mt,:]
gridZ = griddata(coords, datGraf, (gridX,gridY), method='cubic')
wframe = ax.plot_wireframe(gridX, gridY, gridZ, rstride=2, cstride=2)
plt.pause(1)
plt.clf()
#print('Average FPS: %f' % (100 / (time.time() - tstart)))
class Ventana1(wx.Frame):
def __init__(self,parent,title):
wx.Frame.__init__(self,parent=parent,title=title,size=(1400,690))
panel=wx.Panel(self)
#global dT, Mi, Ni, longX, longY, NMed
global nombre_archivo
self.dirname=''
# CREAR LA BARRA DE MENU
#Crear Barra de Menu
barramenu=wx.MenuBar()
#Menu Archivo
menuarchivo=wx.Menu()
m_abrir=menuarchivo.Append(wx.ID_OPEN,"Abrir")
#m_guardar=menuarchivo.Append(-1,"Guardar")
m_importar=menuarchivo.Append(wx.ID_OPEN,"Importar")
#Menu Acerca de
menuacerca=wx.Menu()
m_acerca=menuacerca.Append(wx.ID_ABOUT,"Acerca de la aplicación")
m_guia=menuacerca.Append(wx.ID_ABOUT,"Guia Rapida")
#Menu Salir
menusalir=wx.Menu()
m_salir=menusalir.Append(wx.ID_EXIT,"Salir")
barramenu.Append(menuarchivo,"Archivo")
barramenu.Append(menuacerca,"Ayuda")
barramenu.Append(menusalir,"Salir")
self.SetMenuBar(barramenu)
#Eventos
self.Bind(wx.EVT_MENU, self.OnOpen, m_abrir)
self.Bind(wx.EVT_MENU, self.OnExit, m_salir)
self.Bind(wx.EVT_MENU, self.OnAbout, m_acerca)
self.Bind(wx.EVT_MENU, self.OnAbout1, m_guia)
wx.StaticText(panel, label = "Intervalo de Tiempo", pos = (10,10))
self.Ti = wx.TextCtrl ( panel, value = str(dT), style = wx.TE_READONLY | wx.TE_CENTER ,size = (80,80),pos=(40,5))
wx.StaticText(panel, label = "Eje X", pos = (200,10))
self.Tx = wx.TextCtrl ( panel, value = str(Mi), style = wx.TE_READONLY | wx.TE_CENTER ,size = (80,80),pos=(180,5))
wx.StaticText(panel, label = "eje Y", pos = (340,10))
self.Ty = wx.TextCtrl ( panel, value = str(Ni), style = wx.TE_READONLY | wx.TE_CENTER ,size = (80,80),pos=(320,5))
wx.StaticText(panel, label = "Ancho X", pos = (470,10))
self.Ta = wx.TextCtrl ( panel, value = str(longX), style = wx.TE_READONLY | wx.TE_CENTER ,size = (80,80),pos=(460,5))
wx.StaticText(panel, label = "Largo Y", pos = (610,10))
self.Tl = wx.TextCtrl ( panel, value = str(longY), style = wx.TE_READONLY | wx.TE_CENTER ,size = (80,80),pos=(600,5))
wx.StaticText(panel, label = "Tiempos", pos = (750,10))
self.Tt = wx.TextCtrl ( panel, value = str(NMed), style = wx.TE_READONLY | wx.TE_CENTER ,size = (80,80),pos=(740,5))
np.set_printoptions(formatter={'float': '{0: 2.4f}'.format})
wx.StaticText(panel, label = "Coordenadas X e Y", pos = (75,70))
self.control1 = wx.TextCtrl ( panel, value = str(coords) , style = wx.TE_READONLY | wx.TE_MULTILINE,size = (210,520),pos=(40,100))
wx.StaticText(panel, label = "Valores", pos = (480,70))
self.control2 = wx.TextCtrl ( panel, value = str(tmprtrs1) , style = wx.TE_READONLY | wx.TE_MULTILINE,size = (500,460),pos=(280,100))
wx.StaticText(panel, label = "Viscosidad", pos = (1030,70))
self.control3 = wx.TextCtrl ( panel, value = str("Se deben procesar los datos") , style = wx.TE_READONLY | wx.TE_MULTILINE,size = (500,460),pos=(820,100))
b_graficaV=wx.Button(panel,label="Grafica\n Viscosidad",pos=(790,570),size=(110,60))
self.Bind(wx.EVT_BUTTON, self.graficaV,b_graficaV)
b_grafica=wx.Button(panel,label="Grafica\n Temperatura",pos=(340,570),size=(110,60))
self.Bind(wx.EVT_BUTTON, self.grafica,b_grafica)
b_procesar=wx.Button(panel,label="Calcular\n Viscosidad",pos=(640,570),size=(110,60))
self.Bind(wx.EVT_BUTTON, self.procesa,b_procesar)
b_animarT=wx.Button(panel,label="Animacion\n Temperatura",pos=(490,570),size=(110,60))
self.Bind(wx.EVT_BUTTON, self.aTemp,b_animarT)
b_animarV=wx.Button(panel,label="Animacion\n Viscosidad",pos=(940,570),size=(110,60))
self.Bind(wx.EVT_BUTTON, self.aVisc,b_animarV)
b_animarV.Disable()
b_graficaV.Disable()
self.Centre(True)
self.Show()
def graficaV(self,event):
grafDatos(viscosidad,medTem)
def aVisc(self,event):
animaDatos(viscosidad)
def aTemp(self,event):
animaDatos(tmprtrs1)
def procesa(self,event):
global viscosidad
vis1=procesaDatos()
viscosidad=vis1.datVisc
self.control3.SetValue(str(viscosidad))
b_animarV.Enable()
b_graficaV.Enable()
def grafica(self,event):
grafDatos(tmprtrs1,medTem)
#mensaje acerca de...
def OnAbout(self,e):
# Create a message dialog box
dlg = wx.MessageDialog(self, " Un Software realizado por el\n"
" Colectivo TELECOMUNICACIONES \n"
" \n \n HACKATON POR LA PATRIA", wx.OK)
dlg.ShowModal() # Shows it
dlg.Destroy() # finally destroy it when finished.
def OnExit(self,e):
self.Close(True) # Close the frame.
def OnOpen(self,e):
""" Open a file"""
dlg = wx.FileDialog(self, "Abrir documento", self.dirname, "","*.visc", wx.FD_OPEN)
if dlg.ShowModal() == wx.ID_OK:
self.filename = dlg.GetFilename()
self.dirname = dlg.GetDirectory()
f = open(os.path.join(self.dirname, self.filename), 'r')
self.control.SetValue(f.read())
f.close()
dlg.Destroy()
def OnAbout1(self,e):
# Create a message dialog box
dlg = wx.MessageDialog(self, " GUÍA RAPIDA\n"
" Colectivo TELECOMUNICACIONES \n"
" \n \n HACKATON POR LA PATRIA", wx.OK)
dlg.ShowModal() # Shows it
dlg.Destroy() # finally destroy it when finished.
################################# GRAFICA DATOS
class grafDatos:
def __init__(self,matrisDatos,mt):
''' Construye la superficie sin valores '''
gridX, gridY = np.mgrid[0:longX:50j,0:longY:60j]
datGraf=matrisDatos[medTem,:]
gridZ = griddata(coords, datGraf, (gridX,gridY), method='cubic')
plt.imshow(gridZ.T, extent=None, origin='lower')
plt.gcf().set_size_inches(6,6)
plt.show()
if __name__=='__main__':
app=wx.App()
''' inicializa todas las variables '''
dT=0.0
Mi=0
Ni=0
longX=0.0
longY=0.0
NMed=0
CantMed=5
medTem=1
fig = plt.figure()
med1=lectorDatos('temperaturas.csv')
tmprtrs1=med1.tmprtrs
coords=med1.coord.T
#grafDatos(tmprtrs1,medTem)
##vis1=procesaDatos()
##viscosidad=vis1.datVisc
#print viscosidad
#grafDatos(viscosidad,medTem)
##animaDatos(viscosidad)
frame=Ventana1(None,"Grafica")
app.MainLoop()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment