예제 #1
0
    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)
예제 #2
0
 def createPopulations(self):
     self.populationDict = {}
     for population in self.network.findall(".//{"+nml_ns+"}population"):
         cellname = population.attrib["cell_type"]
         populationname = population.attrib["name"]
         print "loading", populationname
         ## if cell does not exist in library load it from xml file
         if not moose.exists('/library/'+cellname):
             mmlR = MorphML(self.nml_params)
             model_filenames = (cellname+'.xml', cellname+'.morph.xml')
             success = False
             for model_filename in model_filenames:
                 model_path = find_first_file(model_filename,self.model_dir)
                 if model_path is not None:
                     cellDict = mmlR.readMorphMLFromFile(model_path)
                     success = True
                     break
             if not success:
                 raise IOError(
                     'For cell {0}: files {1} not found under {2}.'.format(
                         cellname, model_filenames, self.model_dir
                     )
                 )
             self.cellSegmentDict.update(cellDict)
         if cellname == 'LIF':
             libcell = moose.LeakyIaF('/library/'+cellname)
         else:
             libcell = moose.Neuron('/library/'+cellname) #added cells as a Neuron class.
         self.populationDict[populationname] = (cellname,{})
         moose.Neutral('/cells')
         for instance in population.findall(".//{"+nml_ns+"}instance"):
             instanceid = instance.attrib['id']
             location = instance.find('./{'+nml_ns+'}location')
             rotationnote = instance.find('./{'+meta_ns+'}notes')
             if rotationnote is not None:
                 ## the text in rotationnote is zrotation=xxxxxxx
                 zrotation = float(string.split(rotationnote.text,'=')[1])
             else:
                 zrotation = 0
             ## deep copies the library cell to an instance under '/cells' named as <arg3>
             ## /cells is useful for scheduling clocks as all sim elements are in /cells
             cellid = moose.copy(libcell,moose.Neutral('/cells'),populationname+"_"+instanceid)
             if cellname == 'LIF':
                 cell = moose.LeakyIaF(cellid)
                 self.populationDict[populationname][1][int(instanceid)]=cell
             else:
                 cell = moose.Neuron(cellid) # No Cell class in MOOSE anymore! :( addded Neuron class - Chaitanya
                 self.populationDict[populationname][1][int(instanceid)]=cell
                 x = float(location.attrib['x'])*self.length_factor
                 y = float(location.attrib['y'])*self.length_factor
                 z = float(location.attrib['z'])*self.length_factor
                 self.translate_rotate(cell,x,y,z,zrotation)
예제 #3
0
파일: NetworkML.py 프로젝트: ccluri/Moogli
 def createPopulations(self):
     self.populationDict = {}
     for population in self.network.findall(".//{"+nml_ns+"}population"):
         cellname = population.attrib["cell_type"]
         populationname = population.attrib["name"]
         print "loading", populationname
         ## if cell does not exist in library load it from xml file
         if not self.library.has_key(cellname):
             mmlR = MorphML(self.nml_params)
             model_filenames = (cellname+'.xml', cellname+'.morph.xml')
             success = False
             for model_filename in model_filenames:
                 model_path = find_first_file(model_filename,self.model_dir)
                 if model_path is not None:
                     cellDict = mmlR.readMorphMLFromFile(model_path)
                     success = True
                     break
             if not success:
                 raise IOError(
                     'For cell {0}: files {1} not found under {2}.'.format(
                         cellname, model_filenames, self.model_dir
                     )
                 )
             self.cellSegmentDict.update(cellDict)
             self.library[cellname] = cellDict
         
         #self.populationDict[populationname] = (cellname,{})
         for instance in population.findall(".//{"+nml_ns+"}instance"):
             instanceid = instance.attrib['id']
             location = instance.find('./{'+nml_ns+'}location')
             rotationnote = instance.find('./{'+meta_ns+'}notes')
             if rotationnote is not None:
                 zrotation = float(string.split(rotationnote.text,'=')[1])
             else:
                 zrotation = 0
             x = float(location.attrib['x'])*self.length_factor
             y = float(location.attrib['y'])*self.length_factor
             z = float(location.attrib['z'])*self.length_factor
             self.populationDict.update(self.translate_rotate(populationname,instanceid,self.library[cellname],x,y,z,zrotation))
예제 #4
0
파일: NeuroML.py 프로젝트: ccluri/Moogli
    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)