Skip to content
Snippets Groups Projects
Commit 6d9452c5 authored by jsiegle's avatar jsiegle
Browse files

SpikePlots can now open their own .spikes files when recording begins

parent f73cdf47
No related branches found
No related tags found
No related merge requests found
...@@ -102,11 +102,17 @@ public: ...@@ -102,11 +102,17 @@ public:
*/ */
void createNewDirectory(); void createNewDirectory();
File getDataDirectory() {return rootFolder;}
/** Signals when to create a new data directory when recording starts.*/ /** Signals when to create a new data directory when recording starts.*/
bool newDirectoryNeeded; bool newDirectoryNeeded;
bool isRecording; bool isRecording;
/** Generate a Matlab-compatible datestring */
String generateDateString();
private: private:
/** Keep the RecordNode informed of acquisition and record states. /** Keep the RecordNode informed of acquisition and record states.
...@@ -167,9 +173,7 @@ private: ...@@ -167,9 +173,7 @@ private:
/** Generates a default directory name, based on the current date and time */ /** Generates a default directory name, based on the current date and time */
String generateDirectoryName(); String generateDirectoryName();
/** Generate a Matlab-compatible datestring */
String generateDateString();
/** Generate filename for a given channel */ /** Generate filename for a given channel */
void updateFileName(Channel* ch); void updateFileName(Channel* ch);
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
along with this program. If not, see <http://www.gnu.org/licenses/>. along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
#include "SpikeDisplayCanvas.h" #include "SpikeDisplayCanvas.h"
#include "../RecordNode.h" #include "../RecordNode.h"
...@@ -462,29 +462,111 @@ void SpikePlot::processSpikeObject(const SpikeObject& s) ...@@ -462,29 +462,111 @@ void SpikePlot::processSpikeObject(const SpikeObject& s)
{ {
if (!isRecording) if (!isRecording)
{ {
// open files // open file
openFile();
isRecording = true; isRecording = true;
std::cout << "Start recording spikes." << std::endl; //std::cout << "Start recording spikes." << std::endl;
} }
if (aboveThreshold) if (aboveThreshold)
{ {
// write spike to disk // write spike to disk
writeSpike(s);
} }
} else { } else {
if (isRecording) if (isRecording)
{ {
// close files // close file
closeFile();
isRecording = false; isRecording = false;
std::cout << "Stop recording spikes." << std::endl; //std::cout << "Stop recording spikes." << std::endl;
} }
} }
} }
void SpikePlot::openFile()
{
dataDirectory = recordNode->getDataDirectory();
filename = dataDirectory.getFullPathName();
filename += File::separator;
filename += name.removeCharacters(" ");
filename += ".spikes";
std::cout << "OPENING FILE: " << filename << std::endl;
File fileToUse = File(filename);
if (!fileToUse.exists())
{
// open it and write header
file = fopen(filename.toUTF8(), "ab");
String header = generateHeader();
fwrite(header.toUTF8(), 1, header.getNumBytesAsUTF8(), file);
} else {
// append it
file = fopen(filename.toUTF8(), "ab");
}
}
void SpikePlot::closeFile()
{
std::cout << "CLOSING FILE: " << filename << std::endl;
if (file != NULL)
{
fclose(file);
}
}
void SpikePlot::writeSpike(const SpikeObject& s)
{
// write spike to the file
}
String SpikePlot::generateHeader()
{
String header = "header.format = 'OPEN EPHYS DATA FORMAT v0.0'; \n";
header += "header.header_bytes = ";
header += String(HEADER_SIZE);
header += ";\n";
header += "header.description = 'Spike data...live it up!'; \n";
header += "header.date_created = '";
header += recordNode->generateDateString();
header += "';\n";
header += "header.electrode = '";
header += name;
header += "';\n";
header += "header.channelType = 'Electrode';\n";
header = header.paddedRight(' ', HEADER_SIZE);
//std::cout << header << std::endl;
return header;
}
void SpikePlot::select() void SpikePlot::select()
{ {
isSelected = true; isSelected = true;
......
...@@ -226,7 +226,16 @@ private: ...@@ -226,7 +226,16 @@ private:
Font font; Font font;
// methods for recording:
void openFile();
void closeFile();
void writeSpike(const SpikeObject& s);
String generateHeader();
RecordNode* recordNode; RecordNode* recordNode;
FILE* file;
String filename;
File dataDirectory;
}; };
......
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