private void SaveBatchExperimentTemplateButtonClick(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.AddExtension    = true;
            sfd.DefaultExt      = "bet";
            sfd.Filter          = "Batch experiment templates (*.bet)|*.bet";
            sfd.OverwritePrompt = true;

            if (sfd.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            BatchExperimentTemplate bet = BatchExperimentTemplate
                                          .Create(GetSelectedBatchMode())
                                          .WithExperimentTemplates(GetConfiguredExperiments()
                                                                   .Select(ex => ExperimentTemplate.Create(ex)));

            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(BatchExperimentTemplate));
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(sfd.FileName))
            {
                serializer.Serialize(sw, bet);
            }
        }
        public static BatchExperiment LoadBatchExperiment()
        {
            OpenFileDialog ofd = new OpenFileDialog();

            ofd.AddExtension    = true;
            ofd.DefaultExt      = "bet";
            ofd.Filter          = "Batch experiment templates (*.bet)|*.bet";
            ofd.CheckFileExists = true;
            ofd.CheckPathExists = true;

            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return(null);
            }

            BatchExperimentTemplate bet = null;

            System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(BatchExperimentTemplate));
            using (System.IO.StreamReader sw = new System.IO.StreamReader(ofd.FileName))
            {
                bet = (BatchExperimentTemplate)serializer.Deserialize(sw.BaseStream);
            }

            return(bet.ToBatchExperiment());
        }