(6)

VirteDataset

see also Virte4Dataset.

Virte3 Logs

The Virte3 application creates app log files (sub####__cond#__APP__YYYY_MM_DD__HH_MM_SS.txt). Each log contains one row per frame. The frame-rate of the Virte3 application varies, but it is usually about 40 fps in the 3 virtual conditions and upwards of 400 fps in the 2 real-world conditions. For purposes of log playback, the data is filtered and resampled to 30 fps.

Virte3 app-logs live in //focus-cs.cs.unc.edu/raid/virte/virte123_applogs/virte3_logs.

As far as I can tell, the matlab data-set comes from the app logs rather than the vrpn logs, and the vrpn logs no longer exist. However, the app logs that we have sitting on our servers right now have rather low frame rates in the VR cases (~40 fps), yet the raw data in the matlab data-sets discussed below have sample rates between 300 and 600 fps. This is good, since it means we’re working with densely-sampled data, but it is a mystery where the matlab data came from if not from the app logs. —Jeff

Virte3 Data-Set in Matlab

There are several versions of the Virte3 data set:

Each file has two data-sets

Each is a 1xN array of structs with the following fields: (Not all versions of the data-set have all of the fields)

Creating v3data_filtered.mat

The fields of v3data_filtered.mat are created as follows:

>> cd virte\analysis_2005\make-v3-data
>> load ..\virte3data_raw.mat

>> v3targets = createV3FilteredData(v3targets_raw)
>> v3corners = createV3FilteredData(v3corners_raw)

>> v3targets = makeStatFields(v3targets)
>> v3corners = makeStatFields(v3corners)

>> save ..\virte3data_filtered.mat v3targets v3corners

>> v3t = makeShortDataset(v3targets);
>> v3c = makeShortDataset(v3corners);
>> save ..\virte3data_short.mat v3t v3c

>> writeStatsToCSV([v3targets,v3corners],'../per-path-stats/virte3stats.csv')

What’s happening:

Virte3CSV

virte3stats.csv is a comma-separated-value file of the PerPathMeasures for the virte3 data. It is located in virte\analysis_2005\per-path-stats\virte3stats.csv. It is generated by virte\analysis_2005\make-v3-data\writeStatsToCSV.m.

The first three columns are target, condition, and subject. Each row contains the per-path-measures for one path. The paths are sorted by the values of the first three columns.

Missing trials (for which there are no data) are marked by “XX” accross all the columns (besides the first 3) where the measures would be.

Virte1 Data-Set Notes

The Virte1 matlab data-set has these two position fields: tipOfHeadset and collisionPoint. These are, respectively, the tip of the headset in the real-world and the tip of the headset in the virtual world. In the joystick case they are different. In all other cases they are nearly the same. The difference between equivalent rows of these structs have a minimum of 0.86803cm, maximum of 1.19500cm, mean of 1.13422cm, and median of 1.13686cm. Almost all of the values are clustered around the median, with a few outliers. These values are within the margin of error expected of the tip-of-headset measurements and the error between real and virtual walls. So we can effectively the difference.

In all cases we use the collisionPoint field to form the .raw.pos3 field and, subsequently, all the .comp fields.

There are two constants defined for the X-location of the target plane: REAL_WALL_X = 5.51m and VIRTUAL_WALL_X = 5.516m. The 6mm difference is within the margin of error, and the mean of these two values, 5.513 is taken to be the target position in all cases, both real and virtual.

The Virte1 data was originally extracted (by Sharif?) into virte\virte1_analysis\matlab_code\AllSubjectsTrials.mat. The script virte\analysis_2005\make-v1-data\ImportOldV1DataFormat.m brings the data into the new format, similar to what’s being used for the Virte3 data.

There are some numbering oddities in the virte1 dataset. After extracting the virte1data_raw.mat dataset, several bad trials were removed and the trial numbers were adjusted. Details of this are described in Virte1BadTrials.

There are two path lengths in the Virte1 experiment. The shorter path (2.5m) is labelled target 1, and the longer path (3.0m) is labelled target 2.

The trials in virte1 were labelled from 1 to 6 (sometimes up to 8, so as to include the reject trials). The trial number range includes both short and long paths (targets 1 and 2, respectively). I re-numbered the trials so that target and trial numbers are orthogonal. I.e. target 1 had trials 1—3 and target 2 has trials 1—3.

Creating v1data_filtered.mat

The fields of v1data_filtered.mat are created as follows:

>> cd virte\analysis_2005\make-v1-data
>> load ..\virte1data_raw.mat

>> v1data = createV1FilteredData(v1data_raw)

>> v1data = makeStatFields(v1data)

>> save ..\virte1data_filtered.mat v1data

>> writeStatsToCSV(v1data,'../per-path-stats/virte1stats.csv')

Fields of the Virte1 Data

The raw data, v1data_raw comes from virte1data_raw.mat.
The filtered ata, v1data comes from virte1data_filtered.mat.

The variables have the following fields: