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

Add sync timestamp text dataset

parent 09152f47
No related branches found
No related tags found
No related merge requests found
......@@ -284,6 +284,33 @@ bool NWBFile::startNewRecording(int recordingNumber, const Array<ContinuousGroup
eventDataSets.add(tsStruct.release());
}
basePath = rootPath + "/events/sync_messages";
ancestry.clearQuick();
ancestry.add("Timeseries");
ancestry.add("AnnotationSeries");
String desc = "Stores recording start timestamps for each processor in text format";
if (!createTimeSeriesBase(basePath, "Autogenerated messages", desc, desc, ancestry)) return false;
tsStruct = new TimeSeries();
tsStruct->basePath = basePath;
dSet = createDataSet(BaseDataType::STR(100), 0, 1, basePath + "/data");
if (dSet == nullptr)
{
std::cerr << "Error creating dataset for sync messages" << std::endl;
return false;
}
else
{
createDataAttributes(basePath, NAN, NAN, "n/a");
}
tsStruct->baseDataSet = dSet;
dSet = createTimestampDataSet(basePath, 1);
if (dSet == nullptr) return false;
tsStruct->timestampDataSet = dSet;
dSet = createDataSet(BaseDataType::U8, 0, 1, basePath + "/control");
if (dSet == nullptr) return false;
tsStruct->controlDataSet = dSet;
syncMsgDataSet = tsStruct;
return true;
}
......@@ -309,10 +336,13 @@ bool NWBFile::startNewRecording(int recordingNumber, const Array<ContinuousGroup
tsStruct = eventDataSets[i];
CHECK_ERROR(setAttribute(BaseDataType::U64, &(tsStruct->numSamples), tsStruct->basePath, "num_samples"));
}
CHECK_ERROR(setAttribute(BaseDataType::U64, &(syncMsgDataSet->numSamples), syncMsgDataSet->basePath, "num_samples"));
continuousDataSets.clear();
spikeDataSets.clear();
eventDataSets.clear();
syncMsgDataSet = nullptr;
}
void NWBFile::writeData(int datasetID, int channel, int nSamples, const float* data, float bitVolts)
......@@ -425,6 +455,15 @@ bool NWBFile::startNewRecording(int recordingNumber, const Array<ContinuousGroup
eventDataSets[eventID]->numSamples += 1;
}
void NWBFile::writeTimestampSyncText(uint16 sourceID, int64 timestamp, float sourceSampleRate, String text)
{
CHECK_ERROR(syncMsgDataSet->baseDataSet->writeDataBlock(1, BaseDataType::STR(text.length()), text.toUTF8()));
double timeSec = timestamp / sourceSampleRate;
CHECK_ERROR(syncMsgDataSet->timestampDataSet->writeDataBlock(1, BaseDataType::F64, &timeSec));
CHECK_ERROR(syncMsgDataSet->controlDataSet->writeDataBlock(1, BaseDataType::U8, &sourceID));
syncMsgDataSet->numSamples += 1;
}
String NWBFile::getFileName()
{
......
......@@ -55,6 +55,7 @@ namespace NWBRecording
void writeTimestamps(int datasetID, int nSamples, const double* data);
void writeSpike(int electrodeId, const SpikeChannel* channel, const SpikeEvent* event);
void writeEvent(int eventID, const EventChannel* channel, const Event* event);
void writeTimestampSyncText(uint16 sourceID, int64 timestamp, float sourceSampleRate, String text);
String getFileName() override;
void setXmlText(const String& xmlText);
......@@ -84,7 +85,7 @@ namespace NWBRecording
OwnedArray<TimeSeries> continuousDataSets;
OwnedArray<TimeSeries> spikeDataSets;
OwnedArray<TimeSeries> eventDataSets;
ScopedPointer<TimeSeries> syncMsgDataSet;
const String* xmlText;
const String identifierText;
......
......@@ -166,7 +166,7 @@ void NWBRecordEngine::writeEvent(int eventIndex, const MidiMessage& event)
void NWBRecordEngine::writeTimestampSyncText(uint16 sourceID, uint16 sourceIdx, int64 timestamp, float sourceSampleRate, String text)
{
recordFile->writeTimestampSyncText(sourceID, timestamp, sourceSampleRate, text);
}
void NWBRecordEngine::addSpikeElectrode(int index,const SpikeChannel* elec)
......
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