-
Notifications
You must be signed in to change notification settings - Fork 10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Use Physical address inplace of logical addresses for SpikeLists #16
Comments
The translation between physical and logical is indeed computationally inefficient, and this was the easiest solution at the time I chose to do it. Spikelists require the neuron ids to be of hashable type. This means tuple of basic data types (not list), or any basic data type (int, float etc). But the real problem is that you must find a way to correctly represent and visualize the multiple channels, which is why I've never done it this way.
And ideally, all these changes should be made without breaking old code... :) |
I think that's a reasonable idea. But, IF we are going to use Monitors to visualize raster plots, the monitors would ideally have all the info about address translation etc and therefore we shouldn't have to fiddle around with the SpikeList object. Wouldn't u agree ? And since Monitors are specifically designed and developed for this purpose, I think that is where this mechanism for visualization should be left.
Since we are using Monitors now, why should we care about channels ?
It might not be cryptic for us since we have been working with it since the begining, BUT as a user who hasn't written down the setup files himself, one has very little info about what channels mean or why he should be fiddling around with those. And this i know because there were some users I had to explain this to. |
Following some discussion with Fabio, here is what we thought was reasonable. The stimulus that the run/stimulate function accepts is currently expected to be of the type {channel:SpikeList}. How about allowing the following.
@eneftci : What do you think ? |
That is a good idea. But do we need to have spikelists at all? For monitoring, pyST builds SpikeLists at the very end because it is not very efficient (it is a dictionary of SpikeTrains). Instead it uses the pyST.STas.events and pyST.STas.channelEvents classes. I've designed these classes to be as fast as python can be. The group.spikelist_* functions should then return events as well. E. |
In fact I'm using events for a specific use of the real time stimulator and In any case, we should make sure that every piece of the chain has 2013/2/26 eneftci [email protected]
|
Ah getting rid of SpikeLists all together..! why not ! So it this the plan then ?
Do we agree on the action plan ? Please add anything else that I left out here. |
Well I would get completely rid of SpikeLists, but rather just use it for analysis, at least for the moment. Consistency should not be a problem because Spikelists are always converted to events / channelEvents at some point. The channelAddressing class takes care of this. A few checks along the way should take care of this. By extending events, I meant what Fabio said: create a new class "spikes" that inherits from events. Also remember that channelEvents is probably the class you would like to use/extend/inherit from: it is a dictionary of events where the key indexes the channel and its corresponding value is an event object. E. |
The NeuroSetup.stimulate() function expects a dictionary of SpikeLists. The SpikeLists use logical addresses as ids. On function call, these addresses are translated to physical addresses and sent to the setup. The same happens backwards on the readout of activity from the setup.
All of this process involves considerable computation and for stimulus spanning across large populations slows down the stimulation and readout process. This is especially visible when you want to do real-time demos.
Since the LogicalAddressing is really only for the purposes of plotting, why not just use the PhysicalAddresses for creating and sending the stimulus ? This has several advantages
I must also emphasize that if you all agree to this suggestion, we need to make a SMOOTH transition and make it optional for now because there is a good chance that this enhancement will break old code (although it was intended for the greater good of mankind ;) ).
The text was updated successfully, but these errors were encountered: