Exemple #1
0
        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;
            }
        }
Exemple #2
0
 public override void Clear()
 {
     this.dataGridView1.Columns.Clear();
     this._inited         = false;
     this._lib            = null;
     this._model          = null;
     this.lblLibPath.Text = null;
 }
Exemple #3
0
        public override void Predict(List <string> files, object model, int numofId)
        {
            //throw new NotImplementedException();
            this._model = model as PLSModel;
            if (this._model == null || files == null)
            {
                throw new ArgumentNullException("");
            }
            if (!this._inited)
            {
                if (this.dataGridView1.InvokeRequired)
                {
                    ThreadStart s = () => { this.init(this._model); };
                    this.dataGridView1.Invoke(s);
                }
                else
                {
                    this.init(this._model);
                }
            }
            var error_filelst = new List <string>();
            int rowNum        = 1;

            foreach (var f in files)
            {
                try
                {
                    var spec = new Spectrum(f);
                    var robj = this._model.Predict(spec);
                    if (this.dataGridView1.InvokeRequired)
                    {
                        ThreadStart s = () => { this.addRow(robj, spec, rowNum, numofId); };
                        this.dataGridView1.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
                                              ));
            }
        }
Exemple #4
0
        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (this.cheakSave())
            {
                return;
            }
            OpenFileDialog myOpenFileDialog = new OpenFileDialog();

            myOpenFileDialog.Filter           = string.Format("{1} (*.{0})|*.{0}", FileExtensionEnum.PLSBind, FileExtensionEnum.PLSBind.GetDescription());
            myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderMModel;
            if (myOpenFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this._model = BindModel.ReadModel <PLSModel>(myOpenFileDialog.FileName);
                if (this._model != null)
                {
                    if (this._model.LibBase == null || this._model.LibBase.Count == 0)
                    {
                        MessageBox.Show("该捆绑模型不含光谱库,不能修改!", "信息提示");
                    }
                    else
                    {
                        lblLibIntro.Text = this._model.ToString();
                    }

                    this._nodes.Clear();
                    foreach (var m in this._model.SubModels)
                    {
                        var step = 1;
                        var tag  = true;
                        if (m.LibBase == null || m.LibBase.Count == 0 || m.Trained)
                        {
                            step = 4;
                            tag  = false;
                        }

                        this._nodes.Add(new MyTreeNode()
                        {
                            IsFinished  = false,
                            ToolTipText = "双击可编辑子模型",
                            PLS         = new PLSFormContent()
                            {
                                ActiveStep      = step,
                                VResult         = null,
                                CVResult        = null,
                                Model           = m,
                                FlowPanelEnable = tag
                            }
                        });
                    }
                    this.treeInit();
                }
            }
        }
Exemple #5
0
        private void init(PLSModel m)
        {
            this.dataGridView1.Columns.Clear();
            this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "样本名称",
                Width      = 120
            });
            this.dataGridView1.Rows.Add("");
            int i = 1;

            foreach (var sm in m.SubModels)
            {
                this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
                {
                    HeaderText  = sm.Comp.Name,
                    ToolTipText = sm.Comp.Name,
                    Width       = 60,
                    Tag         = sm.Comp.Name
                });
                this.dataGridView1[i, 0].Value = sm.MethodNameString;
                i++;
            }


            if (this.ismix(this._model, this._lib))
            {
                foreach (var c in this._lib.Components)
                {
                    this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
                    {
                        HeaderText  = c.Name,
                        ToolTipText = c.Name,
                        Width       = 60,
                        Tag         = c.Name
                    });
                    // this.dataGridView1[i, 0].Value = sm.MethodNameString;
                    i++;
                }
            }
            this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            });

            this._inited = true;
        }
Exemple #6
0
 private void btnReset_Click(object sender, EventArgs e)
 {
     s1                    = null;
     s2                    = null;
     s3                    = null;
     this.lib              = null;
     this.model            = null;
     this.btnSpec1.Enabled = true;
     this.btnSpec2.Enabled = true;
     this.btnSpec3.Enabled = true;
     //this.btnCumpute.Enabled = false;
     this.btnLoadModel.Enabled = false;
     lblInfo.Visible           = false;
     this.drawchart();
     this.specGraph1.DrawSpec(new List <Spectrum>());
     this.specGridView1.Specs = null;
 }
