private void button_run_Click(object sender, EventArgs e)
        {
            var floatPath  = fileOpenControl_ionoFreeFloat.FilePath;
            var mwPath     = this.fileOpenControl_mwWide.FilePath;
            var mwTable    = ObjectTableReader.Read(mwPath);
            var floatTable = ObjectTableReader.Read(floatPath);

            //Group 文件包括, Index	Site	Name	Group	Value	Rms
            //参数文件包括,ParamName,Value, Rms
            //首先求取宽项模糊度
            GroupedValueService    wmValues           = new GroupedValueService(mwTable);
            ParamValueService      paramValueService  = new ParamValueService(floatTable);
            NameRmsedNumeralVector wideLaneVector     = GetIntMwDoubleDiffers(paramValueService, wmValues);
            WeightedVector         rawFloatAmbiCycles = paramValueService.GetWeightedVector();

            WeightedVector fixedParams = DoFixIonoFreeDoubleDifferAmbiguity(rawFloatAmbiCycles, wideLaneVector);

            //输出结果
            ObjectTableStorage fixedParam = BuildFixedParamTable(fixedParams);

            objectTableControl1.DataBind(fixedParam);

            var path = Path.Combine(directorySelectionControl1.Path, "FixedParams" + Setting.AmbiguityFileExtension);

            ObjectTableWriter.Write(fixedParam, path);

            Geo.Utils.FormUtil.ShowOkAndOpenDirectory(path);
        }
        private NameRmsedNumeralVector GetIntMwDoubleDiffers(ParamValueService paramValueService, GroupedValueService wmValues)
        {
            NameRmsedNumeralVector wideLaneVector = new NameRmsedNumeralVector();
            // RmsedVector wideLaneVector = new RmsedVector();

            var paramNames = paramValueService.ParamNames;

            foreach (var item in paramNames)
            {
                if (!NetDoubleDifferName.IsDifferParam(item))
                {
                    continue;
                }
                var paramName = NetDoubleDifferName.Parse(item);
                CurrentBasePrn = paramName.RefPrn;

                if (!paramName.IsValid)
                {
                    continue;
                }
                var floatWideAmbi = wmValues.GetFirstDoubleDiffer(paramName);
                if (floatWideAmbi == null)
                {
                    continue;
                }

                var wideAmbi = new RmsedNumeral(Math.Round(floatWideAmbi.Value), 1e-10);
                var differ   = (floatWideAmbi.Value - wideAmbi.Value);
                if (Math.Abs(differ) > 0.3)
                {
                    log.Info(item + " 宽项(MW)整数偏差为 " + differ + "取消固定。");
                    continue;
                }

                wideLaneVector[item] = wideAmbi;
            }

            return(wideLaneVector);
        }