[pyar] De Mathlab a Python

Luis Andraschnik luis.andraschnik en gmail.com
Jue Feb 1 12:23:01 ART 2018


Se ve que no hay comentarios en el archvo porque genero un error así que
agregué un manejo de excepción.:
import struct
import numpy as np
import matplotlib.pyplot as plt
#Cargar el espectro infrarrojo en formato .SPA de Nicolet
#Basado en Kurt Oldenburg - 06/28/16

#Utilidades
nonzeros = lambda x: x.strip(b'\x00').decode()

with open('Polystyr.spa', 'rb') as file_spa:
    #Titles
    file_spa.seek(30)
    titles = nonzeros(file_spa.read(255))
    print('Titles: ', titles)

    #Sample points
    file_spa.seek(564)
    num_data_points = struct.unpack('i', file_spa.read(4))[0]
    print('Datos: ', num_data_points)

    # Max y Min wavenumbers
    file_spa.seek(576)
    max_wavenumber = struct.unpack('f', file_spa.read(4))[0]
    print('Max wavenumber:', max_wavenumber)
    min_wavenumber = struct.unpack('f', file_spa.read(4))[0]
    print('Min wavenumber:', min_wavenumber)

    # Lecturas de absorbancia
    file_spa.seek(288)
    while struct.unpack('H', file_spa.read(2))[0] !=3:
        pass
    data_position=struct.unpack('H', file_spa.read(2))[0]
    file_spa.seek(data_position)
    ys = np.array([struct.unpack('f', file_spa.read(4))[0] for _ in
range(num_data_points)])
    print('Absorbancia: ', ys)

    #Comentarios
    file_spa.seek(288)
    try:
        while struct.unpack('H', file_spa.read(2))[0] != 4:
            pass
        comment_position=struct.unpack('H', file_spa.read(2))[0]
        comment_lenght = abs(comment_position - data_position)
        file_spa.seek(comment_position)
        print('Comments: ', nonzeros(file_spa.read(comment_lenght)))
    except struct.error:
        print('No comments!!')

    #Wavenumbers
    xs = np.linspace(max_wavenumber,min_wavenumber , num=num_data_points)
    print('Wavenumbers: ', xs)

    # Finalmente graficamos
    plt.xlim(max_wavenumber, min_wavenumber)
    plt.title(titles)
    plt.xlabel('Wavenumber $cm^{-1}$')
    plt.ylabel('Absorbancia')
    plt.plot(xs,ys)
    plt.show()

El 1 de febrero de 2018, 10:00, Luis Andraschnik <luis.andraschnik en gmail.com
> escribió:

> No lo puedo creer, bajé el mismo espectro y lo estoy parseando. Al final
> no es tan complicado como pensaba el codigo de matlab (fui a la página de
> mathworks para ver algunos significados de constantes 'bof', 'single', etc
> ) y estoy usando el módulo struct.
>
> Recién llegué al flag 3. Cuando termino posteo el código !
> Abrazo!
>
> El 1 de febrero de 2018, 1:27, Martín Gaitán <gaitan en gmail.com> escribió:
>
>> 2018-01-31 12:44 GMT-03:00 Luis Andraschnik <luis.andraschnik en gmail.com>:
>>
>>> Para Pablo, Matlab (sin h ...) es hasta dónde se un lenguaje de
>>> programación privativo orientado a matemática y su homólogo opensource es
>>> Octave. No está estandarizado y es bastante pedorro, aunque parece que
>>> tiene mucha difusión.
>>>
>>> Martín
>>>
>>> Es interesante poder hacerlo en puro Python (hace mucho que no hago algo
>>> en C) porque me sirve para entender como se lee un archivo binario y hay
>>> otros formatos que quiero descifrar.
>>>
>>> El archvo lo abro como binario y leo bytes?. Después los bytes se
>>> codifican como UTF-8 para convertirlos a caracteres? Uso Python3
>>>
>>>
>> Mirá, acá desculé algo
>> https://gist.github.com/mgaitan/53ea9f5ff47781f34c153c433474ea51
>>
>> Para hacerlo, compilé el spa2txt y probé qué me daba con el archivo de
>> data "POLYSTYR.SPA" que encontré acá
>> http://www.ftirsearch.com/Demo/demo_data.asp
>>
>> El código matlab, al final, dice capturar un comentario en un segmento
>> cuyo inicio está indicado por un flag "4", pero en el archivo de ejemplo no
>> lo encuentro (aunque si veo un bloque que parece de metadata en el binario
>> crudo). Fijate si vos podes encontrarlo.
>>
>> Abrazo y espero que te sirva.
>>
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20180201/b4b10588/attachment.html>


Más información sobre la lista de distribución pyar