Skip to content
Snippets Groups Projects
Commit 010534b1 authored by Aaron Cuevas Lopez's avatar Aaron Cuevas Lopez
Browse files

Update kwik plugin

parent e9c5b695
No related branches found
No related tags found
No related merge requests found
......@@ -82,7 +82,7 @@ void HDF5Recording::resetChannels()
spikesFile->resetChannels();
}
void HDF5Recording::addChannel(int index,const Channel* chan)
void HDF5Recording::addDataChannel(int index,const DataChannel* chan)
{
processorMap.add(processorIndex);
}
......@@ -120,14 +120,14 @@ void HDF5Recording::openFiles(File rootFolder, int experimentNumber, int recordi
int index = processorMap[getRealChannel(i)];
if (!fileArray[index]->isOpen())
{
fileArray[index]->initFile(getChannel(getRealChannel(i))->nodeId, basepath);
fileArray[index]->initFile(getDataChannel(getRealChannel(i))->getCurrentNodeID(), basepath);
infoArray[index]->start_time = getTimestamp(i);
}
channelsPerProcessor.set(index, channelsPerProcessor[index] + 1);
bitVoltsArray[index]->add(getChannel(getRealChannel(i))->bitVolts);
sampleRatesArray[index]->add(getChannel(getRealChannel(i))->sampleRate);
if (getChannel(getRealChannel(i))->sampleRate != infoArray[index]->sample_rate)
bitVoltsArray[index]->add(getDataChannel(getRealChannel(i))->getBitVolts());
sampleRatesArray[index]->add(getDataChannel(getRealChannel(i))->getSampleRate());
if (getDataChannel(getRealChannel(i))->getSampleRate() != infoArray[index]->sample_rate)
{
infoArray[index]->multiSample = true;
}
......@@ -199,8 +199,8 @@ void HDF5Recording::writeData(int writeChannel, int realChannel, const float* bu
scaledBuffer.malloc(size);
intBuffer.malloc(size);
}
double multFactor = 1 / (float(0x7fff) * getChannel(realChannel)->bitVolts);
int index = processorMap[getChannel(realChannel)->recordIndex];
double multFactor = 1 / (float(0x7fff) * getDataChannel(realChannel)->getBitVolts());
int index = processorMap[realChannel]; //CHECK
FloatVectorOperations::copyWithMultiply(scaledBuffer.getData(), buffer, multFactor, size);
AudioDataConverters::convertFloatToInt16LE(scaledBuffer.getData(), intBuffer.getData(), size);
fileArray[index]->writeRowData(intBuffer.getData(), size, recordedChanToKWDChan[writeChannel]);
......@@ -235,29 +235,47 @@ void HDF5Recording::endChannelBlock(bool lastBlock)
if ((tsSize > 0) && ((tsSize > CHANNEL_TIMESTAMP_MIN_WRITE) || lastBlock))
{
int realChan = getRealChannel(ch);
int index = processorMap[getChannel(realChan)->recordIndex];
int index = processorMap[realChan]; //CHECK
fileArray[index]->writeTimestamps(channelTimestampArray[ch]->getRawDataPointer(), tsSize, recordedChanToKWDChan[ch]);
channelTimestampArray[ch]->clearQuick();
}
}
}
void HDF5Recording::writeEvent(int eventType, const MidiMessage& event, int64 timestamp)
void HDF5Recording::writeEvent(int eventChannel, const MidiMessage& event)
{
const uint8* dataptr = event.getRawData();
if (eventType == GenericProcessor::TTL)
eventFile->writeEvent(0,*(dataptr+2),*(dataptr+1),(void*)(dataptr+3),timestamp);
else if (eventType == GenericProcessor::MESSAGE)
eventFile->writeEvent(1,*(dataptr+2),*(dataptr+1),(void*)(dataptr+6),timestamp);
if (Event::getEventType(event) == EventChannel::TTL)
{
TTLEventPtr ttl = TTLEvent::deserializeFromMessage(event, getEventChannel(eventChannel));
if (ttl == nullptr) return;
uint8 channel = ttl->getChannel();
eventFile->writeEvent(0, (ttl->getState() ? 1 : 0), ttl->getSourceID(), &channel, ttl->getTimestamp());
}
else if (Event::getEventType(event) == EventChannel::TEXT)
{
TextEventPtr text = TextEvent::deserializeFromMessage(event, getEventChannel(eventChannel));
if (text == nullptr) return;
String textMsg = text->getText();
eventFile->writeEvent(1, 0, text->getSourceID(), textMsg.toUTF8().getAddress(), text->getTimestamp());
}
}
void HDF5Recording::writeTimestampSyncText(uint16 sourceID, uint16 sourceIdx, uint64 timestamp, String text)
{
eventFile->writeEvent(1, 0xFF, sourceID, text.toUTF8().getAddress(), timestamp);
}
void HDF5Recording::addSpikeElectrode(int index, const SpikeRecordInfo* elec)
void HDF5Recording::addSpikeElectrode(int index, const SpikeChannel* elec)
{
spikesFile->addChannelGroup(elec->numChannels);
spikesFile->addChannelGroup(elec->getNumChannels());
}
void HDF5Recording::writeSpike(int electrodeIndex, const SpikeObject& spike, int64 /*timestamp*/)
void HDF5Recording::writeSpike(int electrodeIndex, const SpikeEvent* spike)
{
spikesFile->writeSpike(electrodeIndex,spike.nSamples,spike.data,spike.timestamp);
const SpikeChannel* spikeInfo = getSpikeChannel(electrodeIndex);
Array<float> bitVolts;
for (int i = 0; i < spikeInfo->getNumChannels(); i++)
bitVolts.add(spikeInfo->getChannelBitVolts(i));
spikesFile->writeSpike(electrodeIndex,spikeInfo->getTotalSamples(),spike->getDataPointer(), bitVolts, spike->getTimestamp());
}
void HDF5Recording::startAcquisition()
......
......@@ -36,10 +36,11 @@ public:
void openFiles(File rootFolder, int experimentNumber, int recordingNumber) override;
void closeFiles() override;
void writeData(int writeChannel, int realChannel, const float* buffer, int size) override;
void writeEvent(int eventType, const MidiMessage& event, int64 timestamp) override;
void addChannel(int index, const Channel* chan) override;
void addSpikeElectrode(int index,const SpikeRecordInfo* elec) override;
void writeSpike(int electrodeIndex, const SpikeObject& spike, int64 timestamp) override;
void writeEvent(int eventType, const MidiMessage& event) override;
void writeTimestampSyncText(uint16 sourceID, uint16 sourceIdx, uint64 timestamp, String text) override;
void addDataChannel(int index, const DataChannel* chan) override;
void addSpikeElectrode(int index,const SpikeChannel* elec) override;
void writeSpike(int electrodeIndex, const SpikeEvent* spike) override;
void registerProcessor(const GenericProcessor* processor) override;
void resetChannels() override;
void startAcquisition() override;
......
......@@ -392,7 +392,7 @@ void KWXFile::resetChannels()
channelArray.clear();
}
void KWXFile::writeSpike(int groupIndex, int nSamples, const uint16* data, uint64 timestamp)
void KWXFile::writeSpike(int groupIndex, int nSamples, const float* data, Array<float>& bitVolts, uint64 timestamp)
{
if ((groupIndex < 0) || (groupIndex >= numElectrodes))
{
......@@ -408,7 +408,7 @@ void KWXFile::writeSpike(int groupIndex, int nSamples, const uint16* data, uint6
{
for (int j = 0; j < nChans; j++)
{
*(dst++) = *(data+j*nSamples+i)-32768;
*(dst++) = static_cast<int16>((*(data+j*nSamples+i))/bitVolts[j]);
}
}
......
......@@ -113,7 +113,7 @@ public:
void stopRecording();
void addChannelGroup(int nChannels);
void resetChannels();
void writeSpike(int groupIndex, int nSamples, const uint16* data, uint64 timestamp);
void writeSpike(int groupIndex, int nSamples, const float* data, Array<float>& bitVolts, uint64 timestamp);
String getFileName();
protected:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment