From cc9fc1f1ca435bd147200302cd51fc4ee688665d Mon Sep 17 00:00:00 2001
From: Marco Frailis <marco.frailis@inaf.it>
Date: Sat, 13 Oct 2018 20:55:16 +0200
Subject: [PATCH] Cleaning database

---
 db.sqlite3        | Bin 163840 -> 180224 bytes
 imagedb/models.py |  41 ++++++++++++++++++++++++++++++++++++++---
 2 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/db.sqlite3 b/db.sqlite3
index a062c423e8ed260ffa4e6f634529fc1416eb9fb9..84a7f50e08912e8476c470186a338b42043db3fe 100644
GIT binary patch
delta 3279
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
RLlf6rlwbfU{}vSp002Xa%|ZYG

delta 2439
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
D7siN=

diff --git a/imagedb/models.py b/imagedb/models.py
index f338f91..a2a487e 100644
--- a/imagedb/models.py
+++ b/imagedb/models.py
@@ -46,7 +46,14 @@ class ImageType(CompositeField):
     choices=[(d,d) for d in IMAGE_SECOND_GROUP]
   )
   
-  
+
+class ImageStatistics(models.Model):
+  min = models.FloatField()
+  max = models.FloatField()
+  mean = models.FloatField()
+  stddev = models.FloatField()
+  median = models.FloatField()
+
   
 class ImageBaseFrame(models.Model):
   exposureTime = models.FloatField()
@@ -54,6 +61,12 @@ class ImageBaseFrame(models.Model):
   naxis1 = models.PositiveIntegerField()
   naxis2 = models.PositiveIntegerField()
   imageType = ImageType()
+  stats = models.OneToOneField(
+    ImageStatistics,
+    models.SET_NULL,
+    blank=True,
+    null=True,
+  )
   
   class Meta:
     abstract = True
@@ -67,12 +80,16 @@ class Instrument(models.Model):
 class Pointing(CompositeField):
   rightAscension = models.FloatField()
   declination = models.FloatField()
-  pointingAngle = models.FloatField()
+  orientation = models.FloatField()
 
 
 class ImageSpaceFrame(ImageBaseFrame):
   observationDateTime = models.DateTimeField()
-  instrument = models.ForeignKey(Instrument, on_delete=models.CASCADE)
+  observationId = models.PositiveIntegerField()
+  ditherNumber = models.PositiveSmallIntegerField()
+  instrument = models.ForeignKey(Instrument, 
+                                 on_delete=models.CASCADE,
+                                 related_name='+')
   commandedPointing = Pointing()
 
   class Meta:
@@ -161,6 +178,21 @@ NISP_GRISM_WHEEL = (
   'CLOSE'
 )
 
+
+class DataContainer(models.Model):
+  fileFormat = models.CharField(
+    max_length=10
+  )
+  formatIdentifier = models.CharField(
+    max_length=20
+  )
+  formatVersion = models.CharField(
+    max_length=20
+  )
+  url = models.URLField()  
+  
+  
+
 class NispRawFrame(ImageSpaceFrame):
   filterWheelPosition = models.CharField(
     max_length=10,
@@ -171,6 +203,9 @@ class NispRawFrame(ImageSpaceFrame):
     max_length=10,
     choices = [(d,d) for d in NISP_GRISM_WHEEL]
   )
+  frameFile = models.OneToOneField(DataContainer,
+                                   on_delete=models.CASCADE)
+  
 
 
 
-- 
GitLab