Skip to content

Commit b699e61

Browse files
committed
Merge branch 'Claybarn-development' into testing
2 parents 294aa10 + d1410df commit b699e61

6 files changed

Lines changed: 78 additions & 15 deletions

File tree

Source/Plugins/SpikeSorter/SpikeSorter.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,13 @@ int SpikeSorter::getUniqueProbeID(String type)
138138
return 1;
139139
}
140140

141+
void SpikeSorter::setEditAllState(bool val){
142+
editAll = val;
143+
}
144+
145+
bool SpikeSorter::getEditAllState(){
146+
return editAll;
147+
}
141148

142149
void SpikeSorter::increaseUniqueProbeID(String type)
143150
{
@@ -195,13 +202,15 @@ void SpikeSorter::updateSettings()
195202
Array<const DataChannel*> chans;
196203
for (int c = 0; c < nChans; c++)
197204
{
205+
198206
const DataChannel* ch = getDataChannel(elec->channels[c]);
199207
if (!ch)
200208
{
201209
//not enough channels for the electrodes
202210
return;
203211
}
204212
chans.add(ch);
213+
205214
}
206215

207216
SpikeChannel* spk = new SpikeChannel(SpikeChannel::typeFromNumChannels(nChans), this, chans);
@@ -709,9 +718,9 @@ void SpikeSorter::addWaveformToSpikeObject(SpikeEvent::SpikeBuffer& s,
709718
int spikeLength = electrodes[electrodeNumber]->prePeakSamples
710719
+ electrodes[electrodeNumber]->postPeakSamples;
711720

712-
713721
const int chan = *(electrodes[electrodeNumber]->channels + currentChannel);
714722

723+
715724
if (isChannelActive(electrodeNumber, currentChannel))
716725
{
717726

@@ -1929,5 +1938,3 @@ int ContinuousCircularBuffer::GetPtr()
19291938

19301939
/************************************************************/
19311940

1932-
1933-

Source/Plugins/SpikeSorter/SpikeSorter.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,10 @@ class SpikeSorter : public GenericProcessor
366366
const OwnedArray<Electrode>& getElectrodes();
367367

368368
std::vector<String> electrodeTypes;
369-
369+
370+
void setEditAllState(bool val);
371+
bool getEditAllState();
372+
370373
#if 0
371374
/** sync PSTH : inform of a new electrode added */
372375
void updateSinks(Electrode* newElectrode);
@@ -441,6 +444,8 @@ class SpikeSorter : public GenericProcessor
441444

442445
OwnedArray<Electrode> electrodes;
443446
PCAcomputingThread computingThread;
447+
448+
bool editAll = false;
444449
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeSorter);
445450

446451
};

Source/Plugins/SpikeSorter/SpikeSorterCanvas.cpp

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,14 @@ SpikeSorterCanvas::SpikeSorterCanvas(SpikeSorter* n) :
8181
prevElectrode->setRadius(3.0f);
8282
prevElectrode->addListener(this);
8383
addAndMakeVisible(prevElectrode);
84-
84+
85+
editAllThresholds = new UtilityButton("Edit All Thresholds",Font("Small Text", 13, Font::plain));
86+
editAllThresholds->addListener(this);
87+
editAllThresholds->setBounds(140,30,60,20);
88+
editAllThresholds->setClickingTogglesState(true);
89+
addAndMakeVisible(editAllThresholds);
90+
//
91+
8592
addAndMakeVisible(viewport);
8693

8794
setWantsKeyboardFocus(true);
@@ -159,6 +166,8 @@ void SpikeSorterCanvas::resized()
159166

160167
newIDbuttons->setBounds(0, 270, 120,20);
161168
deleteAllUnits->setBounds(0, 300, 120,20);
169+
170+
editAllThresholds->setBounds(0, 330, 120,20);
162171

163172
}
164173

