Example #1
0
    def __nml2_doc(cls,file_name,optimized=False):
        import sys
        
        import logging
        logging.basicConfig(level=logging.INFO, format="%(name)-19s %(levelname)-5s - %(message)s")
        
        from neuroml.hdf5.NeuroMLHdf5Parser import NeuroMLHdf5Parser
            
        if optimized:
            
            currParser = NeuroMLHdf5Parser(None,optimized=True) 
            
            currParser.parse(file_name)
            
            return currParser.get_nml_doc()
        else:
        
            from neuroml.hdf5.NetworkBuilder import NetworkBuilder

            nmlHandler = NetworkBuilder()   

            currParser = NeuroMLHdf5Parser(nmlHandler) 

            currParser.parse(file_name)

            nml2_doc = nmlHandler.get_nml_doc()
            if currParser.nml_doc_extra_elements:
                add_all_to_document(currParser.nml_doc_extra_elements,nml2_doc)

            return nml2_doc
Example #2
0
    def __nml2_doc(cls,file_name):
        import sys
        
        import logging
        logging.basicConfig(level=logging.INFO, format="%(name)-19s %(levelname)-5s - %(message)s")
        
        from neuroml.hdf5.NetworkBuilder import NetworkBuilder
        from neuroml.hdf5.NeuroMLHdf5Parser import NeuroMLHdf5Parser
        
        try:
            nmlHandler = NetworkBuilder()   

            currParser = NeuroMLHdf5Parser(nmlHandler) 

            currParser.parse(file_name)

            nml2_doc = nmlHandler.get_nml_doc()
            
        except Exception:
            print("Not a valid NeuroML 2 doc: %s" % str(sys.exc_info())) 
            return None    
        return nml2_doc
Example #3
0
    def __nml2_doc(cls, file_name):
        import sys

        import logging
        logging.basicConfig(level=logging.INFO,
                            format="%(name)-19s %(levelname)-5s - %(message)s")

        from neuroml.hdf5.NetworkBuilder import NetworkBuilder
        from neuroml.hdf5.NeuroMLHdf5Parser import NeuroMLHdf5Parser

        try:
            nmlHandler = NetworkBuilder()

            currParser = NeuroMLHdf5Parser(nmlHandler)

            currParser.parse(file_name)

            nml2_doc = nmlHandler.get_nml_doc()

        except Exception:
            print("Not a valid NeuroML 2 doc: %s" % str(sys.exc_info()))
            return None
        return nml2_doc
    def test_parse(self):
        
        base_dir = os.path.dirname(__file__)
        #base_dir = '.'
        
        logging.basicConfig(level=logging.INFO, format="%(name)-19s %(levelname)-5s - %(message)s")
        
        for f in ['simplenet.nml','testh5.nml','pyr_4_sym.cell.nml','MediumNet.net.nml','complete.nml']: 
        
            file_name = base_dir+'/../examples/test_files/'+f

            nml_doc0 = loaders.read_neuroml2_file(file_name,
                                                  include_includes=True,
                                                  verbose=True)
                                                  
            summary0 = nml_doc0.summary(show_includes=False,show_non_network=False)
            print('\n'+summary0)

            from neuroml.hdf5.DefaultNetworkHandler import DefaultNetworkHandler

            nmlHandler = DefaultNetworkHandler()     

            currParser = NeuroMLXMLParser(nmlHandler) 

            currParser.parse(file_name)

            print('-------------------------------\n\n')

            nmlHandler = NetworkBuilder()   

            currParser = NeuroMLXMLParser(nmlHandler) 

            currParser.parse(file_name)

            nml_doc = nmlHandler.get_nml_doc()

            summary = nml_doc.summary(show_includes=False,show_non_network=False)

            print(summary)

            compare(summary,summary0)

            nml_file = base_dir+'/../examples/tmp/EXP_'+f
            import neuroml.writers as writers
            writers.NeuroMLWriter.write(nml_doc, nml_file)
            print("Written network file to: "+nml_file)
