void ExportResultsToFile(TestMeasurements results) { string directory = FileManager.GetResultsFolder(results.configuration.participantCode); string filename = FileManager.GetResultsFilenameForTest(results) + ".csv"; var records = ExperimentResultRecord.GetRecordsFromTestMeasurements(results, transform.position, transform.rotation.eulerAngles); FileManager.WriteToCsvFile(directory, filename, records); ExportFrameDataToFile(results); }
public static List <ExperimentResultRecord> GetRecordsFromTestMeasurements(TestMeasurements test, Vector3 experimentPosition, Vector3 experimentRotation) { List <ExperimentResultRecord> results = new List <ExperimentResultRecord>(); foreach (BlockMeasurements b in test.blocksData) { foreach (TrialMeasurements t in b.trialsData) { ExperimentResultRecord r = new ExperimentResultRecord(); r.participantCode = test.configuration.participantCode; r.conditionCode = test.configuration.conditionCode; r.sessionCode = test.configuration.sessionCode; r.groupCode = test.configuration.groupCode; r.task = Enum2String.GetTaskString(test.configuration.experimentTask); r.cursorPositioningMethod = Enum2String.GetCursorPositioningMethodString(test.configuration.cursorPositioningMethod); r.cursorSelectionMethod = Enum2String.GetCursorSelectionMethodString(test.configuration.cursorSelectionMethod); r.numberOfTargets = test.configuration.numberOfTargets; r.amplitude = test.sequenceInfo.targetsDistance; r.width = test.sequenceInfo.targetWidth; r.indexOfDifficulty = test.sequenceInfo.indexOfDifficulty; r.cursorWidth = test.configuration.cursorWidth; r.planeOrientation = Enum2String.GetPlaneOrientationString(test.configuration.planeOrientation); if (test.configuration.cursorSelectionMethod == CursorSelectionMethod.DwellTime) { r.dwellTime = test.configuration.dwellTime; } else { r.dwellTime = -1; } r.errorRate = test.computedResults.errorRate; r.averageMovementTime = test.computedResults.averageMovementTime; r.throughput = test.computedResults.throughput; r.effectiveIndexOfDifficulty = test.computedResults.effectiveIndexOfDifficulty; r.effectiveWidth = test.computedResults.effectiveWidth; r.effectiveAmplitude = test.computedResults.effectiveAmplitude; r.projectionOnMovementAxis = t.finalPositionProjectedOnMovementAxis; r.amplitudeOnMovementAxis = t.effectiveAmplitudeOfMovement; r.distanceError = t.distanceErrorFromTarget; r.timestamp = test.timestamp; r.totalDuration = test.testDuration; r.blockId = b.blockId; r.blockDuration = b.blockDuration; r.trialId = t.trialId; r.timeTrialStarted = t.initialTime; r.timeActionStarted = t.timeActionStarted; r.timeActionEnded = t.timeActionEnded; r.trialDuration = t.trialDuration; r.fromTargetId = t.initialTargetId; r.xFrom = t.initialTargetPosition.x; r.yFrom = t.initialTargetPosition.y; r.zFrom = t.initialTargetPosition.z; r.toTargetId = t.finalTargetId; r.xTo = t.finalTargetPosition.x; r.yTo = t.finalTargetPosition.y; r.zTo = t.finalTargetPosition.z; r.xTrialStarted = t.initialPosition.x; r.yTrialStarted = t.initialPosition.y; r.zTrialStarted = t.initialPosition.z; r.xActionStarted = t.positionActionStarted.x; r.yActionStarted = t.positionActionStarted.y; r.zActionStarted = t.positionActionStarted.z; r.xActionEnded = t.positionActionEnded.x; r.yActionEnded = t.positionActionEnded.y; r.zActionEnded = t.positionActionEnded.z; r.missedTarget = t.missedTarget ? 1 : 0; r.markedAsOutlier = t.isMarkedAsOutlier ? 1 : 0; r.xPlanePosition = experimentPosition.x; r.yPlanePosition = experimentPosition.y; r.zPlanePosition = experimentPosition.z; r.xPlaneRotation = experimentRotation.x; r.yPlaneRotation = experimentRotation.y; r.zPlaneRotation = experimentRotation.z; r.screenPixelsPerMillimeter = test.configuration.screenPixelsPerMillimeter; r.observations = test.configuration.observations; results.Add(r); } } return(results); }
/// <summary> /// Prior to the use of csv, the software used to write the results in a JSON file. /// The code below can decode those files. /// </summary> private List <ExperimentResultRecord> GenerateCSVFileFromDictionary(JObject data) { var test = (JObject)data["test"]; var config = (JObject)test["configuration"]; var targets = (JArray)config["targetsPositions"]; var testData = (JObject)test["data"]; var blocksData = (JArray)testData["blocksData"]; var trialsData = (JArray)((JObject)blocksData[0])["trialsData"]; var computed = (JObject)data["computedResults"]; int trialCount = 0; List <ExperimentResultRecord> results = new List <ExperimentResultRecord>(); foreach (JObject t in trialsData) { ExperimentResultRecord r = new ExperimentResultRecord(); r.participantCode = (string)data["ParticipantCode"]; r.conditionCode = (string)data["ConditionCode"]; r.sessionCode = (string)data["SessionCode"]; r.groupCode = (string)data["GroupCode"]; r.task = (string)data["ExperimentTask"]; r.cursorPositioningMethod = (string)data["PositioningMethod"]; r.cursorSelectionMethod = (string)data["SelectionMethod"]; r.numberOfTargets = (int)config["numberOfTargets"]; r.amplitude = (float)config["targetDistance"]; r.width = (float)config["targetWidth"]; r.indexOfDifficulty = (float)config["indexOfDifficulty"]; r.cursorWidth = data.GetValue("CursorWidth").Value <float>(); r.planeOrientation = (string)data["PlaneOrientation"]; r.timestamp = (string)testData["timestamp"]; r.totalDuration = (float)testData["testDuration"]; JObject block = (JObject)blocksData[0]; r.blockId = (int)block["blockId"]; r.blockDuration = (float)block["blockDuration"]; r.trialId = (int)t["trialId"]; r.trialDuration = (float)t["trialDuration"]; r.fromTargetId = (int)t["initialTargetId"]; JObject fromPos = (JObject)targets[trialCount]; r.xFrom = (float)fromPos["x"]; r.yFrom = (float)fromPos["y"]; r.zFrom = (float)fromPos["z"]; trialCount = (trialCount + 1) % r.numberOfTargets; r.toTargetId = (int)t["finalTargetId"]; JObject toPos = (JObject)targets[trialCount]; r.xTo = (float)toPos["x"]; r.yTo = (float)toPos["y"]; r.zTo = (float)toPos["z"]; JObject fromMeasured = (JObject)t["initialPosition"]; r.xTrialStarted = (float)fromMeasured["x"]; r.yTrialStarted = (float)fromMeasured["y"]; r.zTrialStarted = (float)fromMeasured["z"]; JObject toMeasured = (JObject)t["finalPosition"]; r.xActionEnded = (float)toMeasured["x"]; r.yActionEnded = (float)toMeasured["y"]; r.zActionEnded = (float)toMeasured["z"]; r.missedTarget = (int)t["missedTarget"]; r.projectionOnMovementAxis = (float)t["finalProjectedCoordinate"]; r.effectiveWidth = (float)computed["effectiveWidth"]; r.effectiveIndexOfDifficulty = (float)computed["effectiveIndexOfDifficulty"]; r.errorRate = (float)computed["errorRate"]; r.averageMovementTime = (float)computed["averageMovementTime"]; r.throughput = (float)computed["throughput"]; r.observations = (string)data["Observations"]; results.Add(r); } return(results); }