Ejemplo n.º 1
0
def get_subunit_structure(item, entity='all'):

    from ._add_reference_to_evidence import _add_reference_to_evidence

    output = []

    accession = item['uniprot']['entry']['accession'][0]

    ### Info in comment

    for comment in item['uniprot']['entry']['comment']:

        if comment['@type']=='subunit':

            if type(comment['text'])==list:
                for comment_subunit in comment['text']:

                    subunit = evi.Evidence()
                    subunit.value = comment_subunit['#text']

                    if '@evidence' in comment_subunit:
                        evidence_numbers_in_db = comment_subunit['@evidence'].split(' ')
                        for evidence_number_in_db in evidence_numbers_in_db:
                            evidence_in_db = item['uniprot']['entry']['evidence'][int(evidence_number_in_db)-1]
                            if evidence_in_db['@key']!=evidence_number_in_db:
                                raise ValueError('Evidence number does not match evidence @key')
                            _add_reference_to_evidence(subunit, evidence_in_db)
                            subunit.add_reference({'database':'UniProtKB', 'id':accession})

                    output.append(subunit)

            else:

                subunit = evi.Evidence()
                subunit.value = comment['text']['#text']

                if '@evidence' in comment['text']:
                    evidence_numbers_in_db = comment['text']['@evidence'].split(' ')
                    for evidence_number_in_db in evidence_numbers_in_db:
                        evidence_in_db = item['uniprot']['entry']['evidence'][int(evidence_number_in_db)-1]
                        if evidence_in_db['@key']!=evidence_number_in_db:
                            raise ValueError('Evidence number does not match evidence @key')
                        _add_reference_to_evidence(subunit, evidence_in_db)
                        subunit.add_reference({'database':'UniProtKB', 'id':accession})

                output.append(subunit)

    if len(output)==0:
        output = None
    elif len(output)==1:
        output = output[0]

    return output
Ejemplo n.º 2
0
def get_activity_regulation(item, entity='all'):

    from ._add_reference_to_evidence import _add_reference_to_evidence
    from .get_uniprot import get_uniprot

    output = []

    uniprot = get_uniprot(item, entity=entity)
    ref_uniprot = uniprot.references[0]

    ### Info in comment

    for comment in item['uniprot']['entry']['comment']:

        if comment['@type'] == 'activity regulation':

            if type(comment) != OrderedDict:
                raise ValueError(
                    "Comment type not recognized for activity regulation")

            comment_text = comment['text']

            if type(comment_text) in [OrderedDict, str]:
                comment_text = [comment_text]

            if type(comment_text) != list:
                raise ValueError(
                    "Text in comment not recognized for activity regulation")

            for aux in comment_text:

                evidence = evi.Evidence()

                if type(aux) == OrderedDict:

                    evidence.value = aux['#text']

                    if '@evidence' in aux:
                        evidence_numbers_in_db = aux['@evidence'].split(' ')
                        for evidence_number_in_db in evidence_numbers_in_db:
                            evidence_in_db = item['uniprot']['entry'][
                                'evidence'][int(evidence_number_in_db) - 1]
                            if evidence_in_db['@key'] != evidence_number_in_db:
                                raise ValueError(
                                    'Evidence number does not match evidence @key'
                                )
                            _add_reference_to_evidence(evidence,
                                                       evidence_in_db)

                elif type(aux) == str:
                    evidence.value = aux

                evidence.add_reference(ref_uniprot)

                output.append(evidence)

    return output
