Пример #1
0
    def create_message(self):
        model = stmts_clj_from_text('MAP2K1 binds MAPK1')
        entity = agent_clj_from_text('MAPK1-MAP2K1 complex')
        condition_entity = agent_clj_from_text('MAP2K1')

        entities = KQMLList([KQMLList([':description', entity])])
        pattern = KQMLList()
        pattern.set('entities', entities)
        pattern.sets('type', 'no_change')
        value = KQMLList()
        value.sets('type', 'qualitative')
        value.sets('value', 'high')
        pattern.set('value', value)

        content = KQMLList('SATISFIES-PATTERN')
        content.set('pattern', pattern)
        content.set('model', model)

        conditions = KQMLList()
        condition = KQMLList()
        condition.sets('type', 'multiple')
        condition.set('value', '10.0')
        quantity = KQMLList()
        quantity.sets('type', 'total')
        entity = KQMLList()
        entity.set('description', condition_entity)
        quantity.set('entity', entity)
        condition.set('quantity', quantity)
        conditions.append(condition)
        content.set('conditions', conditions)
        msg = get_request(content)
        return (msg, content)
Пример #2
0
 def send_display_figure(self, path):
     msg = KQMLPerformative('tell')
     content = KQMLList('display-image')
     content.set('type', 'simulation')
     content.sets('path', path)
     msg.set('content', content)
     self.send(msg)
Пример #3
0
    def create_message_3(self):
        content = KQMLList('FIND-CELLULAR-LOCATION')
        genes = ekb_from_text('AKT1, MAPK1')
        content.sets('genes', str(genes))

        msg = get_request(content)
        return msg, content
Пример #4
0
 def create_message_failure_2(self):
     target = ekb_kstring_from_text('ABC')
     content = KQMLList('FIND-CAUSALITY-SOURCE')
     content.set('target', target)
     content.sets('type', 'phosphorylates')
     msg = get_request(content)
     return msg, content
Пример #5
0
 def create_message(self):
     source = ekb_kstring_from_text('MAPK1')
     content = KQMLList('FIND-CAUSALITY-TARGET')
     content.set('source', source)
     content.sets('type', 'phosphorylation')
     msg = get_request(content)
     return msg, content
Пример #6
0
    def create_message2(self):
        txt = 'ERK activates ELK1. DUSP inactivates ELK1. ' + \
            'Active ELK1 transcribes FOS.'
        model = stmts_kstring_from_text(txt)
        entity = ekb_kstring_from_text('FOS')

        entities = KQMLList([KQMLList([':description', entity])])
        pattern = KQMLList()
        pattern.set('entities', entities)
        pattern.sets('type', 'always_value')
        value = KQMLList()
        value.sets('type', 'qualitative')
        value.sets('value', 'low')
        pattern.set('value', value)

        content = KQMLList('SATISFIES-PATTERN')
        content.set('pattern', pattern)
        content.set('model', model)

        condition_entity = ekb_kstring_from_text('DUSP')
        conditions = KQMLList()
        condition = KQMLList()
        condition.sets('type', 'multiple')
        condition.set('value', '100.0')
        quantity = KQMLList()
        quantity.sets('type', 'total')
        entity = KQMLList()
        entity.set('description', condition_entity)
        quantity.set('entity', entity)
        condition.set('quantity', quantity)
        conditions.append(condition)
        content.set('conditions', conditions)
        msg = get_request(content)
        return (msg, content)
Пример #7
0
    def create_message_AKT1(self):
        content = KQMLList('FIND-GENE-SUMMARY')
        genes = ekb_from_text('AKT1')
        content.sets('gene', str(genes))

        msg = get_request(content)
        return msg, content
