|
29 | 29 | SpikeDetector::SpikeDetector() |
30 | 30 | : GenericProcessor("Spike Detector"), |
31 | 31 | overflowBuffer(2,100), dataBuffer(nullptr), |
32 | | - overflowBufferSize(100), currentElectrode(-1) |
| 32 | + overflowBufferSize(100), currentElectrode(-1), |
| 33 | + uniqueID(0) |
33 | 34 | { |
34 | 35 | //// the standard form: |
35 | 36 | electrodeTypes.add("single electrode"); |
@@ -97,7 +98,7 @@ void SpikeDetector::updateSettings() |
97 | 98 |
|
98 | 99 | } |
99 | 100 |
|
100 | | -bool SpikeDetector::addElectrode(int nChans) |
| 101 | +bool SpikeDetector::addElectrode(int nChans, int electrodeID) |
101 | 102 | { |
102 | 103 |
|
103 | 104 | std::cout << "Adding electrode with " << nChans << " channels." << std::endl; |
@@ -155,6 +156,13 @@ bool SpikeDetector::addElectrode(int nChans) |
155 | 156 | *(newElectrode->isActive+i) = true; |
156 | 157 | } |
157 | 158 |
|
| 159 | + if (electrodeID > 0) { |
| 160 | + newElectrode->electrodeID = electrodeID; |
| 161 | + uniqueID = std::max(uniqueID, electrodeID); |
| 162 | + } else { |
| 163 | + newElectrode->electrodeID = ++uniqueID; |
| 164 | + } |
| 165 | + |
158 | 166 | newElectrode->sourceNodeId = channels[*newElectrode->channels]->sourceNodeId; |
159 | 167 |
|
160 | 168 | resetElectrode(newElectrode); |
@@ -505,7 +513,7 @@ void SpikeDetector::process(AudioSampleBuffer& buffer, |
505 | 513 | newSpike.source = i; |
506 | 514 | newSpike.nChannels = electrode->numChannels; |
507 | 515 | newSpike.sortedId = 0; |
508 | | - newSpike.electrodeID = 0; |
| 516 | + newSpike.electrodeID = electrode->electrodeID; |
509 | 517 | newSpike.channel = 0; |
510 | 518 | newSpike.samplingFrequencyHz = sampleRateForElectrode; |
511 | 519 |
|
@@ -676,6 +684,7 @@ void SpikeDetector::saveCustomParametersToXml(XmlElement* parentElement) |
676 | 684 | electrodeNode->setAttribute("numChannels", electrodes[i]->numChannels); |
677 | 685 | electrodeNode->setAttribute("prePeakSamples", electrodes[i]->prePeakSamples); |
678 | 686 | electrodeNode->setAttribute("postPeakSamples", electrodes[i]->postPeakSamples); |
| 687 | + electrodeNode->setAttribute("electrodeID", electrodes[i]->electrodeID); |
679 | 688 |
|
680 | 689 | for (int j = 0; j < electrodes[i]->numChannels; j++) |
681 | 690 | { |
@@ -712,8 +721,9 @@ void SpikeDetector::loadCustomParametersFromXml() |
712 | 721 | std::cout << "ELECTRODE>>>" << std::endl; |
713 | 722 |
|
714 | 723 | int channelsPerElectrode = xmlNode->getIntAttribute("numChannels"); |
| 724 | + int electrodeID = xmlNode->getIntAttribute("electrodeID"); |
715 | 725 |
|
716 | | - sde->addElectrode(channelsPerElectrode); |
| 726 | + sde->addElectrode(channelsPerElectrode, electrodeID); |
717 | 727 |
|
718 | 728 | setElectrodeName(electrodeIndex+1, xmlNode->getStringAttribute("name")); |
719 | 729 | sde->refreshElectrodeList(); |
|
0 commit comments