Source code for PyOpenWorm.data_trans.neuron_data

from rdflib.namespace import Namespace

from ..neuron import Neuron
from ..network import Network
from ..worm import Worm
from ..document import Document
from ..evidence import Evidence
from ..bibtex import parse_bibtex_into_documents
from ..datasource import Informational
from .common_data import DS_NS, TRANS_NS
from .csv_ds import CSVDataSource, CSVDataTranslator

from .data_with_evidence_ds import DataWithEvidenceDataSource


[docs]class NeuronCSVDataSource(CSVDataSource): rdf_namespace = Namespace(DS_NS['NeuronCSVDataSource#']) bibtex_files = Informational(display_name='BibTeX files', description='List of BibTeX files that are referenced in the csv file by entry ID')
[docs]class NeuronCSVDataTranslator(CSVDataTranslator): input_type = NeuronCSVDataSource output_type = DataWithEvidenceDataSource translator_identifier = TRANS_NS.NeuronCSVDataTranslator def __init__(self, *args, **kwargs): super(NeuronCSVDataTranslator, self).__init__(*args, **kwargs) self.__document_contexts = dict()
[docs] def translate(self, data_source): res = self.make_new_output((data_source,)) documents = dict() bibtex_files = data_source.bibtex_files.onedef() if bibtex_files is not None: for bib in bibtex_files: documents.update(parse_bibtex_into_documents(bib, res.evidence_context)) worm = res.data_context(Worm)() network = res.data_context(Network)(worm=worm) with self.make_reader(data_source, skipheader=True) as reader: for row in reader: neuron_name, relation, data, evidence, documentURL = row relation = relation.lower() docs = [] doc = documents.get(evidence, None) if doc is not None: docs.append(doc) if len(documentURL) > 0: doc1 = documents.get(documentURL, res.evidence_context(Document)(uri=documentURL)) documents[documentURL] = doc1 docs.append(doc1) if relation in ('neurotransmitter', 'innexin', 'neuropeptide', 'receptor'): for d in docs: neu = res.data_context_for(document=d)(Neuron)(neuron_name) network.neuron(neu) getattr(neu, relation)(data) elif relation == 'type': _data = data.lower() # type data aren't normalized so we check for strings within the _data string types = [x for x in ('sensory', 'interneuron', 'motor', 'unknown') if x in _data] for t in types: for d in docs: neu = res.data_context_for(document=d)(Neuron)(neuron_name) network.neuron(neu) neu.type(t) for d in documents.values(): contextualized_doc_ctx = res.evidence_context(res.data_context_for(document=d)) res.evidence_context(Evidence)(reference=d, supports=contextualized_doc_ctx.rdf_object) res.data_context.add_import(contextualized_doc_ctx) return res
__yarom_mapped_classes__ = (NeuronCSVDataSource, NeuronCSVDataTranslator)