class Simulated(db.Model): """Model for transients that are simulated""" __tablename__ = "Simulated" id = db.Column(db.Integer, primary_key=True) x = db.Column(db.Float, nullable=False) y = db.Column(db.Float, nullable=False) app_mag = db.Column(db.Float, nullable=False) flux = db.Column(db.Float, nullable=False) image_id = db.Column(db.Integer, db.ForeignKey('Images.id')) image = db.relationship('Images', backref=db.backref('simulateds', order_by=id)) simage_id = db.Column(db.Integer, db.ForeignKey('SImages.id')) simage = db.relationship('SImages', backref=db.backref('simulateds', order_by=id)) scorrimage_id = db.Column(db.Integer, db.ForeignKey('SCorrImages.id')) scorrimage = db.relationship('SCorrImages', backref=db.backref('simulateds', order_by=id)) image_id_ois = db.Column(db.Integer, db.ForeignKey('ImagesOIS.id')) image_ois = db.relationship('ImagesOIS', backref=db.backref('simulateds', order_by=id)) image_id_hot = db.Column(db.Integer, db.ForeignKey('ImagesHOT.id')) image_hot = db.relationship('ImagesHOT', backref=db.backref('simulateds', order_by=id)) def __repr__(self): return str(self.id)
class PawprintXTile(db.Model): __tablename__ = "PawprintXTile" __table_args__ = ( db.UniqueConstraint('pawprint_id', 'tile_id', name='_pawprint_tile_uc'), ) statuses = db.Enum( "raw", "pending", "sync", name="pawprint_x_tile_statuses") id = db.Column(db.Integer, db.Sequence('pxt_id_seq'), primary_key=True) pawprint_id = db.Column( db.Integer, db.ForeignKey('Pawprint.id'), nullable=False) pawprint = db.relationship( "Pawprint", backref=db.backref("pxts")) tile_id = db.Column(db.Integer, db.ForeignKey('Tile.id'), nullable=False) tile = db.relationship("Tile", backref=db.backref("pxts")) status = db.Column(statuses, default="raw") def __repr__(self): string = "<PXT '{}: {}'>" return string.format(self.tile.name, self.pawprint.name)
class ClassificationXMasterSource(db.Model): __tablename__ = "ClassificationXMasterSource" __table_args__ = ( db.UniqueConstraint('classification_id', 'master_src_id', name='_classification_master_src_uc'), ) id = db.Column(db.Integer, db.Sequence('cxms_id_seq'), primary_key=True) classification_id = db.Column( db.Integer, db.ForeignKey('Classification.id'), nullable=False) classification = db.relationship( "Classification", backref=db.backref("cxms")) master_src_id = db.Column( db.Integer, db.ForeignKey('MasterSource.id'), nullable=False) master_src = db.relationship( "MasterSource", backref=db.backref("cxms")) extra_data = db.Column(db.JSONType) def __repr__(self): string = "<CXMS '{}: {}'>" return string.format(self.classification.name, str(self.master_src))
class Classification(db.Model): __tablename__ = "Classification" id = db.Column( db.Integer, db.Sequence('classification_id_seq'), primary_key=True) name = db.Column(db.String(255), nullable=False, unique=True) def __repr__(self): return "<Classification '{}'>".format(self.name)
class SampleModel(db.Model): __tablename__ = 'SampleModel' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=True, unique=True) def __eq__(self, obj): return (isinstance(obj, SampleModel) and obj.name == self.name and obj.id == self.id)
class Object(db.Model): """Model for galaxies observed""" __tablename__ = "Object" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(12), nullable=False) def __repr__(self): return self.name
class Stack(db.Model): __tablename__ = 'Stack' id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime(timezone=True)) modified_at = db.Column(db.DateTime(timezone=True)) path = db.Column(db.Text, nullable=True) def __repr__(self): return self.id
class Reference(db.Model): __tablename__ = 'Reference' id = db.Column(db.Integer, primary_key=True) path = db.Column(db.Text, nullable=True) ra = db.Column(db.Float, nullable=False) dec = db.Column(db.Float, nullable=False) FoV = db.Column(db.Float, nullable=False) def __repr__(self): return self.path
class MasterCal(db.Model): __tablename__ = 'MasterCal' id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime(timezone=True)) modified_at = db.Column(db.DateTime(timezone=True)) path = db.Column(db.Text, nullable=True) imagetype = db.Column(db.String(40), nullable=False) def __repr__(self): return self.id
class SUndetected(db.Model): __tablename__ = "SUndetected" id = db.Column(db.Integer, primary_key=True) simulated_id = db.Column(db.Integer, db.ForeignKey('Simulated.id')) simulated = db.relationship('Simulated', backref=db.backref('false_neg_s', order_by=id)) def __repr__(self): return str(self.id)
class BogusOIS(db.Model): __tablename__ = "BogusOIS" id = db.Column(db.Integer, primary_key=True) detected_id = db.Column(db.Integer, db.ForeignKey('DetectedOIS.id')) detected = db.relationship('DetectedOIS', backref=db.backref('true_neg_ois', order_by=id)) def __repr__(self): return str(self.id)
class State(db.Model): __tablename__ = 'State' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) folder = db.Column(db.Text, nullable=True) order = db.Column(db.Integer, nullable=False) is_error = db.Column(db.Boolean, nullable=False) def __repr__(self): return self.name
class SCorrBogus(db.Model): __tablename__ = "SCorrBogus" id = db.Column(db.Integer, primary_key=True) detected_id = db.Column(db.Integer, db.ForeignKey('SCorrDetected.id')) detected = db.relationship('SCorrDetected', backref=db.backref('true_neg_scorr', order_by=id)) def __repr__(self): return str(self.id)
class Observatory(db.Model): """Model for observatories. SQLAlchemy Model object. """ __tablename__ = 'Observatory' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) latitude = db.Column(db.Float, nullable=False) longitude = db.Column(db.Float, nullable=False) description = db.Column(db.Text, nullable=True) def __repr__(self): return self.name
class NewImages(db.Model): __tablename__ = "NewImages" id = db.Column(db.Integer, primary_key=True) path = db.Column(db.String(100), nullable=False) object_id = db.Column(db.Integer, db.ForeignKey('Object.id')) object = db.relationship('Object', backref=db.backref('newimage', order_by=id)) def __repr__(self): return self.path
class Combination(db.Model): __tablename__ = 'Combination' id = db.Column(db.Integer, primary_key=True) calfile_id = db.Column(db.Integer, db.ForeignKey('CalFile.id')) calfile = db.relationship("CalFile", backref=db.backref('combinations', order_by=id)) mastercal_id = db.Column(db.Integer, db.ForeignKey('MasterCal.id')) mastercal = db.relationship("MasterCal", backref=db.backref('combinations', order_by=id)) def __repr__(self): return self.id
class Campaign(db.Model): __tablename__ = 'Campaign' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) description = db.Column(db.Text, nullable=True) observatory_id = db.Column(db.Integer, db.ForeignKey('Observatory.id')) observatory = db.relationship("Observatory", backref=db.backref('campaigns', order_by=id)) ccd_id = db.Column(db.Integer, db.ForeignKey('CCD.id')) ccd = db.relationship("CCD", backref=db.backref('campaigns', order_by=id)) def __repr__(self): return self.name
class RealsHOT(db.Model): __tablename__ = "RealsHOT" id = db.Column(db.Integer, primary_key=True) detected_id = db.Column(db.Integer, db.ForeignKey('DetectedHOT.id')) detected = db.relationship('DetectedHOT', backref=db.backref('true_pos_hot', order_by=id)) simulated_id = db.Column(db.Integer, db.ForeignKey('Simulated.id')) simulated = db.relationship('Simulated', backref=db.backref('true_pos_hot'), order_by=id) def __repr__(self): return str(self.id)
class LightCurve(db.Model): __tablename__ = "LightCurve" id = db.Column( db.Integer, db.Sequence('lightcurve_id_seq'), primary_key=True) source_id = db.Column( db.Integer, db.ForeignKey('MasterSource.id'), nullable=False, unique=True) source = db.relationship( "MasterSource", backref=db.backref("lightcurve"), uselist=False) obs_number = db.Column(db.Integer) pdm_period = db.Column(db.Float, nullable=True) ls_period = db.Column(db.Float, nullable=True) def __repr__(self): return "<LightCurve '{}'>".format(repr(self.source))
class CCD(db.Model): __tablename__ = 'CCD' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(100), nullable=False, unique=True) brand = db.Column(db.String(100), nullable=False) model = db.Column(db.String(100), nullable=False) description = db.Column(db.Text, nullable=True) xpixsize = db.Column(db.Integer, nullable=True) ypixsize = db.Column(db.Integer, nullable=True) def __repr__(self): return self.name
class Observation(db.Model): __tablename__ = 'Observation' id = db.Column(db.Integer, primary_key=True) name_id = db.Column(db.Integer, db.ForeignKey('Name.id'), nullable=False) name = db.relationship("Name", backref=db.backref("observations")) sepal_length = db.Column(db.Float, nullable=False) sepal_width = db.Column(db.Float, nullable=False) petal_length = db.Column(db.Float, nullable=False) petal_width = db.Column(db.Float, nullable=False)
class CalFile(db.Model): __tablename__ = 'CalFile' id = db.Column(db.Integer, primary_key=True) path = db.Column(db.Text, nullable=True) observation_date = db.Column(db.DateTime(timezone=True)) exptime = db.Column(db.Integer, nullable=False) created_at = db.Column(db.DateTime(timezone=True)) imagetype = db.Column(db.String(16), nullable=False) def __repr__(self): return self.id
class Source(db.Model): __tablename__ = 'Source' id = db.Column(db.Integer, primary_key=True) ra = db.Column(db.Float, nullable=False) dec = db.Column(db.Float, nullable=False) mag = db.Column(db.Float, nullable=False) mag_err = db.Column(db.Float, nullable=False) class_source = db.Column(db.String, nullable=True) pawprint_id = db.Column(db.Integer, db.ForeignKey('Pawprint.id')) pawprint = db.relationship("Pawprint", backref=db.backref('sources', order_by=id)) def __repr__(self): return "({}, {})".format(self.ra, self.dec)
class PawprintStackXTile(db.Model): """Relation between a pawprint-stack and a tile. Because the virca, overlap some pawprints can be in two tiles """ __tablename__ = "PawprintStackXTile" __table_args__ = (db.UniqueConstraint('pawprint_stack_id', 'tile_id', name='_pawprint_tile_uc'), ) statuses = db.Enum("raw", "ready-to-match", "matched", name="pxt_statuses") id = db.Column(db.Integer, db.Sequence('pxt_id_seq'), primary_key=True) pawprint_stack_id = db.Column(db.Integer, db.ForeignKey('PawprintStack.id'), nullable=False) pawprint_stack = db.relationship("PawprintStack", backref=db.backref("pxts")) tile_id = db.Column(db.Integer, db.ForeignKey('Tile.id'), nullable=False) tile = db.relationship("Tile", backref=db.backref("pxts")) _npy_filename = db.Column("npy_filename", db.Text) matched_number = db.Column(db.Integer, nullable=True) status = db.Column(statuses, default="raw") def __repr__(self): string = "<PXT '{}: {}'>" return string.format(self.tile.name, self.pawprint_stack.name) @property def npy_file_path(self): if self._npy_filename: return os.path.join(settings.MATCHS_DIR, self.tile.name, self._npy_filename) def store_npy_file(self, arr): self._npy_filename = "{}_{}.npy".format(self.tile.name, self.pawprint_stack.name) file_dir = os.path.dirname(self.npy_file_path) if not os.path.isdir(file_dir): os.makedirs(file_dir) np.save(self.npy_file_path, arr) def load_npy_file(self): return np.load(self.npy_file_path)
class Candidate(db.Model): __tablename__ = 'Candidate' PREDICTED_TYPES = [("real", "Real"), ("bogus", "Bogus")] id = db.Column(db.Integer, primary_key=True) ra = db.Column(db.Float, nullable=False) dec = db.Column(db.Float, nullable=False) mag = db.Column(db.Float, nullable=False) mag_err = db.Column(db.Float, nullable=False) predicted = db.Column(db.ChoiceType(PREDICTED_TYPES), nullable=True) pawprint_id = db.Column(db.Integer, db.ForeignKey('Pawprint.id')) pawprint = db.relationship("Pawprint", backref=db.backref('candidates', order_by=id)) stack_id = db.Column(db.Integer, db.ForeignKey('Stack.id')) stack = db.relationship("Stack", backref=db.backref('candidates', order_by=id)) def __repr__(self): return "({}, {})".format(self.ra, self.dec)
class Tile(db.Model): """Represent a VVV tile. Can has 3 states: - `raw`: The tile is discovery and only a path to the original path is added - `measures`: The tile know how many sources they has and the serialized version of the file is loaded. - `loaded`: All the sources of the tile are created on *MasterSource* table """ __tablename__ = "Tile" statuses = db.Enum("raw", "measured", "loaded", name="tile_statuses") ready = db.Column(db.Boolean, default=False) id = db.Column(db.Integer, db.Sequence('tile_id_seq'), primary_key=True) name = db.Column(db.String(255), nullable=False, index=True, unique=True) _filename = db.Column("filename", db.Text) data = db.Column(db.PickleType, nullable=True) data_size = db.Column(db.Integer, nullable=True) data_readed = db.Column(db.Integer, nullable=True) status = db.Column(statuses, default="raw") def __repr__(self): return "<Tile '{}'>".format(self.name) def file_path(self): if self._filename: return os.path.join( settings.STORED_TILES_DIR, self._filename) def store_file(self, fpath): self._filename = os.path.basename(fpath) shutil.copyfile(fpath, self.file_path())
class Pawprint(db.Model): __tablename__ = "Pawprint" statuses = db.Enum("raw", "measured", "loaded", name="pawprint_statuses") id = db.Column( db.Integer, db.Sequence('pawprint_id_seq'), primary_key=True) name = db.Column(db.String(255), nullable=False, unique=True) mjd = db.Column(db.Float, nullable=True) data = db.Column(db.PickleType, nullable=True) data_size = db.Column(db.Integer, nullable=True) data_readed = db.Column(db.Integer, nullable=True) _filename = db.Column("filename", db.Text) status = db.Column(statuses, default="raw") def __repr__(self): return "<Pawprint '{}'>".format(repr(self.name)) def file_path(self): if self._filename: yearmonth = self._filename[1:7] day = self._filename[7:9] return os.path.join( settings.STORED_PAWPRINT_DIR, yearmonth, day, self._filename) def store_file(self, fpath): self._filename = os.path.basename(fpath) file_path = self.file_path() file_dir = os.path.dirname(file_path) if not os.path.isdir(file_dir): os.makedirs(file_dir) shutil.copyfile(fpath, file_path)
class StateChange(db.Model): __tablename__ = 'StateChange' id = db.Column(db.Integer, primary_key=True) created_at = db.Column(db.DateTime(timezone=True)) modified_at = db.Column(db.DateTime(timezone=True)) count = db.Column(db.Integer) path = db.Column(db.Text, nullable=True) state_id = db.Column(db.Integer, db.ForeignKey('State.id')) state = db.relationship("State", backref=db.backref('statechanges', order_by=id)) pawprint_id = db.Column(db.Integer, db.ForeignKey('Pawprint.id')) pawprint = db.relationship("Pawprint", backref=db.backref('statechanges', order_by=id)) def __repr__(self): return "{} ({})".format(repr(self.pawprint), repr(self.state))
class SCorrDetected(db.Model): __tablename__ = "SCorrDetected" id = db.Column(db.Integer, primary_key=True) X_IMAGE = db.Column(db.Float, nullable=False) Y_IMAGE = db.Column(db.Float, nullable=False) SIGNIFICANCE = db.Column(db.Float, nullable=False) IS_REAL = db.Column(db.Boolean, nullable=True) image_id = db.Column(db.Integer, db.ForeignKey('SCorrImages.id')) image = db.relationship('SCorrImages', backref=db.backref('SCorrdetected_srcs', order_by=id)) def __repr__(self): return '{}::{}'.format(self.image, self.id)
class ImagesOIS(db.Model): __tablename__ = "ImagesOIS" id = db.Column(db.Integer, primary_key=True) path = db.Column(db.String(100), nullable=False) crossmatched = db.Column(db.Boolean, nullable=False) refimage_id = db.Column(db.Integer, db.ForeignKey('RefImages.id')) refimage = db.relationship('RefImages', backref=db.backref('OISImages', order_by=id)) newimage_id = db.Column(db.Integer, db.ForeignKey('NewImages.id')) newimage = db.relationship('NewImages', backref=db.backref('OISImages', order_by=id)) exec_time = db.Column(db.Float, nullable=False) def __repr__(self): return self.path