def readNeuroMLFromFile(self,filename,params={}): """ For the format of params required to tweak what cells are loaded, refer to the doc string of NetworkML.readNetworkMLFromFile(). Returns (populationDict,projectionDict), see doc string of NetworkML.readNetworkML() for details. """ print "Loading neuroml file ... ", filename moose.Neutral('/library') # creates /library in MOOSE tree; elif present, wraps tree = ET.parse(filename) root_element = tree.getroot() self.model_dir = path.dirname( path.abspath( filename ) ) self.lengthUnits = root_element.attrib['lengthUnits'] self.temperature = CELSIUS_default # gets replaced below if tag for temperature is present self.temperature_default = True for meta_property in root_element.findall('.//{'+meta_ns+'}property'): tagname = meta_property.attrib['tag'] if 'temperature' in tagname: self.temperature = float(meta_property.attrib['value']) self.temperature_default = False if self.temperature_default: print "Using default temperature of", self.temperature,"degrees Celsius." self.nml_params = { 'temperature':self.temperature, 'model_dir':self.model_dir, } #print "Loading channels and synapses into MOOSE /library ..." cmlR = ChannelML(self.nml_params) for channels in root_element.findall('.//{'+neuroml_ns+'}channels'): self.channelUnits = channels.attrib['units'] for channel in channels.findall('.//{'+cml_ns+'}channel_type'): ## ideally I should read in extra params ## from within the channel_type element and put those in also. ## Global params should override local ones. cmlR.readChannelML(channel,params={},units=self.channelUnits) for synapse in channels.findall('.//{'+cml_ns+'}synapse_type'): cmlR.readSynapseML(synapse,units=self.channelUnits) for ionConc in channels.findall('.//{'+cml_ns+'}ion_concentration'): cmlR.readIonConcML(ionConc,units=self.channelUnits) #print "Loading cell definitions into MOOSE /library ..." mmlR = MorphML(self.nml_params) self.cellsDict = {} for cells in root_element.findall('.//{'+neuroml_ns+'}cells'): for cell in cells.findall('.//{'+neuroml_ns+'}cell'): cellDict = mmlR.readMorphML(cell,params={},lengthUnits=self.lengthUnits) self.cellsDict.update(cellDict) print "Loading individual cells into MOOSE root ... " print self.cellsDict nmlR = NetworkML(self.nml_params) print self.cellsDict return nmlR.readNetworkML(root_element,self.cellsDict,params=params,lengthUnits=self.lengthUnits)
def readNeuroMLFromFile(self,filename,params={}): """ For the format of params required to tweak what cells are loaded, refer to the doc string of NetworkML.readNetworkMLFromFile(). Returns (populationDict,projectionDict), see doc string of NetworkML.readNetworkML() for details. """ print "Loading neuroml file ... ", filename tree = ET.parse(filename) root_element = tree.getroot() self.model_dir = path.dirname(path.abspath(filename)) try: self.lengthUnits = root_element.attrib['lengthUnits'] except: self.lengthUnits = root_element.attrib['length_units'] self.nml_params = { 'model_dir':self.model_dir, } if root_element.tag.rsplit('}')[1] == 'neuroml': cellTag = neuroml_ns else: cellTag = mml_ns mmlR = MorphML(self.nml_params) self.cellsDict = {} for cells in root_element.findall('.//{'+cellTag+'}cells'): for cell in cells.findall('.//{'+cellTag+'}cell'): cellDict = mmlR.readMorphML(cell,params={},length_units=self.lengthUnits) self.cellsDict.update(cellDict) if len(self.cellsDict) != 0: return self.cellsDict else: nmlR = NetworkML(self.nml_params) return nmlR.readNetworkML(root_element,self.cellsDict,params=params,lengthUnits=self.lengthUnits)