From d5ed1fc7f785fc7c5e753dc50799fa9b88e0fe1b Mon Sep 17 00:00:00 2001 From: bparks13 Date: Fri, 18 Jul 2025 15:07:50 -0400 Subject: [PATCH 1/2] Add 2D arrays to correctly track both Neuropixels 2e probes --- Source/Devices/Neuropixels2e.cpp | 25 +++++++++++++------------ Source/Devices/Neuropixels2e.h | 12 ++++++------ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/Source/Devices/Neuropixels2e.cpp b/Source/Devices/Neuropixels2e.cpp index d3a04d7..99a5eac 100644 --- a/Source/Devices/Neuropixels2e.cpp +++ b/Source/Devices/Neuropixels2e.cpp @@ -30,14 +30,16 @@ Neuropixels2e::Neuropixels2e(std::string name, std::string hubName, const oni_de INeuropixel(NeuropixelsV2eValues::numberOfSettings, NeuropixelsV2eValues::numberOfShanks) { probeSN.fill(0); + frameCount.fill(0); + sampleNumber.fill(0); for (int i = 0; i < NeuropixelsV2eValues::numberOfSettings; i++) { defineMetadata(settings[i].get(), NeuropixelsV2eValues::numberOfShanks); } - for (int i = 0; i < numFrames; i++) - eventCodes[i] = 0; + for (int i = 0; i < NumberOfProbes; i++) + eventCodes[i].fill(0); } Neuropixels2e::~Neuropixels2e() @@ -495,8 +497,8 @@ uint64_t Neuropixels2e::getProbeSN(uint8_t probeSelect) void Neuropixels2e::startAcquisition() { - sampleNumber = 0; - frameCount = 0; + frameCount.fill(0); + sampleNumber.fill(0); } void Neuropixels2e::stopAcquisition() @@ -535,8 +537,8 @@ void Neuropixels2e::processFrames() uint16_t probeIndex = *(dataPtr + 4); uint16_t* amplifierData = dataPtr + 9; - sampleNumbers[frameCount] = sampleNumber; - timestamps[frameCount] = deviceContext->convertTimestampToSeconds(frame->time); + sampleNumbers[probeIndex][frameCount[probeIndex]] = sampleNumber[probeIndex]++; + timestamps[probeIndex][frameCount[probeIndex]] = deviceContext->convertTimestampToSeconds(frame->time); for (int i = 0; i < FramesPerSuperFrame; i++) { @@ -546,18 +548,17 @@ void Neuropixels2e::processFrames() { const size_t channelIndex = rawToChannel[j][i]; - samples[channelIndex * numFrames + frameCount] = + samples[probeIndex][channelIndex * numFrames + frameCount[probeIndex]] = (float)(*(amplifierData + adcIndices[j] + adcDataOffset)) * gainCorrection[probeIndex]; } } - frameCount++; - sampleNumber++; + frameCount[probeIndex]++; - if (frameCount >= numFrames) + if (frameCount[probeIndex] >= numFrames) { - amplifierBuffer[probeIndex]->addToBuffer(samples.data(), sampleNumbers, timestamps, eventCodes, numFrames); - frameCount = 0; + amplifierBuffer[probeIndex]->addToBuffer(samples[probeIndex].data(), sampleNumbers[probeIndex].data(), timestamps[probeIndex].data(), eventCodes[probeIndex].data(), numFrames); + frameCount[probeIndex] = 0; } oni_destroy_frame(frame); diff --git a/Source/Devices/Neuropixels2e.h b/Source/Devices/Neuropixels2e.h index ff0d039..955165f 100644 --- a/Source/Devices/Neuropixels2e.h +++ b/Source/Devices/Neuropixels2e.h @@ -124,14 +124,14 @@ namespace OnixSourcePlugin static const int numFrames = 10; static const int numSamples = numberOfChannels * numFrames; - std::array samples; + std::array, NumberOfProbes> samples {}; - int64 sampleNumbers[numFrames]; - double timestamps[numFrames]; - uint64 eventCodes[numFrames]; + std::array, NumberOfProbes> sampleNumbers {}; + std::array, NumberOfProbes> timestamps {}; + std::array, NumberOfProbes> eventCodes {}; - int frameCount = 0; - int sampleNumber = 0; + std::array frameCount; + std::array sampleNumber; std::unique_ptr serializer; std::unique_ptr deserializer; From 6883d39ec56fd2fa16f47d7048fbda999bcc7500 Mon Sep 17 00:00:00 2001 From: bparks13 Date: Mon, 21 Jul 2025 09:56:26 -0400 Subject: [PATCH 2/2] Remove unsigned integer offset in Neuropixels 2.0 probes --- Source/Devices/Neuropixels2e.cpp | 2 +- Source/Devices/Neuropixels2e.h | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Source/Devices/Neuropixels2e.cpp b/Source/Devices/Neuropixels2e.cpp index 99a5eac..6452606 100644 --- a/Source/Devices/Neuropixels2e.cpp +++ b/Source/Devices/Neuropixels2e.cpp @@ -549,7 +549,7 @@ void Neuropixels2e::processFrames() const size_t channelIndex = rawToChannel[j][i]; samples[probeIndex][channelIndex * numFrames + frameCount[probeIndex]] = - (float)(*(amplifierData + adcIndices[j] + adcDataOffset)) * gainCorrection[probeIndex]; + (float)(*(amplifierData + adcIndices[j] + adcDataOffset)) * gainCorrection[probeIndex] + DataMidpoint; } } diff --git a/Source/Devices/Neuropixels2e.h b/Source/Devices/Neuropixels2e.h index 955165f..00682a5 100644 --- a/Source/Devices/Neuropixels2e.h +++ b/Source/Devices/Neuropixels2e.h @@ -95,6 +95,9 @@ namespace OnixSourcePlugin static constexpr int NumberOfProbes = 2; + static constexpr uint16_t NumberOfAdcBins = 4096; + static constexpr float DataMidpoint = NumberOfAdcBins / 2; + DataBuffer* amplifierBuffer[NumberOfProbes]; std::array probeSN;