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); }
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("Модель задана некорректно"); } }