void SpikeDisplayNode::handleEvent(int eventType, MidiMessage& event, int samplePosition) { //std::cout << "Received event of type " << eventType << std::endl; if (eventType == SPIKE) { const uint8_t* dataptr = event.getRawData(); int bufferSize = event.getRawDataSize(); if (bufferSize > 0) { SpikeObject newSpike; bool isValid = unpackSpike(&newSpike, dataptr, bufferSize); if (isValid) { int electrodeNum = newSpike.source; Electrode& e = electrodes.getReference(electrodeNum); // std::cout << electrodeNum << std::endl; bool aboveThreshold = false; // update threshold / check threshold for (int i = 0; i < e.numChannels; i++) { e.detectorThresholds.set(i, float(newSpike.threshold[i])); // / float(newSpike.gain[i])); aboveThreshold = aboveThreshold | checkThreshold(i, e.displayThresholds[i], newSpike); } if (aboveThreshold) { // add to buffer if (e.currentSpikeIndex < displayBufferSize) { // std::cout << "Adding spike " << e.currentSpikeIndex + 1 << std::endl; e.mostRecentSpikes.set(e.currentSpikeIndex, newSpike); e.currentSpikeIndex++; } // save spike if (isRecording) { getProcessorGraph()->getRecordNode()->writeSpike(newSpike,e.recordIndex); } } } } } }
void SpikeDisplayCanvas::processSpikeEvents() { if (spikeBuffer->getNumEvents() > 0) { //int m = spikeBuffer->getNumEvents(); //std::cout << "Received " << m << " events." << std::endl; //std::cout << m << " events received by node " << getNodeId() << std::endl; MidiBuffer::Iterator i (*spikeBuffer); MidiMessage message(0xf4); int samplePosition = 0; i.setNextSamplePosition(samplePosition); //int eventCount = 0; while (i.getNextEvent (message, samplePosition)) { //eventCount++; uint8_t* dataptr = message.getRawData(); int bufferSize = message.getRawDataSize(); // int nSamples = (bufferSize-4)/2; SpikeObject newSpike; SpikeObject simSpike; unpackSpike(&newSpike, dataptr, bufferSize); // int chan = newSpike.source; generateSimulatedSpike(&simSpike, 0, 0); for (int i = 0; i < newSpike.nChannels * newSpike.nSamples; i++) { simSpike.data[i] = newSpike.data[i%80] + 5000;// * 3 - 10000; } simSpike.nSamples = 40; // std::cout << "Received spike on electrode " << chan << std::endl; // std::cout << "Spike has " << newSpike.nChannels << " channels and " << // newSpike.nSamples << " samples." << std::endl; // std::cout << "Data: "; // for (int n = 0; n < newSpike.nSamples; n++) // { // std::cout << newSpike.data[n] << " "; // } // std::cout << std::endl; plots[chan]->processSpikeObject(simSpike); } } spikeBuffer->clear(); }