class LoadPositionTbl(Base, BaseMixin):
    id = primary_key()
    identifier = Column(String(80), ForeignKey('IrradiationPositionTbl.identifier'))
    position = Column(Integer)
    loadName = Column(String(45), ForeignKey('LoadTbl.name'))
    weight = Column(Float)
    note = Column(BLOB)
class MaterialTbl(Base, NameMixin):
    id = primary_key()
    samples = relationship('SampleTbl', backref='material')
    grainsize = stringcolumn(80)

    @property
    def gname(self):
        return '{} ({})'.format(self.name, self.grainsize) if self.grainsize else self.name
class MeasuredPositionTbl(Base, BaseMixin):
    id = primary_key()
    position = Column(Integer)
    x = Column(Float)
    y = Column(Float)
    z = Column(Float)

    is_degas = Column(Boolean)
    analysisID = Column(Integer, ForeignKey('AnalysisTbl.id'))
    loadName = Column(String(45), ForeignKey('LoadTbl.name'))
class LevelTbl(Base, NameMixin):
    id = primary_key()
    irradiationID = Column(Integer, ForeignKey('IrradiationTbl.id'))
    productionID = Column(Integer, ForeignKey('ProductionTbl.id'))
    holder = stringcolumn(45)
    z = Column(Float)

    positions = relationship('IrradiationPositionTbl', backref='level')

    note = Column(BLOB)
class ProjectTbl(Base, NameMixin):
    id = primary_key()
    principal_investigatorID = Column(Integer, ForeignKey('PrincipalInvestigatorTbl.id'))

    samples = relationship('SampleTbl', backref='project')
    analysis_groups = relationship('AnalysisGroupTbl', backref='project')

    @property
    def pname(self):
        return '{} ({})'.format(self.name, self.principal_investigator.name) if self.principal_investigator else \
            self.name
Beispiel #6
0
class ProjectTbl(Base, NameMixin):
    id = primary_key()
    principal_investigator = Column(
        String(140), ForeignKey('PrincipalInvestigatorTbl.name'))

    samples = relationship('SampleTbl', backref='project')

    @property
    def gname(self):
        return '{} ({})'.format(self.name, self.principal_investigator
                                ) if self.principal_investigator else self.name
class IrradiationPositionTbl(Base, BaseMixin):
    id = primary_key()
    identifier = stringcolumn(80)
    sampleID = Column(Integer, ForeignKey('SampleTbl.id'))
    levelID = Column(Integer, ForeignKey('LevelTbl.id'))
    position = Column(Integer)
    note = Column(BLOB)
    weight = Column(Float)
    j = Column(Float)
    j_err = Column(Float)

    analyses = relationship('AnalysisTbl', backref='irradiation_position')
class IRTbl(Base, BaseMixin):
    ir = primary_key(klass=String(32))
    principal_investigatorID = Column(Integer, ForeignKey('PrincipalInvestigatorTbl.id'))
    institution = Column(String(140))
    checkin_date = Column(DATE)
    lab_contact = Column(String(140), ForeignKey('UserTbl.name'))
    comment = Column(BLOB)

    @property
    def principal_investigator_name(self):
        ret = ''
        if self.principal_investigator:
            ret = self.principal_investigator.name
        return ret
class PrincipalInvestigatorTbl(Base, BaseMixin):
    id = primary_key()
    affiliation = stringcolumn(140)
    email = stringcolumn(140)
    last_name = Column(String(140))
    first_initial = Column(String(10))

    projects = relationship('ProjectTbl', backref='principal_investigator')
    repositories = relationship('RepositoryTbl', backref='principal_investigator')
    irs = relationship('IRTbl', backref='principal_investigator')

    @property
    def name(self):
        return '{}, {}'.format(self.last_name, self.first_initial) if self.first_initial else self.last_name

    @property
    def record_view(self):
        from pychron.envisage.browser.record_views import PrincipalInvestigatorRecordView
        r = PrincipalInvestigatorRecordView(self)
        return r
Beispiel #10
0
class RestrictedNameTbl(Base, BaseMixin):
    id = primary_key()
    name = stringcolumn()
    category = stringcolumn()
