public List <SequenceObject> getSequencesList(int sequenceSize) { if (this.sequencesFolderPath == null) { return(null); } try { string[] files = Directory.GetFiles(this.sequencesFolderPath); if (files == null && files.Length == 0) { return(null); } List <SequenceObject> result = new List <SequenceObject>(); for (int i = 0; i <= files.Length; i++) { try {//Может вылететь если последовательность в файле недостаточной длины int[] seq = HMM_PSM.GetOutputSequence(files[i], sequenceSize); result.Add(new SequenceObject(files[i], seq)); } catch { //TODO do smth or change try to if } } return(result); } catch { return(null); } }
private void btOMCCalculateProbability_Click(object sender, EventArgs e) { if (lbOMCModelPath.Text != "" && lbOMCSequencePath.Text != "" && tbOMCSegmentLength.Text != "" && tbOMCSequenceLength.Text != "") { int segmentSize = Int32.Parse(tbOMCSegmentLength.Text); //добавить проверку int sequenceLength = Int32.Parse(tbOMCSequenceLength.Text); //добавить проверку HMM_QPN Model = new HMM_QPN(lbOMCModelPath.Text); if (Model.IsCorrect() == 1) { int[] res = new int[sequenceLength + 1]; try { res = HMM_PSM.GetOutputSequence(lbOMCSequencePath.Text, sequenceLength); } catch (Exception) { MessageBox.Show("Желаемая длина последовательности превышает размер файла"); return; } ModelObject model = new ModelObject(lbOMCModelPath.Text, Model); SequenceObject sequence = new SequenceObject(lbOMCSequencePath.Text, res); OneModelComputation computor = new OneModelComputation(model, sequence, segmentSize, sequenceLength); List <double> probabilities = computor.compute(); string s = "Model: " + model.ModelName + "\r\n Sequence: " + sequence.SequenceName + "\r\n Sequence length: " + sequenceLength + "\r\n Segment size: " + segmentSize + "\r\n"; for (int i = 0; i < probabilities.Count(); i++) { s += probabilities.ElementAt(i) + ","; } OutStreamer os = new OutStreamer("omc.txt", FileOpenMode.RewriteMode); os.StringToFile(s); if (saveFileDialogExperiment.ShowDialog() == DialogResult.OK) { StreamReader f = File.OpenText("omc.txt"); string Buf = f.ReadToEnd(); StreamWriter sw = new StreamWriter(File.Create(saveFileDialogExperiment.FileName)); sw.Write(Buf); sw.Close(); f.Close(); } } else { MessageBox.Show("Модель некорректна"); } } else { MessageBox.Show("Не все параметры заданы"); } }
public void GetOutputSequenceTest() { string filename = "H:/аспирантура/Programs/10.12.12/HSMPQApplication/1.txt"; // TODO: инициализация подходящего значения int length = 5; // TODO: инициализация подходящего значения int[] expected = { 0, 0, 0, 0, 0 }; // TODO: инициализация подходящего значения int[] actual; actual = HMM_PSM.GetOutputSequence(filename, length); for (int i = 0; i < actual.Length; i++) { Assert.AreEqual(expected[i], actual[i]); } }
private void btCalculateFerguson_Click(object sender, EventArgs e) { FergusonModel Model = new FergusonModel(lbModelFerguson.Text); if (Model.IsCorrect() == 1) { int smbnubmer = 10; if (tbSequenceLengthFerguson.Text != "") { try { smbnubmer = int.Parse(tbSequenceLengthFerguson.Text); } catch (Exception) { } } ; int[] res = new int[smbnubmer + 1]; try { res = HMM_PSM.GetOutputSequence(lbSequenceFerguson.Text, smbnubmer); } catch (Exception) { MessageBox.Show("Желаемая длина последовательности превышает размер файла"); return; } panel3.Enabled = false; LikelihoodFerguson lk = new LikelihoodFerguson(res, Model); tbProbabilityFerguson.Text = lk.FullProbability(res.Length - 1).ToString(); // tbProbabilityFerguson.Text = lk.Probability(res.Length - 1).ToString(); string s = ""; for (int i = 0; i < lk.alpha.GetLength(0); i++) { for (int j = 0; j < lk.alpha.GetLength(1); j++) { for (int k = 0; k < lk.alpha.GetLength(2); k++) { s += "alpha(" + i + ", " + j + ", " + k + ")=" + lk.alpha[i, j, k].ToString() + "\r\n"; } } } tbAlphaFerg.Text = s; } else { MessageBox.Show("Модель задана некорректно"); } }
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("Модель задана некорректно"); } }