Exemple #7
0
        private void init(PLSModel m)
        {
            this.dataGridView1.Columns.Clear();
            this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                HeaderText = "样本名称",
                Width      = 120
            });
            this.dataGridView1.Rows.Add("");
            int i = 1;

            foreach (var sm in m.SubModels)
            {
                this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
                {
                    HeaderText  = sm.Comp.Name,
                    ToolTipText = sm.Comp.Name,
                    Width       = 60,
                    Tag         = sm.Comp.Name
                });
                this.dataGridView1[i, 0].Value = string.Format("比例{0}", i);
                i++;
            }


            if (m.MixSpecs != null && m.MixSpecs.Count > 1)
            {
                foreach (var c in m.MixSpecs.First().Components)
                {
                    this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
                    {
                        HeaderText  = c.Name,
                        ToolTipText = c.Name,
                        Width       = 60,
                        Tag         = c.Name
                    });
                }
            }
            this.dataGridView1.Columns.Add(new DataGridViewTextBoxColumn()
            {
                AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
            });

            this._inited = true;
        }
Exemple #8
0
        private void btnLoadModel_Click(object sender, EventArgs e)
        {
            OpenFileDialog myOpenFileDialog = new OpenFileDialog();

            myOpenFileDialog.Filter           = string.Format("{0} (*.{1})|*.{1}", FileExtensionEnum.PLSBind.GetDescription(), FileExtensionEnum.PLSBind);
            myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderBlendMod;
            if (myOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    this._model = BindModel.ReadModel <PLSModel>(myOpenFileDialog.FileName);
                    if (this._model.SubModels.Count < 2)
                    {
                        MessageBox.Show("该捆绑模型不是混兑比例光谱的模型");
                        this._model = null;
                        return;
                    }

                    //验证是不是混兑模型
                    foreach (var m in this._model.SubModels)
                    {
                        if (m.Method != PLSMethodEnum.PLSMix)
                        {
                            MessageBox.Show("该捆绑模型不是混兑比例光谱的模型");
                            this._model = null;
                            return;
                        }
                    }

                    //设置按钮
                    this.btnAddFromLib.Enabled = true;
                    this.btnPredict.Enabled    = true;
                    this.btnSpec1.Enabled      = this._model.SubModels.Count > 0;
                    this.btnSpec2.Enabled      = this._model.SubModels.Count > 1;
                    this.btnSpec3.Enabled      = this._model.SubModels.Count > 2;
                }

                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    log.Error(ex);
                }
            }
        }
