コード例 #1
0
ファイル: Extend.cs プロジェクト: Volador17/OilCute
        private void loadModel()
        {
            var ftype        = (FileExtensionEnum)this.type;
            var tempfullName = Path.Combine(HttpContext.Current.Server.MapPath("~/"), this.path);

            switch (ftype)
            {
            case FileExtensionEnum.Allmethods:
                if (this._mBind == null)
                {
                    this._mBind      = BindModel.ReadModel <BindModel>(tempfullName);
                    this._components = this._mBind.GetComponents();
                }
                break;

            case FileExtensionEnum.PLSBind:
                if (this._mPLS == null)
                {
                    this._mPLS       = BindModel.ReadModel <PLSModel>(tempfullName);
                    this._components = this._mPLS.GetComponents();
                }
                break;

            case FileExtensionEnum.IdLib:
                if (this._mId == null)
                {
                    this._mId        = BindModel.ReadModel <IdentifyModel>(tempfullName);
                    this._components = this._mId.GetComponents();
                }
                break;

            case FileExtensionEnum.FitLib:
                if (this._mFitting == null)
                {
                    this._mFitting   = BindModel.ReadModel <FittingModel>(tempfullName);
                    this._components = this._mFitting.GetComponents();
                }
                break;

            case FileExtensionEnum.PLS1:
            case FileExtensionEnum.PLSANN:
                if (this._mPLS1 == null)
                {
                    this._mPLS1      = BindModel.ReadModel <PLSSubModel>(tempfullName);
                    this._components = this._mPLS1.GetComponents();
                }
                break;

            case FileExtensionEnum.ItgBind:
                if (this._itgSub == null)
                {
                    this._itgSub     = BindModel.ReadModel <IntegrateModel>(tempfullName);
                    this._components = this._itgSub.GetComponents();
                }
                break;

            default:
                break;
            }
        }
コード例 #2
0
        private void FitCurve(object obj)
        {
            double forward;

            if (_instrumentPriceSafeDico.TryGetValue(_forwardId, out forward))
            {
                UpdateForwardPrices(_forwardId, _futureId);
            }

            double[,] data = new double[ImpliedVolPoints.Count, 2];

            for (int i = 0; i < ImpliedVolPoints.Count; i++)
            {
                data[i, 0] = ImpliedVolPoints[i].X;
                data[i, 1] = ImpliedVolPoints[i].Y;
            }

            Parameter[] outParams = FittingModel.SviFit(data, forward);

            Param.A     = Math.Round(outParams[0].Value, 4);
            Param.B     = Math.Round(outParams[1].Value, 4);
            Param.Rho   = Math.Round(outParams[2].Value, 4);
            Param.Sigma = Math.Round(outParams[3].Value, 4);
            Param.M     = Math.Round(outParams[4].Value, 4);
        }
コード例 #3
0
        public void LoadCommandHandler()
        {
            this.InputPoints = FileReader.Points.ToObservableCollection();
            this.LinePoints  = FittingModel.CalculatePoints(FileReader.Points).ToObservableCollection();

            this.OnPropertyChanged(nameof(this.InputPoints));
            this.OnPropertyChanged(nameof(this.LinePoints));
        }
