private void ComputeTapData(string baseFolder, int deviceType, string outputFileName, MeasurementType measurementType) { int count = 0; using (StreamWriter writer = new StreamWriter(outputFileName)) { writer.WriteLine("participant,device,trial,tapTime,tapAccuracy"); string[] folders = Directory.GetDirectories(baseFolder); foreach (string folder in folders) { string participantName = folder.Substring(folder.LastIndexOf("\\") + 1); List <TouchAction> actions = TouchIO.ReadFromFile(folder + "\\tap.xml"); count += actions.Count; if (measurementType == MeasurementType.All) { for (int i = 0; i < actions.Count; i++) { writer.WriteLine("{0},{1},{2},{3},{4:.00}", participantName, deviceType, i + 1, actions[i].TapTime, actions[i].TapAccuracy); } for (int i = actions.Count + 1; i <= 5; i++) { writer.WriteLine("{0},{1},{2},,", participantName, deviceType, i); } } else if (measurementType == MeasurementType.Average) { double avgTime = 0; double avgAccuracy = 0; for (int i = 0; i < actions.Count; i++) { avgTime += actions[i].TapTime; avgAccuracy += actions[i].TapAccuracy; } if (actions.Count > 0) { avgTime /= actions.Count; avgAccuracy /= actions.Count; writer.WriteLine("{0},{1},{2},{3},{4:.00}", participantName, deviceType, 0, avgTime, avgAccuracy); } else { writer.WriteLine("{0},{1},{2},,", participantName, deviceType, 0); } } else if (measurementType == MeasurementType.BestPerformance) { double minTime = double.MaxValue; double minOffset = double.MaxValue; for (int i = 0; i < actions.Count; i++) { if (minTime > actions[i].TapTime) { minTime = actions[i].TapTime; } if (minOffset > actions[i].TapAccuracy) { minOffset = actions[i].TapAccuracy; } } if (actions.Count > 0) { writer.WriteLine("{0},{1},{2},{3},{4:.00}", participantName, deviceType, 0, minTime, minOffset); } else { writer.WriteLine("{0},{1},{2},,", participantName, deviceType, 0); } } } } Console.WriteLine("tap task ({0}): {1} records", deviceType == 1 ? "phone" : "tablet", count); }
private void ComputeMultiTouchDragAndDropData(string baseFolder, int deviceType, string outputFileName, MeasurementType measurementType) { int count = 0; using (StreamWriter writer = new StreamWriter(outputFileName)) { writer.WriteLine("participant,device,trial,multidragdropTime,multiAccuracy1,multiAccuracy2,multiAccuracy3,multiAccuracy4,multiAccuracy,multiPathAccuracy1,multiPathAccuracy2,multiPathAccuracy"); string[] folders = Directory.GetDirectories(baseFolder); foreach (string folder in folders) { string participantName = folder.Substring(folder.LastIndexOf("\\") + 1); List <TouchAction> actions = TouchIO.ReadFromFile(folder + "\\multitouch-draganddrop.xml"); count += actions.Count; if (measurementType == MeasurementType.All) { for (int i = 0; i < actions.Count; i++) { writer.WriteLine("{0},{1},{2},{3},{4:.00},{5:.00},{6:.00},{7:.00},{8:.00},{9:.0000},{10:.0000},{11:.0000}", participantName, deviceType, i + 1, actions[i].MultiTouchDragAndDropTime, actions[i].MultiTouchDragAndDropAccuracy1, actions[i].MultiTouchDragAndDropAccuracy2, actions[i].MultiTouchDragAndDropAccuracy3, actions[i].MultiTouchDragAndDropAccuracy4, actions[i].MultiTouchDragAndDropAccuracy, actions[i].MultiTouchDragAndDropPathAccuracy1, actions[i].MultiTouchDragAndDropPathAccuracy2, actions[i].MultiTouchDragAndDropPathAccuracy ); } for (int i = actions.Count + 1; i <= 5; i++) { writer.WriteLine("{0},{1},{2},,,,,,,,,", participantName, deviceType, i); } } else if (measurementType == MeasurementType.Average) { double avgTime = 0; double avgOffset1 = 0; double avgOffset2 = 0; double avgOffset3 = 0; double avgOffset4 = 0; double avgOffset = 0; double avgPathAccuracy1 = 0; double avgPathAccuracy2 = 0; double avgPathAccuracy = 0; for (int i = 0; i < actions.Count; i++) { avgTime += actions[i].MultiTouchDragAndDropTime; avgOffset1 += actions[i].MultiTouchDragAndDropAccuracy1; avgOffset2 += actions[i].MultiTouchDragAndDropAccuracy2; avgOffset3 += actions[i].MultiTouchDragAndDropAccuracy3; avgOffset4 += actions[i].MultiTouchDragAndDropAccuracy4; avgOffset += actions[i].MultiTouchDragAndDropAccuracy; avgPathAccuracy1 += actions[i].MultiTouchDragAndDropPathAccuracy1; avgPathAccuracy2 += actions[i].MultiTouchDragAndDropPathAccuracy2; avgPathAccuracy += actions[i].MultiTouchDragAndDropPathAccuracy; } ; if (actions.Count > 0) { avgTime /= actions.Count; avgOffset1 /= actions.Count; avgOffset2 /= actions.Count; avgOffset3 /= actions.Count; avgOffset4 /= actions.Count; avgOffset /= actions.Count; avgPathAccuracy1 /= actions.Count; avgPathAccuracy2 /= actions.Count; avgPathAccuracy /= actions.Count; writer.WriteLine("{0},{1},{2},{3},{4:.00},{5:.00},{6:.00},{7:.00},{8:.00},{9:.0000},{10:.0000},{11:.0000}", participantName, deviceType, 0, avgTime, avgOffset1, avgOffset2, avgOffset3, avgOffset4, avgOffset, avgPathAccuracy1, avgPathAccuracy2, avgPathAccuracy ); } else { writer.WriteLine("{0},{1},{2},,,,,,,,,", participantName, deviceType, 0); } } else if (measurementType == MeasurementType.BestPerformance) { double minTime = double.MaxValue; double minOffset1 = double.MaxValue; double minOffset2 = double.MaxValue; double minOffset3 = double.MaxValue; double minOffset4 = double.MaxValue; double minOffset = double.MaxValue; double maxPathAccuracy1 = double.MinValue; double maxPathAccuracy2 = double.MinValue; double maxPathAccuracy = double.MinValue; for (int i = 0; i < actions.Count; i++) { if (minTime > actions[i].MultiTouchDragAndDropTime) { minTime = actions[i].MultiTouchDragAndDropTime; } if (minOffset1 > actions[i].MultiTouchDragAndDropAccuracy1) { minOffset1 = actions[i].MultiTouchDragAndDropAccuracy1; } if (minOffset2 > actions[i].MultiTouchDragAndDropAccuracy2) { minOffset2 = actions[i].MultiTouchDragAndDropAccuracy2; } if (minOffset3 > actions[i].MultiTouchDragAndDropAccuracy3) { minOffset3 = actions[i].MultiTouchDragAndDropAccuracy3; } if (minOffset4 > actions[i].MultiTouchDragAndDropAccuracy4) { minOffset4 = actions[i].MultiTouchDragAndDropAccuracy4; } if (minOffset > actions[i].MultiTouchDragAndDropAccuracy) { minOffset = actions[i].MultiTouchDragAndDropAccuracy; } if (maxPathAccuracy1 < actions[i].MultiTouchDragAndDropPathAccuracy1) { maxPathAccuracy1 = actions[i].MultiTouchDragAndDropPathAccuracy1; } if (maxPathAccuracy2 < actions[i].MultiTouchDragAndDropPathAccuracy2) { maxPathAccuracy2 = actions[i].MultiTouchDragAndDropPathAccuracy2; } if (maxPathAccuracy < actions[i].MultiTouchDragAndDropPathAccuracy) { maxPathAccuracy = actions[i].MultiTouchDragAndDropPathAccuracy; } } ; if (actions.Count > 0) { writer.WriteLine("{0},{1},{2},{3},{4:.00},{5:.00},{6:.00},{7:.00},{8:.00},{9:.0000},{10:.0000},{11:.0000}", participantName, deviceType, 0, minTime, minOffset1, minOffset2, minOffset3, minOffset4, minOffset, maxPathAccuracy1, maxPathAccuracy2, maxPathAccuracy ); } else { writer.WriteLine("{0},{1},{2},,,,,,,,,", participantName, deviceType, 0); } } } } Console.WriteLine("multi-touch task ({0}): {1} records", deviceType == 1 ? "phone" : "tablet", count); }
private void ComputeDoubleTapData(string baseFolder, int deviceType, string outputFileName, MeasurementType measurementType) { int count = 0; using (StreamWriter writer = new StreamWriter(outputFileName)) { writer.WriteLine("participant,device,trial,dbltapTime,dbltapTime1,dbltapTime2,dbltapTimeBetween,dbltapAccuracy1,dbltapAccuracy2,dbltapAccuracy"); string[] folders = Directory.GetDirectories(baseFolder); foreach (string folder in folders) { string participantName = folder.Substring(folder.LastIndexOf("\\") + 1); List <TouchAction> actions = TouchIO.ReadFromFile(folder + "\\doubletap.xml"); count += actions.Count; if (measurementType == MeasurementType.All) { for (int i = 0; i < actions.Count; i++) { writer.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7:.00},{8:.00},{9:.00}", participantName, deviceType, i + 1, actions[i].DoubleTapTime, actions[i].DoubleTapTime_FirstTap, actions[i].DoubleTapTime_SecondTap, actions[i].DoubleTapTime_InBetweenTaps, actions[i].DoubleTapAccuracy_FirstTap, actions[i].DoubleTapAccuracy_SecondTap, actions[i].DoubleTapAccuracy ); } for (int i = actions.Count + 1; i <= 5; i++) { writer.WriteLine("{0},{1},{2},,,,,,,", participantName, deviceType, i); } } else if (measurementType == MeasurementType.Average) { double avgDoubleTapTime = 0; double avgDoubleTapTime_FirstTap = 0; double avgDoubleTapTime_SecondTap = 0; double avgDoubleTapTime_InBetweenTaps = 0; double avgDoubleTapAccuracy_FirstTap = 0; double avgDoubleTapAccuracy_SecondTap = 0; double avgDoubleTapAccuracy = 0; for (int i = 0; i < actions.Count; i++) { avgDoubleTapTime += actions[i].DoubleTapTime; avgDoubleTapTime_FirstTap += actions[i].DoubleTapTime_FirstTap; avgDoubleTapTime_SecondTap += actions[i].DoubleTapTime_SecondTap; avgDoubleTapTime_InBetweenTaps += actions[i].DoubleTapTime_InBetweenTaps; avgDoubleTapAccuracy_FirstTap += actions[i].DoubleTapAccuracy_FirstTap; avgDoubleTapAccuracy_SecondTap += actions[i].DoubleTapAccuracy_SecondTap; avgDoubleTapAccuracy += actions[i].DoubleTapAccuracy; } if (actions.Count > 0) { avgDoubleTapTime /= actions.Count; avgDoubleTapTime_FirstTap /= actions.Count; avgDoubleTapTime_SecondTap /= actions.Count; avgDoubleTapTime_InBetweenTaps /= actions.Count; avgDoubleTapAccuracy_FirstTap /= actions.Count; avgDoubleTapAccuracy_SecondTap /= actions.Count; avgDoubleTapAccuracy /= actions.Count; writer.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7:.00},{8:.00},{9:.00}", participantName, deviceType, 0, avgDoubleTapTime, avgDoubleTapTime_FirstTap, avgDoubleTapTime_SecondTap, avgDoubleTapTime_InBetweenTaps, avgDoubleTapAccuracy_FirstTap, avgDoubleTapAccuracy_SecondTap, avgDoubleTapAccuracy ); } else { writer.WriteLine("{0},{1},{2},,,,,,,", participantName, deviceType, 0); } } else if (measurementType == MeasurementType.BestPerformance) { double minDoubleTapTime = double.MaxValue; double minDoubleTapTime_FirstTap = double.MaxValue; double minDoubleTapTime_SecondTap = double.MaxValue; double minDoubleTapTime_InBetweenTaps = double.MaxValue; double minDoubleTapAccuracy_FirstTap = double.MaxValue; double minDoubleTapAccuracy_SecondTap = double.MaxValue; double minDoubleTapAccuracy = double.MaxValue; for (int i = 0; i < actions.Count; i++) { if (minDoubleTapTime > actions[i].DoubleTapTime) { minDoubleTapTime = actions[i].DoubleTapTime; } if (minDoubleTapTime_FirstTap > actions[i].DoubleTapTime_FirstTap) { minDoubleTapTime_FirstTap = actions[i].DoubleTapTime_FirstTap; } if (minDoubleTapTime_SecondTap > actions[i].DoubleTapTime_SecondTap) { minDoubleTapTime_SecondTap = actions[i].DoubleTapTime_SecondTap; } if (minDoubleTapTime_InBetweenTaps > actions[i].DoubleTapTime_InBetweenTaps) { minDoubleTapTime_InBetweenTaps = actions[i].DoubleTapTime_InBetweenTaps; } if (minDoubleTapAccuracy_FirstTap > actions[i].DoubleTapAccuracy_FirstTap) { minDoubleTapAccuracy_FirstTap = actions[i].DoubleTapAccuracy_FirstTap; } if (minDoubleTapAccuracy_SecondTap > actions[i].DoubleTapAccuracy_SecondTap) { minDoubleTapAccuracy_SecondTap = actions[i].DoubleTapAccuracy_SecondTap; } if (minDoubleTapAccuracy > actions[i].DoubleTapAccuracy) { minDoubleTapAccuracy = actions[i].DoubleTapAccuracy; } } if (actions.Count > 0) { writer.WriteLine("{0},{1},{2},{3},{4},{5},{6},{7:.00},{8:.00},{9:.00}", participantName, deviceType, 0, minDoubleTapTime, minDoubleTapTime_FirstTap, minDoubleTapTime_SecondTap, minDoubleTapTime_InBetweenTaps, minDoubleTapAccuracy_FirstTap, minDoubleTapAccuracy_SecondTap, minDoubleTapAccuracy ); } else { writer.WriteLine("{0},{1},{2},,,,,,,", participantName, deviceType, 0); } } } } Console.WriteLine("double tap task ({0}): {1} records", deviceType == 1 ? "phone" : "tablet", count); }