コード例 #1
0
class UserTbl(Base, BaseMixin):
    name = Column(String(45), primary_key=True)
    affiliation = stringcolumn(80)
    category = stringcolumn(80)
    email = stringcolumn(80)

    media = relationship('MediaTbl', backref='user')
コード例 #2
0
class AnalysisChangeTbl(Base, BaseMixin):
    idanalysischangeTbl = Column(Integer, primary_key=True)
    # tag = Column(String(40), ForeignKey('TagTbl.name'))
    tag = stringcolumn(40)
    timestamp = Column(TIMESTAMP)
    user = stringcolumn(40)
    analysisID = Column(Integer, ForeignKey('AnalysisTbl.id'))
コード例 #3
0
ファイル: dvc_orm.py プロジェクト: stephen-e-cox/pychron
class PrincipalInvestigatorTbl(Base, BaseMixin):
    name = Column(String(140), primary_key=True)
    affiliation = stringcolumn(140)
    email = stringcolumn(140)

    @property
    def record_view(self):
        from pychron.envisage.browser.record_views import PrincipalInvestigatorRecordView
        r = PrincipalInvestigatorRecordView(self)
        return r
コード例 #4
0
class SampleTbl(Base, NameMixin):
    materialID = Column(Integer, ForeignKey('MaterialTbl.id'))
    projectID = Column(Integer, ForeignKey('ProjectTbl.id'))
    note = stringcolumn(140)
    igsn = stringcolumn(140)
    lat = Column(Float)
    lon = Column(Float)

    storage_location = deferred(stringcolumn(140))
    lithology = deferred(stringcolumn(140))
    unit = deferred(stringcolumn(80))
    lithology_class = deferred(stringcolumn(140))
    lithology_type = deferred(stringcolumn(140))
    lithology_group = deferred(stringcolumn(140))

    location = deferred(stringcolumn(140))
    approximate_age = deferred(Column(Float))
    elevation = deferred(Column(Float))
    create_date = deferred(Column(DateTime, default=func.now()))
    update_date = deferred(
        Column(DateTime, onupdate=func.now(), default=func.now()))

    positions = relationship('IrradiationPositionTbl',
                             backref='sample',
                             lazy='joined')
コード例 #5
0
ファイル: dvc_orm.py プロジェクト: ael-noblegas/pychron
class ProjectTbl(Base, NameMixin):
    principal_investigatorID = Column(Integer, ForeignKey('PrincipalInvestigatorTbl.id'))

    samples = relationship('SampleTbl', backref='project')
    analysis_groups = relationship('AnalysisGroupTbl', backref='project')
    checkin_date = Column(DATE)
    comment = Column(TEXT)
    lab_contact = stringcolumn(80)
    institution = stringcolumn(80)

    @property
    def pname(self):
        return '{} ({})'.format(self.name, self.principal_investigator.name) if self.principal_investigator else \
            self.name
コード例 #6
0
class LevelTbl(Base, NameMixin):
    irradiationID = Column(Integer, ForeignKey('IrradiationTbl.id'))
    # productionID = Column(Integer, ForeignKey('ProductionTbl.id'))
    holder = stringcolumn(45)
    z = Column(Float)

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

    note = Column(TEXT)

    @property
    def projects(self):
        ps = []
        for p in self.positions:
            try:
                name = p.sample.project.name
                if name != 'Irradiation-{}'.format(self.irradiation.name):
                    ps.append(p.sample.project.pname)

            except AttributeError:
                pass

        return list(set(ps))
コード例 #7
0
class AnalysisGroupTbl(Base, IDMixin):
    name = stringcolumn(140)
    create_date = Column(TIMESTAMP, default=func.now())
    projectID = Column(Integer, ForeignKey('ProjectTbl.id'))
    user = Column(String(140), ForeignKey('UserTbl.name'))

    sets = relationship('AnalysisGroupSetTbl', backref='group')