コード例 #4
0
ファイル: FrmFitting.cs プロジェクト: Volador17/OilCute
        private void btnRebuild_Click(object sender, EventArgs e)
        {
            if (this._lib == null || this._baseModel == null)
            {
                return;
            }
            bool needcv = false;

            if (MessageBox.Show("是否进行交互验证和外部验证?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
            {
                needcv = true;
            }
            this._model                        = Serialize.DeepClone <FittingModel>(this._baseModel);
            this._model.Name                   = this._lib.Name;
            this.btnRebuild.Text               = "正在计算";
            this.btnRebuild.Enabled            = false;
            this.btnModelExtent.Enabled        = false;
            this.btnLoadModel.Enabled          = false;
            this.btnLoadSpec.Enabled           = false;
            this.toolStripProgressBar1.Visible = true;
            Action a = () =>
            {
                if (needcv)
                {
                    this._cvLst = this._model.CrossValidation(this._lib);
                    this._vLst  = this._model.Validation(this._lib);
                }
                else
                {
                    this._vLst  = null;
                    this._cvLst = null;
                }



                this._model.Train(this._lib);

                //显示
                this.showdata();



                if (this.InvokeRequired)
                {
                    ThreadStart s = () =>
                    {
                        MessageBox.Show("建模完成");
                    };
                    this.Invoke(s);
                }
                else
                {
                    MessageBox.Show("建模完成");
                }
            };

            a.BeginInvoke(null, null);
        }
コード例 #5
0
ファイル: FitResult.cs プロジェクト: Volador17/OilCute
        private void init(FittingModel m)
        {
            this.treeGridView1.Nodes.Clear();
            this.treeGridView1.Columns.Clear();

            this.treeGridView1.Columns.Add(new TreeGridColumn()
            {
                HeaderText  = "名称",
                ReadOnly    = true,
                ToolTipText = "样本名称",
                Frozen      = true
            });
            this.treeGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText  = "拟合系数",
                ReadOnly    = true,
                ToolTipText = "拟合系数",
                Width       = 60,
                Frozen      = true
            });
            this.treeGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText  = "TQ",
                ReadOnly    = true,
                ToolTipText = "移动相关系数",
                Width       = 60,
                Frozen      = true
            });
            this.treeGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText  = "SQ",
                ReadOnly    = true,
                ToolTipText = "识别参数",
                Width       = 60,
                Frozen      = true
            });
            this.treeGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText  = "结果",
                ReadOnly    = true,
                ToolTipText = "识别结果",
                Width       = 50,
                Frozen      = true
            });
            //添加性质
            foreach (var c in m.SpecLib.Components)
            {
                this.treeGridView1.Columns.Add(new DataGridViewTextBoxColumn()
                {
                    Width    = 60,
                    ReadOnly = true,
                    Name     = c.Name
                });
            }

            this._inited = true;
        }
コード例 #6
0
ファイル: FitResult.cs プロジェクト: Volador17/OilCute
        public override void Predict(List <string> files, object model, int numofId)
        {
            this._model = model as FittingModel;
            if (_model == null || files == null)
            {
                throw new ArgumentNullException("");
            }
            if (!this._inited)
            {
                if (this.treeGridView1.InvokeRequired)
                {
                    ThreadStart s = () => { this.init(_model); };
                    this.treeGridView1.Invoke(s);
                }
                else
                {
                    this.init(_model);
                }
            }
            var error_filelst = new List <string>();
            int rowNum        = 1;

            foreach (var f in files)
            {
                try
                {
                    var spec = new Spectrum(f);
                    var robj = _model.Predict(spec);
                    if (this.treeGridView1.InvokeRequired)
                    {
                        ThreadStart s = () => { this.addRow(robj, spec, rowNum, numofId); };
                        this.treeGridView1.Invoke(s);
                    }
                    else
                    {
                        this.addRow(robj, spec, rowNum, numofId);
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                    error_filelst.Add(new FileInfo(f).Name);
                }
                rowNum++;
            }
            if (error_filelst.Count > 0)
            {
                MessageBox.Show(string.Format("以下{1}条光谱未正确预测:\n{0}",
                                              string.Join(";", error_filelst),
                                              error_filelst.Count
                                              ));
            }
        }
コード例 #7
0
ファイル: MainForm.cs プロジェクト: Volador17/OilCute
        public void ModelNew()
        {
            if (this.cheakSave())
            {
                return;
            }

            OpenFileDialog myOpenFileDialog = new OpenFileDialog();

            myOpenFileDialog.Filter           = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.Lib, FileExtensionEnum.Lib.GetDescription());
            myOpenFileDialog.Title            = "选择光谱库";
            myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderSpecLib;
            if (myOpenFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }
            this._model = new FittingModel();
            //初始化模型默认参数
            this._model.Wind    = Busi.Common.Configuration.FitWinNum;
            this._model.TQ      = Busi.Common.Configuration.FitTQ;
            this._model.MinSQ   = Busi.Common.Configuration.FitSQ;
            this._model.LibBase = new SpecBase(myOpenFileDialog.FileName);
            if (this._model.LibBase == null)
            {
                MessageBox.Show("光谱库加载失败!", "信息提示");
                return;
            }


            // 检查性质个数并给出提示
            if (this._model.LibBase.Components.Count < 1)
            {
                MessageBox.Show("您导入的光谱库没有性质,请先添加性质", "信息提示");
            }
            libGridView.Specs           = this._model.LibBase;
            this.preForFit.Processors   = new List <NIR.Data.Preprocesser>();
            this.setIdParams1.Model     = this._model;
            this.setTQ1.Model           = this._model;
            this.resultForm1.Model      = this._model;
            this.calibResultForm1.Model = this._model;
            this.flowControl1.UnFinish(2);
            this.flowControl1.UnFinish(3);
            this.flowControl1.UnFinish(4);
            this.flowControl1.UnFinish(5);
            this.flowControl1.UnFinish(6);
            this.flowControl1.Active(1);
            this.flowControl1.Enabled = true;

            this.setTitle();
        }