Пример #8
0
    def create_message(self):
        txt = ('MEK not bound to Selumetinib phosphorylates ERK. DUSP '
               'dephosphorylates ERK. Selumetinib binds MEK.')
        model = stmts_clj_from_text(txt)
        entity = agent_clj_from_text('ERK that is phosphorylated')

        entities = KQMLList([KQMLList([':description', entity])])
        pattern = KQMLList()
        pattern.set('entities', entities)
        pattern.sets('type', 'no_change')
        value = KQMLList()
        value.sets('type', 'qualitative')
        value.sets('value', 'low')
        pattern.set('value', value)

        content = KQMLList('SATISFIES-PATTERN')
        content.set('pattern', pattern)
        content.set('model', model)

        condition_entity = agent_clj_from_text('Selumetinib')
        conditions = KQMLList()
        condition = KQMLList()
        condition.sets('type', 'multiple')
        condition.set('value', '100.0')
        quantity = KQMLList()
        quantity.sets('type', 'total')
        entity = KQMLList()
        entity.set('description', condition_entity)
        quantity.set('entity', entity)
        condition.set('quantity', quantity)
        conditions.append(condition)
        content.set('conditions', conditions)
        msg = get_request(content)
        return msg, content
Пример #9
0
 def make_failure(self, reason=None, description=None):
     msg = KQMLList('FAILURE')
     if reason:
         msg.set('reason', reason)
     if description:
         msg.sets('description', description)
     return msg
Пример #10
0
    def create_message_failure(self):
        content = KQMLList('CREATE-TUMOR-BOARD-REPORT')
        patient_id = '101'
        content.sets('patient-id', patient_id)

        msg = get_request(content)
        return msg, content
Пример #11
0
    def respond_find_variants_for_genes(self, content):
        """Response content to find-variants-for-genes"""
        gene_arg = content.get('GENES')

        if not gene_arg:
            self.make_failure('MISSING_MECHANISM')

        gene_names = _get_kqml_names(gene_arg)
        if not gene_names:
            return self.make_failure('MISSING_MECHANISM')

        disease_arg = content.get('DISEASE')
        if not disease_arg:
            return self.make_failure('MISSING_MECHANISM')

        disease_names = _get_kqml_names(disease_arg)
        if not disease_names:
            return self.make_failure('INVALID_DISEASE')

        disease_name = _sanitize_disase_name(disease_names[0])
        disease_abbr = self.BA.get_tcga_abbr(disease_name)

        if disease_abbr is None:
            return self.make_failure('INVALID_DISEASE')

        result = self.BA.find_variants_for_genes_cbio(gene_names, disease_abbr,
                                                      "tcga")

        if not result:
            return self.make_failure('MISSING_MECHANISM')

        reply = KQMLList('SUCCESS')
        reply.sets('variants', str(result))

        return reply
Пример #12
0
    def create_message1(self):
        txt = 'ELK1 transcribes FOS.'
        model = stmts_clj_from_text(txt)
        entity = agent_clj_from_text('FOS')

        entities = KQMLList([KQMLList([':description', entity])])
        pattern = KQMLList()
        pattern.set('entities', entities)
        pattern.sets('type', 'eventual_value')
        value = KQMLList()
        value.sets('type', 'qualitative')
        value.sets('value', 'high')
        pattern.set('value', value)

        content = KQMLList('SATISFIES-PATTERN')
        content.set('pattern', pattern)
        content.set('model', model)

        condition_entity = agent_clj_from_text('MAPK1')
        conditions = KQMLList()
        condition = KQMLList()
        condition.sets('type', 'multiple')
        condition.set('value', '100.0')
        quantity = KQMLList()
        quantity.sets('type', 'total')
        entity = KQMLList()
        entity.set('description', condition_entity)
        quantity.set('entity', entity)
        condition.set('quantity', quantity)
        conditions.append(condition)
        content.set('conditions', conditions)

        msg = get_request(content)
        return msg, content
Пример #13
0
    def respond_find_mutation_significance(self, content):
        """Response content to find-mutation-significance request"""
        gene_arg = content.gets('GENE')

        if not gene_arg:
            self.make_failure('MISSING_MECHANISM')

        gene_names = _get_term_names(gene_arg)
        if not gene_names:
            return self.make_failure('MISSING_MECHANISM')
        gene_name = gene_names[0]

        disease_arg = content.gets('DISEASE')
        if not disease_arg:
            return self.make_failure('MISSING_MECHANISM')

        disease_names = _get_term_names(disease_arg)
        if not disease_names:
            return self.make_failure('INVALID_DISEASE')

        disease_name = disease_names[0].replace("-", " ").lower()
        disease_abbr = self.CA.get_tcga_abbr(disease_name)
        if disease_abbr is None:
            return self.make_failure('INVALID_DISEASE')

        result = self.CA.find_mutation_significance(gene_name, disease_abbr)

        if not result:
            return self.make_failure('MISSING_MECHANISM')

        reply = KQMLList('SUCCESS')
        reply.sets('mutsig', result)

        return reply
