private PeakListRemovePrecursorProcessorOptions GetPrecursorOptions()
        {
            var options = new PeakListRemovePrecursorProcessorOptions();

            options.RemovePrecursor = cbRemovePrecursor.Checked;

            if (options.RemovePrecursor)
            {
                options.NeutralLoss = txtNeutralLoss.Text;
                options.RemoveChargeMinus1Precursor  = cbRemovePrecursorMinus1ChargeIon.Checked;
                options.RemoveIonLargerThanPrecursor = cbRemovePrecursorLargeIons.Checked;
                options.RemoveIsotopicIons           = cbRemovePrecursorIsotopicIons.Checked;

                try
                {
                    options.PPMTolerance = double.Parse(txtPrecursorPPM.Text);
                }
                catch (Exception)
                {
                    throw new Exception("Input precursor PPM first!");
                }
            }

            return(options);
        }
        public void Load(XElement parentNode)
        {
            TargetDirectory = parentNode.Element("TargetDirectory").Value;
            RawFiles        = (from file in parentNode.Element("RawFiles").Elements("File")
                               select file.Value).ToArray();
            MascotTitleName          = parentNode.Element("MascotTitleName").Value;
            PrecursorMassRange       = new MassRange(double.Parse(parentNode.Element("PrecursorMassRange").Attribute("From").Value), double.Parse(parentNode.Element("PrecursorMassRange").Attribute("To").Value));
            MinimumIonIntensity      = double.Parse(parentNode.Element("MinimumIonIntensity").Value);
            MinimumIonCount          = int.Parse(parentNode.Element("MinimumIonCount").Value);
            MinimumTotalIonIntensity = int.Parse(parentNode.Element("MinimumTotalIonIntensity").Value);
            DefaultCharges           = new ChargeClass((from charge in parentNode.Element("DefaultCharges").Elements("Charge")
                                                        select int.Parse(charge.Value)).ToArray());

            ProductIonPPM       = double.Parse(parentNode.Element("ProductIonPPM").Value);
            Deisotopic          = bool.Parse(parentNode.Element("Deisotopic").Value);
            ChargeDeconvolution = bool.Parse(parentNode.Element("ChargeDeconvolution").Value);

            KeepTopX          = bool.Parse(parentNode.Element("KeepTopX").Value);
            TopX              = int.Parse(parentNode.Element("TopX").Value);
            GroupByMode       = bool.Parse(parentNode.Element("GroupByMode").Value);
            GroupByMsLevel    = bool.Parse(parentNode.Element("GroupByMsLevel").Value);
            ParallelMode      = bool.Parse(parentNode.Element("ParallelMode").Value);
            ExtractRawMS3     = bool.Parse(parentNode.Element("ExtractRawMS3").Value);
            Overwrite         = bool.Parse(parentNode.Element("Overwrite").Value);
            OutputMzXmlFormat = bool.Parse(parentNode.Element("OutputMzXmlFormat").Value);
            MzXmlNestedScan   = bool.Parse(parentNode.Element("MzXmlNestedScan").Value);

            RemoveIons                    = bool.Parse(parentNode.Element("RemoveIons").Value);
            RemoveIonWindow               = double.Parse(parentNode.Element("RemoveIonWindow").Value);
            RemoveSpecialIons             = bool.Parse(parentNode.Element("RemoveSpecialIons").Value);
            SpecialIons                   = parentNode.Element("SpecialIons").Value;
            RemoveIsobaricIons            = bool.Parse(parentNode.Element("RemoveIsobaricIons").Value);
            IsobaricType                  = IsobaricTypeFactory.Find(parentNode.Element("IsobaricType").Value);
            ProteaseName                  = parentNode.Element("ProteaseName").Value;
            RemoveIsobaricIonsReporters   = bool.Parse(parentNode.Element("RemoveIsobaricIonsReporters").Value);
            RemoveIsobaricIonsInLowRange  = bool.Parse(parentNode.Element("RemoveIsobaricIonsInLowRange").Value);
            RemoveIsobaricIonsInHighRange = bool.Parse(parentNode.Element("RemoveIsobaricIonsInHighRange").Value);

            var precursorNode = parentNode.Element("Precursor");

            PrecursorOptions = new PeakListRemovePrecursorProcessorOptions();
            PrecursorOptions.RemovePrecursor              = bool.Parse(precursorNode.Element("RemovePrecursor").Value);
            PrecursorOptions.PPMTolerance                 = double.Parse(precursorNode.Element("PPMTolerance").Value);
            PrecursorOptions.RemoveNeutralLoss            = bool.Parse(precursorNode.Element("RemoveNeutralLoss").Value);
            PrecursorOptions.NeutralLoss                  = precursorNode.Element("NeutralLoss").Value;
            PrecursorOptions.RemoveChargeMinus1Precursor  = bool.Parse(precursorNode.Element("RemoveChargeMinus1Precursor").Value);
            PrecursorOptions.RemoveIsotopicIons           = bool.Parse(precursorNode.Element("RemoveIsotopicIons").Value);
            PrecursorOptions.RemoveIonLargerThanPrecursor = bool.Parse(precursorNode.Element("RemoveIonsLargerThanPrecursor").Value);
        }