Skip to content

Commit 5b974ae

Browse files
committed
Allow LFP Viewer to align to events outside current buffer
1 parent 67a2e1d commit 5b974ae

3 files changed

Lines changed: 21 additions & 17 deletions

File tree

Plugins/LfpViewer/LfpDisplayCanvas.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,9 +1155,11 @@ void LfpDisplaySplitter::updateScreenBuffer()
11551155
{
11561156
// std::cout << "Update screen buffer" << std::endl;
11571157

1158-
int triggerTime = triggerChannel >= 0
1159-
? int (processor->getLatestTriggerTime (splitID))
1160-
: -1;
1158+
const auto triggerTimeOpt = triggerChannel >= 0
1159+
? processor->getLatestTriggerTime (splitID)
1160+
: std::optional<int64>();
1161+
const bool hasTrigger = triggerTimeOpt.has_value();
1162+
int triggerTime = hasTrigger ? int (*triggerTimeOpt) : -1;
11611163

11621164
int maxSamples = screenBufferWidth;
11631165
int displayWidth = lfpDisplay->lfpChannelBitmap.getWidth();
@@ -1167,8 +1169,9 @@ void LfpDisplaySplitter::updateScreenBuffer()
11671169
maxSamples = displayWidth;
11681170
}
11691171

1170-
if (triggerTime > 0)
1172+
if (hasTrigger)
11711173
{
1174+
//std::cout << "Split display " << splitID << " trigger time : " << triggerTime << std::endl;
11721175
processor->acknowledgeTrigger (splitID);
11731176
}
11741177

@@ -1212,7 +1215,7 @@ void LfpDisplaySplitter::updateScreenBuffer()
12121215
if (triggerChannel >= 0)
12131216
{
12141217
// we may need to wait for a trigger
1215-
if (triggerTime >= 0)
1218+
if (hasTrigger)
12161219
{
12171220
if (sbi == 0 || reachedEnd)
12181221
{
@@ -1247,7 +1250,7 @@ void LfpDisplaySplitter::updateScreenBuffer()
12471250
//std::cout << "Rewinding playhead" << std::endl;
12481251
lfpDisplay->lastBitmapIndex = 0;
12491252

1250-
/*std::cout << "Trial number: " << numTrials << std::endl;
1253+
/* std::cout << "Trial number: " << numTrials << std::endl;
12511254
std::cout << "maxSamples: " << maxSamples << std::endl;
12521255
std::cout << "ratio: " << ratio << std::endl;
12531256
std::cout << "dispBufLim: " << dispBufLim << std::endl;

Plugins/LfpViewer/LfpDisplayNode.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ LfpDisplayNode::LfpDisplayNode()
3535
for (int displayIndex = 0; displayIndex <= 3; displayIndex++)
3636
{
3737
triggerChannels.add (-1);
38-
latestTrigger.add (-1);
39-
latestCurrentTrigger.add (-1);
38+
latestTrigger.add (std::nullopt);
39+
latestCurrentTrigger.add (std::nullopt);
4040
}
4141
}
4242

@@ -263,7 +263,7 @@ void LfpDisplayNode::handleTTLEvent (TTLEventPtr event)
263263
if (splitDisplays[i]->selectedStreamId == eventStreamId)
264264
{
265265
// if an event came in on the trigger channel
266-
//std::cout << "Setting latest current trigger to " << eventTime << std::endl;
266+
//std::cout << "Setting latest current trigger for stream " << eventStreamId << " to " << eventTime << std::endl;
267267
latestCurrentTrigger.set (i, eventTime);
268268
}
269269
}
@@ -288,7 +288,7 @@ void LfpDisplayNode::handleTTLEvent (TTLEventPtr event)
288288
void LfpDisplayNode::initializeEventChannels()
289289
{
290290
for (int i = 0; i < 3; i++)
291-
latestCurrentTrigger.set (i, -1); // reset to -1
291+
latestCurrentTrigger.set (i, std::nullopt); // reset
292292

293293
for (auto displayBuffer : displayBuffers)
294294
{
@@ -301,9 +301,9 @@ void LfpDisplayNode::finalizeEventChannels()
301301
{
302302
for (int i = 0; i < 3; i++)
303303
{
304-
if (latestTrigger[i] == -1 && latestCurrentTrigger[i] > -1) // received a trigger, but not yet acknowledged
304+
if (! latestTrigger[i].has_value() && latestCurrentTrigger[i].has_value()) // received a trigger, but not yet acknowledged
305305
{
306-
int triggerSample = latestCurrentTrigger[i] + splitDisplays[i]->displayBuffer->displayBufferIndices.getLast();
306+
int triggerSample = int (*latestCurrentTrigger[i]) + splitDisplays[i]->displayBuffer->displayBufferIndices.getLast();
307307
//std::cout << "Setting latest trigger to " << triggerSample << std::endl;
308308
latestTrigger.set (i, triggerSample);
309309
}
@@ -347,12 +347,12 @@ void LfpDisplayNode::process (AudioBuffer<float>& buffer)
347347
}
348348
}
349349

350-
int64 LfpDisplayNode::getLatestTriggerTime (int id) const
350+
std::optional<int64> LfpDisplayNode::getLatestTriggerTime (int id) const
351351
{
352352
return latestTrigger[id];
353353
}
354354

355355
void LfpDisplayNode::acknowledgeTrigger (int id)
356356
{
357-
latestTrigger.set (id, -1);
357+
latestTrigger.set (id, std::nullopt);
358358
}

Plugins/LfpViewer/LfpDisplayNode.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <ProcessorHeaders.h>
3131

3232
#include <map>
33+
#include <optional>
3334

3435
class DataViewport;
3536

@@ -94,7 +95,7 @@ class TESTABLE LfpDisplayNode : public GenericProcessor
9495
void setSplitDisplays (Array<LfpDisplaySplitter*>);
9596

9697
/** Returns the latest sample number that triggered a given split display*/
97-
int64 getLatestTriggerTime (int splitId) const;
98+
std::optional<int64> getLatestTriggerTime (int splitId) const;
9899

99100
/** Acknowledges receipt of a trigger for a given split display*/
100101
void acknowledgeTrigger (int splitId);
@@ -116,8 +117,8 @@ class TESTABLE LfpDisplayNode : public GenericProcessor
116117
Array<LfpDisplaySplitter*> splitDisplays;
117118

118119
Array<int> triggerChannels;
119-
Array<int64> latestTrigger; // overall timestamp
120-
Array<int> latestCurrentTrigger; // within current input buffer
120+
Array<std::optional<int64>> latestTrigger; // overall timestamp
121+
Array<std::optional<int64>> latestCurrentTrigger; // within current input buffer
121122

122123
static uint16 getEventSourceId (const EventChannel* event);
123124
static uint16 getChannelSourceId (const ChannelInfoObject* chan);

0 commit comments

Comments
 (0)