Beispiel #1
0
SpikeMap deserializeSpikes( const zeq::Event& event )
{
    auto data = GetSpikes( event.getData( ));
    SpikeMap spikes;
    for( flatbuffers::uoffset_t i = 0; i < data->spikes()->Length(); ++i )
    {
        const Spike* spike = data->spikes()->Get( i );
        spikes.insert( std::make_pair( spike->time(), spike->cell( )));
    }
    return spikes;
}
Beispiel #2
0
zeq::Event serializeSpikes( const SpikeMap& spikes )
{
    zeq::Event event( EVENT_SPIKES );

    std::vector< Spike > spikeVector;
    spikeVector.reserve( spikes.size( ));
    for( std::multimap< float, uint32_t >::const_iterator i = spikes.begin();
            i != spikes.end(); ++i )
    {
        spikeVector.push_back( Spike( i->first, i->second ));
    }

    flatbuffers::FlatBufferBuilder& fbb = event.getFBB();
    auto vector = fbb.CreateVectorOfStructs( spikeVector.data(),
                  spikeVector.size() );
    fbb.Finish( CreateSpikes( fbb, vector ));
    return event;
}
void SynapticChannels::updateSpikeList(ftype time) {

	int nSpikes = 0;

	int removeKeysSize = 10000;
	ftype removeKeys[removeKeysSize];
	int removeKeyPos;

	// Remove old spikes and finds number of spikes
	//SynapseSpikeMapIterator it;
	for(int syn = 0; syn < synSpikeMap.size(); syn++) {

		ftype remThresh = 3 * (tau[ 2*synapseTypeList[syn] ] + tau[ 2*synapseTypeList[syn] + 1 ]); // was 2
		SpikeMap * synSpikes = synSpikeMap[syn];
		SpikeMapIterator itlow, itup;

		SpikeMapIterator spkIt = synSpikes->begin();
		for (removeKeyPos = 0; spkIt != synSpikes->end(); spkIt++)
			if ( time - spkIt->first > remThresh )
				removeKeys[removeKeyPos++] = spkIt->first;
		while (removeKeyPos > 0)
			synSpikes->erase(removeKeys[--removeKeyPos]);

		assert(removeKeyPos < removeKeysSize);

		// Counts the number of spikes
		spkIt = synSpikes->begin();
		for (; spkIt != synSpikes->end(); spkIt++)
			nSpikes++;
		//nSpikes += synSpikes->size();
	}

	/**
	 * tests the number of spikes
	 */
//	int testSpike=0;
//	int testSpike2=0;
//	for(int syn = 0; syn < synSpikeMap.size(); syn++) {
//		SpikeMap *synSpikes = synSpikeMap[syn];
//		SpikeMapIterator itSpk = synSpikes->begin();
//		for (; itSpk != synSpikes->end(); itSpk++)
//			testSpike++;
//		testSpike2 += synSpikes->size();
//	}
//	if (testSpike != nSpikes || testSpike2 != nSpikes)
//		printf("Wrong number of spikes: testSpike=%d|%d nSpikes=%d\n", testSpike, testSpike2, nSpikes);
	// Apenas o segundo bate. O primeiro às vezes dá maior ou dá menor

	if (spikeList != 0) delete[] spikeList;

	spikeListSize = nSpikes;
	spikeList   = new ftype[2*spikeListSize]; // ValGrind
	synapseWeightList = spikeList + spikeListSize;

	// Create new list of spikes

	int spike=0;
	for (int i=0; i<synapseListSize; i++)
		synSpikeListPos[i] = 0;

	bool printA = false;
	int synTmp=0;
	for(int syn = 0; syn < synSpikeMap.size(); syn++) {

		synTmp = syn;
		synSpikeListPos[syn] = spike;
		SpikeMap * synSpikes = synSpikeMap[syn];

		SpikeMapIterator itSpk = synSpikes->begin();
		for (; itSpk != synSpikes->end(); itSpk++) {
			if (spike < nSpikes) {
				spikeList[spike] = itSpk->first;
				synapseWeightList[spike] = itSpk->second; // ValGrind
				spike++;
			}
		}
	}

	if (spike < nSpikes)
		printf("Smaller number of spikes: used=%d allocated=%d\n", spike, nSpikes);
	else if (spike > nSpikes)
		printf("Larger number of spikes: used=%d allocated=%d\n", spike, nSpikes);

	for (synTmp = synTmp + 1; synTmp<synapseListSize; synTmp++)
		synSpikeListPos[synTmp] = spike;
}