Ejemplo n.º 3
0
def get_function(item, entity='all'):

    from ._add_reference_to_evidence import _add_reference_to_evidence
    from ._get_reference_from_dbevidence import _get_reference_from_dbevidence

    from .get_uniprot_id import get_uniprot_id

    output = {'function':[], 'references':[], 'notes':[]}

    uniprot = get_uniprot_id(item, entity=entity)
    ref_uniprot = uniprot.references[0]

    ### Info in comment

    for comment in item['uniprot']['entry']['comment']:

        if comment['@type']=='function':

            if type(comment)!=OrderedDict:
                raise ValueError("Comment type not recognized for function")

            comment_text = comment['text']

            if type(comment_text) in [OrderedDict, str]:
                comment_text = [comment_text]

            if type(comment_text)!=list:
                raise ValueError("Text in comment not recognized for function")

            for aux in comment_text:

                evidence = evi.Evidence()

                if type(aux)==OrderedDict:

                    evidence.value = aux['#text']

                    if '@evidence' in aux:
                        evidence_numbers_in_db = aux['@evidence'].split(' ')
                        for evidence_number_in_db in evidence_numbers_in_db:
                            ref = _get_reference_from_dbevidence(int(evidence_number_in_db), item)
                            evidence.add_reference(ref)
                            output['references'].append(ref)

                elif type(aux)==str:
                    evidence.value = aux

                evidence.add_reference(ref_uniprot)

                output['function'].append(evidence)

    output['references'].append(ref_uniprot)

    return output
Ejemplo n.º 4
0
def get_ec(item, entity='all'):

    from ._add_reference_to_evidence import _add_reference_to_evidence
    from .get_dbreference import get_dbreference

    in_name = False
    in_db = False

    if 'ecNumber' in item['uniprot']['entry']['protein']['recommendedName']:

        ecNumber = item['uniprot']['entry']['protein']['recommendedName'][
            'ecNumber']
        evidence = evi.Evidence()

        if '#text' in ecNumber:
            evidence.value = ecNumber['#text']
        if '@evidence' in ecNumber:
            evidence_numbers_in_db = ecNumber['@evidence'].split()
            for evidence_number_in_db in evidence_numbers_in_db:
                evidence_in_db = item['uniprot']['entry']['evidence'][
                    int(evidence_number_in_db) - 1]
                if evidence_in_db['@key'] != evidence_number_in_db:
                    raise ValueError(
                        'Evidence number does not match evidence @key')
                _add_reference_to_evidence(evidence, evidence_in_db)

        accession = item['uniprot']['entry']['accession'][0]
        evidence.add_reference({'database': 'UniProtKB', 'id': accession})

        evidence_in_name = evidence
        in_name = True

    evidence = get_dbreference(item, dbname='EC')
    if evidence is not None:
        evidence_in_db = evidence
        in_db = True

    if (in_db == False) and (in_name == False):

        return None

    elif (in_db == True) and (in_name == True):

        return evi.join([evidence_in_name, evidence_in_db])

    else:

        raise ValueError("EC is not in name and neither in dbreference")
Ejemplo n.º 5
0
def get_metabolic_pathways(item, entity='all'):

    from ._add_reference_to_evidence import _add_reference_to_evidence
    from .get_uniprot import get_uniprot

    output = []

    uniprot = get_uniprot(item, entity=entity)
    ref_uniprot = uniprot.references[0]

    ### Info in comment

    for comment in item['uniprot']['entry']['comment']:

        if comment['@type'] == 'pathway':

            if type(comment) != OrderedDict:
                raise ValueError(
                    "Comment type not recognized for methabolic pathway")

            evidence = evi.Evidence()

            evidence.value = comment['text']

            if '@evidence' in comment:
                evidence_numbers_in_db = comment['@evidence'].split(' ')
                for evidence_number_in_db in evidence_numbers_in_db:
                    evidence_in_db = item['uniprot']['entry']['evidence'][
                        int(evidence_number_in_db) - 1]
                    if evidence_in_db['@key'] != evidence_number_in_db:
                        raise ValueError(
                            'Evidence number does not match evidence @key')
                    _add_reference_to_evidence(evidence, evidence_in_db)

            evidence.add_reference(ref_uniprot)

            output.append(evidence)

    return output
