Source code for ipfx.bin.make_stimulus_ontology

import allensdk.core.json_utilities as ju
from ipfx.stimulus import StimulusOntology
import re
import ipfx.lims_queries as lq
import logging


[docs]def make_stimulus_ontology(stims): NAME = 'name' CODE = 'code' RES = 'resolution' CORE = 'core' HOLD = 'hold' ontology_tags = [] stims = [{k: v for k, v in stim.items()} for stim in stims] for stim in stims: tags = set() sname = stim['stimulus_name'] scode = stim['stimulus_code'] # code tags m = re.search("(.*)\d{6}$", scode) if m: code_name, = m.groups() tags.add((CODE, code_name, scode)) else: tags.add((CODE, scode)) # core tags if scode.startswith('C1'): tags.add((CORE, 'Core 1')) elif scode.startswith('C2'): tags.add((CORE, 'Core 2')) # resolution tags if 'FINE' in scode: tags.add((RES, 'Fine')) elif 'COARSE' in scode: tags.add((RES, 'Coarse')) # name tags if 'C1NS' in scode: tags.add((NAME, 'Noise', sname)) elif 'Short Square' in sname and 'Triple' not in sname: tags.add((NAME, 'Short Square')) elif 'Long Square' in sname: tags.add((NAME, 'Long Square')) else: tags.add((NAME, sname)) # hold tags if 'Hold' in sname: # find the first dash idx = sname.find('-') b = sname[idx + 1:] tags.add((HOLD, b.strip())) ontology_tags.append(list(tags)) return ontology_tags
[docs]def make_stimulus_ontology_from_lims(file_name): if lq.able_to_connect_to_lims(): stims = lq.get_stimuli_description() stim_ontology = make_stimulus_ontology(stims) ju.write(file_name, stim_ontology) logging.info("Updated stimulus ontology from LIMS")
[docs]def make_default_stimulus_ontology(): stimulus_ontology_file = StimulusOntology.DEFAULT_STIMULUS_ONTOLOGY_FILE make_stimulus_ontology_from_lims(stimulus_ontology_file)
[docs]def main(): make_default_stimulus_ontology()
if __name__== "__main__": main()