Exemplo n.º 1
0
        public List <CrossModelComputationResultItem> compute()
        {
            List <CrossModelComputationResultItem> result = new List <CrossModelComputationResultItem>();

            if ((segmentSize <= 0) || (modelsList == null) || (modelsList.Count == 0) || (sequencesList == null) || (sequencesList.Count == 0))
            {
                return(null);
            }
            foreach (ModelObject model in modelsList)
            {
                foreach (SequenceObject o in sequencesList)
                {
                    try
                    {
                        if (model.Model != null && o.Sequence != null)
                        {
                            LikelihoodSplit ls    = new LikelihoodSplit(segmentSize);
                            double[]        value = ls.calculateSplitedLikelihood(model.Model, o.Sequence);
                            result.Add(new CrossModelComputationResultItem(model.ModelName, o.SequenceName, averageProbability(value)));
                        }
                        else
                        {
                            result.Add(new CrossModelComputationResultItem(model.ModelName, o.SequenceName, -1));
                        }
                    }
                    catch
                    {
                        result.Add(new CrossModelComputationResultItem(model.ModelName, o.SequenceName, -1));
                    }
                }
            }
            return(result);
        }
Exemplo n.º 2
0
        private void CountProbBtn_Click(object sender, EventArgs e)
        {
            HMM_QPN Model = new HMM_QPN(label1.Text);

            if (Model.IsCorrect() == 1)
            {
                int smbnubmer = 10;
                if (textBox2.Text != "")
                {
                    try
                    {
                        smbnubmer = int.Parse(textBox2.Text);
                    }
                    catch (Exception)
                    {
                    }
                }
                ;
                int[] res = new int[smbnubmer + 1];
                try
                {
                    res = HMM_PSM.GetOutputSequence(label2.Text, smbnubmer);
                }
                catch (Exception)
                {
                    MessageBox.Show("Желаемая длина последовательности превышает размер файла");
                    return;
                }
                panel3.Enabled = false;

                if (radioButton1.Checked)
                {
                    //try
                    //{
                    Likelihood lk = new Likelihood(res, Model);
                    //label3.Text = lk.Probability(res.Length - 1).ToString();
                    label3.Text = lk.FullProbability(res.Length - 1).ToString();

                    //}
                    //catch (Exception)
                    //    { MessageBox.Show("В процессе расчета возникла ошибка!"); };
                    panel3.Enabled = true;
                }
                else
                {
                    if (radioButton2.Checked)
                    {
                        LikelihoodSimple lk = new LikelihoodSimple(res, Model);
                        //label3.Text = lk.Probability(res.Length - 1).ToString();
                        label3.Text    = lk.Probability(res.Length - 1).ToString();
                        panel3.Enabled = true;
                    }
                    else
                    {
                        if (tbSegmentNumber.Text != "")
                        {
                            int segment_size = 0;
                            if (Int32.TryParse(tbSegmentNumber.Text, out segment_size))
                            {
                                LikelihoodSplit ls     = new LikelihoodSplit(segment_size);
                                double []       result = ls.calculateSplitedLikelihood(Model, res);
                                double          total  = 0;
                                tbSplitResultDetails.Text = "";
                                for (int i = 0; i < result.Length; i++)
                                {
                                    tbSplitResultDetails.Text += "P[O(" + i * segment_size + "," + ((i + 1) * segment_size) + ")] = " + result[i] + "\r\n";
                                    total += result[i];
                                }
                                label3.Text    = (total / result.Length).ToString();
                                panel3.Enabled = true;
                            }
                            else
                            {
                                MessageBox.Show("Размер сегмента разбиения должен быть целым");
                            }
                        }
                        else
                        {
                            MessageBox.Show("Задайте размер сегмента разбиения");
                        }
                    }
                }
            }
            else
            {
                MessageBox.Show("Модель задана некорректно");
            }
        }