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

Update binary format for the new channel and event system

parent dd80c5ec
No related branches found
No related tags found
No related merge requests found
......@@ -117,10 +117,12 @@
<ItemGroup>
<ClInclude Include="..\..\..\..\Source\Plugins\BinaryWriter\BinaryRecording.h" />
<ClInclude Include="..\..\..\..\Source\Plugins\BinaryWriter\FileMemoryBlock.h" />
<ClInclude Include="..\..\..\..\Source\Plugins\BinaryWriter\NpyFile.h" />
<ClInclude Include="..\..\..\..\Source\Plugins\BinaryWriter\SequentialBlockFile.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\..\Source\Plugins\BinaryWriter\BinaryRecording.cpp" />
<ClCompile Include="..\..\..\..\Source\Plugins\BinaryWriter\NpyFile.cpp" />
<ClCompile Include="..\..\..\..\Source\Plugins\BinaryWriter\OpenEphysLib.cpp" />
<ClCompile Include="..\..\..\..\Source\Plugins\BinaryWriter\SequentialBlockFile.cpp" />
</ItemGroup>
......
......@@ -24,6 +24,9 @@
<ClInclude Include="..\..\..\..\Source\Plugins\BinaryWriter\BinaryRecording.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\Source\Plugins\BinaryWriter\NpyFile.h">
<Filter>Source Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\..\Source\Plugins\BinaryWriter\SequentialBlockFile.cpp">
......@@ -35,5 +38,8 @@
<ClCompile Include="..\..\..\..\Source\Plugins\BinaryWriter\OpenEphysLib.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\..\Source\Plugins\BinaryWriter\NpyFile.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
</Project>
\ No newline at end of file
This diff is collapsed.
......@@ -25,14 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <RecordingLib.h>
#include "SequentialBlockFile.h"
//Defines for the old-stype original recording spikes and event files
#define HEADER_SIZE 1024
#define BLOCK_LENGTH 1024
#define VERSION 0.4
#define VSTR(s) #s
#define VSTR2(s) VSTR(s)
#define VERSION_STRING VSTR2(VERSION)
#include "NpyFile.h"
namespace BinaryRecordingEngine
{
......@@ -52,19 +45,49 @@ namespace BinaryRecordingEngine
void addSpikeElectrode(int index, const SpikeChannel* elec) override;
void writeSpike(int electrodeIndex, const SpikeEvent* spike) override;
void writeTimestampSyncText(uint16 sourceID, uint16 sourceIdx, int64 timestamp, float, String text) override;
void setParameter(EngineParameter& parameter) override;
static RecordEngineManager* getEngineManager();
private:
typedef Array<const DataChannel*> ContinuousGroup;
void openSpikeFile(String basepath, int spikeIndex, int recordingNumber);
String generateSpikeHeader(const SpikeChannel* elec);
String generateEventHeader();
void openMessageFile(String basepath, int recordingNumber);
void openEventFile(String basepath, int recordingNumber);
void writeTTLEvent(int eventIndex, const MidiMessage& event);
void writeMessage(String message, uint16 processorID, uint16 channel, int64 timestamp);
class EventRecording
{
public:
ScopedPointer<NpyFile> mainFile;
ScopedPointer<NpyFile> timestampFile;
ScopedPointer<NpyFile> metaDataFile;
ScopedPointer<NpyFile> channelFile;
ScopedPointer<NpyFile> extraFile;
};
enum SpikeMode
{
AllInOne = 0,
SeparateTimestamps = 1,
AllSeparated = 2
};
enum TTLMode
{
JointWord = 0,
SeparateWord = 1,
NoWord = 2
};
enum EventMode
{
JointChannel = 0,
SeparateChannel = 1
};
NpyFile* createEventMetadataFile(const MetaDataEventObject* channel, String fileName);
void writeEventMetaData(const MetaDataEvent* event, NpyFile* file);
SpikeMode m_spikeMode;
TTLMode m_TTLMode;
EventMode m_eventMode;
HeapBlock<float> m_scaledBuffer;
HeapBlock<int16> m_intBuffer;
......@@ -73,15 +96,17 @@ namespace BinaryRecordingEngine
OwnedArray<SequentialBlockFile> m_DataFiles;
Array<unsigned int> m_channelIndexes;
Array<unsigned int> m_fileIndexes;
Array<ContinuousGroup> m_dataChannels;
OwnedArray<EventRecording> m_eventFiles;
OwnedArray<EventRecording> m_spikeFiles;
OwnedArray<NpyFile> m_dataTimestampFiles;
ScopedPointer<NpyFile> m_syncTextFile;
Array<unsigned int> m_spikeFileIndexes;
Array<uint16> m_spikeChannelIndexes;
FILE* eventFile;
FILE* messageFile;
Array<FILE*> spikeFileArray;
int m_recordingNum;
Array<int64> m_startTS;
CriticalSection diskWriteLock;
//Compile-time constants
const int samplesPerBlock{ 4096 };
......
......@@ -44,8 +44,15 @@ SequentialBlockFile::~SequentialBlockFile()
m_memBlocks.remove(0);
}
bool SequentialBlockFile::openFile(File file)
bool SequentialBlockFile::openFile(String filename)
{
File file(filename);
Result res = file.create();
if (res.failed())
{
std::cerr << "Error creating file " << filename << ":" << res.getErrorMessage() << std::endl;
return false;
}
m_file = file.createOutputStream(streamBufferSize);
if (!m_file)
return false;
......
......@@ -37,7 +37,7 @@ namespace BinaryRecordingEngine
SequentialBlockFile(int nChannels, int samplesPerBlock);
~SequentialBlockFile();
bool openFile(File file);
bool openFile(String filename);
bool writeChannel(uint64 startPos, int channel, int16* data, int nSamples);
private:
......
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