public void AddSubjects()
        {
            string       subjectsStr = HttpContext.Current.Request.Params["request"];
            SubjectsData subjects    = JsonConvert.DeserializeObject <SubjectsData>(subjectsStr);

            subjectsData.Add(subjects);
        }
Example #2
0
        /// <summary>
        /// Initializes a new instance of the Tracker class.
        /// </summary>
        /// <param name="owningRecordModule">
        /// The <see cref="RecordModule"/>
        ///   form wich host the recorder.
        /// </param>
        /// <param name="trackerConnectButton">
        /// The <see cref="Button"/>
        ///   named "Connect" at the tab page of the tracking device.
        /// </param>
        /// <param name="trackerSubjectButton">
        /// The <see cref="Button"/>
        ///   named "Subject" at the tab page of the tracking device.
        /// </param>
        /// <param name="trackerCalibrateButton">
        /// The <see cref="Button"/>
        ///   named "Calibrate" at the tab page of the tracking device.
        /// </param>
        /// <param name="trackerRecordButton">
        /// The <see cref="Button"/>
        ///   named "Record" at the tab page of the tracking device.
        /// </param>
        /// <param name="trackerSubjectNameTextBox">
        /// The <see cref="TextBox"/>
        ///   which should contain the subject name at the tab page of the tracking device.
        /// </param>
        /// <param name="trackerSettingsFile">
        /// The file with full path to the settings
        ///   xml file of the tracking device.
        /// </param>
        protected Tracker(
            RecordModule owningRecordModule,
            Button trackerConnectButton,
            Button trackerSubjectButton,
            Button trackerCalibrateButton,
            Button trackerRecordButton,
            TextBox trackerSubjectNameTextBox,
            string trackerSettingsFile)
        {
            if (trackerSubjectButton == null)
            {
                throw new ArgumentNullException(
                          "trackerSubjectButton",
                          "All custom devices should have a subject button on their tab pages.");
            }

            if (trackerRecordButton == null)
            {
                throw new ArgumentNullException(
                          "trackerRecordButton",
                          "All custom devices should have a record button on their tab pages.");
            }

            this.recordModule       = owningRecordModule;
            this.connectButton      = trackerConnectButton;
            this.subjectButton      = trackerSubjectButton;
            this.calibrateButton    = trackerCalibrateButton;
            this.recordButton       = trackerRecordButton;
            this.subjectNameTextBox = trackerSubjectNameTextBox;
            this.settingsFile       = trackerSettingsFile;

            // Wires the recording finished event from the record module
            // to wait for resetting the button states after recording
            // stopped
            this.recordModule.RecordingFinished += this.RecordModuleNewRecordingFinished;

            // Wires the GazeDataChanged event of this tracking device
            // to the record modules
            // event handler.
            this.GazeDataChanged += this.recordModule.TrackerGazeDataChanged;

            // Create new empty subject
            this.subject = new SubjectsData();

            // Wire button events.
            this.recordButton.Click += this.BtnRecordClick;

            if (this.calibrateButton != null)
            {
                this.calibrateButton.Click += this.BtnCalibrateClick;
            }

            this.subjectButton.Click += this.BtnSubjectNameClick;

            if (this.connectButton != null)
            {
                this.connectButton.Click += this.BtnConnectClick;
            }
        }
Example #3
0
        /// <summary>
        ///   This method iterates the imported fixation rows to
        ///   catch the trial changes that are detected during the call
        ///   of <see cref="GenerateOgamaFixationDataList(int)" />.
        ///   The trials are then written into the trial list.
        /// </summary>
        private static void GenerateOgamaSubjectAndTrialList()
        {
            // Clear foregoing imports.
            TrialList.Clear();
            SubjectList.Clear();

            if (FixationDataList.Count == 0)
            {
                return;
            }

            // Initializes variables
            var lastSequence = -5;
            var lastSubject  = "#";

            // Iterate raw data list
            for (int i = 0; i < FixationDataList.Count; i++)
            {
                var    importRow       = FixationDataList[i];
                int    currentSequence = importRow.TrialSequence;
                string currentSubject  = importRow.SubjectName;

                FixationDataList[i] = importRow;

                // If subject has changed write new subject table entry.
                if (currentSubject != lastSubject)
                {
                    var newSubjectsData = new SubjectsData {
                        SubjectName = currentSubject
                    };
                    SubjectList.Add(newSubjectsData);
                    lastSubject = currentSubject;
                }

                // If trial has changed parse the trial information to
                // create a trial entry in the trialList.
                if (currentSequence != lastSequence)
                {
                    string subject = importRow.SubjectName ?? "Subject1";

                    // Create trial row
                    var newTrialData = new TrialsData
                    {
                        SubjectName   = subject,
                        TrialSequence = importRow.TrialSequence,
                        TrialID       = importRow.TrialID,
                        TrialName     = importRow.TrialID.ToString(CultureInfo.InvariantCulture)
                    };

                    TrialList.Add(newTrialData);

                    lastSequence = currentSequence;
                }
            }
        }
        public string ReturnSubjects()
        {
            string subjectsStr = HttpContext.Current.Request["request"];

            SubjectsData[] subjects      = JsonConvert.DeserializeObject <SubjectsData[]>(subjectsStr);
            SubjectsData   MinimumMarks  = subjects.First(x => x.subjectMarks == subjects.Min(z => z.subjectMarks));
            SubjectsData   MaximumMarks  = subjects.First(x => x.subjectMarks == subjects.Max(z => z.subjectMarks));
            decimal        noOfSubject   = subjects.Count();
            decimal        totalMarks    = 100 * noOfSubject;
            decimal        ObtainedMarks = subjects.Sum(x => x.subjectMarks);
            decimal        percentage    = (ObtainedMarks / totalMarks) * 100;
            ReturnData     data          = new ReturnData()
            {
                MinimumMarks = MinimumMarks,
                MaximumMarks = MaximumMarks,
                percentage   = percentage
            };

            return(JsonConvert.SerializeObject(data));
        }
