Adding to Existing Tracking Data File
Here's an example showing how to add to the tracking data file that is included. This example is adding the right hand position:
Note that the first two numbers in blue (12 and 11) are the number of headers and the second two numbers 11 and 10 are the number of float values (as "flag" is a string)
def updateGaze():
gazeMat = eyeTracker.getMatrix()
gazeMat.postMult(viz.MainView.getMatrix())
line = gazeMat.getLineForward(1000)
info = viz.intersect(line.begin, line.end)
global flag, writeToggle
gazeTime.updateGazeObject(info.object)
currentTime = viz.tick() - startTime
if info.valid:
data = [currentTime, info.point, viz.MainView.getPosition(),rightHand.getPosition(), flag]
objects[1].setPosition(info.point)
else:
fake_info = [0.00, 0.00, 0.00]
data = [currentTime, fake_info, viz.MainView.getPosition(),rightHand.getPosition(), flag]
set_flag('-')
if use_vive_pro:
data.append(eyeTracker.getPupilDiameter())
trackingData.append(data)
if writeToggle:
writeEvent(data)
def writeEvent(data):
global firstWrite, participant, trackingData, trialNumber, trackingFile
if firstWrite:
firstWrite = False
fileNameTracking = 'data/{p.id}_tracking_data_trial_{t}.txt'.format(p=participant, t=trialNumber+1)
trackingFile = open(fileNameTracking, "w")
if use_vive_pro:
headers = ['seconds', 'point x', 'point y', 'point z', 'position x', 'position y', 'position z', 'rHand x', 'rHand y', 'rHand z','pupil diameter','flag']
fmt = '{:<8s}\t' * 12 + '\n\n'
fileHeaders = fmt.format(*headers)
trackingFile.write(fileHeaders)
else:
headers = ['seconds', 'point x', 'point y','point z', 'position x', 'position y', 'position z', 'rHand x', 'rHand y', 'rHand z','flag']
fmt = '{:<8s}\t' * 11 + '\n\n'
fileHeaders = fmt.format(*headers)
trackingFile.write(fileHeaders)
else:
if use_vive_pro:
tick, point, position, rHand, flag, pupilDiameter = data
fmt = '{:<8.2f}\t' * 11 + '{:<8s}\t'+ '\n'
writeString = fmt.format(tick, point[0], point[1], point[2], position[0], position[1], position[2], rHand[0], rHand[1], rHand[2],pupilDiameter, flag)
trackingFile.write(writeString)
if not flag == '-':
timeLine.append([flag, viz.tick() - startTime])
else:
tick, point, position, rHand, flag = data
fmt = '{:<8.2f}\t' * 10 + '{:<8s}\t' + '\n'
writeString = fmt.format(tick, point[0], point[1], point[2], position[0], position[1], position[2], rHand[0], rHand[1], rHand[2],flag)
trackingFile.write(writeString)
if not flag == '-':
timeLine.append([flag, viz.tick() - startTime])
Lastly, adjust Session Replay to update new number of values on line 255:
for i in range(11, len(s)):
f += s[i] + ' '
else:
self.pupilDiameter[self.timestamps[self.replayIter]] = s[11]
f = ''
for i in range(12, len(s)):
f += s[i] + ' '
self.gazePoints.append([x,y,z])
self.gazeTime.append(t)
self.gazeFlags.append(f)
To have this data appear in the Session Replay:
Line 197
Self.rightHand
Line 277
self.rightHandText = viz.addText('', parent=viz.ORTHO, color=viz.RED, fontSize=30, pos=[5,180,0])
Line 607
if not self.config == 'vizconnect_config_desktop.py' and self.currTimeStamp in self.rightHand:
self.rightHandText.message(self.rightHande[self.currTimeStamp])
Line 255
#add s[8] for new value and increase range by number of new values
else:
self.pupilDiameter[self.timestamps[self.replayIter]] = s[7]
self.rightHand[self.timestamps[self.replayIter]] = s[8]
f = ''
for i in range(11, len(s)):
f += s[i] + ' '