Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 14 additions & 13 deletions Source/Devices/Neuropixels2e.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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++)
{
Expand All @@ -546,18 +548,17 @@ void Neuropixels2e::processFrames()
{
const size_t channelIndex = rawToChannel[j][i];

samples[channelIndex * numFrames + frameCount] =
(float)(*(amplifierData + adcIndices[j] + adcDataOffset)) * gainCorrection[probeIndex];
samples[probeIndex][channelIndex * numFrames + frameCount[probeIndex]] =
(float)(*(amplifierData + adcIndices[j] + adcDataOffset)) * gainCorrection[probeIndex] + DataMidpoint;
}
}

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);
Expand Down
15 changes: 9 additions & 6 deletions Source/Devices/Neuropixels2e.h
Original file line number Diff line number Diff line change
Expand Up @@ -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<uint64_t, NumberOfProbes> probeSN;
Expand Down Expand Up @@ -124,14 +127,14 @@ namespace OnixSourcePlugin
static const int numFrames = 10;
static const int numSamples = numberOfChannels * numFrames;

std::array<float, numSamples> samples;
std::array<std::array<float, numSamples>, NumberOfProbes> samples {};

int64 sampleNumbers[numFrames];
double timestamps[numFrames];
uint64 eventCodes[numFrames];
std::array<std::array<int64_t, numFrames>, NumberOfProbes> sampleNumbers {};
std::array<std::array<double, numFrames>, NumberOfProbes> timestamps {};
std::array<std::array<uint64_t, numFrames>, NumberOfProbes> eventCodes {};

int frameCount = 0;
int sampleNumber = 0;
std::array<int, NumberOfProbes> frameCount;
std::array<int64_t, NumberOfProbes> sampleNumber;

std::unique_ptr<I2CRegisterContext> serializer;
std::unique_ptr<I2CRegisterContext> deserializer;
Expand Down