============ File formats ============ PyNN supports writing datafiles in both text and binary formats. PyNN comes with several built-in formats, but it is very easy to define your own. The default format is text-based. If we assume that you have run a simulation, and have recorded spikes, membrane potential and/or synaptic conductances for the neurons in a ``Population`` ``p``, then you can write the recorded data to a file in text format simply by specifying the filename:: >>> p.printSpikes("my_spike_data.dat") >>> p.print_v("my_Vm_data.dat") (the file extension can be anything you like). If you would like to write the data in a binary format, you must first create a PyNN ``File`` object`:: >>> from pyNN.recording.files import NumpyBinaryFile, HDF5ArrayFile >>> spike_file = NumpyBinaryFile("my_spike_data.npz", "w") >>> p.printSpikes(spike_file) >>> spike_file.close() >>> vm_file = HDF5ArrayFile("my_Vm_data.h5", "w") >>> p.print_v(vm_file) >>> vm_file.close() Note that we do not currently take advantage of the ability of HDF5 or NumPy binary files to contain multiple data sets. In addition to ``NumpyBinaryFile`` and ``HDF5ArrayFile`` (which requires PyTables to be installed), the ``recording.files`` module also contains ``PickleFile`` and ``StandardTextFile``. The file contents can then be accessed using NumPy, PyTables or the standard ``pickle/cPickle`` module, or by creating a PyNN ``File`` object in read mode:: >>> spike_file = NumpyBinaryFile("my_spike_data.npz", "r") >>> metadata = spike_file.get_metadata() >>> spikes = spike_file.read() Defining your own file formats ============================== If you wish to define your own file format, it is straightforward to create new PyNN-compatible ``File`` class by subclassing ``recording.files.BaseFile``: the only requirement is that the class should implement a method ``write(data, metadata)``, where ``data`` will be a NumPy array and ``metadata`` will be a dictionary.