@@ -402,7 +411,15 @@ void SpikeSorterCanvas::buttonClicked(Button* button)
402411
electrode->spikePlot->updateUnitsFromProcessor();
403412
processor->removeAllUnits(electrode->electrodeID);
404413
}
405-
414+
else if (button == editAllThresholds){
415+
416+
}
417+
418+
// new
419+
if (button == editAllThresholds){
420+
processor->setEditAllState(button->getToggleState());
421+
}
422+
406423
repaint();
407424
}
408425

@@ -1072,6 +1089,7 @@ void WaveformAxes::plotSpike(SorterSpikePtr s, Graphics& g)
10721089
{
10731090
if (s.get() == nullptr) return;
10741091
float h = getHeight();
1092+
10751093
g.setColour(Colour(s->color[0], s->color[1], s->color[2]));
10761094
//g.setColour(Colours::pink);
10771095
//compute the spatial width for each waveform sample
@@ -1094,13 +1112,15 @@ void WaveformAxes::plotSpike(SorterSpikePtr s, Graphics& g)
10941112

10951113
float x = 0.0f;
10961114

1115+
10971116
for (int i = 0; i < spikeSamples - 1; i++)
10981117
{
10991118
//std::cout << s.data[sampIdx] << std::endl;
11001119

11011120

11021121
float s1 = h - (h / 2 + s->getData()[offset + i] / (range)* h);
11031122
float s2 = h - (h / 2 + s->getData()[offset + i + 1] / (range)* h);
1123+
11041124
if (signalFlipped)
11051125
{
11061126
s1 = h - s1;
@@ -1456,7 +1476,20 @@ void WaveformAxes::mouseDrag(const MouseEvent& event)
14561476

14571477
displayThresholdLevel = (0.5f - thresholdSliderPosition) * range;
14581478
// update processor
1459-
processor->getActiveElectrode()->thresholds[channel] = displayThresholdLevel;
1479+
1480+
if (processor->getEditAllState()){
1481+
int numElectrodes = processor->getNumElectrodes();
1482+
for (int electrodeIt = 0 ; electrodeIt < numElectrodes ; electrodeIt++){
1483+
//processor->setChannelThreshold(electrodeList->getSelectedItemIndex(),i,slider->getValue());
1484+
for (int channelIt = 0 ; channelIt < processor->getNumChannels(electrodeIt) ; channelIt++){
1485+
processor->setChannelThreshold(electrodeIt,channelIt,displayThresholdLevel);
1486+
}
1487+
}
1488+
}
1489+
else{
1490+
processor->getActiveElectrode()->thresholds[channel] = displayThresholdLevel;
1491+
}
1492+
14601493
SpikeSorterEditor* edt = (SpikeSorterEditor*) processor->getEditor();
14611494
for (int k=0; k<processor->getActiveElectrode()->numChannels; k++)
14621495
edt->electrodeButtons[k]->setToggleState(false, dontSendNotification);
@@ -1684,7 +1717,7 @@ void WaveformAxes::paint(Graphics& g)
16841717
for (int spikeNum = 0; spikeNum < bufferSize; spikeNum++)
16851718
{
16861719

1687-
if (spikeNum != spikeIndex)
1720+
if (spikeNum != spikeIndex && spikeBuffer[spikeNum] != nullptr)
16881721
{
16891722
g.setColour(Colours::grey);
16901723
plotSpike(spikeBuffer[spikeNum], g);
@@ -1693,7 +1726,8 @@ void WaveformAxes::paint(Graphics& g)
16931726
}
16941727

16951728
g.setColour(Colours::white);
1696-
plotSpike(spikeBuffer[spikeIndex], g);
1729+
if (spikeBuffer[spikeIndex] != nullptr)
1730+
plotSpike(spikeBuffer[spikeIndex], g);
16971731

16981732
spikesReceivedSinceLastRedraw = 0;
16991733

Source/Plugins/SpikeSorter/SpikeSorterCanvas.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,21 +100,22 @@ class SpikeSorterCanvas : public Visualizer, public Button::Listener
100100

101101
SpikeSorter* processor;
102102

103+
// added editAllThresholds
103104
ScopedPointer<UtilityButton> addPolygonUnitButton,
104-
addUnitButton, delUnitButton, addBoxButton, delBoxButton, rePCAButton,nextElectrode,prevElectrode,newIDbuttons,deleteAllUnits;
105+
addUnitButton, delUnitButton, addBoxButton, delBoxButton, rePCAButton,nextElectrode,prevElectrode,newIDbuttons,deleteAllUnits,editAllThresholds;
105106

106107
private:
107108
void removeUnitOrBox();
108109
ScopedPointer<SpikeThresholdDisplay> spikeDisplay;
109110
ScopedPointer<Viewport> viewport;
110111

112+
111113
bool inDrawingPolygonMode;
112114
bool newSpike;
113115
// SpikeObject spike;
114116
Electrode* electrode;
115117
int scrollBarThickness;
116-
117-
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeSorterCanvas);
118+
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(SpikeSorterCanvas);
118119

119120
};
120121

@@ -146,7 +147,7 @@ class SpikeThresholdDisplay : public Component
146147
private:
147148
int numColumns;
148149
int totalHeight;
149-
150+
150151
SpikeSorter* processor;
151152
SpikeSorterCanvas* canvas;
152153
Viewport* viewport;
@@ -246,6 +247,9 @@ class WaveformAxes : public GenericDrawAxes
246247

247248
private:
248249
int electrodeID;
250+
// new
251+
bool editAll = false;
252+
//
249253
bool signalFlipped;
250254
bool bDragging ;
251255
Colour waveColour;

Source/Plugins/SpikeSorter/SpikeSorterEditor.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ SpikeSorterEditor::SpikeSorterEditor(GenericProcessor* parentNode, bool useDefau
7878
electrodeList->setEditableText(false);
7979
electrodeList->setJustificationType(Justification::centredLeft);
8080
electrodeList->addListener(this);
81+
//electrodeList->setBounds(65,30,130,20);
8182
electrodeList->setBounds(65,30,130,20);
8283
addAndMakeVisible(electrodeList);
8384

@@ -204,11 +205,22 @@ void SpikeSorterEditor::sliderEvent(Slider* slider)
204205

205206
if (electrodeNum > -1)
206207
{
208+
// new
207209
SpikeSorter* processor = (SpikeSorter*) getProcessor();
210+
if (processor->getEditAllState()){
211+
int numElectrodes = processor->getNumElectrodes();
212+
for (int electrodeIt = 0 ; electrodeIt < numElectrodes ; electrodeIt++){
213+
//processor->setChannelThreshold(electrodeList->getSelectedItemIndex(),i,slider->getValue());
214+
for (int channelIt = 0 ; channelIt < processor->getNumChannels(electrodeIt) ; channelIt++){
215+
processor->setChannelThreshold(electrodeIt,channelIt,slider->getValue());
216+
}
217+
}
218+
}
219+
else{
208220
processor->setChannelThreshold(electrodeList->getSelectedItemIndex(),
209221
electrodeNum,
210222
slider->getValue());
211-
223+
}
212224

213225

214226
/* //Array<int> dacChannels = processor->getDACassignments;
@@ -231,7 +243,7 @@ void SpikeSorterEditor::buttonEvent(Button* button)
231243
{
232244

233245
SpikeSorter* processor = (SpikeSorter*) getProcessor();
234-
246+
235247
if (electrodeButtons.contains((ElectrodeButton*) button))
236248
{
237249

Source/Plugins/SpikeSorter/SpikeSorterEditor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ class SpikeSorterEditor : public VisualizerEditor,
6969

7070
private:
7171
void drawElectrodeButtons(int);
72+
7273

7374

7475

0 commit comments

Comments
 (0)