Example #5
0
def generate_neuroml2_from_network(nl_model,
                                   nml_file_name=None,
                                   print_summary=True,
                                   seed=1234,
                                   format='xml',
                                   base_dir=None,
                                   copy_included_elements=False,
                                   target_dir=None,
                                   validate=False):
    """
    Generate and save NeuroML2 file (in either XML or HDF5 format) from the 
    NeuroMLlite description
    """

    print_v("Generating NeuroML2 for %s%s..." %
            (nl_model.id, ' (base dir: %s; target dir: %s)' %
             (base_dir, target_dir) if base_dir or target_dir else ''))

    import neuroml
    from neuroml.hdf5.NetworkBuilder import NetworkBuilder

    neuroml_handler = NetworkBuilder()

    generate_network(nl_model, neuroml_handler, seed=seed, base_dir=base_dir)

    nml_doc = neuroml_handler.get_nml_doc()

    for i in nl_model.input_sources:

        if nml_doc.get_by_id(i.id) == None:
            if i.neuroml2_source_file:

                incl = neuroml.IncludeType(
                    _locate_file(i.neuroml2_source_file, base_dir))
                if not incl in nml_doc.includes:
                    nml_doc.includes.append(incl)

            if i.neuroml2_input:
                input_params = i.parameters if i.parameters else {}

                # TODO make more generic...

                if i.neuroml2_input.lower() == 'pulsegenerator':
                    input = neuroml.PulseGenerator(id=i.id)
                    nml_doc.pulse_generators.append(input)

                elif i.neuroml2_input.lower() == 'pulsegeneratordl':
                    input = neuroml.PulseGeneratorDL(id=i.id)
                    nml_doc.pulse_generator_dls.append(input)

                elif i.neuroml2_input.lower() == 'poissonfiringsynapse':
                    input = neuroml.PoissonFiringSynapse(id=i.id)
                    nml_doc.poisson_firing_synapses.append(input)

                for p in input_params:
                    exec('input.%s = "%s"' %
                         (p, evaluate(input_params[p], nl_model.parameters)))

    for c in nl_model.cells:
        if c.neuroml2_source_file:

            incl = neuroml.IncludeType(
                _locate_file(c.neuroml2_source_file, base_dir))
            found_cell = False
            for cell in nml_doc.cells:
                if cell.id == c.id:
                    nml_doc.cells.remove(
                        cell
                    )  # Better to use imported cell file; will have channels, etc.
                    nml_doc.includes.append(incl)
                    found_cell = True

            if not found_cell:
                for p in nl_model.populations:
                    if p.component == c.id:
                        pass

            if not incl in nml_doc.includes:
                nml_doc.includes.append(incl)
        '''  Needed???
        if c.lems_source_file:      
            incl = neuroml.IncludeType(_locate_file(c.lems_source_file, base_dir))
            if not incl in nml_doc.includes:
                nml_doc.includes.append(incl)'''

        if c.neuroml2_cell:

            cell_params = c.parameters if c.parameters else {}
            # TODO make more generic...
            if c.neuroml2_cell.lower() == 'spikegenerator':
                cell = neuroml.SpikeGenerator(id=c.id)
                nml_doc.spike_generators.append(cell)
            elif c.neuroml2_cell.lower() == 'spikegeneratorpoisson':
                cell = neuroml.SpikeGeneratorPoisson(id=c.id)
                nml_doc.spike_generator_poissons.append(cell)
            elif c.neuroml2_cell.lower() == 'spikegeneratorrefpoisson':
                cell = neuroml.SpikeGeneratorRefPoisson(id=c.id)
                nml_doc.spike_generator_ref_poissons.append(cell)
            else:
                raise Exception(
                    'The neuroml2_cell: %s is not yet supported...' %
                    c.neuroml2_cell)

            for p in cell_params:
                exec('cell.%s = "%s"' %
                     (p, evaluate(cell_params[p], nl_model.parameters)))

    for s in nl_model.synapses:
        if nml_doc.get_by_id(s.id) == None:
            if s.neuroml2_source_file:
                incl = neuroml.IncludeType(
                    _locate_file(s.neuroml2_source_file, base_dir))
                if not incl in nml_doc.includes:
                    nml_doc.includes.append(incl)

    # Look for and add the PyNN based elements to the NeuroMLDocument
    _extract_pynn_components_to_neuroml(nl_model, nml_doc)

    if print_summary:
        # Print info
        print_v(nml_doc.summary())

    # Save to file
    if target_dir == None:
        target_dir = base_dir
    if format == 'xml':
        if not nml_file_name:
            nml_file_name = _locate_file('%s.net.nml' % nml_doc.id, target_dir)
        from neuroml.writers import NeuroMLWriter
        NeuroMLWriter.write(nml_doc, nml_file_name)

    if format == 'hdf5':
        if not nml_file_name:
            nml_file_name = _locate_file('%s.net.nml.h5' % nml_doc.id,
                                         target_dir)
        from neuroml.writers import NeuroMLHdf5Writer
        NeuroMLHdf5Writer.write(nml_doc, nml_file_name)

    print_v("Written NeuroML to %s" % nml_file_name)

    if validate and format == 'xml':

        from pyneuroml import pynml
        success = pynml.validate_neuroml2(nml_file_name,
                                          verbose_validate=False)
        if success:
            print_v('Generated file is valid NeuroML2!')
        else:
            print_v('Generated file is NOT valid NeuroML2!')

    return nml_file_name, nml_doc