Пример #14
0
 def send_display_figure(self, path):
     msg = KQMLPerformative('tell')
     content = KQMLList('display-image')
     content.set('type', 'simulation')
     content.sets('path', path)
     msg.set('content', content)
     self.send(msg)
    def respond_find_mutation_frequency(self, content):
        """Response content to find-mutation-frequency request"""
        gene_arg = content.gets('GENE')

        if not gene_arg:
            self.make_failure('MISSING_MECHANISM')

        gene_names = _get_term_names(gene_arg)
        if not gene_names:
            return self.make_failure('MISSING_MECHANISM')
        gene_name = gene_names[0]

        disease_arg = content.gets('DISEASE')
        if not disease_arg:
            return self.make_failure('MISSING_MECHANISM')

        disease_names = _get_term_names(disease_arg)
        if not disease_names:
            return self.make_failure('INVALID_DISEASE')

        disease_name = _sanitize_disase_name(disease_names[0])
        disease_abbr = self.CA.get_tcga_abbr(disease_name)
        if disease_abbr is None:
            return self.make_failure('INVALID_DISEASE')

        result = self.CA.find_mutation_frequency(gene_name, disease_abbr)

        if not result:
            return self.make_failure('MISSING_MECHANISM')

        reply = KQMLList('SUCCESS')
        reply.sets('mutfreq', result)

        return reply
Пример #16
0
 def create_message_failure(self):
     target = agent_clj_from_text('BRAF')
     content = KQMLList('FIND-CAUSALITY-SOURCE')
     content.set('target', target)
     content.sets('type', 'activates')
     msg = get_request(content)
     return msg, content
Пример #17
0
 def create_message(self):
     target = agent_clj_from_text('BRAF')
     content = KQMLList('FIND-CAUSALITY-SOURCE')
     content.set('target', target)
     content.sets('type', 'phosphorylation')
     msg = get_request(content)
     return msg, content
Пример #18
0
 def create_message_failure(self):
     source = agent_clj_from_text('MAPK1')
     content = KQMLList('FIND-CAUSALITY-TARGET')
     content.set('source', source)
     content.sets('type', 'activation')
     msg = get_request(content)
     return msg, content
Пример #19
0
 def make_failure(reason=None, description=None):
     msg = KQMLList('FAILURE')
     if reason:
         msg.set('reason', reason)
     if description:
         msg.sets('description', description)
     return msg
Пример #20
0
def test_build_from_json():
    mm = MRA_Module(testing=True)
    st = Phosphorylation(Agent('MEK'), Agent('ERK'))
    msg = KQMLList('BUILD-MODEL')
    msg.sets('description', json.dumps(stmts_to_json([st])))
    msg.sets('format', 'indra_json')
    print(msg)
    reply = mm.respond_build_model(msg)
Пример #21
0
def test_choose_nonsense():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE')
    msg_content.sets('ekb-term', ekb_from_text('bagel'))
    res = bs.respond_choose_sense(msg_content)
    print(res)
    assert res.head() == 'SUCCESS'
    assert res.get('agents')[0].gets('ont-type') == None
Пример #22
0
def test_respond_choose_nonsense():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE')
    msg_content.sets('ekb-term', ekb_from_text('bagel'))
    res = bs.respond_choose_sense(msg_content)
    print(res)
    assert res.head() == 'SUCCESS'
    assert res.get('agents')[0].gets('ont-type') is None