Ejemplo n.º 6
0
def get_organism(item, entity='all', as_card=False):

    from sabueso.cards import OrganismCard, organism_dict
    from ._add_reference_to_evidence import _add_reference_to_evidence

    output = deepcopy(organism_dict)

    accession = item['uniprot']['entry']['accession'][0]

    if 'organism' in item['uniprot']['entry']:

        common_name = evi.Evidence()
        scientific_name = evi.Evidence()
        ncbi_taxonomy = evi.Evidence()

        organism = item['uniprot']['entry']['organism']

        dbref_type = organism['dbReference']['@type']
        dbref_id = organism['dbReference']['@id']

        if dbref_type != 'NCBI Taxonomy':
            raise ValueError('Unknown reference in database')

        ncbi_taxonomy.value = dbref_id
        ncbi_taxonomy.add_reference({
            'database': 'NCBI_Taxonomy',
            'id': dbref_id
        })
        ncbi_taxonomy.add_reference({'database': 'UniProtKB', 'id': accession})
        output['ncbi_taxonomy'] = ncbi_taxonomy

        if type(organism['name']) == list:
            for name in organism['name']:
                if name['@type'] == 'common':
                    common_name.value = name['#text']
                    common_name.add_reference({
                        'database': 'NCBI_Taxonomy',
                        'id': dbref_id
                    })
                    common_name.add_reference({
                        'database': 'UniProtKB',
                        'id': accession
                    })
                    output['common_name'] = common_name
                if name['@type'] == 'scientific':
                    scientific_name.value = name['#text']
                    scientific_name.add_reference({
                        'database': 'NCBI_Taxonomy',
                        'id': dbref_id
                    })
                    scientific_name.add_reference({
                        'database': 'UniProtKB',
                        'id': accession
                    })
                    output['scientific_name'] = scientific_name
        else:
            common_name.value = organism['name']['#text']
            common_name.add_reference({
                'database': 'NCBI_Taxonomy',
                'id': dbref_id
            })
            common_name.add_reference({
                'database': 'UniProtKB',
                'id': accession
            })
            output['common_name'] = common_name

        output['references'].append(
            evi.reference({
                'database': 'NCBI_Taxonomy',
                'id': dbref_id
            }))
        output['references'].append(
            evi.reference({
                'database': 'UniProtKB',
                'id': accession
            }))

    if as_card:
        output = OrganismCard(output)

    return output
Ejemplo n.º 7
0
def get_catalytic_activity(item, entity='all', as_cards=False):

    from sabueso.cards import CatalyticActivityCard, catalytic_activity_dict
    from ._add_reference_to_evidence import _add_reference_to_evidence
    from ._get_reference_from_dbevidence import _get_reference_from_dbevidence
    from ._get_reference_from_dbreference import _get_reference_from_dbreference
    from .get_uniprot import get_uniprot

    output = []

    uniprot = get_uniprot(item, entity=entity)
    ref_uniprot = uniprot.references[0]

    ### Info in comment

    for comment in item['uniprot']['entry']['comment']:

        if comment['@type'] == 'catalytic activity':

            if type(comment) != OrderedDict:
                raise ValueError(
                    "Comment type not recognized for catalytic activity")

            aux_dict = deepcopy(catalytic_activity_dict)
            aux_dict['reaction'] = evi.Evidence()
            aux_dict['physiological_direction'] = evi.Evidence()

            aux_dict['reaction'].value = comment['reaction']['text']
            if '@evidence' in comment['reaction']:
                evidence_numbers = comment['reaction']['@evidence'].split(' ')
                for ii in evidence_numbers:
                    ref = _get_reference_from_dbevidence(int(ii), item)
                    if ref is not None:
                        aux_dict['references'].append(ref)
                        aux_dict['reaction'].add_reference(ref)
            if 'dbReference' in comment['reaction']:
                dbreference = comment['physiologicalReaction']['dbReference']
                if type(dbreference) == OrderedDict:
                    dbreference = [dbreference]
                for aux in dbreference:
                    ref = _get_reference_from_dbreference(
                        aux['@type'], aux['@id'])
                    aux_dict['references'].append(ref)
                    aux_dict['reaction'].add_reference(ref)

            aux_dict['physiological_direction'].value = comment[
                'physiologicalReaction']['@direction']
            if '@evidence' in comment['physiologicalReaction']:
                evidence_numbers = comment['physiologicalReaction'][
                    '@evidence'].split(' ')
                for ii in evidence_numbers:
                    ref = _get_reference_from_dbevidence(int(ii), item)
                    if ref is not None:
                        aux_dict['references'].append(ref)
                        aux_dict['physiological_direction'].add_reference(ref)
            if 'dbReference' in comment['physiologicalReaction']:
                dbreference = comment['physiologicalReaction']['dbReference']
                if type(dbreference) == OrderedDict:
                    dbreference = [dbreference]
                for aux in dbreference:
                    ref = _get_reference_from_dbreference(
                        aux['@type'], aux['@id'])
                    aux_dict['references'].append(ref)
                    aux_dict['physiological_direction'].add_reference(ref)

            aux_dict['references'].append(ref_uniprot)

            output.append(aux_dict)

    if as_cards:

        output = [CatalyticActivityCard(ii) for ii in output]

    return output