Example #6
0
net.populations[1].random_layout.append(
    RandomLayout(id='test2', x=1000, y=1000, z=1000))

print net.to_json()

###   Use a handler which just prints info on positions, etc.

def_handler = DefaultNetworkHandler()

generate_network(net, def_handler)

###   Use a handler which builds a NeuroML 2 representation

from neuroml.hdf5.NetworkBuilder import NetworkBuilder

neuroml_handler = NetworkBuilder()

generate_network(net, neuroml_handler)

nml_doc = neuroml_handler.get_nml_doc()

# Print info
print(nml_doc.summary())

# Save to file
file_name = '%s.net.nml' % nml_doc.id
from neuroml.writers import NeuroMLWriter
NeuroMLWriter.write(nml_doc, file_name)

print("Written NeuroML to %s" % file_name)
Example #7
0
    percentage_cells_per_pop = 1

    bbp = BBPConnectomeReader(
        filename=filename,
        percentage_cells_per_pop=percentage_cells_per_pop,
        DEFAULT_CELL_ID='hhcell')

    from neuromllite.DefaultNetworkHandler import DefaultNetworkHandler
    def_handler = DefaultNetworkHandler()

    bbp.parse(def_handler)

    from neuroml.hdf5.NetworkBuilder import NetworkBuilder

    neuroml_handler = NetworkBuilder()

    bbp = BBPConnectomeReader(
        filename=filename,
        percentage_cells_per_pop=percentage_cells_per_pop,
        DEFAULT_CELL_ID='hhcell')
    bbp.parse(neuroml_handler)

    nml_file_name = 'BBP.net.nml'

    from neuroml.writers import NeuroMLWriter
    NeuroMLWriter.write(neuroml_handler.get_nml_doc(), nml_file_name)
    '''
    from neuromllite.NeuronHandler import NeuronHandler

    from neuroml.hdf5.DefaultNetworkHandler import DefaultNetworkHandler

    nmlHandler = DefaultNetworkHandler()

    currParser = NeuroMLHdf5Parser(
        nmlHandler
    )  # The HDF5 handler knows of the structure of NetworkML and calls appropriate functions in NetworkHandler

    currParser.parse(file_name)

    print('-------------------------------\n\n')

    from neuroml.hdf5.NetworkBuilder import NetworkBuilder

    nmlHandler = NetworkBuilder()

    currParser = NeuroMLHdf5Parser(nmlHandler)

    currParser.parse(file_name)

    nml_doc = currParser.get_nml_doc()
    summary0 = nml_doc.summary()
    print(summary0)
    exit()
    print('-------------------------------\n\n')

    currParser = NeuroMLHdf5Parser(None, optimized=True)

    currParser.parse(file_name)
Example #9
0
    ]
    test_files = [
        "../../neuroConstruct/osb/showcase/PsyNeuLinkShowcase/NeuroML2/FN.bids-mdf.json"
    ]

    for filename in test_files:
        pnl_parser = PsyNeuLinkReader(filename=filename,
                                      DEFAULT_CELL_ID="hhcell")

        from neuromllite.DefaultNetworkHandler import DefaultNetworkHandler

        def_handler = DefaultNetworkHandler()

        pnl_parser.parse(def_handler)

        from neuroml.hdf5.NetworkBuilder import NetworkBuilder

        neuroml_handler = NetworkBuilder()

        pnl_parser = PsyNeuLinkReader(filename=filename,
                                      DEFAULT_CELL_ID="hhcell")
        pnl_parser.parse(neuroml_handler)

        from neuroml.writers import NeuroMLWriter

        nml_file_name = "%s.net.nml" % neuroml_handler.get_nml_doc().id

        NeuroMLWriter.write(neuroml_handler.get_nml_doc(), nml_file_name)

        print("Written NeuroML file to: %s" % nml_file_name)