-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexperimento.py
94 lines (89 loc) · 3.28 KB
/
experimento.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
'''
quiero hacer una clase que tenga metodos utiles para mediciones
metodos
pasarle un directorio y que me devuelva archivos
# archivos = med.dir("directorio")
# pasarle un archivo y que devuelva array
# array = med.arr(archivo)
# que ese array sea de instancias de la clase variables
# asociarle errores
# necesito que cada variable de una medicion exista por si misma
# X.error(error)
# grficarlo
# experimento
# medicion
# variables, array
# '''
import matplotlib.pyplot as plt
from uncertainties import unumpy as un
import numpy as np
import os
class experimento():
"una clase para agilizar la carga de datos de labo"
def __init__(self, dire, claves=[]):
if os.path.isabs(dire):
self.absdire = dire
else:
self.absdire = os.path.abspath(dire)
self.archivos = sorted(os.listdir(self.absdire))
if claves!=[]:
self.archivos = [i for i in self.archivos if all(clave in i for clave in claves)]
else:
pass
def cargar(self,archivo):
arch = os.path.join(self.absdire, archivo)
return np.loadtxt(arch, delimiter=';', unpack = True, comments='$')
@staticmethod
def titular(archivo):
return archivo.split('.')[0].replace('_',' ')
@staticmethod
def set_e(var:np.ndarray, error:float) -> np.ndarray:
error = np.ones(np.shape(var))*error
var = un.uarray(var, error)
return var
@staticmethod
def get_e(var:np.ndarray):
assert var.ndim == 1
return un.std_devs(var)
@staticmethod
def get_v(var:np.ndarray):
assert var.ndim == 1
return un.nominal_values(var)
def plotear(self,x, var, fill=True, alpha=0.5, label=None, orden=None):
xvals = self.get_v(x)
xerr = self.get_e(x)
varvals = self.get_v(var)
varerr = self.get_e(var)
plt.plot(xvals, varvals, '.', label=label)
if fill:
varmenos = varvals - varerr
varmas = varvals + varerr
plt.fill_between(xvals, varmenos, varmas, alpha=alpha)
else:
plt.errorbar(xvals, varvals, xerr=xerr, yerr=varerr, fmt='.')
if orden:
try:
z,cov = np.polyfit(xvals, varvals, orden, w=varerr, cov=True)
except ValueError:
z,cov = np.polyfit(xvals, varvals, orden, cov=True)
zerr = np.sqrt(cov[0,0] * np.sqrt(len(varvals)))
polinomio = np.poly1d(z)
h = np.linspace(min(xvals),max(xvals),100)
plt.plot(h,polinomio(h),'--r',label=f'({z[0]:.3f} +- {zerr:.3f})')
if label:
plt.legend(loc='upper left', framealpha=1)
def ver_todas(self, orden=None, amnt=0):
for archivo in self.archivos[amnt:]:
i, x, *vars = self.cargar(archivo)
for var in vars:
# plt.ion()
print(f'ploteando {archivo}')
self.plotear(x, var, orden=orden)
plt.title(self.titular(archivo))
# plt.ioff()
plt.show()
if __name__ == '__main__':
termo = experimento("/home/marco/Documents/fac/labo4/termometria/diados/tempsposta/")
termo.get_archivos(claves=["temp",'csv'])
termo.ver_todas()
# x, y, z = termo.cargar(termo.archivos[0])