2929SpikeDetector::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;
@@ -143,9 +144,9 @@ bool SpikeDetector::addElectrode(int nChans)
143144 newElectrode->numChannels = nChans;
144145 newElectrode->prePeakSamples = 8 ;
145146 newElectrode->postPeakSamples = 32 ;
146- newElectrode->thresholds = new double [ nChans] ;
147- newElectrode->isActive = new bool [ nChans] ;
148- newElectrode->channels = new int [ nChans] ;
147+ newElectrode->thresholds . malloc ( nChans) ;
148+ newElectrode->isActive . malloc ( nChans) ;
149+ newElectrode->channels . malloc ( nChans) ;
149150 newElectrode->isMonitored = false ;
150151
151152 for (int i = 0 ; i < nChans; i++)
@@ -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 ();
0 commit comments