コード例 #8
0
ファイル: FrmFitting.cs プロジェクト: Volador17/OilCute
 private void clear()
 {
     this.fittingGridViewCV.Clear();
     this.fittingGridViewV.Clear();
     this._model = null;
     this._cvLst = null;
     this._vLst  = null;
     this.btnModelExtent.Enabled = this._lib != null && this._baseModel != null;
     this.btnRebuild.Enabled     = this._lib != null && this._baseModel != null;
     this.btnSaveToBind.Enabled  = false;
     this.btnSaveToItg.Enabled   = false;
     this.lblInfo.Text           = string.Format("光谱库{0},拟合库{1}",
                                                 this._lib == null ? "未加载" : this._lib.ToString(),
                                                 this._baseModel == null ? "未加载" : this._baseModel.ToString());
 }
コード例 #9
0
ファイル: FrmFitting.cs プロジェクト: Volador17/OilCute
        private void btnLoadModel_Click(object sender, EventArgs e)
        {
            OpenFileDialog myOpenFileDialog = new OpenFileDialog();

            myOpenFileDialog.Filter           = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.FitLib, FileExtensionEnum.FitLib.GetDescription());
            myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderMFit;
            if (myOpenFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }
            this._baseModel = BindModel.ReadModel <FittingModel>(myOpenFileDialog.FileName);

            ToolTip tip = new ToolTip();

            tip.SetToolTip(this.btnLoadModel, myOpenFileDialog.FileName);
            this.clear();
        }
コード例 #10
0
ファイル: MainForm.cs プロジェクト: Volador17/OilCute
        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (this.cheakSave())
            {
                return;
            }

            OpenFileDialog myOpenFileDialog = new OpenFileDialog();

            myOpenFileDialog.Filter           = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.FitLib, FileExtensionEnum.FitLib.GetDescription());
            myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderMFit;
            if (myOpenFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this._model = BindModel.ReadModel <FittingModel>(myOpenFileDialog.FileName);
                if (this._model != null)
                {
                    this.libGridView.Specs    = this._model.LibBase;
                    this.preForFit.Processors = this._model.Filters.Select(f => new RIPP.NIR.Data.Preprocesser()
                    {
                        Filter = f,
                        Statu  = WorkStatu.NotSet
                    }).ToList();
                    this.setIdParams1.Model     = this._model;
                    this.setTQ1.Model           = this._model;
                    this.resultForm1.Model      = this._model;
                    this.calibResultForm1.Model = this._model;


                    if (this._model.LibBase == null)
                    {
                        MessageBox.Show("该模型没有存储建模所需的光谱库,无法对模型进行修改,只能使用外部验证功能!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        this.flowControl1.Active(6);
                    }
                    else
                    {
                        this.flowControl1.Active(1);
                        this.flowControl1.Enabled = true;
                    }
                    this._model.Edited = false;
                }
            }
            this.setTitle();
        }
コード例 #11
0
        private void addFitModel(FittingModel model, int idx)
        {
            if (model == null)
            {
                return;
            }
            this.gridModel.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText  = string.Format("拟合_{0}", model.Name),
                Tag         = model.FullPath,
                ToolTipText = model.FullPath,
                SortMode    = DataGridViewColumnSortMode.NotSortable
            });
            int colIdx = this.gridModel.Columns.Count - 1;

            for (int i = 0; i < this.gridModel.Rows.Count; i++)
            {
                if (this.gridModel.Rows[i].Tag == null)
                {
                    continue;
                }
                var cname = this.gridModel.Rows[i].Tag.ToString();
                if (model.SpecLib.Components.Contains(cname))
                {
                    this.gridModel[colIdx, i] = new DataGridViewCheckBoxCell();
                    if (this._model.FitSelectMatrix == null)
                    {
                        this.gridModel[colIdx, i].Value = true;
                    }
                    else
                    {
                        var ddd = (this._model.FitSelectMatrix[this._model.Comps.GetIndex(cname)] & ((int)Math.Pow(2, idx))) == (int)Math.Pow(2, idx);
                        this.gridModel[colIdx, i].Value = ddd;
                    }
                }
                else
                {
                    this.gridModel[colIdx, i]       = new DataGridViewTextBoxCell();
                    this.gridModel[colIdx, i].Value = null;
                }
            }
        }
