def recording(self, port_name): """ Return recorded data as a dictionary containing one numpy array for each neuron, ids as keys. """ # NB: Port could also be a state variable try: port = self.component_class.send_port(port_name) except NineMLNameError: # For convenient access to state variables port = self.component_class.state_variable(port_name) if port.nineml_type in ('EventSendPort', 'EventSendPortExposure'): spikes = nest.GetStatus( self._recorders[port_name], 'events')[0]['times'] data = neo.SpikeTrain(spikes, t_start=0.0 * pq.ms, t_stop=simulation_controller.t * pq.ms, name=port_name, units=pq.ms) else: port_name = self.build_name(port_name) events, interval = nest.GetStatus(self._recorders[port_name], ('events', 'interval'))[0] try: port = self._nineml.component_class.port(port_name) except NineMLNameError: port = self._nineml.component_class.state_variable(port_name) unit_str = UnitHandler.dimension_to_unit_str(port.dimension) variable_name = self.build_name(port_name) data = neo.AnalogSignal( events[variable_name], sampling_period=interval * pq.ms, t_start=0.0 * pq.ms, units=unit_str, name=port_name) return data