diff --git a/Source/Processors/SpikeDetector/SpikeDetector.cpp b/Source/Processors/SpikeDetector/SpikeDetector.cpp index c51bbc4dccc531794c8a84b3fbcf5b93cc8bd8c5..ed0d1566bb27bc65c4279957529057c3e3ace929 100755 --- a/Source/Processors/SpikeDetector/SpikeDetector.cpp +++ b/Source/Processors/SpikeDetector/SpikeDetector.cpp @@ -29,7 +29,8 @@ SpikeDetector::SpikeDetector() : GenericProcessor("Spike Detector"), overflowBuffer(2,100), dataBuffer(nullptr), - overflowBufferSize(100), currentElectrode(-1) + overflowBufferSize(100), currentElectrode(-1), + uniqueID(0) { //// the standard form: electrodeTypes.add("single electrode"); @@ -97,7 +98,7 @@ void SpikeDetector::updateSettings() } -bool SpikeDetector::addElectrode(int nChans) +bool SpikeDetector::addElectrode(int nChans, int electrodeID) { std::cout << "Adding electrode with " << nChans << " channels." << std::endl; @@ -155,6 +156,13 @@ bool SpikeDetector::addElectrode(int nChans) *(newElectrode->isActive+i) = true; } + if (electrodeID > 0) { + newElectrode->electrodeID = electrodeID; + uniqueID = std::max(uniqueID, electrodeID); + } else { + newElectrode->electrodeID = ++uniqueID; + } + newElectrode->sourceNodeId = channels[*newElectrode->channels]->sourceNodeId; resetElectrode(newElectrode); @@ -505,7 +513,7 @@ void SpikeDetector::process(AudioSampleBuffer& buffer, newSpike.source = i; newSpike.nChannels = electrode->numChannels; newSpike.sortedId = 0; - newSpike.electrodeID = 0; + newSpike.electrodeID = electrode->electrodeID; newSpike.channel = 0; newSpike.samplingFrequencyHz = sampleRateForElectrode; @@ -676,6 +684,7 @@ void SpikeDetector::saveCustomParametersToXml(XmlElement* parentElement) electrodeNode->setAttribute("numChannels", electrodes[i]->numChannels); electrodeNode->setAttribute("prePeakSamples", electrodes[i]->prePeakSamples); electrodeNode->setAttribute("postPeakSamples", electrodes[i]->postPeakSamples); + electrodeNode->setAttribute("electrodeID", electrodes[i]->electrodeID); for (int j = 0; j < electrodes[i]->numChannels; j++) { @@ -712,8 +721,9 @@ void SpikeDetector::loadCustomParametersFromXml() std::cout << "ELECTRODE>>>" << std::endl; int channelsPerElectrode = xmlNode->getIntAttribute("numChannels"); + int electrodeID = xmlNode->getIntAttribute("electrodeID"); - sde->addElectrode(channelsPerElectrode); + sde->addElectrode(channelsPerElectrode, electrodeID); setElectrodeName(electrodeIndex+1, xmlNode->getStringAttribute("name")); sde->refreshElectrodeList(); diff --git a/Source/Processors/SpikeDetector/SpikeDetector.h b/Source/Processors/SpikeDetector/SpikeDetector.h index 829ad60302c9766f74ae6bf5414ad31e5e2d1571..e6efaf8a620fd74d8cde59d710a1a5f90635c22a 100755 --- a/Source/Processors/SpikeDetector/SpikeDetector.h +++ b/Source/Processors/SpikeDetector/SpikeDetector.h @@ -40,6 +40,7 @@ struct SimpleElectrode int prePeakSamples, postPeakSamples; int lastBufferIndex; bool isMonitored; + int electrodeID; int sourceNodeId; int* channels; @@ -104,7 +105,7 @@ public: // CREATE AND DELETE ELECTRODES // /** Adds an electrode with n channels to be processed. */ - bool addElectrode(int nChans); + bool addElectrode(int nChans, int electrodeID = 0); /** Removes an electrode with a given index. */ bool removeElectrode(int index); @@ -181,6 +182,7 @@ private: int64 timestamp; Array<SimpleElectrode*> electrodes; + int uniqueID; // void createSpikeEvent(int& peakIndex, // int& electrodeNumber, diff --git a/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp b/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp index 0245fa20d3f0e7ff970e2a417f5edb2684fb63f2..be5348c8851d5b7630a87d33b86bd63e91d596de 100755 --- a/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp +++ b/Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp @@ -432,11 +432,11 @@ void SpikeDetectorEditor::refreshElectrodeList() } } -bool SpikeDetectorEditor::addElectrode(int nChans) +bool SpikeDetectorEditor::addElectrode(int nChans, int electrodeID) { SpikeDetector* processor = (SpikeDetector*) getProcessor(); - if (processor->addElectrode(nChans)) + if (processor->addElectrode(nChans, electrodeID)) { refreshElectrodeList(); return true; @@ -543,7 +543,7 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox) void SpikeDetectorEditor::checkSettings() { - electrodeList->setSelectedItemIndex(0); + electrodeList->setSelectedId(0); drawElectrodeButtons(0); CoreServices::updateSignalChain(this); diff --git a/Source/Processors/SpikeDetector/SpikeDetectorEditor.h b/Source/Processors/SpikeDetector/SpikeDetectorEditor.h index 919c9642150a99671d870e78de5d6e2a975940d0..0417ceaf8aec76ba832065f0d130c4a913b8d130 100755 --- a/Source/Processors/SpikeDetector/SpikeDetectorEditor.h +++ b/Source/Processors/SpikeDetector/SpikeDetectorEditor.h @@ -93,7 +93,7 @@ public: void channelChanged(int chan); - bool addElectrode(int nChans); + bool addElectrode(int nChans, int electrodeID = 0); void removeElectrode(int index); void checkSettings();