Example #5
0
        ///////////////////////////////////////////////////////////////////////////////
        // Eventhandler                                                              //
        ///////////////////////////////////////////////////////////////////////////////
        #region EVENTS

        ///////////////////////////////////////////////////////////////////////////////
        // Eventhandler for UI, Menu, Buttons, Toolbars etc.                         //
        ///////////////////////////////////////////////////////////////////////////////
        #region WINDOWSEVENTHANDLER
        #endregion //WINDOWSEVENTHANDLER

        ///////////////////////////////////////////////////////////////////////////////
        // Eventhandler for Custom Defined Events                                    //
        ///////////////////////////////////////////////////////////////////////////////
        #region CUSTOMEVENTHANDLER
        #endregion //CUSTOMEVENTHANDLER

        #endregion //EVENTS

        ///////////////////////////////////////////////////////////////////////////////
        // Methods and Eventhandling for Background tasks                            //
        ///////////////////////////////////////////////////////////////////////////////
        #region BACKGROUNDWORKER
        #endregion //BACKGROUNDWORKER

        ///////////////////////////////////////////////////////////////////////////////
        // Inherited methods                                                         //
        ///////////////////////////////////////////////////////////////////////////////
        #region OVERRIDES
        #endregion //OVERRIDES

        ///////////////////////////////////////////////////////////////////////////////
        // Methods for doing main class job                                          //
        ///////////////////////////////////////////////////////////////////////////////
        #region METHODS

        /// <summary>
        /// Generate all the lists of subject, trial and raw data.
        /// </summary>
        /// <remarks>This is the heart of the class. If something does not work as expected,
        /// first have a look here.</remarks>
        private static void GenerateSubjectTrialRawdataList()
        {
            rawDataList.Clear();
            trialList.Clear();
            subjectList.Clear();
            trialEventsList.Clear();

            // Use the decimal separator specified.
            NumberFormatInfo nfi = CultureInfo.GetCultureInfo("en-US").NumberFormat;

            if (asciiSettings.DecimalSeparatorCharacter == ',')
            {
                nfi = CultureInfo.GetCultureInfo("de-DE").NumberFormat;
            }

            // Begin reading File
            string lastSubject = string.Empty;
            int    lastTrialID = -5;
            string line        = string.Empty;
            int    counter     = 0;

            try
            {
                // Open file
                using (StreamReader importReader = new StreamReader(asciiSettings.Filename))
                {
                    string[] columns;
                    Dictionary <string, int> columnNames = new Dictionary <string, int>();

                    // Read every line of ImportFile
                    while ((line = importReader.ReadLine()) != null)
                    {
                        // ignore empty lines
                        if (line.Trim() == string.Empty)
                        {
                            continue;
                        }

                        // Ignore Quotes
                        if (line.StartsWith("#"))
                        {
                            continue;
                        }

                        // Skip first line filled with column titles
                        if (counter == 0)
                        {
                            columns = line.Split('\t');
                            for (int i = 0; i < columns.Length; i++)
                            {
                                columnNames.Add(columns[i], i);
                            }

                            counter++;
                            continue;
                        }

                        // Split line in columns
                        string[] items = line.Split('\t');

                        // read subjects data
                        string subjectName = items[columnNames["SubjectName"]];
                        if (subjectName != lastSubject)
                        {
                            SubjectsData newSubjectData = new SubjectsData();
                            newSubjectData.SubjectName = subjectName;
                            newSubjectData.Category    = items[columnNames["SubjectCategory"]];
                            int result;
                            if (int.TryParse(items[columnNames["Age"]], out result))
                            {
                                newSubjectData.Age = result;
                            }

                            newSubjectData.Sex        = items[columnNames["Sex"]];
                            newSubjectData.Handedness = items[columnNames["Handedness"]];
                            newSubjectData.Comments   = items[columnNames["Comments"]];

                            if (!subjectList.Contains(newSubjectData))
                            {
                                subjectList.Add(newSubjectData);
                            }

                            lastSubject = subjectName;
                        }

                        // read trials data
                        int trialID = Convert.ToInt32(items[columnNames["TrialID"]]);
                        if (trialID != lastTrialID)
                        {
                            TrialsData newTrialsData = new TrialsData();
                            newTrialsData.SubjectName    = subjectName;
                            newTrialsData.TrialID        = trialID;
                            newTrialsData.TrialName      = items[columnNames["TrialName"]];
                            newTrialsData.TrialSequence  = Convert.ToInt32(items[columnNames["TrialSequence"]]);
                            newTrialsData.Category       = items[columnNames["TrialCategory"]];
                            newTrialsData.TrialStartTime = Convert.ToInt64(items[columnNames["TrialStartTime"]]);
                            int result;
                            if (int.TryParse(items[columnNames["Duration"]], out result))
                            {
                                newTrialsData.Duration = result;
                            }

                            if (items[columnNames["EliminateData"]] != string.Empty)
                            {
                                newTrialsData.EliminateData = true;
                            }

                            if (!trialList.Contains(newTrialsData))
                            {
                                trialList.Add(newTrialsData);
                            }

                            lastTrialID = trialID;
                        }

                        // read trials data
                        string eventeventID = items[columnNames["EventEventID"]];
                        if (eventeventID != string.Empty)
                        {
                            TrialEventsData newTrialEventsData = new TrialEventsData();
                            newTrialEventsData.EventID       = Convert.ToInt32(items[columnNames["EventEventID"]]);
                            newTrialEventsData.EventParam    = items[columnNames["EventParam"]];
                            newTrialEventsData.EventTask     = items[columnNames["EventTask"]];
                            newTrialEventsData.EventTime     = Convert.ToInt64(items[columnNames["EventTime"]]);
                            newTrialEventsData.EventType     = items[columnNames["EventType"]];
                            newTrialEventsData.SubjectName   = subjectName;
                            newTrialEventsData.TrialSequence = Convert.ToInt32(items[columnNames["TrialSequence"]]);
                            if (!trialEventsList.Contains(newTrialEventsData))
                            {
                                trialEventsList.Add(newTrialEventsData);
                            }
                        }

                        // Create Ogama columns placeholder
                        RawData newRawData = new RawData();

                        // Save time value
                        newRawData.Time          = Convert.ToInt64(items[columnNames["Time"]]);
                        newRawData.SubjectName   = subjectName;
                        newRawData.TrialSequence = Convert.ToInt32(items[columnNames["TrialSequence"]]);
                        newRawData.Category      = items[columnNames["TrialCategory"]];

                        if (items[columnNames["PupilDiaX"]] != string.Empty)
                        {
                            newRawData.PupilDiaX = Convert.ToSingle(items[columnNames["PupilDiaX"]], nfi);
                        }

                        if (items[columnNames["PupilDiaY"]] != string.Empty)
                        {
                            newRawData.PupilDiaY = Convert.ToSingle(items[columnNames["PupilDiaY"]], nfi);
                        }

                        if (items[columnNames["GazePosX"]] != string.Empty)
                        {
                            newRawData.GazePosX = Convert.ToSingle(items[columnNames["GazePosX"]], nfi);
                        }

                        if (items[columnNames["GazePosY"]] != string.Empty)
                        {
                            newRawData.GazePosY = Convert.ToSingle(items[columnNames["GazePosY"]], nfi);
                        }

                        if (items[columnNames["MousePosX"]] != string.Empty)
                        {
                            newRawData.MousePosX = Convert.ToSingle(items[columnNames["MousePosX"]], nfi);
                        }

                        if (items[columnNames["MousePosY"]] != string.Empty)
                        {
                            newRawData.MousePosY = Convert.ToSingle(items[columnNames["MousePosY"]], nfi);
                        }

                        if (items[columnNames["EventID"]] != string.Empty)
                        {
                            newRawData.EventID = Convert.ToInt32(items[columnNames["EventID"]]);
                        }

                        // Add the parsed raw data row to the list.
                        rawDataList.Add(newRawData);
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionMethods.HandleException(ex);
            }
        }
Example #6
0
 public override void OnDestroy()
 {
     SubjectsData.DeleteInstance();
     base.OnDestroy();
 }
Example #7
0
 public override void OnCreate(Bundle savedInstanceState)
 {
     SubjectsData.NewInstance();
     base.OnCreate(savedInstanceState);
 }