Ejemplo n.º 8
0
def get_location_in_cell(item, entity='all', as_cards=False):

    from sabueso.cards import LocationInCellCard, location_in_cell_dict
    from ._add_reference_to_evidence import _add_reference_to_evidence
    from ._get_reference_from_dbevidence import _get_reference_from_dbevidence
    from .get_uniprot import get_uniprot

    uniprot = get_uniprot(item, entity=entity)
    ref_uniprot = uniprot.references[0]

    output = []

    for comment in item['uniprot']['entry']['comment']:

        if comment['@type'] == 'subcellular location':

            aux_dict = deepcopy(location_in_cell_dict)

            for subcellularLocation in comment['subcellularLocation']:

                aux_output = []

                if 'location' in subcellularLocation:
                    location = subcellularLocation['location']
                    if type(location) == OrderedDict:
                        location = [location]
                    for ll in location:
                        evidence = evi.Evidence()
                        evidence.value = ll['#text']
                        if '@evidence' in ll:
                            evidence_numbers = ll['@evidence'].split(' ')
                            for ii in evidence_numbers:
                                ref = _get_reference_from_dbevidence(
                                    int(ii), item)
                                if ref is not None:
                                    evidence.add_reference(ref)
                                    aux_dict['references'].append(ref)
                        evidence.add_reference(ref_uniprot)
                        aux_output.append(evidence)
                if 'topology' in subcellularLocation:
                    topology = subcellularLocation['topology']
                    if type(topology) == OrderedDict:
                        topology = [topology]
                    for ll in topology:
                        evidence = evi.Evidence()
                        evidence.value = ll['#text']
                        if '@evidence' in ll:
                            evidence_numbers = ll['@evidence'].split(' ')
                            for ii in evidence_numbers:
                                ref = _get_reference_from_dbevidence(
                                    int(ii), item)
                                if ref is not None:
                                    evidence.add_reference(ref)
                                    aux_dict['references'].append(ref)
                        evidence.add_reference(ref_uniprot)
                        aux_output.append(evidence)

                aux_dict['location'].append(aux_output)

            evidence = evi.Evidence()
            evidence.value = comment['text']['#text']
            if '@evidence' in comment['text']:
                evidence_numbers = comment['text']['@evidence'].split(' ')
                for ii in evidence_numbers:
                    ref = _get_reference_from_dbevidence(int(ii), item)
                    if ref is not None:
                        evidence.add_reference(ref)
                        aux_dict['references'].append(ref)
            evidence.add_reference(ref_uniprot)

            aux_dict['note'] = evidence

            output.append(aux_dict)

    if as_cards:
        output = [LocationInCellCard(ii) for ii in output]

    return output