Exemple #9
0
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (this.dataGridView1.Rows.Count == 0)
            {
                return;
            }
            var model = new PLSModel();

            for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
            {
                var row = this.dataGridView1.Rows[i] as mydataRow;
                if (row != null)
                {
                    model.SubModels.Add(row.Model);
                }
            }

            SaveFileDialog mySaveFileDialog = new SaveFileDialog();

            mySaveFileDialog.Filter = string.Format("{1} (*.{0})|*.{0}",
                                                    FileExtensionEnum.PLSBind,
                                                    FileExtensionEnum.PLSBind.GetDescription());
            mySaveFileDialog.InitialDirectory = Busi.Common.Configuration.FolderMModel;
            if (mySaveFileDialog.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }
            model.FullPath   = mySaveFileDialog.FileName;
            model.LibBase    = null;
            model.CreateTime = DateTime.Now;
            model.Edited     = false;
            model.Trained    = true;
            if (model.Save())
            {
                MessageBox.Show("捆绑模型保存成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.Close();
            }
            else
            {
                MessageBox.Show("捆绑模型保存失败!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
Exemple #10
0
        private bool ismix(PLSModel model, SpecBase lib)
        {
            bool tag = true;

            if (model == null || lib == null)
            {
                return(false);
            }
            foreach (var m in model.SubModels)
            {
                if (m.Method == PLSMethodEnum.PLS1)
                {
                    tag = false;
                }
                if (lib.Specs.Where(d => d.Name == m.Comp.Name).Count() == 0)
                {
                    tag = false;
                }
            }
            return(tag);
        }
Exemple #11
0
        // [TestMethod]
        public void PLSTest()
        {
            var specbase = new SpecBase(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\crude.Lib");
            var pls      = new PLSModel();

            pls.LibBase = specbase;


            var m = new SubPLS1Model();

            m.ParentModel = pls;
            m.MaxFactor   = 6;
            m.LibBase     = specbase;
            m.Comp        = specbase.First().Components.First();
            m.Filters     = new List <IFilter>();
            m.Filters.Add(new Sgdiff(21, 2));
            m.Filters.Add(new SavitzkyGolay(5));


            var f3 = new VarRegionManu();

            f3.Xaxis = specbase.First().Data.X;
            var a = f3.Argus;

            a["Xaxis"].Value = f3.Xaxis;
            f3.XaxisRegion   = new System.Collections.Generic.List <RegionPoint>();
            f3.XaxisRegion.Add(new RegionPoint(4003, 4702));
            a["XaxisRegion"].Value = f3.XaxisRegion;
            f3.Argus = a;

            m.Filters.Add(f3);

            m.Train(specbase);


            var writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\b.mat");

            writer.WriteMatrix <double>(m.SubModel.Bias.ToColumnMatrix(), "b");
            writer.Close();

            writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Loads.mat");
            writer.WriteMatrix <double>(m.SubModel.Loads, "Loads");
            writer.Close();

            writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Score_Length.mat");
            writer.WriteMatrix <double>(m.SubModel.Score_Length.ToColumnMatrix(), "Score_Length");
            writer.Close();

            writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Scores.mat");
            writer.WriteMatrix <double>(m.SubModel.Scores, "Scores");
            writer.Close();

            writer = new MatlabMatrixWriter(@"F:\3506\15chemometrics\RIPP_DEMO\algorithm\原油测试数据\Weights.mat");
            writer.WriteMatrix <double>(m.SubModel.Weights, "Weights");
            writer.Close();

            var lst  = m.LibBase.Where(d => d.Usage == UsageTypeEnum.Validate);
            var rlst = new List <SubPLS1Result>();

            foreach (var s in lst)
            {
                rlst.Add(m.Predict(s));
            }
        }
Exemple #12
0
        private void btnLoadModel_Click(object sender, EventArgs e)
        {
            OpenFileDialog myOpenFileDialog = new OpenFileDialog();

            myOpenFileDialog.Filter           = string.Format("{0} (*.{1})|*.{1}", FileExtensionEnum.PLSBind.GetDescription(), FileExtensionEnum.PLSBind);
            myOpenFileDialog.InitialDirectory = Busi.Common.Configuration.FolderBlendMod;
            if (myOpenFileDialog.ShowDialog() == DialogResult.OK)
            {
                var m = BindModel.ReadModel <PLSModel>(myOpenFileDialog.FileName);
                if (m == null || lib == null)
                {
                    return;
                }
                if (m.SubModels.Count != this.lib.Components.Count)
                {
                    MessageBox.Show(string.Format("参与混兑计算的光谱数量为{0},加载的捆绑模型子模型数据为{1},不匹配。", this.lib.Components.Count, m.SubModels.Count));
                    return;
                }

                this.toolStrip2.Enabled   = false;
                this.btnLoadModel.Text    = "正在计算";
                this.progressBar1.Visible = true;
                Action a = () =>
                {
                    this.model          = Serialize.DeepClone <PLSModel>(m);
                    this.model.MixSpecs = new List <Spectrum>();
                    if (s1 != null)
                    {
                        this.model.MixSpecs.Add(s1);
                    }
                    if (s2 != null)
                    {
                        this.model.MixSpecs.Add(s2);
                    }
                    if (s3 != null)
                    {
                        this.model.MixSpecs.Add(s3);
                    }


                    int i = 0;
                    foreach (var sm in this.model.SubModels)
                    {
                        sm.Comp = this.lib.Components[i];
                        sm.Train(this.lib);
                        var cvlst = sm.CrossValidation(this.lib);
                        if (this.specGridView1.InvokeRequired)
                        {
                            ThreadStart s = () => { this.add(cvlst, i); };
                            this.specGridView1.Invoke(s);
                        }
                        else
                        {
                            this.add(cvlst, i);
                        }
                        i++;
                    }
                    if (this.toolStrip2.InvokeRequired)
                    {
                        ThreadStart s = () =>
                        {
                            this.progressBar1.Visible = false;
                            this.btnLoadModel.Text    = "应用模型";
                            this.toolStrip2.Enabled   = true;
                        };
                        this.toolStrip2.Invoke(s);
                    }
                    else
                    {
                        this.progressBar1.Visible = false;
                        this.btnLoadModel.Text    = "应用模型";
                        this.toolStrip2.Enabled   = true;
                    }
                };
                a.BeginInvoke(null, null);
            }
        }
Exemple #13
0
        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();
            }
        }