/// <summary> /// Display a pop-up window which waits for a valid name of the experiment and starts the creation process. /// </summary> /// <param name="experiment">The experiment dataa</param> public NameForm(ExperimentDescriptor experiment) { InitializeComponent(); this.experiment = experiment; FileGenerator.getInstance().createDefaultDir(); FileGenerator.getInstance().createSubDirs(); }
/// <summary> /// Serializes the experiment object in a file. /// </summary> /// <param name="experiment">Experiment object to be serialized</param> /// <param name="fileName">The file name for the object. </param> /// <returns>True when the generation was succesful.</returns> public bool saveExperiment(ExperimentDescriptor experiment, string fileName) { IFormatter formatter = new BinaryFormatter(); using (Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None)) { formatter.Serialize(stream, experiment); } return(true); }
/// <summary> /// Displays the open-file dialog and load the experiment data in this file. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void loadToolStripMenuItem_Click(object sender, EventArgs e) { try { if (openFileDialog.ShowDialog() == DialogResult.OK) { actualFilename = openFileDialog.FileName; experiment = FileGenerator.getInstance().loadExperiment(actualFilename); } updateTrialList(); } catch (Exception ex) { actualFilename = ""; } }
/// <summary> /// Generate the Session files in the specified experiment folder. /// </summary> /// <param name="experiment">The experiment object containing all the experiment data.</param> /// <returns>True if the file generation was succesful.</returns> public bool generateSessionFiles(ExperimentDescriptor experiment) { Random randTrial = new Random(); Random randBlock = new Random(); Directory.CreateDirectory(experiment.ExperimentFolder); Directory.CreateDirectory(experiment.ExperimentFolder + @"\" + ImageSubDir); for (int s = 1; s <= experiment.NumberSessionFiles; s++) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Encoding = Encoding.GetEncoding("ISO-8859-1"); settings.Indent = true; settings.IndentChars = (" "); Directory.CreateDirectory(experiment.ExperimentFolder + @"\" + sessionDirPrefix + s); //Directory.CreateDirectory(experiment.ExperimentFolder + @"\" + sessionDirPrefix+s+@"\"+ImageSubDir); using (XmlWriter writer = XmlWriter.Create(experiment.ExperimentFolder + @"\" + sessionDirPrefix + s + @"\" + experiment.ExperimentName + "_" + sessionDirPrefix + s + ".session", settings)) { writer.WriteStartElement("experiment"); writer.WriteStartElement("session"); writer.WriteElementString("expName", experiment.ExperimentName); writer.WriteElementString("sessNum", s.ToString()); writer.WriteElementString("displayX", experiment.DisplayX.ToString()); writer.WriteElementString("displayY", experiment.DisplayY.ToString()); writer.WriteElementString("numTrials", experiment.NumberTrials.ToString()); writer.WriteStartElement("trials"); List <int> trialBlockRand = new List <int>(experiment.SessionList.TrialList.Count); int trialCount = 0; for (int count = 0; count < experiment.SessionList.TrialList.Count; count++) { int nextTrialNumber = 0; do { nextTrialNumber = randBlock.Next(0, experiment.SessionList.TrialList.Count); } while (trialBlockRand.Contains(nextTrialNumber)); trialBlockRand.Add(nextTrialNumber); TrialDescriptor trial = experiment.SessionList.TrialList[nextTrialNumber]; for (int i = 0; i < trial.NumberTrials; i++) { writer.WriteStartElement("trial"); writer.WriteAttributeString("number", (++trialCount).ToString()); writer.WriteStartElement("condition"); //writer.WriteElementString("condition", trial.TrialName); int conditionNr = count; int conditionNrCount = 0; foreach (TrialDescriptor findConditionNumber in experiment.SessionList.TrialList) { conditionNrCount++; if (findConditionNumber.TrialName.Equals(trial.TrialName)) { conditionNr = conditionNrCount; break; } } writer.WriteAttributeString("number", conditionNr.ToString()); writer.WriteString(trial.TrialName); writer.WriteEndElement(); if (trial.FixationMarker) { writer.WriteElementString("isFixMarker", "1"); } else { writer.WriteElementString("isFixMarker", "0"); } int duration_ms = trial.Duration * 1000; writer.WriteElementString("duration", duration_ms.ToString()); if (trial.GridDisplayVertical && trial.GridDisplayHorizontal) { writer.WriteElementString("gridDisplay", "3"); } else if (trial.GridDisplayVertical && !trial.GridDisplayHorizontal) { writer.WriteElementString("gridDisplay", "2"); } else if (!trial.GridDisplayVertical && trial.GridDisplayHorizontal) { writer.WriteElementString("gridDisplay", "1"); } else { writer.WriteElementString("gridDisplay", "0"); } writer.WriteElementString("bgColorA", Color.FromArgb(trial.BackgroundColor).A.ToString()); writer.WriteElementString("bgColorR", Color.FromArgb(trial.BackgroundColor).R.ToString()); writer.WriteElementString("bgColorG", Color.FromArgb(trial.BackgroundColor).G.ToString()); writer.WriteElementString("bgColorB", Color.FromArgb(trial.BackgroundColor).B.ToString()); writer.WriteElementString("fgColorA", Color.FromArgb(trial.ForegroundColor).A.ToString()); writer.WriteElementString("fgColorR", Color.FromArgb(trial.ForegroundColor).R.ToString()); writer.WriteElementString("fgColorG", Color.FromArgb(trial.ForegroundColor).G.ToString()); writer.WriteElementString("fgColorB", Color.FromArgb(trial.ForegroundColor).B.ToString()); if (trial.Bouncing) { writer.WriteElementString("isBounce", "1"); } else { writer.WriteElementString("isBounce", "0"); } if (trial.Bouncing) { writer.WriteElementString("minBounceDist", trial.BouncingDistance.ToString()); } else { writer.WriteElementString("minBounceDist", ""); } writer.WriteElementString("minStartDist", trial.StartingDistance.ToString()); writer.WriteElementString("numObjects", trial.MObjectList.Count.ToString()); int numTargets = 0; foreach (MObjectDescriptor mObject in trial.MObjectList) { if (mObject.TargetObject) { numTargets++; } } writer.WriteElementString("numTargets", numTargets.ToString()); writer.WriteStartElement("objects"); int objectCount = 0; foreach (MObjectDescriptor mObject in trial.MObjectList) { writer.WriteStartElement("object"); writer.WriteAttributeString("number", (++objectCount).ToString()); string filename = ""; if (mObject.Type.Contains("Rectangle")) { filename = "rect_" + mObject.Width.ToString() + "x" + mObject.Height.ToString() + "_" + mObject.Color.ToString() + ".bmp"; if (!(File.Exists(experiment.ExperimentFolder + @"\" + ImageSubDir + @"\" + filename))) { Bitmap objectBMP = createBMP(mObject.Type, mObject.Width, mObject.Height, Color.FromArgb(mObject.Color), Color.FromArgb(trial.BackgroundColor)); objectBMP.Save(experiment.ExperimentFolder + @"\" + ImageSubDir + @"\" + filename); } } else if (mObject.Type.Contains("Circle")) { filename = "elli_" + mObject.Width.ToString() + "x" + mObject.Height.ToString() + "_" + mObject.Color.ToString() + ".bmp"; if (!(File.Exists(experiment.ExperimentFolder + @"\" + ImageSubDir + @"\" + filename))) { Bitmap objectBMP = createBMP(mObject.Type, mObject.Width, mObject.Height, Color.FromArgb(mObject.Color), Color.FromArgb(trial.BackgroundColor)); objectBMP.Save(experiment.ExperimentFolder + @"\" + ImageSubDir + @"\" + filename); } } else if (mObject.Type.Contains("File")) { filename = mObject.Filename.Substring(mObject.Filename.LastIndexOf("\\") + 1); if (!(File.Exists(experiment.ExperimentFolder + @"\" + ImageSubDir + @"\" + filename))) { Bitmap objectBMP = new Bitmap(mObject.Filename); objectBMP.Save(experiment.ExperimentFolder + @"\" + ImageSubDir + @"\" + filename); } } writer.WriteElementString("objPath", experiment.ExperimentFolder.Replace("\\", "\\\\") + @"\\" + ImageSubDir + @"\\" + filename); if (mObject.TargetObject) { writer.WriteElementString("objIsTarget", "1"); } else { writer.WriteElementString("objIsTarget", "0"); } writer.WriteElementString("objPanel", mObject.StartPanel.ToString()); writer.WriteElementString("objMinSpeedH", mObject.MinSpeedHorizontal.ToString()); writer.WriteElementString("objMaxSpeedH", mObject.MaxSpeedHorizontal.ToString()); writer.WriteElementString("objMinSpeedV", mObject.MinSpeedVertical.ToString()); writer.WriteElementString("objMaxSpeedV", mObject.MaxSpeedVertical.ToString()); writer.WriteEndElement(); //end object-tag } writer.WriteEndElement(); //end objects-tag writer.WriteEndElement(); //end trial-tag } } writer.WriteEndElement(); //end trials-tag writer.WriteEndElement(); //end session-Tag writer.WriteEndElement(); //end experiment-Tag writer.Flush(); } } return(true); }