Пример #23
0
    def create_message_1(self):
        content = KQMLList('FIND-DRUGS-FOR-MUTATION-DATASET')
        genes = ekb_from_text('TP53')
        content.sets('genes', str(genes))
        content.sets('dataset', "CTRP")

        msg = get_request(content)
        return msg, content
Пример #24
0
 def _get_drug_kqml(drug_list):
     drugs = KQMLList()
     for dn, pci in drug_list:
         drug = KQMLList()
         drug.sets('name', dn.replace(' ', '-'))
         if pci:
             drug.sets('pubchem_id', pci)
         drugs.append(drug)
     return drugs
Пример #25
0
 def create_message_failure(self):
     source = agent_clj_from_text('MAPK1')
     target = agent_clj_from_text('RAS')
     content = KQMLList('FIND-CAUSAL-PATH')
     content.set('source', source)
     content.set('target', target)
     content.sets('direction', 'both')
     msg = get_request(content)
     return msg, content
Пример #26
0
 def _get_drug_kqml(drug_list):
     drugs = KQMLList()
     for dn, pci in drug_list:
         drug = KQMLList()
         drug.sets('name', dn.replace(' ', '-'))
         if pci:
             drug.sets('pubchem_id', pci)
         drugs.append(drug)
     return drugs
Пример #27
0
def _get_perf(text, msg_id):
    """Return a request message for a given text."""
    msg = KQMLPerformative('REQUEST')
    msg.set('receiver', 'READER')
    content = KQMLList('run-text')
    content.sets('text', text)
    msg.set('content', content)
    msg.set('reply-with', msg_id)
    return msg
Пример #28
0
 def send_null_provenance(self, stmt, for_what, reason=''):
     """Send out that no provenance could be found for a given Statement."""
     content_fmt = ('<h4>No supporting evidence found for {statement} from '
                    '{cause}{reason}.</h4>')
     content = KQMLList('add-provenance')
     stmt_txt = EnglishAssembler([stmt]).make_model()
     content.sets('html', content_fmt.format(statement=stmt_txt,
                                             cause=for_what, reason=reason))
     return self.tell(content)
Пример #29
0
 def create_message_failure_3(self):
     source = ekb_kstring_from_text('RAS')
     target = ekb_kstring_from_text('MAPK1')
     content = KQMLList('FIND-CAUSAL-PATH')
     content.set('source', source)
     content.set('target', target)
     content.sets('direction', 'strict')
     msg = get_request(content)
     return msg, content
Пример #30
0
def _get_perf(text, msg_id):
    text = text.encode('utf-8')
    msg = KQMLPerformative('REQUEST')
    msg.set('receiver', 'DRUM')
    content = KQMLList('run-text')
    content.sets('text', text)
    msg.set('content', content)
    msg.set('reply-with', msg_id)
    return msg
Пример #31
0
 def send_null_provenance(self, stmt, for_what, reason=''):
     """Send out that no provenance could be found for a given Statement."""
     content_fmt = ('<h4>No supporting evidence found for {statement} from '
                    '{cause}{reason}.</h4>')
     content = KQMLList('add-provenance')
     stmt_txt = EnglishAssembler([stmt]).make_model()
     content.sets('html', content_fmt.format(statement=stmt_txt,
                                             cause=for_what, reason=reason))
     return self.tell(content)
Пример #32
0
    def create_message_1(self):
        content = KQMLList('GET-VARIANT-INFO')
        gene = agent_clj_from_text('TP53')
        content.set('gene', gene)

        mutation = 'p.S241F'
        content.sets('mutation', mutation)

        msg = get_request(content)
        return msg, content
Пример #33
0
def test_choose_sense_what_member():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE-WHAT-MEMBER')
    msg_content.sets('collection', mek_ekb)
    print(msg_content)
    res = bs.respond_choose_sense_what_member(msg_content)
    print(res)
    print(res.head)
    assert (res.head() == 'SUCCESS')
    assert (len(res.get('members')) == 2)
Пример #34
0
def test_choose_sense_category():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE-CATEGORY')
    msg_content.sets('ekb-term', mek1_ekb)
    msg_content.sets('category', 'kinase activity')
    res = bs.respond_choose_sense_category(msg_content)
    print(res)
    print(res.head)
    assert (res.head() == 'SUCCESS')
    assert (res.get('in-category') == 'TRUE')
