class proc_FitTable(Base, BaseMixin): history_id = foreignkey('proc_FitHistoryTable') isotope_id = foreignkey('meas_IsotopeTable') fit = stringcolumn() error_type = stringcolumn(default='SD') filter_outliers = Column(Boolean) filter_outlier_iterations = Column(Integer, default=1) filter_outlier_std_devs = Column(Integer, default=1) include_baseline_error = Column(Boolean) time_zero_offset = Column(Float) use_standard_deviation_filtering = False truncate = False @property def isotope_label(self): name = self.isotope.molecular_weight.name if self.isotope.kind == 'baseline': name = '{}bs'.format(name) return name def make_summary(self): f = self.fit[:1].upper() name = self.isotope_label s = '{}{}'.format(name, f) return s
class meas_ExtractionTable(Base, BaseMixin): # position = Column(Integer) extract_value = Column(Float) extract_duration = Column(Float) cleanup_duration = Column(Float) extract_units = stringcolumn(5) # experiment_blob = Column(BLOB) weight = Column(Float) sensitivity_multiplier = Column(Float) is_degas = Column(Boolean) beam_diameter = Column(Float) pattern = stringcolumn(100) ramp_rate = Column(Float) ramp_duration = Column(Float) mask_position = Column(Float) mask_name = stringcolumn(100) attenuator = Column(Float) reprate = Column(Float) sensitivity_id = foreignkey('gen_SensitivityTable') extract_device_id = foreignkey('gen_ExtractionDeviceTable') script_id = foreignkey('meas_ScriptTable') experiment_blob_id = foreignkey('meas_ScriptTable') image_id = foreignkey('med_ImageTable') analyses = relationship('meas_AnalysisTable', backref='extraction') positions = relationship('meas_PositionTable', backref='extraction') snapshots = relationship('med_SnapshotTable', backref='extraction')
class proc_DetectorIntercalibrationTable(Base, BaseMixin): history_id = foreignkey('proc_DetectorIntercalibrationHistoryTable') detector_id = foreignkey('gen_DetectorTable') user_value = Column(Float) user_error = Column(Float) fit = stringcolumn() error_type = stringcolumn(default='SD') set_id = Column(Integer)
class proc_BackgroundsTable(Base, BaseMixin): history_id = foreignkey('proc_BackgroundsHistoryTable') user_value = Column(Float) user_error = Column(Float) use_set = Column(Boolean) isotope = stringcolumn() fit = stringcolumn() error_type = stringcolumn(default='SD') set_id = Column(Integer)
class meas_MonitorTable(Base, NameMixin): data = Column(BLOB) parameter = stringcolumn() criterion = stringcolumn() comparator = stringcolumn() action = stringcolumn() tripped = Column(Boolean) analysis_id = foreignkey('meas_AnalysisTable')
class proc_InterpretedAgeHistoryTable(Base, BaseMixin): create_date = Column(DateTime, default=func.now()) user = stringcolumn() interpreted_age = relationship('proc_InterpretedAgeTable', backref='history', uselist=False) identifier = stringcolumn(80) selected = relationship('gen_LabTable', backref='selected_interpreted_age', uselist=False) group_sets = relationship('proc_InterpretedAgeGroupSetTable', backref='history')
class meas_AnalysisTable(Base, BaseMixin): lab_id = foreignkey('gen_LabTable') extraction_id = foreignkey('meas_ExtractionTable') measurement_id = foreignkey('meas_MeasurementTable') experiment_id = foreignkey('meas_ExperimentTable') import_id = foreignkey('gen_ImportTable') user_id = foreignkey('gen_UserTable') uuid = stringcolumn(40, default=lambda: str(uuid.uuid4())) analysis_timestamp = Column(DateTime, default=func.now()) endtime = Column(Time) status = Column(Integer, default=0) aliquot = Column(Integer) step = stringcolumn(10) comment = Column(BLOB) tag = Column(String(40), ForeignKey('proc_TagTable.name'), default='ok') # meas relationships isotopes = relationship('meas_IsotopeTable', backref='analysis') peak_center = relationship('meas_PeakCenterTable', backref='analysis', uselist=False) # proc relationships blanks_histories = relationship('proc_BlanksHistoryTable', backref='analysis') blanks_sets = relationship('proc_BlanksSetTable', backref='analysis') interpreted_age_sets = relationship('proc_InterpretedAgeSetTable', backref='analysis') backgrounds_histories = relationship('proc_BackgroundsHistoryTable', backref='analysis') backgrounds_sets = relationship('proc_BackgroundsSetTable', backref='analysis') detector_intercalibration_histories = relationship( 'proc_DetectorIntercalibrationHistoryTable', backref='analysis') detector_intercalibration_sets = relationship( 'proc_DetectorIntercalibrationSetTable', backref='analysis') detector_param_histories = relationship('proc_DetectorParamHistoryTable', backref='analysis') fit_histories = relationship('proc_FitHistoryTable', backref='analysis') selected_histories = relationship('proc_SelectedHistoriesTable', backref='analysis', uselist=False) arar_histories = relationship('proc_ArArHistoryTable', backref='analysis') # figure_analyses = relationship('proc_FigureAnalysisTable', backref='analysis') notes = relationship('proc_NotesTable', backref='analysis') monitors = relationship('meas_MonitorTable', backref='analysis')
class gen_LabTable(Base, BaseMixin): identifier = stringcolumn() # aliquot = Column(Integer) sample_id = foreignkey('gen_SampleTable') irradiation_id = foreignkey('irrad_PositionTable') selected_flux_id = foreignkey('flux_HistoryTable') selected_interpreted_age_id = foreignkey('proc_InterpretedAgeHistoryTable') note = stringcolumn(140) analyses = relationship('meas_AnalysisTable', backref='labnumber') figures = relationship('proc_FigureLabTable', backref='labnumber')
class gen_UserTable(Base, NameMixin): analyses = relationship('meas_AnalysisTable', backref='user') # project_id = foreignkey('gen_ProjectTable') projects = relationship('gen_ProjectTable', secondary=association_table) password = stringcolumn(80) salt = stringcolumn(80) #=========================================================================== # permissions #=========================================================================== max_allowable_runs = Column(Integer, default=25) can_edit_scripts = Column(Boolean, default=False)
class proc_BackgroundsTable(Base, BaseMixin): history_id = foreignkey('proc_BackgroundsHistoryTable') user_value = Column(Float) user_error = Column(Float) use_set = Column(Boolean) isotope = stringcolumn() fit = stringcolumn() error_type = stringcolumn(default='SD') set_id = Column(String(40), ForeignKey('proc_BackgroundsSetTable.set_id')) # set_id = Column(Integer) analysis_set = relationship('proc_BackgroundsSetTable', primaryjoin='proc_BackgroundsTable.set_id==proc_BackgroundsSetTable.set_id', uselist=True)
class proc_FitTable(Base, BaseMixin): history_id = foreignkey('proc_FitHistoryTable') isotope_id = foreignkey('meas_IsotopeTable') fit = stringcolumn() error_type=stringcolumn(default='SD') filter_outliers = Column(Boolean) filter_outlier_iterations = Column(Integer, default=1) filter_outlier_std_devs = Column(Integer, default=1) def make_summary(self): f = self.fit[:1].upper() s = '{}{}'.format(self.isotope.molecular_weight.name, f) return s
class gen_SampleTable(Base, NameMixin): material_id = foreignkey('gen_MaterialTable') project_id = foreignkey('gen_ProjectTable') labnumbers = relationship('gen_LabTable', backref='sample') monitors = relationship('flux_MonitorTable', backref='sample') igsn = Column(CHAR(9)) location = stringcolumn(80) lat = Column(Float) long = Column(Float) elevation = Column(Float) note = Column(BLOB) alt_name = stringcolumn(80) lithology = stringcolumn(80)
class proc_ActionTable(Base, BaseMixin): create_date = Column(DateTime, default=func.now()) session = stringcolumn() user_id = foreignkey('gen_UserTable') action = Column(BLOB) blank_histories = relationship('proc_BlanksHistoryTable', backref='action') fit_histories = relationship('proc_FitHistoryTable', backref='action')
class proc_InterpretedAgeGroupHistoryTable(Base, BaseMixin): project_id = foreignkey('gen_ProjectTable') name = stringcolumn(80) create_date = Column(DateTime, default=func.now()) interpreted_ages = relationship('proc_InterpretedAgeGroupSetTable', backref='group')
class gen_DetectorTable(Base, NameMixin): kind = stringcolumn() isotopes = relationship('meas_IsotopeTable', backref='detector') deflections = relationship('meas_SpectrometerDeflectionsTable', backref='detector') intercalibrations = relationship('proc_DetectorIntercalibrationTable', backref='detector') detector_parameters = relationship('proc_DetectorParamTable', backref='detector') gains = relationship('meas_GainTable', backref='detector')
class meas_GainHistoryTable(Base, UserMixin): create_date = Column(DateTime, default=func.now()) applied_date = Column(DateTime, default=func.now()) hash = stringcolumn(32) gains = relationship('meas_GainTable') analyses = relationship('meas_AnalysisTable', backref='gain_history') save_type = Column(String(20), default=1)
class History(object): @declared_attr def analysis_id(self): return foreignkey('meas_AnalysisTable') create_date = Column(DateTime, default=func.now()) user = stringcolumn()
class gen_SensitivityTable(Base, BaseMixin): mass_spectrometer_id = foreignkey('gen_MassSpectrometerTable') sensitivity = Column(Float(32)) create_date = Column(DateTime, default=func.now()) user = stringcolumn() note = Column(BLOB) extractions = relationship('meas_ExtractionTable', backref='sensitivity')
class proc_DataReductionTagTable(Base, BaseMixin): name = stringcolumn(140) create_date = Column(TIMESTAMP, default=func.now()) comment = Column(BLOB) user_id = foreignkey('gen_UserTable') analyses = relationship('proc_DataReductionTagSetTable', backref='tag') analysis = relationship('meas_AnalysisTable', backref='data_reduction_tag')
class proc_InterpretedAgeTable(Base, BaseMixin): history_id = foreignkey('proc_InterpretedAgeHistoryTable') age_kind = stringcolumn(32) age = Column(Float) age_err = Column(Float) wtd_kca = Column(Float) wtd_kca_err = Column(Float) mswd = Column(Float) sets = relationship('proc_InterpretedAgeSetTable', backref='analyses')
class flux_HistoryTable(Base, BaseMixin): irradiation_position_id = foreignkey('irrad_PositionTable') note = Column(BLOB) create_date = Column(DateTime, default=func.now()) source = stringcolumn(140) selected = relationship('gen_LabTable', backref='selected_flux_history', uselist=False) flux = relationship('flux_FluxTable', backref='history', uselist=False)
class gen_UserTable(Base, NameMixin): analyses = relationship('meas_AnalysisTable', backref='user') dr_tags = relationship('proc_DataReductionTagTable', backref='user') gain_histories = relationship('meas_GainHistoryTable', backref='user') # project_id = foreignkey('gen_ProjectTable') password = stringcolumn(80) salt = stringcolumn(80) email = stringcolumn(140) affiliation = stringcolumn(140) category = Column(Integer, default=0) # =========================================================================== # permissions # =========================================================================== max_allowable_runs = Column(Integer, default=25) can_edit_scripts = Column(Boolean, default=False)
class proc_FigureTable(Base, NameMixin): create_date = Column(DateTime, default=func.now()) user = stringcolumn() project_id = foreignkey('gen_ProjectTable') labnumbers = relationship('proc_FigureLabTable', backref='figure') analyses = relationship('proc_FigureAnalysisTable', backref='figure') preference = relationship('proc_FigurePrefTable', backref='figure', uselist=False)
class meas_IsotopeTable(Base, BaseMixin): molecular_weight_id = foreignkey('gen_MolecularWeightTable') analysis_id = foreignkey('meas_AnalysisTable') detector_id = foreignkey('gen_DetectorTable') kind = stringcolumn() signal = relationship('meas_SignalTable', backref='isotope', uselist=False) fits = relationship('proc_FitTable', backref='isotope') results = relationship('proc_IsotopeResultsTable', backref='isotope')
class proc_TagTable(Base): __tablename__ = 'proc_TagTable' name = Column(String(40), primary_key=True) create_date = Column(DateTime, default=func.now()) user = stringcolumn() omit_ideo = Column(Boolean) omit_spec = Column(Boolean) omit_iso = Column(Boolean) omit_series = Column(Boolean) analyses = relationship('meas_AnalysisTable', backref='tag_item')
class proc_BlanksTable(Base, BaseMixin): history_id = foreignkey('proc_BlanksHistoryTable') user_value = Column(Float) user_error = Column(Float) use_set = Column(Boolean) isotope = stringcolumn() fit = stringcolumn() error_type = stringcolumn(default='SD') set_id = Column(String(40), ForeignKey('proc_BlanksSetTable.set_id')) # set_id = Column(Integer, ForeignKey('proc_BlanksSetTable.set_id')) # set_id = Column(Integer) # set_id = foreignkey('proc_BlanksSetTable') preceding_id = foreignkey('meas_AnalysisTable') analysis_set = relationship( 'proc_BlanksSetTable', primaryjoin='proc_BlanksTable.set_id==proc_BlanksSetTable.set_id', backref='blanks', uselist=True) # analysis_set = relationship('proc_BlanksSetTable') value_set = relationship('proc_BlanksSetValueTable', backref='blank') def make_summary(self): s = 'Pr' f = self.fit if f: if not f in INTERPOLATE_TYPES: f = f[:1].upper() s = '{}{}'.format(self.isotope, f) if self.preceding_id: p = self.preceding_analysis rid = make_runid(p.labnumber.identifier, p.aliquot, p.step) s = '{} ({})'.format(s, rid) return s
class meas_ExtractionTable(Base, BaseMixin): # extract_value = deferred(Column(Float)) # extract_duration = deferred(Column(Float)) # cleanup_duration = deferred(Column(Float)) # extract_units = deferred(stringcolumn(5)) extract_value = Column(Float) extract_duration = Column(Float) cleanup_duration = Column(Float) extract_units = stringcolumn(5) weight = deferred(Column(Float)) sensitivity_multiplier = deferred(Column(Float)) is_degas = deferred(Column(Boolean)) beam_diameter = Column(Float) pattern = stringcolumn(100) ramp_rate = Column(Float) ramp_duration = Column(Float) mask_position = deferred(Column(Float)) mask_name = deferred(stringcolumn(100)) attenuator = deferred(Column(Float)) reprate = deferred(Column(Float)) response_blob = deferred(Column(BLOB)) output_blob = deferred(Column(BLOB)) sensitivity_id = foreignkey('gen_SensitivityTable') extract_device_id = foreignkey('gen_ExtractionDeviceTable') script_id = foreignkey('meas_ScriptTable') experiment_blob_id = foreignkey('meas_ScriptTable') image_id = foreignkey('med_ImageTable') analysis = relationship('meas_AnalysisTable', uselist=False, backref='extraction') positions = relationship('meas_PositionTable', backref='extraction') snapshots = relationship('med_SnapshotTable', backref='extraction')
class gen_SampleTable(Base, NameMixin): material_id = foreignkey('gen_MaterialTable') project_id = foreignkey('gen_ProjectTable') labnumbers = relationship('gen_LabTable', backref='sample') monitors = relationship('flux_MonitorTable', backref='sample') images = relationship('med_SampleImageTable', backref='sample') igsn = Column(CHAR(9)) location = stringcolumn(80) lat = Column(Float) long = Column(Float) elevation = Column(Float) note = Column(BLOB) alt_name = stringcolumn(80) lithology = stringcolumn(80) environment = stringcolumn(140) rock_type = stringcolumn(80) sio2 = Column(Float(32)) na2o = Column(Float(32)) k2o = Column(Float(32))
class proc_InterpretedAgeTable(Base, BaseMixin): history_id = foreignkey('proc_InterpretedAgeHistoryTable') age_kind = stringcolumn(32) kca_kind = stringcolumn(32) age = Column(Float) age_err = Column(Float) display_age_units = stringcolumn(2) kca = Column(Float) kca_err = Column(Float) # wtd_kca = Column(Float) # wtd_kca_err = Column(Float) # arith_kca = Column(Float) # arith_kca_err = Column(Float) mswd = Column(Float) age_error_kind = stringcolumn(80) include_j_error_in_mean = Column(Boolean) include_j_error_in_plateau = Column(Boolean) include_j_error_in_individual_analyses = Column(Boolean) sets = relationship('proc_InterpretedAgeSetTable', backref='analyses')
class proc_TagTable(Base): __tablename__ = 'proc_TagTable' name = Column(String(40), primary_key=True) create_date = Column(DateTime, default=func.now()) user = stringcolumn() omit_ideo = Column(Boolean) omit_spec = Column(Boolean) omit_iso = Column(Boolean) omit_series = Column(Boolean) analyses = relationship('meas_AnalysisTable', backref='tag_item') def to_dict(self): return {k: getattr(self, k) for k in ('name', 'omit_ideo', 'omit_series', 'omit_spec', 'omit_iso')}