Source code for owmeta.data_trans.neuron_data

from rdflib.namespace import Namespace

from owmeta_core.datasource import Informational
from owmeta_core.data_trans.csv_ds import CSVDataSource, CSVDataTranslator

from .. import CONTEXT
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 .common_data import DSMixin, DTMixin
from .data_with_evidence_ds import DataWithEvidenceDataSource


[docs]class NeuronCSVDataSource(DSMixin, CSVDataSource): class_context = CONTEXT 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(DTMixin, CSVDataTranslator): class_context = CONTEXT input_type = NeuronCSVDataSource output_type = DataWithEvidenceDataSource 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