Пример #35
0
def test_respond_get_synonyms():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('GET-SYNONYMS')
    msg_content.sets('entity', mek1_ekb)
    res = bs.respond_get_synonyms(msg_content)
    assert res.head() == 'SUCCESS'
    syns = res.get('synonyms')
    syn_strs = [s.gets(':name') for s in syns]
    assert 'MAP2K1' in syn_strs
    assert 'MEK1' in syn_strs
    assert 'MKK1' in syn_strs
Пример #36
0
def test_respond_choose_sense_is_member():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE-IS-MEMBER')
    msg_content.sets('ekb-term', mek1_ekb)
    msg_content.sets('collection', mek_ekb)
    print(msg_content)
    res = bs.respond_choose_sense_is_member(msg_content)
    print(res)
    print(res.head())
    assert(res.head() == 'SUCCESS')
    assert(res.get('is-member') == 'TRUE')
Пример #37
0
def test_choose_sense_is_member():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE-IS-MEMBER')
    msg_content.sets('ekb-term', mek1_ekb)
    msg_content.sets('collection', mek_ekb)
    print(msg_content)
    res = bs.respond_choose_sense_is_member(msg_content)
    print(res)
    print(res.head)
    assert (res.head() == 'SUCCESS')
    assert (res.get('is-member') == 'TRUE')
Пример #38
0
 def report_paths_graph(self, paths_list):
     from indra.assemblers.graph import GraphAssembler
     from indra.util import flatten
     path_stmts = [stmts_from_json(l) for l in paths_list]
     all_stmts = flatten(path_stmts)
     ga = GraphAssembler(all_stmts)
     ga.make_model()
     resource = get_img_path('qca_paths.png')
     ga.save_pdf(resource)
     content = KQMLList('display-image')
     content.set('type', 'simulation')
     content.sets('path', resource)
     self.tell(content)
Пример #39
0
 def send_display_model(self, diagrams):
     for diagram_type, resource in diagrams.items():
         if not resource:
             continue
         if diagram_type == 'sbgn':
             content = KQMLList('display-sbgn')
             content.set('type', diagram_type)
             content.sets('graph', resource)
         else:
             content = KQMLList('display-image')
             content.set('type', diagram_type)
             content.sets('path', resource)
         self.tell(content)
Пример #40
0
def test_respond_choose_sense():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE')
    msg_content.sets('ekb-term', mek1_ekb)
    res = bs.respond_choose_sense(msg_content)
    print(res)
    agents = res.get('agents')
    assert agents and agents.data
    agent = agents[0]
    name = agent.gets('name')
    assert name == 'MAP2K1'
    ont_type = agent.get('ont-type')
    assert ont_type == 'ONT::GENE'
Пример #41
0
def get_ambiguities_msg(ambiguities):
    sa = []
    for term_id, ambiguity in ambiguities.items():
        msg = KQMLList(term_id)

        pr = ambiguity[0]['preferred']
        pr_dbids = '|'.join([':'.join((k, v)) for
                             k, v in pr['refs'].items()])
        term = KQMLList('term')
        term.set('ont-type', pr['type'])
        term.sets('ids', pr_dbids)
        term.sets('name', pr['name'])
        msg.set('preferred', term)

        alt = ambiguity[0]['alternative']
        alt_dbids = '|'.join([':'.join((k, v)) for
                              k, v in alt['refs'].items()])
        term = KQMLList('term')
        term.set('ont-type', alt['type'])
        term.sets('ids', alt_dbids)
        term.sets('name', alt['name'])
        msg.set('alternative', term)

        sa.append(msg)

    ambiguities_msg = KQMLList(sa)
    return ambiguities_msg
Пример #42
0
    def respond_describe_model(self, content):
        """Convert the model to natural language."""
        # Get the model.
        model_id = self._get_model_id(content)
        model = self.mra.get_model_by_id(model_id)

        # Turn the model into a text description.
        english_assembler = EnglishAssembler(model)
        desc = english_assembler.make_model()

        # Respond to the BA.
        resp = KQMLList('SUCCESS')
        resp.sets('description', desc)
        return resp