コード例 #8
0
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
コード例 #9
0
class SamplePrepStepTbl(Base, IDMixin):
    sampleID = Column(Integer, ForeignKey('SampleTbl.id'))
    sessionID = Column(Integer, ForeignKey('SamplePrepSessionTbl.id'))
    crush = Column(String(140))
    wash = Column(String(140))
    sieve = Column(String(140))
    frantz = Column(String(140))
    acid = Column(String(140))
    heavy_liquid = Column(String(140))
    pick = Column(String(140))
    mount = stringcolumn(140)
    gold_table = stringcolumn(140)
    us_wand = stringcolumn(140)
    eds = stringcolumn(140)
    cl = stringcolumn(140)
    bse = stringcolumn(140)
    se = stringcolumn(140)

    status = Column(String(32))
    comment = Column(String(300))

    timestamp = Column(DATETIME, default=func.now())
    added = Column(Boolean)

    images = relationship('SamplePrepImageTbl', backref='step')
コード例 #10
0
class InterpretedAgeSetTbl(Base, BaseMixin):
    idinterpretedagesettbl = Column(Integer, primary_key=True)
    interpreted_ageID = Column(Integer, ForeignKey('InterpretedAgeTbl.idinterpretedagetbl'))
    analysisID = Column(Integer, ForeignKey('AnalysisTbl.id'))
    forced_plateau_step = Column(Boolean)
    plateau_step = Column(Boolean)
    tag = stringcolumn(80)

    analysis = relationship('AnalysisTbl', uselist=False)
コード例 #11
0
class InterpretedAgeTbl(Base, BaseMixin):
    idinterpretedagetbl = Column(Integer, primary_key=True)
    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)
    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)

    analyses = relationship('InterpretedAgeSetTbl', backref='interpreted_age')
コード例 #12
0
ファイル: dvc_orm.py プロジェクト: ael-noblegas/pychron
class PrincipalInvestigatorTbl(Base, IDMixin):
    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
コード例 #13
0
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)
コード例 #14
0
ファイル: dvc_orm.py プロジェクト: ael-noblegas/pychron
class MaterialTbl(Base, NameMixin):
    samples = relationship('SampleTbl', backref='material')
    grainsize = stringcolumn(80)

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

    def __repr__(self):
        return '{}<{}>'.format(self.__class__.__name__, self.gname)
コード例 #15
0
class CurrentTbl(Base, IDMixin):
    value = Column(Float(32))
    error = Column(Float(32))
    unit = stringcolumn(40)

    parameterID = Column(Integer, ForeignKey('ParameterTbl.id'))
    analysisID = Column(Integer, ForeignKey('AnalysisTbl.id'))

    parameter = relationship('ParameterTbl', uselist=False)
    analysis = relationship('AnalysisTbl', uselist=False)
コード例 #16
0
ファイル: dvc_orm.py プロジェクト: ael-noblegas/pychron
class IrradiationPositionTbl(Base, IDMixin):
    identifier = stringcolumn(80)
    sampleID = Column(Integer, ForeignKey('SampleTbl.id'))
    levelID = Column(Integer, ForeignKey('LevelTbl.id'))
    position = Column(Integer)
    note = Column(TEXT)
    weight = Column(Float)
    j = Column(Float)
    j_err = Column(Float)
    packet = stringcolumn(40)

    # analyses = relationship('AnalysisTbl', backref='irradiation_position')

    @property
    def analysis_count(self):
        return object_session(self).query(AnalysisTbl).with_parent(self).count()

    @property
    def analyzed(self):
        return bool(self.analysis_count)
コード例 #17
0
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')
コード例 #18
0
class UserTbl(Base, BaseMixin):
    name = Column(String(45), primary_key=True)
    affiliation = stringcolumn(80)
    category = stringcolumn(80)
    email = stringcolumn(80)
コード例 #19
0
class NameMixin(BaseMixin):
    name = stringcolumn(80)

    def __repr__(self):
        return '{}<{}>'.format(self.__class__.__name__, self.name)
コード例 #20
0
class MassSpectrometerTbl(Base, BaseMixin):
    name = Column(String(45), primary_key=True)
    kind = stringcolumn(45)
コード例 #21
0
class RestrictedNameTbl(Base, IDMixin):
    name = stringcolumn()
    category = stringcolumn()
コード例 #22
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
コード例 #23
0
ファイル: dvc_orm.py プロジェクト: ael-noblegas/pychron
class UnitsTbl(Base, IDMixin):
    name = stringcolumn(40)