Beispiel #11
0
class IrradiationTbl(Base, NameMixin):
    id = primary_key()
    levels = relationship('LevelTbl', backref='irradiation')
Beispiel #12
0
class ProductionTbl(Base, NameMixin):
    id = primary_key()
    levels = relationship('LevelTbl', backref='production')
Beispiel #13
0
class SampleTbl(Base, NameMixin):
    id = primary_key()
    materialID = Column(Integer, ForeignKey('MaterialTbl.id'))
    projectID = Column(Integer, ForeignKey('ProjectTbl.id'))
    positions = relationship('IrradiationPositionTbl', backref='sample')
Beispiel #14
0
class AnalysisTbl(Base, BaseMixin):
    id = primary_key()
    timestamp = Column(TIMESTAMP)
    # tag = stringcolumn(45)
    uuid = stringcolumn(32)
    analysis_type = stringcolumn(45)
    aliquot = Column(Integer)
    increment = Column(Integer)

    irradiation_positionID = Column(Integer, ForeignKey('IrradiationPositionTbl.id'))

    measurementName = stringcolumn(45)
    extractionName = stringcolumn(45)
    postEqName = stringcolumn(45)
    postMeasName = stringcolumn(45)

    mass_spectrometer = Column(String(45), ForeignKey('MassSpectrometerTbl.name'))
    extract_device = stringcolumn(45)
    extract_value = Column(Float)
    extract_units = stringcolumn(45)
    cleanup = Column(Float)
    duration = Column(Float)

    weight = Column(Float)
    comment = stringcolumn(80)
    repository_associations = relationship('RepositoryAssociationTbl', backref='analysis')
    group_sets = relationship('AnalysisGroupSetTbl', backref='analysis')

    change = relationship('AnalysisChangeTbl', uselist=False, backref='analysis')
    measured_position = relationship('MeasuredPositionTbl', uselist=False, backref='analysis')
    _record_view = None
    group_id = 0

    @property
    def is_plateau_step(self):
        return

    @property
    def timestampf(self):
        return make_timef(self.timestamp)

    @property
    def identifier(self):
        return self.irradiation_position.identifier

    @property
    def irradiation(self):
        return self.irradiation_position.level.irradiation.name

    @property
    def irradiation_level(self):
        return self.irradiation_position.level.name

    @property
    def project(self):
        return self.irradiation_position.sample.project.name

    @property
    def sample(self):
        return self.irradiation_position.sample.name

    @property
    def irradiation_position_position(self):
        return self.irradiation_position.position

    @property
    def tag_dict(self):
        return {k: getattr(self.change.tag_item, k) for k in ('name',) + OMIT_KEYS}

    # @property
    # def labnumber(self):
    #     return self.irradiation_position

    @property
    def analysis_timestamp(self):
        return self.timestamp

    @property
    def rundate(self):
        return self.timestamp

    @property
    def repository_identifier(self):
        if self.repository_associations and len(self.repository_associations) == 1:
            return self.repository_associations[0].repository

    @property
    def record_id(self):
        return make_runid(self.irradiation_position.identifier, self.aliquot, self.increment)

    @property
    def repository_identifier(self):
        es = [e.repository for e in self.repository_associations]
        if len(es) == 1:
            return es[0]

    @property
    def record_views(self):
        # iv = self._record_view
        # if not iv:
        repos = self.repository_associations
        if len(repos) == 1:
            return self._make_record_view(repos[0].repository),
        else:
            return [self._make_record_view(r.repository, use_suffix=True) for r in repos]

    def make_record_view(self, repository, use_suffix=False):
        for repo in self.repository_associations:
            if repo.repository == repository:
                return self._make_record_view(repo.repository, use_suffix=use_suffix)
        else:
            return self._make_record_view(self.repository_associations[0].repository)

    def _make_record_view(self, repo, use_suffix=False):
        iv = DVCIsotopeRecordView(self)
        # iv.repository_ids = es = [e.repository for e in self.repository_associations]
        # if len(es) == 1:
        #     iv.repository_identifier = es[0]
        iv.repository_identifier = repo
        iv.use_repository_suffix = use_suffix
        iv.init()
        return iv