Пример #43
0
 def respond_model_get_json(self, content):
     """Return response content to model-get-json request."""
     try:
         model_id = self._get_model_id(content)
     except Exception:
         model_id = None
     model = self.mra.get_model_by_id(model_id)
     if model is not None:
         model_msg = encode_indra_stmts(model)
         reply = KQMLList('SUCCESS')
         reply.sets('model', model_msg)
     else:
         reply = self.make_failure('MISSING_MODEL')
     return reply
Пример #44
0
def test_respond_choose_sense_what_member():
    bs = BioSense_Module(testing=True)
    msg_content = KQMLList('CHOOSE-SENSE-WHAT-MEMBER')
    msg_content.sets('collection', mek_ekb)
    print(msg_content)
    res = bs.respond_choose_sense_what_member(msg_content)
    print(res)
    print(res.head())
    assert(res.head() == 'SUCCESS')
    assert(len(res.get('members')) == 2)
    m1 = res.get('members')[0]
    m2 = res.get('members')[1]
    assert m1.gets('name') == 'MAP2K1', m1.gets('name')
    assert m2.gets('name') == 'MAP2K2', m2.gets('name')
Пример #45
0
def get_kagent(agent_tuple, term_id=None):
    agent, ont_type, urls = agent_tuple
    db_refs = '|'.join('%s:%s' % (k, v) for k, v in
                       agent.db_refs.items())
    kagent = KQMLList(term_id) if term_id else KQMLList()
    kagent.sets('name', agent.name)
    kagent.sets('ids', db_refs)
    url_parts = [KQMLList([':name', KQMLString(k),
                           ':dblink', KQMLString(v)])
                 for k, v in urls.items()]
    url_list = KQMLList()
    for url_part in url_parts:
        url_list.append(url_part)
    kagent.set('id-urls', url_list)
    kagent.set('ont-type', ont_type)
    return kagent
Пример #46
0
    def respond_model_remove_mechanism(self, content):
        """Return response content to model-remove-mechanism request."""
        ekb = content.gets('description')
        model_id = self._get_model_id(content)
        no_display = content.get('no-display')
        try:
            res = self.mra.remove_mechanism(ekb, model_id)
        except Exception as e:
            raise InvalidModelDescriptionError(e)
        model_id = res.get('model_id')
        if model_id is None:
            raise InvalidModelDescriptionError('Could not find model id.')
        # Start a SUCCESS message
        msg = KQMLPerformative('SUCCESS')
        # Add the model id
        msg.set('model-id', str(model_id))
        # Add the INDRA model json
        model = res.get('model')
        model_msg = encode_indra_stmts(model)
        msg.sets('model', model_msg)

        # Handle empty model
        if not model:
            self.send_clean_model()

        # Get the action and add it to the message
        removed = res.get('removed')
        if not removed:
            msg = self.make_failure('REMOVE_FAILED')
            return msg
        else:
            actionl = KQMLList('remove_stmts')
            actionl.sets('statements', encode_indra_stmts(removed))
            msg.set('action', actionl)

        # Add the diagram
        diagrams = res.get('diagrams')
        logger.info(diagrams)
        if not no_display:
            if diagrams:
                rxn_diagram = diagrams.get('reactionnetwork')
                if rxn_diagram:
                    msg.sets('diagram', rxn_diagram)
                self.send_display_model(diagrams)
        return msg
Пример #47
0
 def respond_get_synonyms(self, content):
     """Respond to a query looking for synonyms of a protein."""
     ekb = content.gets('entity')
     try:
         synonyms = self.bs.get_synonyms(ekb)
     except InvalidAgentError:
         msg = self.make_failure('INVALID_AGENT')
     except SynonymsUnknownError:
         msg = self.make_failure('SYNONYMS_UNKNOWN')
     else:
         syns_kqml = KQMLList()
         for s in synonyms:
             entry = KQMLList()
             entry.sets(':name', s)
             syns_kqml.append(entry)
         msg = KQMLList('SUCCESS')
         msg.set('synonyms', syns_kqml)
     return msg