コード例 #24
0
class AnalysisTbl(Base, IDMixin):
    experiment_type = stringcolumn(32)
    timestamp = Column(DATETIME)
    # tag = stringcolumn(45)
    uuid = stringcolumn(32)
    analysis_type = stringcolumn(45)
    aliquot = Column(Integer)
    increment = Column(Integer)

    irradiation_positionID = Column(Integer,
                                    ForeignKey('IrradiationPositionTbl.id'))
    # simple_identifier = Column(Integer, ForeignKey('SimpleIdentifier.identifier'))
    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(200)
    repository_associations = relationship('RepositoryAssociationTbl',
                                           backref='analysis',
                                           lazy='joined')
    group_sets = relationship('AnalysisGroupSetTbl', backref='analysis')

    change = relationship('AnalysisChangeTbl',
                          uselist=False,
                          backref='analysis',
                          lazy='joined')
    measured_positions = relationship('MeasuredPositionTbl',
                                      backref='analysis')
    media = relationship('MediaTbl', backref='analysis')
    irradiation_position = relationship('IrradiationPositionTbl',
                                        backref='analysis',
                                        lazy='joined')

    _record_view = None
    group_id = 0
    frozen = False

    delta_time = 0

    review_status = None
    repository_identifier = ''
    is_plateau_step = None

    load_name = ''
    load_holder = ''
    _temporary_tag = None

    @property
    def step(self):
        print(self.increment, alphas(self.increment))
        return alphas(self.increment)

    @property
    def position(self):
        if self.measured_positions:
            return ','.join([
                '{}'.format(p.position) for p in self.measured_positions
                if p.position
            ])
        else:
            return ''

    @property
    def meas_script_name(self):
        return self.measurementName

    @property
    def extract_script_name(self):
        return self.extractionName

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

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

    @property
    def irradiation_info(self):
        return '{}{} {}'.format(self.irradiation, self.irradiation_level,
                                self.irradiation_position_position)

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

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

    @property
    def packet(self):
        return self.irradiation_position.packet or ''

    @property
    def project(self):
        try:
            return self.irradiation_position.sample.project.name
        except AttributeError:
            return ''

    @property
    def principal_investigator(self):
        try:
            return self.irradiation_position.sample.project.principal_investigator.name
        except AttributeError:
            return ''

    @property
    def sample(self):
        try:
            return self.irradiation_position.sample.name
        except AttributeError:
            return ''

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

    @property
    def material(self):
        try:
            return self.irradiation_position.sample.material.name
        except AttributeError:
            return ''

    @property
    def tag(self):
        if self._temporary_tag:
            tag = self._temporary_tag
        else:
            tag = self.change.tag
        return tag

    def set_tag(self, t):
        self._temporary_tag = t

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

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

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

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

    @property
    def display_uuid(self):
        u = self.uuid
        if not u:
            u = ''
        return u[:8]

    def get_load_name(self):
        ln = ''
        if self.measured_positions:
            ln = self.measured_positions[0].loadName or ''
        return ln

    def get_load_holder(self):
        lh = ''
        if self.measured_positions:
            load = self.measured_positions[0].load
            if load:
                lh = load.holderName
        return lh

    def bind(self):
        self.load_name = self.get_load_name()
        self.load_holder = self.get_load_holder()

        # force binding of irradiation_position
        self.irradiation_position
        self.irradiation_level
        self.irradiation
コード例 #25
0
class SamplePrepImageTbl(Base, IDMixin):
    stepID = Column(Integer, ForeignKey('SamplePrepStepTbl.id'))
    host = stringcolumn(45)
    path = stringcolumn(45)
    timestamp = Column(DATETIME, default=func.now())
    note = Column(TEXT)
コード例 #26
0
class RestrictedNameTbl(Base, BaseMixin):
    id = primary_key()
    name = stringcolumn()
    category = stringcolumn()
コード例 #27
0
class ParameterTbl(Base, IDMixin):
    name = stringcolumn(40)
コード例 #28
0
class SamplePrepChoicesTbl(Base, IDMixin):
    tag = stringcolumn(140)
    value = stringcolumn(140)