コード例 #12
0
        private async Task Load()
        {
            FittingTable = await FittingModel.LoadAsync();

            SelectedFitting    = FittingTable.Rows[0].Table.AsDataView()[0];
            RowCount           = FittingTable.Rows.Count;
            _selectedDataTable = FittingTable;

            BriefcaseTable = await BriefcaseModel.LoadAsync();

            SelectedBriefcase = BriefcaseTable.Rows[0].Table.AsDataView()[0];

            ComponentGroupTable = await ComponentGroupModel.LoadAsync();

            SelectedComponentGroup = ComponentGroupTable.Rows[0].Table.AsDataView()[0];

            EquipmentTable = await EquipmentModel.LoadAsync();

            SelectedEquipment = EquipmentTable.Rows[0].Table.AsDataView()[0];
        }
コード例 #13
0
        public void ShowGrid(IList <FittingResult> lst, bool isTree = true, FittingModel model = null)
        {
            this._model = model;

            this._isTree = isTree;
            if (this._isTree)
            {
                this.Init();
                if (lst == null)
                {
                    return;
                }
                foreach (var r in lst)
                {
                    this.AddResult(r);
                }
            }
            else
            {
                this.ShowGrid2(lst);
            }
        }
コード例 #14
0
        public List <FittingModel> GetFittingsFromModel(ExternalCommandData commandData, BuiltInCategory category)
        {
            var fittingModels = new List <FittingModel>();

            var fittings = ElementUtils
                           .GetElementsOfBuiltInCategory(commandData, category);

            foreach (var fittingElem in fittings)
            {
                var fitting = fittingElem as FamilyInstance;
                var fittingConnectorPoints = fitting.GetConnectorPoints();
                if (fittingConnectorPoints == null || fittingConnectorPoints.Count == 0)
                {
                    return(null);
                }
                var fittingModel = new FittingModel
                {
                    ConnectorPoints = fittingConnectorPoints,
                    Model           = fitting
                };
                fittingModels.Add(fittingModel);
            }
            return(fittingModels);
        }
