diff --git a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.cpp b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.cpp index 799a38852cb32f388bdc41e248087697f09b0622..82eac7dbbe2eaab141467318a762dcfa340801c4 100644 --- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.cpp +++ b/Source/Plugins/BasicSpikeDisplay/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; @@ -143,9 +144,9 @@ bool SpikeDetector::addElectrode(int nChans) newElectrode->numChannels = nChans; newElectrode->prePeakSamples = 8; newElectrode->postPeakSamples = 32; - newElectrode->thresholds = new double[nChans]; - newElectrode->isActive = new bool[nChans]; - newElectrode->channels = new int[nChans]; + newElectrode->thresholds.malloc(nChans); + newElectrode->isActive.malloc(nChans); + newElectrode->channels.malloc(nChans); newElectrode->isMonitored = false; for (int i = 0; i < nChans; i++) @@ -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/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h index c3bdeb49431449b725154c9a9da8ef1e232ce977..a5cfbf5c18349055593b05b5ca466983ad6a2b94 100644 --- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h +++ b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetector.h @@ -38,11 +38,12 @@ struct SimpleElectrode int prePeakSamples, postPeakSamples; int lastBufferIndex; bool isMonitored; + int electrodeID; int sourceNodeId; - int* channels; - double* thresholds; - bool* isActive; + HeapBlock<int> channels; + HeapBlock<double> thresholds; + HeapBlock<bool> isActive; }; @@ -102,7 +103,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); @@ -179,6 +180,7 @@ private: int64 timestamp; Array<SimpleElectrode*> electrodes; + int uniqueID; // void createSpikeEvent(int& peakIndex, // int& electrodeNumber, diff --git a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp index d3ca997762a0240ec13b2c92f95264626eefc0b7..fef06b442840943e8454784cacec29b18af216a2 100644 --- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp +++ b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.cpp @@ -433,11 +433,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; @@ -544,7 +544,7 @@ void SpikeDetectorEditor::comboBoxChanged(ComboBox* comboBox) void SpikeDetectorEditor::checkSettings() { - electrodeList->setSelectedItemIndex(0); + electrodeList->setSelectedId(0); drawElectrodeButtons(0); CoreServices::updateSignalChain(this); diff --git a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h index 0065b055d9a59c31c36f417295377c6a973b69b5..086129d380ae20853eae9a694ae3ab31ea1d631b 100644 --- a/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h +++ b/Source/Plugins/BasicSpikeDisplay/SpikeDetector/SpikeDetectorEditor.h @@ -60,7 +60,7 @@ public: void channelChanged(int chan); - bool addElectrode(int nChans); + bool addElectrode(int nChans, int electrodeID = 0); void removeElectrode(int index); void checkSettings(); diff --git a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp index dd6f87769292ea4d3d80d0eed29cff3a9ac88b04..abb2aff8db63870c3b1417db15cb09dcd568d378 100644 --- a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp +++ b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.cpp @@ -33,7 +33,7 @@ LfpDisplayNode::LfpDisplayNode() //std::cout << " LFPDisplayNodeConstructor" << std::endl; displayBuffer = new AudioSampleBuffer(8, 100); - arrayOfOnes = new float[5000]; + arrayOfOnes.malloc(5000); for (int n = 0; n < 5000; n++) { diff --git a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h index e633853c6b5238e4f5ce1c7682018cc0216843f1..113729eb092e730393e217046cc416a3eecbe675 100644 --- a/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h +++ b/Source/Plugins/LfpDisplayNode/LfpDisplayNode.h @@ -97,7 +97,7 @@ private: int64 bufferTimestamp; std::map<int, int> ttlState; - float* arrayOfOnes; + HeapBlock<float> arrayOfOnes; int totalSamples; bool resizeBuffer();