Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
rtsm.py 2.56 KiB
"""
In this file all the model regarding the real time station monitor output are collected
"""
from django.db import models
from django.contrib.postgres.fields import ArrayField
from .station import Station

from .fixed_types import STATION_TYPES

MODE_TO_COMPONENT  = {
    1: 'LBL',
    2: 'LBL',
    3: 'LBH',
    4: 'LBH',
    5: 'HBA',
    6: 'HBA',
    7: 'HBA'
}


class RTSMObservation(models.Model):
    observation_id = models.PositiveIntegerField(default=0)

    station = models.ForeignKey(Station, on_delete=models.SET_NULL, null=True)

    start_datetime = models.DateTimeField()
    end_datetime = models.DateTimeField()

    samples = models.IntegerField(default=None, null=True)


class RTSMError(models.Model):
    observation = models.ForeignKey(RTSMObservation, related_name='errors', on_delete=models.CASCADE)

    rcu = models.SmallIntegerField(default=None, null=True)
    mode = models.SmallIntegerField(default=None, null=True)

    error_type = models.CharField(max_length=50)
    start_frequency = models.FloatField(default=None, null=True)
    stop_frequency = models.FloatField(default=None, null=True)
    time = models.DateTimeField()

    def __str__(self):
        return self.__unicode__()

    def __repr__(self):
        return self.__unicode__()

    def __unicode__(self):
        return '%s - MODE %s, FROM %s MHz TO %s MHz RCU=(%s): %s' % (self.time,
                                                                     self.mode,
                                                                     self.start_frequency,
                                                                     self.stop_frequency,
                                                                     self.rcu,
                                                                     self.error_type,)


class RTSMErrorSummary(models.Model):
    observation = models.ForeignKey(RTSMObservation, related_name='errors_summary', on_delete=models.CASCADE)
    percentage = models.FloatField(default=None, null=True)
    rcu = models.SmallIntegerField(default=None, null=True)
    mode = models.SmallIntegerField(default=None, null=True)
    count = models.IntegerField(default=None, null=True)
    error_type = models.CharField(max_length=50)
    start_frequency = models.FloatField(default=None, null=True)
    stop_frequency = models.FloatField(default=None, null=True)


class RTSMSpectrum(models.Model):
    bad_spectrum = ArrayField(models.FloatField())
    average_spectrum = ArrayField(models.FloatField())
    rtsm_error = models.ForeignKey(RTSMError, related_name='spectra', on_delete=models.CASCADE)