コード例 #15
0
        // [TestMethod]
        public void fiiting()
        {
            var specbase = new SpecBase(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\crude.Lib");

            var model = new FittingModel()
            {
                Wind = 11, MinSQ = 0.98, TQ = 0.998
            };

            // var model = new IdentifyModel() { Wind = 11, MinSQ = 0.98, TQ = 0.998 };

            model.Filters = new List <IFilter>();
            model.Filters.Add(new Sgdiff(21, 2, 2));
            model.Filters.Add(new SavitzkyGolay(5));

            var xidx = new List <RegionPoint>();

            xidx.Add(new RegionPoint(4002, 4702));
            xidx.Add(new RegionPoint(5302, 6102));
            var varregion = new VarRegionManu();
            var argu      = varregion.Argus;

            argu["XaxisRegion"].Value = xidx;
            argu["Xaxis"].Value       = specbase.First().Data.X;
            varregion.Argus           = argu;
            model.Filters.Add(varregion);

            model.Filters.Add(new NormPathLength());
            model.FiltersForIdentify = Serialize.DeepClone <IList <IFilter> >(model.Filters);


            var vspecbase = specbase.Clone();

            vspecbase.Clear();
            foreach (var s in specbase)
            {
                if (s.Usage == UsageTypeEnum.Calibrate)
                {
                    vspecbase.Add(s.Clone());
                }
            }

            var dd     = RIPP.NIR.Data.Preprocesser.Process(model.Filters, vspecbase);
            var writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\filterd.mat");

            writer.WriteMatrix <double>(dd.GetX(), "filterd");
            writer.Close();


            var cv  = new CrossValidation <FittingResult>(model);
            var lst = cv.CV(specbase);

            var allTQ   = new DenseVector(specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count());
            var allSQ   = new DenseVector(specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count());
            var allRate = new DenseMatrix(5, specbase.Where(d => d.Usage == UsageTypeEnum.Calibrate).Count());

            for (int i = 0; i < lst.Count; i++)
            {
                allTQ[i] = lst[i].TQ;
                allSQ[i] = lst[i].SQ.Min();

                var ddd = lst[i].Specs.Select(d => d.Rate);
                for (int k = 0; k < 5; k++)
                {
                    if (k >= ddd.Count())
                    {
                        break;
                    }
                    allRate[k, i] = ddd.ElementAt(k);
                }
            }


            writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\tq.mat");
            writer.WriteMatrix <double>(allTQ.ToColumnMatrix(), "TQ");
            writer.Close();

            writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\sq.mat");
            writer.WriteMatrix <double>(allSQ.ToColumnMatrix(), "SQ");
            writer.Close();

            writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\src\RIPP\testdata\fit\result.mat");
            writer.WriteMatrix <double>(allRate, "allRate");
            writer.Close();
        }
コード例 #16
0
ファイル: Mainform.cs プロジェクト: Volador17/OilCute
        private void btnModelLoad_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Filter = string.Format("所有方法文件 (*.{0};*.{2};*.{4};*.{6};*.{8};*.{10};*.{12})|*.{0};*.{2};*.{4};*.{6};*.{8};*.{10};*.{12}|{1} (*.{0})|*.{0}|{3} (*.{2})|*.{2}|{5} (*.{4})|*.{4}|{7} (*.{6})|*.{6}|{9} (*.{8})|*.{8}|{11} (*.{10})|*.{10}|{13} (*.{12})|*.{12}",
                                       FileExtensionEnum.Allmethods,
                                       FileExtensionEnum.Allmethods.GetDescription(),
                                       FileExtensionEnum.IdLib,
                                       FileExtensionEnum.IdLib.GetDescription(),
                                       FileExtensionEnum.FitLib,
                                       FileExtensionEnum.FitLib.GetDescription(),
                                       FileExtensionEnum.PLSBind,
                                       FileExtensionEnum.PLSBind.GetDescription(),
                                       FileExtensionEnum.PLS1,
                                       FileExtensionEnum.PLS1.GetDescription(),
                                       FileExtensionEnum.PLSANN,
                                       FileExtensionEnum.PLSANN.GetDescription(),
                                       FileExtensionEnum.ItgBind,
                                       FileExtensionEnum.ItgBind.GetDescription()

                                       );
            dlg.InitialDirectory = Busi.Common.Configuration.DefaultDirectory;
            dlg.Title            = "选择方法";
            if (dlg.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }

            var ftype = BindModel.CheckType(dlg.FileName);

            switch (ftype)
            {
            case FileExtensionEnum.Allmethods:
                this._mBind                    = BindModel.ReadModel <BindModel>(dlg.FileName);
                this._mBind.FullPath           = dlg.FileName;
                this.tabControl1.SelectedIndex = 0;
                break;

            case FileExtensionEnum.PLSBind:
                this._mPLS                     = BindModel.ReadModel <PLSModel>(dlg.FileName);
                this._mPLS.FullPath            = dlg.FileName;
                this.tabControl1.SelectedIndex = 1;
                break;

            case FileExtensionEnum.IdLib:
                this._mId                      = BindModel.ReadModel <IdentifyModel>(dlg.FileName);
                this._mId.FullPath             = dlg.FileName;
                this.tabControl1.SelectedIndex = 2;
                break;

            case FileExtensionEnum.FitLib:
                this._mFitting                 = BindModel.ReadModel <FittingModel>(dlg.FileName);
                this._mFitting.FullPath        = dlg.FileName;
                this.tabControl1.SelectedIndex = 3;
                break;

            case FileExtensionEnum.PLS1:
            case FileExtensionEnum.PLSANN:
                this._mPLS1                    = BindModel.ReadModel <PLSSubModel>(dlg.FileName);
                this._mPLS1.FullPath           = dlg.FileName;
                this.tabControl1.SelectedIndex = 4;
                break;

            case FileExtensionEnum.ItgBind:
                this._itgSub                   = BindModel.ReadModel <IntegrateModel>(dlg.FileName);
                this._itgSub.FullPath          = dlg.FileName;
                this.tabControl1.SelectedIndex = 5;
                break;

            default:
                break;
            }
            this.tabChange();
            var p = this.tabControl1.SelectedTab as Controls.IPanel;

            if (p != null)
            {
                p.Clear();
            }
        }