def deletedata(options): if(options.runname == None): print "Specify the rest run name (--runname 01CornerTestRun) " exit() extension = os.path.splitext(options.infile) extension = extension[1] if extension != '.h5': print "Can only lsit .h5 files: " + options.infile exit() theReader = SofiePyTableAccess(options.infile, runName='/') if options.recursive: recursively = ' (recursively enabled) ' else: recursively = ' (recursively disabled)' if theReader.deleteRun(options.runname, options.recursive): print "\n\n===============================" print "===============================" print "RUN: " + options.runname + ' DELETED' + recursively + \ "\n-------------------------------" else: print "\n\n===============================" print "===============================" print "RUN: " + options.runname + ' NOT DELETED' + recursively + \ "\n-------------------------------" theReader.close()
def test_makesafekey(self): csvWriter = SofiePyTableAccess('simple-test-data.h5') self.assertEqual('test19', csvWriter._makesafekey('test.1_9')) self.assertEqual('test19', csvWriter._makesafekey('_test.1_9_')) self.assertEqual('test19', csvWriter._makesafekey('.test.1_9.')) self.assertEqual('test19', csvWriter._makesafekey('__.test.1_9.__')) self.assertEqual('test19', csvWriter._makesafekey('__#$%^&*!#$%^^.test.1_9.__'))
def test_createNiceRunName(self): runName = SofiePyTableAccess._createNiceRunName('/') self.assertEqual('/',runName) runName = SofiePyTableAccess._createNiceRunName('//') self.assertEqual('/',runName) runName = SofiePyTableAccess._createNiceRunName('//') self.assertEqual('/',runName)
def test_deleteNode(self): writer = SofiePyTableAccess('simple-test-data.h5', '/test') self.assertEqual(writer.getRunName(), '/test') writer.setRunName('goat') self.assertEqual(writer.getRunName(), '/goat') self.assertEqual(writer.getRuns('goat'), []) writer.setRunName('goat1', False) self.assertEqual(writer.getRuns('goat1'), []) self.assertEqual(writer.getRunName(), '/')
def write(self,thePayloadList): """ Writes the data into a table with each byte in a separate column. Throws an IncorrectAntDataError if thePayloadList is not equal to sofiehdfformat.AntParser.ANTDATALENGTH """ if len(thePayloadList)!=ANTPARSERRAWLISTLENTH: raise AntRawParserLengthNotCorrect() SofiePyTableAccess.write(self,thePayloadList)
def __init__(self,filename,runName='/test',fieldNames={},description=''): """ For now only handles CSV files where all columns are float. """ SofiePyTableAccess.__init__(self,filename,runName=runName, description=description,allowDuplicates=True); fieldNamesDict = {} for field in fieldNames: fieldNamesDict[self._makesafekey(field)] = FloatCol() self.setTable(CsvImportDataName,fieldNamesDict)
def write(self,thePayloadList): """ Writes the data into a table with each byte in a separate column. Throws an IncorrectAntDataError if thePayloadList is not equal to sofiehdfformat.AntParser.ANTDATALENGTH """ if len(thePayloadList)!=ANTPARSERPARSEDLISTLENTH: raise AntParserLengthNotCorrect('The length should be: '+\ str(ANTPARSERPARSEDLISTLENTH)+ ': BUT is: '+ str(len(thePayloadList)) ) SofiePyTableAccess.write(self,thePayloadList)
def __init__(self, filename, runName='/test', allowDuplicates=True, description='', videoSamplingRate=-1, videoFrames=-1, scale=-0.1): SofiePyTableAccess.__init__(self, filename, runName=runName, allowDuplicates=allowDuplicates, description=description); self.setTable(C3DMetaName, C3DMeta) SofiePyTableAccess.write(self, [videoSamplingRate, videoFrames, scale, time.time()]) self.allowDuplicates()
def test_sync(self): writer = SofiePyTableAccess('simple-test-data.h5', runName='/sync', description='our description') time1 = writer.writeSync(sample=11) time2 = writer.writeSync(sample=26) syncs = writer.getSyncs() logging.debug(syncs) self.assertFalse(syncs[0]['Timestamp'] == time2) self.assertEqual(syncs[0]['Sample'], 11) self.assertEqual(syncs[1]['Sample'], 26) self.assertEqual(syncs[0]['Timestamp'], time1) self.assertFalse(syncs[1]['Timestamp'] == time1) self.assertEqual(syncs[1]['Timestamp'], time2)
def _setRunMeta(self,runName): if not runName: logging.debug('Run name not set.') return runName = self._getBaseRunName(runName) runMeta = {'runName':runName, 'runExperimentType': self.components.runExperimentType.getLineText(0), 'runSubject':self.components.runSubject.getLineText(0), 'runObject':self.components.runObject.getLineText(0), 'runSuccessful':self.components.runSuccessful.checked, 'runCorrupted':self.components.runCorrupted.checked, 'runNotes':self._getTextArea('runNotes') } logging.debug(runMeta) SofiePyTableAccess.setRunMetaInFile(self.filename,runName,runMeta)
def write(self, theMarkers): """ Writes the data into a table with each Marker Label in a separate Table """ #logging.debug(theMarkers) if theMarkers == False: return for key in theMarkers.keys(): theMarker = theMarkers[key] key = key.replace('*', '_STAR') #logging.debug('The Marker'+str(theMarker)) #logging.debug('Writing Marker: '+key) self.setTable(C3DMarkerName + key, C3DMarker) SofiePyTableAccess.write(self, theMarker)
def _setRunMeta(self, runName): if not runName: logging.debug("Run name not set.") return runName = self._getBaseRunName(runName) runMeta = { "runName": runName, "runExperimentType": self.components.runExperimentType.getLineText(0), "runSubject": self.components.runSubject.getLineText(0), "runObject": self.components.runObject.getLineText(0), "runSuccessful": self.components.runSuccessful.checked, "runCorrupted": self.components.runCorrupted.checked, "runNotes": self._getTextArea("runNotes"), } logging.debug(runMeta) SofiePyTableAccess.setRunMetaInFile(self.filename, runName, runMeta)
def _updateRunList(self): self.components.runList.clear() runList = list(set([self._getBaseRunName(runName) for runName in SofiePyTableAccess.getRunsInTheFile(self.filename) if runName != '/RunMeta' ] )) self.components.runList.insertItems(runList,0)
def _getRunMeta(self,runName): runMeta = SofiePyTableAccess.getRunMetaInFile(self.filename, runName) if runMeta: runNotes =runMeta['runNotes'] runSubject =runMeta['runSubject'] runObject =runMeta['runObject'] runSuccessful =runMeta['runSuccessful'] runCorrupted =runMeta['runCorrupted'] runExperimentType =runMeta['runExperimentType'] self._setText('runExperimentType',runExperimentType) self._setText('runNotes',runNotes) self._setText('runSubject',runSubject) self._setText('runObject',runObject) self.components.runSuccessful.checked = runSuccessful self.components.runCorrupted.checked = runCorrupted self._setText('runExperimentType',runExperimentType) else: self._setText('runExperimentType',None) self._setText('runNotes',None) self._setText('runSubject',None) self._setText('runObject',None) self.components.runSuccessful.checked = False self.components.runCorrupted.checked = False self._setText('runExperimentType',None)
def _getRunMeta(self, runName): runMeta = SofiePyTableAccess.getRunMetaInFile(self.filename, runName) if runMeta: runNotes = runMeta["runNotes"] runSubject = runMeta["runSubject"] runObject = runMeta["runObject"] runSuccessful = runMeta["runSuccessful"] runCorrupted = runMeta["runCorrupted"] runExperimentType = runMeta["runExperimentType"] self._setText("runExperimentType", runExperimentType) self._setText("runNotes", runNotes) self._setText("runSubject", runSubject) self._setText("runObject", runObject) self.components.runSuccessful.checked = runSuccessful self.components.runCorrupted.checked = runCorrupted self._setText("runExperimentType", runExperimentType) else: self._setText("runExperimentType", None) self._setText("runNotes", None) self._setText("runSubject", None) self._setText("runObject", None) self.components.runSuccessful.checked = False self.components.runCorrupted.checked = False self._setText("runExperimentType", None)
def listdata(options): if(options.runname == None): options.runname = '/' if(options.infile == None): print "Specify the in file (--infile filename)" exit() extension = os.path.splitext(options.infile) extension = extension[1] if extension != '.h5': print "Can only lsit .h5 files: " + options.infile exit() theReader = SofiePyTableAccess(options.infile, runName='/') runs = theReader.getRuns(options.runname) runs.sort() for run in runs: logging.debug('Setting Run: ' + run); splitRun = os.path.split(run); theRun, theNode = splitRun theReader.setRunName(theRun) meta = theReader.getRunMeta(options.runname) if meta: run, description, timestamp = meta[0] else: run, description, timestamp = None, None, None print "\n\n===============================" print "===============================" print "RUN: " + theRun + '/' + theNode + "\n-------------------------------" if theNode == RunMetaName: print "Description: " + str(description) print "Time: " + time.strftime('%D, %H:%M:%S', time.localtime(timestamp)) elif options.verbose: theReader.setTable(theNode, '') x = DUMPLINLINES for row in theReader: print str(row).lstrip('(').rstrip(')') if x == 0: print '.... ONLY THE FIRST ' + \ str(DUMPLINLINES) + ' ENTRIES ARE PRINTED ....' break; x -= 1; else: print "\n\n===============================" print "===============================" print "RUN: " + options.runname + ' DOES NOT EXIST' + \ "\n-------------------------------" theReader.close()
def test_makeSafeValue(self): csvWriter = SofiePyTableAccess('simple-test-data.h5') self.assertEqual('"test\.1\_9"', csvWriter._makeSafeValue('test.1_9')) self.assertEqual('"test\.1\_\\\n9"', csvWriter._makeSafeValue('test.1_\n9')) self.assertEqual(10, csvWriter._makeSafeValue(10)) self.assertEqual(10, csvWriter._makeSafeValue('10')) self.assertEqual(10, csvWriter._makeSafeValue('10.000')) self.assertEqual(10, csvWriter._makeSafeValue('1e1'))
def write(self,thePayloadList): """ Writes the data into a table with each byte in a separate column. """ logging.debug(thePayloadList) newPayLoadList = {} for key in thePayloadList.keys(): newPayLoadList[self._makesafekey(key)] = thePayloadList[key] if thePayloadList[key] == None: continue if isinstance(thePayloadList[key], basestring): converted = thePayloadList[key].strip('\'') if len(converted) == 0 or converted == None: newPayLoadList[self._makesafekey(key)] = None else: logging.debug(thePayloadList[key].strip('\'')) newPayLoadList[self._makesafekey(key)] = float(converted) logging.debug(newPayLoadList) SofiePyTableAccess.write(self,newPayLoadList)
def on_runName_loseFocus(self, event=None): self.runName = self.components.runName.getLineText(0) if not self.runName: dialog.alertDialog(self,'The Run Name is not set.','Check you run name') return False self._setRunMeta(self.runName) if self.filename: theRuns = [self._getBaseRunName(runName) for runName in SofiePyTableAccess.getRunsInTheFile(self.filename)]; if self.runName in theRuns: dialog.alertDialog(self,'The Run Name already exists.','Check you run name') return False return True
def on_runName_loseFocus(self, event=None): self.runName = self.components.runName.getLineText(0) if not self.runName: dialog.alertDialog(self, "The Run Name is not set.", "Check you run name") return False self._setRunMeta(self.runName) if self.filename: theRuns = [self._getBaseRunName(runName) for runName in SofiePyTableAccess.getRunsInTheFile(self.filename)] if self.runName in theRuns: dialog.alertDialog(self, "The Run Name already exists.", "Check you run name") return False return True
def _updateRunList(self): self.components.runList.clear() runList = list( set( [ self._getBaseRunName(runName) for runName in SofiePyTableAccess.getRunsInTheFile(self.filename) if runName != "/RunMeta" ] ) ) self.components.runList.insertItems(runList, 0)
def exportFile(options): """ Function used to export data. """ print '\n-------------------------------\nExporting information' + \ '\n-------------------------------\n' if(options.runname == None): print "Specify the complete node/run to export (--runname runNameOrPath)" exportpath = options.runname if(options.infile == None): print "Specify the in file (--infile filename)" exit() if(options.outfile == None): print "Specify the out file (--outfile theExportedFileName )" exit() extension = os.path.splitext(options.infile) extension = extension[1] if extension != '.h5': print "Can only export .h5 files: " + options.infile exit() else: theReader = SofiePyTableAccess(options.infile) theReader.readFile(options.runname, options.outfile) theReader.close()
def exportdata(options): """ Function used to export data. """ print '\n-------------------------------\nExporting information' + \ '\n-------------------------------\n' if(options.runname == None): exportpath = '/' else: exportpath = options.runname if(options.infile == None): print "Specify the in file (--infile filename)" exit() if(options.outdir == None): print "Specify the out file (--exportdir directoryname)" exit() extension = os.path.splitext(options.infile) extension = extension[1] if extension != '.h5': print "Can only export .h5 files: " + options.infile exit() else: theReader = SofiePyTableAccess(options.infile, runName='/') theRuns = theReader.getRuns(exportpath) for run in theRuns: exportFile = os.sep.join([options.outdir] + run.split('/')) + '.csv' if not os.path.isdir(os.path.dirname(exportFile)): os.makedirs(os.path.dirname(exportFile)) if os.path.isfile(exportFile): os.unlink(exportFile) print '\n-------------------------------\n' + \ 'Exporting: ' + run + ' to ' + str(exportFile) theReader.setTable(run, '') fieldNames = theReader.getTableStructure(asList=True) csvWriter = SofieCsvAccess(exportFile, fieldNames) for row in theReader: logging.debug("Read New Row") parsed = csv_sample_interpret(row) csvWriter.write(parsed) #aparsedwritercsv = SofieCsvAccess(csvOutParsed) csvWriter.close() theReader.close()
def __init__(self,filename,runName='/test'): SofiePyTableAccess.__init__(self,filename,runName); self.setTable(AntParsedDataName, AntParsedData)
def __init__(self,filename,runName='/test',description=''): SofiePyTableAccess.__init__(self,filename,runName=runName, description=description); self.setTable(AntRawDataName,AntRawData)
def exportFile(filename,runName,outFilename): """ Exports a file node from a sofiehdfformat file. """ theReader = SofiePyTableAccess(filename) theReader.readFile(runName, outFilename) theReader.close()
def test_SofiePyTableAccess(self): logging.info('AntPyTableAccess Test') writer = SofiePyTableAccess('simple-test-data.h5', '/test') self.assertIsInstance(writer, SofiePyTableAccess, 'Root Does not exist') writer.close() writer = SofiePyTableAccess('simple-test-data.h5', '/test') self.assertIsInstance(writer, SofiePyTableAccess, 'Root Exists') writer = SofiePyTableAccess('simple-test-data.h5', '/testagain') self.assertIsInstance(writer, SofiePyTableAccess, 'New Root') writer = SofiePyTableAccess('simple-test-data.h5', '/testagain/new') self.assertIsInstance(writer, SofiePyTableAccess, 'New Leaf') writer = SofiePyTableAccess('simple-test-data.h5', '/testagain/new') self.assertIsInstance(writer, SofiePyTableAccess, 'Repeat Leaf') writer.setRunName('test/new2') writer.setRunName('testagain/new3/sub1') writer.setRunName('testagain/new3/sub1') writer.setRunName('testagain/new3/sub2') writer = AntRawDataAccess('simple-test-data.h5', '/test') writerData = ('1', '2', '3', '4', '5', '6', '7', '8', '9', 111111.101221) logging.info('Writing the following data: ' + str(writerData)) writer.write(writerData) logging.info('Came Back from writing.') writer.close() writer = AntRawDataAccess('simple-test-data.h5', '/test/AntRawData') self.assertIsInstance(writer, AntRawDataAccess)
def test_deleteRun(self): writer = SofiePyTableAccess('simple-test-data.h5', '/test') self.assertEqual(writer.getRunName(), '/test') self.assertEqual(writer.getRuns('/'), ['/RunMeta']) self.assertFalse(writer.deleteRun('goat')) self.assertFalse(writer.deleteRun('test')) self.assertEqual(writer.getRuns('/'), ['/RunMeta']) self.assertFalse(writer.deleteRun('test', recursive=True)) self.assertEqual(writer.getRuns('/'), ['/RunMeta']) writer.setRunName('/again', True) self.assertEqual(writer.getRuns('/'), ['/RunMeta']) self.assertFalse(writer.deleteRun('/again/', recursive=True))
format(options.outfile) print "\n\n-------------------------------\n" exit() except OutFileMustBeAbsolutePath: print "\n\n-------------------------------\n" print "The Outfile ({0}) must be specified as an absolute path.".\ format(options.outfile) print "\n\n-------------------------------\n" exit() if(options.runname==None): print "\n\n-------------------------------\n" print "Specify the rest run name (--runname 01CornerTestRun) " print "\n\n-------------------------------\n" exit() currentRuns = SofiePyTableAccess.getRunsInTheFile(options.outfile, options.runname) if currentRuns: print "\n\n-------------------------------\n" print "The run '{0}' is already in the file '{1}':\n\nCurrent Runs:\n{2}".\ format(options.runname,options.outfile,currentRuns) print "\n\n-------------------------------\n" exit() listeners = \ startExperiment(options.outfile, options.runname, options.serialimu,options.serialant,options.serialar, imuPort=options.imuport,imuHost=options.imuhost, arHighRes=options.highres,arMarkerSize=options.bigmarker) print "\n\n-------------------------------\n" print "LOGGING SETUP: CALLIBRATION STILL PERIOD STARTS"
def test_meta(self): writer = SofiePyTableAccess('simple-test-data.h5', '/test') self.assertEqual(writer.getRuns('/'), ['/RunMeta']) data = writer.getRunMeta('test') logging.debug('Meta Data for the table:' + str(data)) self.assertEqual(len(data),8) writer.setRunMeta('ourRun', 'The Description') data = writer.getRunMeta('ourRun') self.assertEqual(len(data), 8) logging.debug('The Data:'+str(data)) self.assertEqual('ourRun', data['runName']) self.assertEqual('The Description', data['runNotes']) self.assertTrue(writer.setRunMeta('ourRun', 'The New Description')) data = writer.getRunMeta('ourRun') logging.debug(data) self.assertEqual(len(data), 8) logging.debug('The Data:'+str(data)) self.assertEqual('ourRun', data['runName']) self.assertEqual('The New Description', data['runNotes']) data = writer.getRunMeta('test') self.assertEqual(len(data), 8) writer = SofiePyTableAccess('simple-test-data.h5', runName='/testagain', description='our description again') data = writer.getRunMeta('/testagain') self.assertEqual(len(data), 8) self.assertEqual('testagain', data['runName']) self.assertEqual('our description again', data['runNotes']) data = writer.getRunMeta('testagain') self.assertEqual(len(data), 8) self.assertEqual('testagain', data['runName']) self.assertEqual('our description again', data['runNotes']) self.assertIsNone(writer.setRunName('/')); self.assertIsNone(writer.setRunName('/')); self.assertIsNone(writer.setTable('/', ''));