From 6dfd7f19ee2ce1cbf40a1a6fc9ca4d0762fb42d2 Mon Sep 17 00:00:00 2001 From: Aaron Cuevas Lopez <aacuelo@teleco.upv.es> Date: Sun, 7 Sep 2014 21:39:08 +0200 Subject: [PATCH] Add experiment numbering each time acquisition starts --- Source/Processors/HDF5Recording.cpp | 13 +++++++++---- Source/Processors/HDF5Recording.h | 3 ++- Source/Processors/OriginalRecording.cpp | 9 ++++++--- Source/Processors/OriginalRecording.h | 3 ++- Source/Processors/RecordEngine.cpp | 6 +++++- Source/Processors/RecordEngine.h | 4 +++- Source/Processors/RecordNode.cpp | 16 +++++++++++++++- Source/Processors/RecordNode.h | 5 ++++- 8 files changed, 46 insertions(+), 13 deletions(-) diff --git a/Source/Processors/HDF5Recording.cpp b/Source/Processors/HDF5Recording.cpp index b262b4a02..1514f4ace 100644 --- a/Source/Processors/HDF5Recording.cpp +++ b/Source/Processors/HDF5Recording.cpp @@ -29,7 +29,6 @@ HDF5Recording::HDF5Recording() : processorIndex(-1) timestamp = 0; scaledBuffer = new float[MAX_BUFFER_SIZE]; intBuffer = new int16[MAX_BUFFER_SIZE]; - mainFile = new KWIKFile(); } HDF5Recording::~HDF5Recording() @@ -68,9 +67,9 @@ void HDF5Recording::addChannel(int index, Channel* chan) processorMap.add(processorIndex); } -void HDF5Recording::openFiles(File rootFolder, int recordingNumber) +void HDF5Recording::openFiles(File rootFolder, int experimentNumber, int recordingNumber) { - String basepath = rootFolder.getFullPathName() + rootFolder.separatorString; + String basepath = rootFolder.getFullPathName() + rootFolder.separatorString + "experiment" + String(experimentNumber); //KWIK file mainFile->initFile(basepath); mainFile->open(); @@ -151,4 +150,10 @@ void HDF5Recording::addSpikeElectrode(int index, SpikeRecordInfo* elec) void HDF5Recording::writeSpike(const SpikeObject& spike, int electrodeIndex) { //TODO -} \ No newline at end of file +} + +void HDF5Recording::startAcquisition() +{ + mainFile = new KWIKFile(); +} + diff --git a/Source/Processors/HDF5Recording.h b/Source/Processors/HDF5Recording.h index 334a8cba3..5c6169c17 100644 --- a/Source/Processors/HDF5Recording.h +++ b/Source/Processors/HDF5Recording.h @@ -32,7 +32,7 @@ class HDF5Recording : public RecordEngine public: HDF5Recording(); ~HDF5Recording(); - void openFiles(File rootFolder, int recordingNumber); + void openFiles(File rootFolder, int experimentNumber, int recordingNumber); void closeFiles(); void writeData(AudioSampleBuffer& buffer, int nSamples); void writeEvent(MidiMessage& event, int samplePosition); @@ -42,6 +42,7 @@ public: void registerProcessor(GenericProcessor* processor); void resetChannels(); void updateTimeStamp(int64 timestamp); + void startAcquisition(); private: diff --git a/Source/Processors/OriginalRecording.cpp b/Source/Processors/OriginalRecording.cpp index fab1ddd31..65346e5cc 100644 --- a/Source/Processors/OriginalRecording.cpp +++ b/Source/Processors/OriginalRecording.cpp @@ -25,7 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. #include "../Audio/AudioComponent.h" OriginalRecording::OriginalRecording() : separateFiles(true), eventFile(nullptr), - recordingNumber(0), zeroBuffer(1, 50000), blockIndex(0) + recordingNumber(0), experimentNumber(0), zeroBuffer(1, 50000), blockIndex(0) { continuousDataIntegerBuffer = new int16[10000]; continuousDataFloatBuffer = new float[10000]; @@ -73,9 +73,10 @@ void OriginalRecording::resetChannels() spikeFileArray.clear(); } -void OriginalRecording::openFiles(File rootFolder, int recordingNumber) +void OriginalRecording::openFiles(File rootFolder, int experimentNumber, int recordingNumber) { this->recordingNumber = recordingNumber; + this->experimentNumber = experimentNumber; openFile(rootFolder,nullptr); for (int i = 0; i < fileArray.size(); i++) { @@ -101,7 +102,7 @@ void OriginalRecording::openFile(File rootFolder, Channel* ch) isEvent = (ch == nullptr) ? true : false; if (isEvent) - fullPath += "all_channels.events"; + fullPath += "experiment" + String(experimentNumber) + "_all_channels.events"; else fullPath += getFileName(ch); @@ -148,6 +149,7 @@ void OriginalRecording::openSpikeFile(File rootFolder, SpikeRecordInfo* elec) FILE* spFile; String fullPath(rootFolder.getFullPathName() + rootFolder.separatorString); + fullPath += "experiment" + String(experimentNumber) + "_"; fullPath += elec->name.removeCharacters(" "); fullPath += ".spikes"; @@ -175,6 +177,7 @@ String OriginalRecording::getFileName(Channel* ch) { String filename; + filename += "experiment" + String(experimentNumber) + "_"; filename += ch->nodeId; filename += "_"; filename += ch->name; diff --git a/Source/Processors/OriginalRecording.h b/Source/Processors/OriginalRecording.h index 876278316..5ed20aefb 100644 --- a/Source/Processors/OriginalRecording.h +++ b/Source/Processors/OriginalRecording.h @@ -38,7 +38,7 @@ public: OriginalRecording(); ~OriginalRecording(); - void openFiles(File rootFolder, int recordingNumber); + void openFiles(File rootFolder, int experimentNumber, int recordingNumber); void closeFiles(); void writeData(AudioSampleBuffer& buffer, int nSamples); void writeEvent(MidiMessage& event, int samplePosition); @@ -62,6 +62,7 @@ private: bool separateFiles; int blockIndex; int recordingNumber; + int experimentNumber; /** Holds data that has been converted from float to int16 before saving. diff --git a/Source/Processors/RecordEngine.cpp b/Source/Processors/RecordEngine.cpp index 6450fb14a..9d5bc2abc 100644 --- a/Source/Processors/RecordEngine.cpp +++ b/Source/Processors/RecordEngine.cpp @@ -50,4 +50,8 @@ SpikeRecordInfo* RecordEngine::getSpikeElectrode(int index) void RecordEngine::updateTimeStamp(int64 timestamp) {} -void RecordEngine::registerSpikeSource(GenericProcessor* processor) {} \ No newline at end of file +void RecordEngine::registerSpikeSource(GenericProcessor* processor) {} + +void RecordEngine::startAcquisition() {} + +void RecordEngine::directoryChanged() {} \ No newline at end of file diff --git a/Source/Processors/RecordEngine.h b/Source/Processors/RecordEngine.h index da5afdf15..f76f15f1d 100644 --- a/Source/Processors/RecordEngine.h +++ b/Source/Processors/RecordEngine.h @@ -46,7 +46,7 @@ public: RecordEngine(); ~RecordEngine(); - virtual void openFiles(File rootFolder, int recordingNumber) =0; + virtual void openFiles(File rootFolder, int experimentNumber, int recordingNumber) =0; virtual void closeFiles() =0; virtual void writeData(AudioSampleBuffer& buffer, int nSamples) =0; virtual void writeEvent(MidiMessage& event, int samplePosition) =0; @@ -57,6 +57,8 @@ public: virtual void registerSpikeSource(GenericProcessor* processor); virtual void resetChannels(); virtual void updateTimeStamp(int64 timestamp); + virtual void startAcquisition(); + virtual void directoryChanged(); protected: Channel* getChannel(int index); diff --git a/Source/Processors/RecordNode.cpp b/Source/Processors/RecordNode.cpp index 20e49cbe4..483483cda 100755 --- a/Source/Processors/RecordNode.cpp +++ b/Source/Processors/RecordNode.cpp @@ -51,6 +51,9 @@ RecordNode::RecordNode() spikeElectrodeIndex = 0; + experimentNumber = 0; + hasRecorded = false; + // 128 inputs, 0 outputs setPlayConfigDetails(getNumInputs(),getNumOutputs(),44100.0,128); @@ -262,12 +265,15 @@ void RecordNode::setParameter(int parameterIndex, float newValue) { isRecording = true; + hasRecorded = true; // std::cout << "START RECORDING." << std::endl; if (newDirectoryNeeded) { createNewDirectory(); recordingNumber = 0; + experimentNumber = 1; + EVERY_ENGINE->directoryChanged(); } else { @@ -281,7 +287,7 @@ void RecordNode::setParameter(int parameterIndex, float newValue) getEditorViewport()->saveState(File(settingsFileName)); } - EVERY_ENGINE->openFiles(rootFolder, recordingNumber); + EVERY_ENGINE->openFiles(rootFolder, experimentNumber, recordingNumber); allFilesOpened = true; @@ -344,7 +350,15 @@ void RecordNode::closeAllFiles() bool RecordNode::enable() { + if (hasRecorded) + { + hasRecorded = false; + experimentNumber++; + } + //When starting a recording, if a new directory is needed it gets rewritten. Else is incremented by one. + recordingNumber = -1; + EVERY_ENGINE->startAcquisition(); isProcessing = true; return true; } diff --git a/Source/Processors/RecordNode.h b/Source/Processors/RecordNode.h index 2291db99a..05124510d 100755 --- a/Source/Processors/RecordNode.h +++ b/Source/Processors/RecordNode.h @@ -170,7 +170,10 @@ private: OwnedArray<SpikeRecordInfo> spikeElectrodePointers; - int spikeElectrodeIndex;; + int spikeElectrodeIndex; + + int experimentNumber; + bool hasRecorded; /** Generates a default directory name, based on the current date and time */ String generateDirectoryName(); -- GitLab