예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }