void SpikeSortingDisplay::process(AudioSampleBuffer& buffer, MidiBuffer& events, int& nSamples) { checkForEvents(events); if (redraw) { for (int i = 0; i < getNumElectrodes(); i++) { Electrode& e = electrodes.getReference(i); // transfer buffered spikes to spike plot for (int j = 0; j < e.currentSpikeIndex; j++) { //std::cout << "Transferring spikes." << std::endl; e.pcPlot->processSortedSpikeObject(e.mostRecentSortedSpikes[j]); e.currentSpikeIndex = 0; } } for (int i = 0; i < getNumElectrodes(); i++) { node->setParameter(1,i); //std::cout << node->plotRipple << " is the plotRipple" << std::endl; if (node->plotRipple) { Electrode& e = electrodes.getReference(i); e.forRasterPlot.startRipple = node->electrodes[i]->rippleStatus[1]; e.forRasterPlot.stopRipple = node->electrodes[i]->rippleStatus[2]; node->setParameter(0,i); //removing for (int j = 0; j < e.forRasterPlot.accruedRasterMarks.size(); j++) { //cout << e.forRasterPlot.accruedRasterMarks[j].timestamp << " is the spike timestamp and " << e.forRasterPlot.startRipple << " is the ripple timestamp." <<std::endl; if(e.forRasterPlot.accruedRasterMarks[j].timestamp <= e.forRasterPlot.startRipple || e.forRasterPlot.accruedRasterMarks[j].timestamp >= e.forRasterPlot.stopRipple) { RasterData dummy; dummy.electrodeNum = -1; dummy.neuronID = -1; dummy.timestamp = -1; e.forRasterPlot.accruedRasterMarks.setUnchecked(j,dummy); } } e.pcPlot->processRasterPlot(e.forRasterPlot, i); e.forRasterPlot.accruedRasterMarks.clearQuick(); //std::cout << "reached in plot ripple" << std::endl; node->setParameter(0,i); } } redraw = false; } }
void SpikeDisplayNode::setParameter(int param, float val) { //std::cout<<"SpikeDisplayNode got Param:"<< param<< " with value:"<<val<<std::endl; if (param == 0) // stop recording { isRecording = false; signalFilesShouldClose = true; } else if (param == 1) // start recording { isRecording = true; dataDirectory = recordNode->getDataDirectory(); if (dataDirectory.getFullPathName().length() == 0) { // temporary fix in case nothing is returned by the record node. dataDirectory = File::getSpecialLocation(File::userHomeDirectory); } baseDirectory = dataDirectory.getFullPathName(); for (int i = 0; i < getNumElectrodes(); i++) { openFile(i); } } else if (param == 2) // redraw { redrawRequested = true; } }
void SpikeDisplayNode::removeSpikePlots() { for (int i = 0; i < getNumElectrodes(); i++) { Electrode& e = electrodes.getReference(i); e.spikePlot = nullptr; } }
void SpikeDisplayNode::process(AudioSampleBuffer& buffer, MidiBuffer& events, int& nSamples) { checkForEvents(events); // automatically calls 'handleEvent if (signalFilesShouldClose) { for (int i = 0; i < getNumElectrodes(); i++) { closeFile(i); } signalFilesShouldClose = false; } if (redrawRequested) { // update incoming thresholds for (int i = 0; i < getNumElectrodes(); i++) { Electrode& e = electrodes.getReference(i); // update thresholds for (int j = 0; j < e.numChannels; j++) { e.displayThresholds.set(j, e.spikePlot->getDisplayThresholdForChannel(j)); e.spikePlot->setDetectorThresholdForChannel(j, e.detectorThresholds[j]); } // transfer buffered spikes to spike plot for (int j = 0; j < e.currentSpikeIndex; j++) { //std::cout << "Transferring spikes." << std::endl; e.spikePlot->processSpikeObject(e.mostRecentSpikes[j]); e.currentSpikeIndex = 0; } } redrawRequested = false; } }
void SpikeSortingDisplay::removePCPlots() { for (int i = 0; i < getNumElectrodes(); i++) { Electrode& e = electrodes.getReference(i); e.pcPlot = nullptr; } }