Skip to content

Commit 035d5d9

Browse files
committed
SpikeDetector now sets electrodeID on spike events. SpikeDetectorEditor now correctly initializes the selected electrode.
1 parent 6a8b414 commit 035d5d9

4 files changed

Lines changed: 21 additions & 9 deletions

File tree

Source/Processors/SpikeDetector/SpikeDetector.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
SpikeDetector::SpikeDetector()
3030
: GenericProcessor("Spike Detector"),
3131
overflowBuffer(2,100), dataBuffer(nullptr),
32-
overflowBufferSize(100), currentElectrode(-1)
32+
overflowBufferSize(100), currentElectrode(-1),
33+
uniqueID(0)
3334
{
3435
//// the standard form:
3536
electrodeTypes.add("single electrode");
@@ -97,7 +98,7 @@ void SpikeDetector::updateSettings()
9798

9899
}
99100

100-
bool SpikeDetector::addElectrode(int nChans)
101+
bool SpikeDetector::addElectrode(int nChans, int electrodeID)
101102
{
102103

103104
std::cout << "Adding electrode with " << nChans << " channels." << std::endl;
@@ -155,6 +156,13 @@ bool SpikeDetector::addElectrode(int nChans)
155156
*(newElectrode->isActive+i) = true;
156157
}
157158

159+
if (electrodeID > 0) {
160+
newElectrode->electrodeID = electrodeID;
161+
uniqueID = std::max(uniqueID, electrodeID);
162+
} else {
163+
newElectrode->electrodeID = ++uniqueID;
164+
}
165+
158166
newElectrode->sourceNodeId = channels[*newElectrode->channels]->sourceNodeId;
159167

160168
resetElectrode(newElectrode);
@@ -505,7 +513,7 @@ void SpikeDetector::process(AudioSampleBuffer& buffer,
505513
newSpike.source = i;
506514
newSpike.nChannels = electrode->numChannels;
507515
newSpike.sortedId = 0;
508-
newSpike.electrodeID = 0;
516+
newSpike.electrodeID = electrode->electrodeID;
509517
newSpike.channel = 0;
510518
newSpike.samplingFrequencyHz = sampleRateForElectrode;
511519

@@ -676,6 +684,7 @@ void SpikeDetector::saveCustomParametersToXml(XmlElement* parentElement)
676684
electrodeNode->setAttribute("numChannels", electrodes[i]->numChannels);
677685
electrodeNode->setAttribute("prePeakSamples", electrodes[i]->prePeakSamples);
678686
electrodeNode->setAttribute("postPeakSamples", electrodes[i]->postPeakSamples);
687+
electrodeNode->setAttribute("electrodeID", electrodes[i]->electrodeID);
679688

680689
for (int j = 0; j < electrodes[i]->numChannels; j++)
681690
{
@@ -712,8 +721,9 @@ void SpikeDetector::loadCustomParametersFromXml()
712721
std::cout << "ELECTRODE>>>" << std::endl;
713722

714723
int channelsPerElectrode = xmlNode->getIntAttribute("numChannels");
724+
int electrodeID = xmlNode->getIntAttribute("electrodeID");
715725

716-
sde->addElectrode(channelsPerElectrode);
726+
sde->addElectrode(channelsPerElectrode, electrodeID);
717727

718728
setElectrodeName(electrodeIndex+1, xmlNode->getStringAttribute("name"));
719729
sde->refreshElectrodeList();

Source/Processors/SpikeDetector/SpikeDetector.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ struct SimpleElectrode
4040
int prePeakSamples, postPeakSamples;
4141
int lastBufferIndex;
4242
bool isMonitored;
43+
int electrodeID;
4344
int sourceNodeId;
4445

4546
int* channels;
@@ -104,7 +105,7 @@ class SpikeDetector : public GenericProcessor
104105
// CREATE AND DELETE ELECTRODES //
105106

106107
/** Adds an electrode with n channels to be processed. */
107-
bool addElectrode(int nChans);
108+
bool addElectrode(int nChans, int electrodeID = 0);
108109

109110
/** Removes an electrode with a given index. */
110111
bool removeElectrode(int index);
@@ -181,6 +182,7 @@ class SpikeDetector : public GenericProcessor
181182
int64 timestamp;
182183

183184
Array<SimpleElectrode*> electrodes;
185+
int uniqueID;
184186

185187
// void createSpikeEvent(int& peakIndex,
186188
// int& electrodeNumber,

Source/Processors/SpikeDetector/SpikeDetectorEditor.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -432,11 +432,11 @@ void SpikeDetectorEditor::refreshElectrodeList()
432432
}
433433
}
434434

435-
bool SpikeDetectorEditor::addElectrode(int nChans)
435+
bool SpikeDetectorEditor::addElectrode(int nChans, int electrodeID)
436436
{
437437
SpikeDetector* processor = (SpikeDetector*) getProcessor();
438438

439-
if (processor->addElectrode(nChans))
439+
if (processor->addElectrode(nChans, electrodeID))
440440
{
441441
refreshElectrodeList();
442442
return true;
@@ -543,7 +543,7 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox)
543543

544544
void SpikeDetectorEditor::checkSettings()
545545
{
546-
electrodeList->setSelectedItemIndex(0);
546+
electrodeList->setSelectedId(0);
547547
drawElectrodeButtons(0);
548548

549549
CoreServices::updateSignalChain(this);

Source/Processors/SpikeDetector/SpikeDetectorEditor.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class SpikeDetectorEditor : public GenericEditor,
9393

9494
void channelChanged(int chan);
9595

96-
bool addElectrode(int nChans);
96+
bool addElectrode(int nChans, int electrodeID = 0);
9797
void removeElectrode(int index);
9898

9999
void checkSettings();

0 commit comments

Comments
 (0)