Пример #48
0
    def send_provenance_for_stmts(self, stmt_list, for_what, limit=50,
                                  ev_counts=None):
        """Send out a provenance tell for a list of INDRA Statements.

        The message is used to provide evidence supporting a conclusion.
        """
        logger.info("Sending provenance for %d statements for \"%s\"."
                    % (len(stmt_list), for_what))
        title = "Supporting evidence from the %s for %s" \
                % (self.name, for_what)
        content_fmt = '<h4>%s (max %s):</h4>\n%s<hr>'
        evidence_html = self._make_report_cols_html(stmt_list, limit=limit,
                                                    ev_counts=ev_counts,
                                                    title=title)

        content = KQMLList('add-provenance')
        content.sets('html', content_fmt % (title, limit, evidence_html))
        return self.tell(content)
Пример #49
0
    def read_pmc(self, pmcid):
        """Read a given PMC article.

        Parameters
        ----------
        pmcid : str
            The PMC ID of the article to read. Note that only
            articles in the open-access subset of PMC will work.
        """
        msg = KQMLPerformative('REQUEST')
        msg.set('receiver', 'READER')
        content = KQMLList('run-pmcid')
        content.sets('pmcid', pmcid)
        content.set('reply-when-done', 'true')
        msg.set('content', content)
        msg.set('reply-with', 'P-%s' % pmcid)
        self.reply_counter += 1
        self.send(msg)
Пример #50
0
    def respond_find_treatment(self, content):
        """Response content to find-treatment request."""
        try:
            disease_arg = content.gets('disease')
            disease = get_disease(ET.fromstring(disease_arg))
        except Exception as e:
            logger.error(e)
            reply = self.make_failure('INVALID_DISEASE')
            return reply

        logger.info('Disease type: %s' % disease.disease_type)

        if not trips_isa(disease.disease_type, 'ont::cancer'):
            logger.info('Disease is not a type of cancer.')
            reply = self.make_failure('DISEASE_NOT_FOUND')
            return reply

        logger.debug('Disease: %s' % disease.name)

        try:
            mut_protein, mut_percent, agents = \
                self.dtda.get_top_mutation(disease.name)
        except DiseaseNotFoundException:
            reply = self.make_failure('DISEASE_NOT_FOUND')
            return reply

        # TODO: get functional effect from actual mutations
        # TODO: add list of actual mutations to response
        # TODO: get fraction not percentage from DTDA
        reply = KQMLList('SUCCESS')
        protein = KQMLList()
        protein.set('name', mut_protein)
        protein.set('hgnc', mut_protein)
        reply.set('protein', protein)
        reply.sets('disease', disease_arg)
        reply.set('prevalence', '%.2f' % (mut_percent/100.0))
        reply.set('functional-effect', 'ACTIVE')
        # These differ only in mutation, which isn't relevant.
        an_agent = agents[0]
        drug_results = self.dtda.find_target_drugs(an_agent)
        drugs = self._get_drug_kqml(drug_results)
        reply.set('drugs', drugs)
        return reply
Пример #51
0
    def respond_find_drug_targets(self, content):
        """Response content to find-drug-target request."""
        try:
            drug_arg = content.gets('drug')
            drug = self._get_agent(drug_arg)
        except Exception as e:
            return self.make_failure('INVALID_DRUG')
        logger.info('DTDA looking for targets of %s' % drug.name)
        drug_targets = self.dtda.find_drug_targets(drug)
        all_targets = sorted(list(set(drug_targets)))

        reply = KQMLList('SUCCESS')
        targets = KQMLList()
        for target_name in all_targets:
            target = KQMLList()
            target.sets('name', target_name)
            targets.append(target)
        reply.set('targets', targets)
        return reply
