void ExportFrameDataToFile(TestMeasurements results) { string filename = GetFrameDataResultsFilenameForTest(results); string directory = FileManager.GetFrameDataFolder(configuration.participantCode); FileManager.WriteToCsvFile(directory, filename, frameData); }
public void OnTestEnded(TestMeasurements testMeasurements) { Debug.Log("[ExperimentController] Current test finished."); ExportResultsToFile(testMeasurements); AbortCurrentTest(); panelResults.ShowPanel(testMeasurements, () => { RunNextTestConfiguration(); }); }
public void ShowPanel(TestMeasurements results, Action OnClose) { _onClose = OnClose; int nTargets = results.configuration.numberOfTargets; int nErrors = Mathf.RoundToInt(nTargets * (float)results.computedResults.errorRate); numTrials.text = nTargets.ToString(); numErrors.text = nErrors.ToString(); amplitude.text = DoubleToString(results.sequenceInfo.targetsDistance, aThousand) + " (mm)"; effectiveAmplitude.text = DoubleToString(results.computedResults.effectiveAmplitude, aThousand) + " (mm)"; width.text = DoubleToString(results.sequenceInfo.targetWidth, aThousand) + " (mm)"; effectiveWidth.text = DoubleToString(results.computedResults.effectiveWidth, aThousand) + " (mm)"; indexOfDifficulty.text = DoubleToString(results.sequenceInfo.indexOfDifficulty) + " bits"; effectiveIndexOfDifficulty.text = DoubleToString(results.computedResults.effectiveIndexOfDifficulty) + " bits"; errorRate.text = DoubleToString(results.computedResults.errorRate, 100) + "%"; movementTime.text = DoubleToString(results.computedResults.averageMovementTime, aThousand) + " ms/trial"; throughput.text = DoubleToString(results.computedResults.throughput) + " bits/s"; this.gameObject.SetActive(true); }
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); }
private List <MeasurementDto> GetListOfFiveMeasurementsWithRandomData() { List <MeasurementDto> measurementsList = new List <MeasurementDto>(); for (int i = 0; i < 5; i++) { measurementsList.Add(TestMeasurements.RandomMeasurement().WithId(i).Build()); } return(measurementsList); }
void StartTest() { if (currentStatus != TestStatus.Running) { SetCurrentStatus(TestStatus.Running); testData = new TestMeasurements(configuration, currentSequence, targets); testData.timestamp = System.DateTime.Now.ToString("s"); testData.initialTime = Time.realtimeSinceStartup; RunNextBlock(); } }
public void UT_M_04_Given_ValidMeasurement_When_PostThisMeasurement_Then_ShouldReturnOkCode() { //Arrange var measurement = TestMeasurements.DefaultMeasurement().Build(); _mockService.Setup(x => x.AddMeasurement(It.IsAny <string>(), measurement)); //Act var response = _controller.PostMeasurement(measurement); //Assert Assert.IsInstanceOfType(response, typeof(OkResult)); }
public void UT_M_09_Given_NoMeasurementInDatabaseWithThisId_When_PutAnotherMeasurementOnThisId_Then_ShouldReturnNotFoundCode() { //Arrange var measurement = TestMeasurements.DefaultMeasurement().Build(); _mockService.Setup(x => x.DoesMeasurementExists(It.IsAny <string>(), It.IsAny <int>())) .Returns(false); _mockService.Setup(x => x.UpdateMeasurement(It.IsAny <string>(), measurement)); //Act var response = _controller.PutMeasurement(measurement.Id, measurement); var contentResult = response as StatusCodeResult; //Assert Assert.AreEqual(HttpStatusCode.NotFound, contentResult.StatusCode); }
public void UT_M_08_Given_MeasurementInDatabase_When_PutAnotherMeasurementOnTheIdOfThisMeasurement_Then_ShouldReturnOkCode() { //Arrange var measurement = TestMeasurements.DefaultMeasurement().Build(); var newMeasurement = TestMeasurements.RandomMeasurement().Build(); _mockService.Setup(x => x.DoesMeasurementExists(It.IsAny <string>(), It.IsAny <int>())) .Returns(true); _mockService.Setup(x => x.UpdateMeasurement(It.IsAny <string>(), measurement)); _controller.PostMeasurement(measurement); //Act var response = _controller.PutMeasurement(measurement.Id, newMeasurement); //Assert Assert.IsInstanceOfType(response, typeof(OkResult)); }
public void UT_M_01_Given_MeasurementInDatabase_When_GetThisMeasurement_Then_ShouldReturnThisMeasurementWithOkCode() { //Arrange var measurement = TestMeasurements.DefaultMeasurement().Build(); _mockService.Setup(x => x.GetMeasurement(It.IsAny <string>(), measurement.Id)) .Returns(measurement); //Act var response = _controller.GetMeasurement(measurement.Id); var contentResult = response as OkNegotiatedContentResult <MeasurementDto>; //Assert Assert.IsNotNull(contentResult); Assert.IsNotNull(contentResult.Content); Assert.AreEqual(measurement.Id, contentResult.Content.Id); Assert.AreEqual(measurement.Date, contentResult.Content.Date); Assert.AreEqual(measurement.Description, contentResult.Content.Description); Assert.AreEqual(measurement.Result, contentResult.Content.Result); }
public void UT_M_07_Given_InvalidMeasurementWithNegativeResult_When_PostThisMeasurement_Then_ShouldReturnInvalidModelState() { //Arrange var measurement = TestMeasurements.DefaultMeasurement(); var measurementWithNegativeResult = measurement.WithNegativeResult().Build(); var validationContext = new ValidationContext(measurementWithNegativeResult, null, null); var validationResults = new List <ValidationResult>(); Validator.TryValidateObject(measurementWithNegativeResult, validationContext, validationResults, true); foreach (var validationResult in validationResults) { _controller.ModelState.AddModelError(validationResult.MemberNames.First(), validationResult.ErrorMessage); } //Act var response = _controller.PostMeasurement(measurementWithNegativeResult); //Assert Assert.IsInstanceOfType(response, typeof(InvalidModelStateResult)); }
public Throughput(TestMeasurements test) { totalTrials = 0; missedTrials = 0; double totalMovementTime = 0; double totalEffectiveAmplitude = 0; List <double> projectedCoordinates = new List <double>(); foreach (BlockMeasurements b in test.blocksData) { foreach (TrialMeasurements t in b.trialsData) { UpdateOutlierState(t); if (!t.isMarkedAsOutlier) { totalTrials++; if (t.missedTarget) { missedTrials++; } totalMovementTime += t.trialDuration; totalEffectiveAmplitude += t.effectiveAmplitudeOfMovement; projectedCoordinates.Add(t.finalPositionProjectedOnMovementAxis); } } } double stdev = ResultsMath.ComputeStandardDeviation(projectedCoordinates); errorRate = (float)missedTrials / (float)totalTrials; averageMovementTime = totalMovementTime / totalTrials; effectiveAmplitude = totalEffectiveAmplitude / totalTrials; effectiveWidth = ResultsMath.EffectiveWidthForStdevValue(stdev); effectiveIndexOfDifficulty = ResultsMath.IndexOfDifficulty(effectiveWidth, effectiveAmplitude); throughput = effectiveIndexOfDifficulty / averageMovementTime; }
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); }
public static string GetResultsFilenameForTest(TestMeasurements test) { return(GetResultsFilenamePrefix(test.configuration) + "-" + test.timestamp.Replace(":", "_")); }
string GetFrameDataResultsFilenameForTest(TestMeasurements test) { return("FrameData_" + FileManager.GetResultsFilenameForTest(test) + ".csv"); }