Source code for streng.phd.analyses.input_motions.db_classes

"""
.. uml::

    @startmindmap
    * db_classes
    ** Accellerogram
    ** RecordDescription
    @endmindmap
"""

import io
import zlib
import numpy as np

# from sqlalchemy import create_engine
# from sqlalchemy import orm
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, Column, Integer, String, Date, MetaData, Float, ForeignKey, BLOB

Base = declarative_base()


[docs]class Accellerogram(Base): """ .. uml:: class Accellerogram { .. tablename .. accellerograms .. attributes - columns .. + accellerogram_id (String): + record_id (String): + dt (Float): + accellerations_compressed (BLOB): .. properties .. + accelerations() .. staticmethods .. + compress_accellerations(accelerations) } """ __tablename__ = 'accellerogram' accellerogram_id = Column(String, primary_key=True) record_id = Column(String) dt = Column(Float) accellerations_compressed = Column(BLOB) def __init__(self, accellerogram_id, record_id, dt, accellerations_compressed): self.accellerogram_id = accellerogram_id self.record_id = record_id self.dt = dt self.accellerations_compressed = accellerations_compressed @property def accellerations(self): """ Returns: numpy array: decompresses accelleration values """ return np.load(io.BytesIO(zlib.decompress(self.accellerations_compressed)))
[docs] @staticmethod def compress_accellerations(accellerations): """ gets a numpy array with all accelleration values and returns it compressed to store in the sqlite database Args: accellerations (numpy array): accellerogram values Returns: a zlib compressed object """ f = io.BytesIO() np.save(f, accellerations) comp = zlib.compress(f.getvalue()) return comp
def __repr__(self): return f'{self.symbol}: hey'
[docs]class RecordDescription(Base): """ .. uml:: class RecordDescription { .. attributes - columns .. + record_id: String + date: Date + latitude: Float + longitude: Float + magnitude: Float + epicentral_distance: Float + ground_ec8: String } """ __tablename__ = 'records_descriptions' record_id = Column(String, primary_key=True) date = Column(Date) latitude = Column(Float) longitude = Column(Float) magnitude = Column(Float) epicentral_distance = Column(Float) ground_ec8 = Column(String)