Пример #52
0
def test_respond_choose_sense_category():
    bs = BioSense_Module(testing=True)
    cases = [(mek1_ekb, [('kinase activity', 'TRUE'),
                         ('enzyme', 'TRUE'),
                         ('kinase', 'TRUE'),
                         ('transcription-factor', 'FALSE'),
                         ('W::KINASE', 'TRUE'),
                         ('phosphatase', 'FALSE')]),
             (dusp_ekb, [('phosphatase', 'TRUE'), ('enzyme', 'TRUE')]),
             (ekb_from_text('BRAF'), [('kinase', 'TRUE')])]
    for ekb, result_tuples in cases:
        msg_content = KQMLList('CHOOSE-SENSE-CATEGORY')
        msg_content.sets('ekb-term', ekb)
        for cat, result in result_tuples:
            print('Testing: %s. Excpet result %s.' % (cat, result))
            msg_content.sets('category', cat)
            res = bs.respond_choose_sense_category(msg_content)
            print(res)
            print(res.head())
            assert(res.head() == 'SUCCESS')
            assert(res.get('in-category') == result)
Пример #53
0
    def respond_model_undo(self, content):
        """Return response content to model-undo request."""
        res = self.mra.model_undo()
        no_display = content.get('no-display')
        model_id = res.get('model_id')
        # Start a SUCCESS message
        msg = KQMLPerformative('SUCCESS')
        # Add the model id
        msg.set('model-id', 'NIL' if model_id is None else str(model_id))
        # Add the INDRA model json
        model = res.get('model')

        # Handle empty model
        if not model:
            self.send_clean_model()

        model_msg = encode_indra_stmts(model)
        msg.sets('model', model_msg)
        # Get the action and add it to the message
        action = res.get('action')
        actionl = KQMLList()
        # Here we handle no action as effectively an empty remove action
        if action['action'] in ('no_op', 'remove_stmts'):
            actionl.append('remove_stmts')
            actionl.sets(
                'statements',
                encode_indra_stmts(action['statements'])
                )
        msg.set('action', actionl)

        # Add the diagram
        diagrams = res.get('diagrams')
        if not no_display:
            if diagrams:
                rxn_diagram = diagrams.get('reactionnetwork')
                if rxn_diagram:
                    msg.sets('diagram', rxn_diagram)
                self.send_display_model(diagrams)
        return msg
Пример #54
0
    def send_model_diagnoses(self, res):
        # SUGGESTIONS
        # If there is an explanation, english assemble it
        expl_path = res.get('explanation_path')
        if expl_path:
            # Only send this if we haven't already sent an explanation
            if not self.have_explanation:
                ea_path = EnglishAssembler(expl_path)
                path_str = ea_path.make_model()
                ea_goal = EnglishAssembler([self.mra.explain])
                goal_str = ea_goal.make_model()
                if path_str and goal_str:
                    explanation_str = (
                            'Our model can now explain how %s: <i>%s</i>' %
                            (goal_str[:-1], path_str))
                    content = KQMLList('SPOKEN')
                    content.sets('WHAT', explanation_str)
                    self.tell(content)

        # If there is a suggestion, say it
        suggs = res.get('stmt_suggestions')
        if suggs:
            say = 'I have some suggestions on how to complete our model.'
            say += ' We could try modeling one of:<br>'
            stmt_str = '<ul>%s</ul>' % \
                       ''.join([('<li>%s</li>' % EnglishAssembler([stmt]).make_model())
                                for stmt in suggs])
            say += stmt_str
            content = KQMLList('SPOKEN')
            content.sets('WHAT', say)
            self.tell(content)

        # If there are corrections
        corrs = res.get('stmt_corrections')
        if corrs:
            stmt = corrs[0]
            say = 'It looks like a required activity is missing,'
            say += ' consider revising to <i>%s</i>' % \
                   (EnglishAssembler([stmt]).make_model())
            content = KQMLList('SPOKEN')
            content.sets('WHAT', say)
            self.tell(content)
Пример #55
0
 def create_statements(self):
     content = KQMLList('INDRA-TO-NL')
     content.sets('statements', json.dumps(stmts_to_json(self.statements)))
     return get_request(content), content
Пример #56
0
 def create_message(self):
     content = KQMLList('TEST')
     content.sets('description', '')
     msg = KQMLPerformative('REQUEST')
     msg.set('content', content)
     return msg, content