private void buttonConvert_Click(object sender, EventArgs e) { if (!File.Exists(textBoxIndex.Text)) { MessageBox.Show("Please specify an index file."); return; } if (!File.Exists(textBoxSparseMatrix.Text)) { MessageBox.Show("Please specify a sparse matrix file."); return; } if (textBoxProjectDescription.Text.Length == 0) { MessageBox.Show("Please enter a simple project description."); return; } if (saveFileDialog1.ShowDialog() != DialogResult.Cancel) { PatternLabProject plp = new PatternLabProject(textBoxSparseMatrix.Text, textBoxIndex.Text, textBoxProjectDescription.Text); plp.Save(saveFileDialog1.FileName); MessageBox.Show("Project converted."); } }
private void buttonLoadPLP_Click(object sender, EventArgs e) { openFileDialog1.Filter = "PatternLab Project (*.plp)|*.plp"; openFileDialog1.FileName = ""; if (openFileDialog1.ShowDialog() != DialogResult.Cancel) { plp = new PatternLabProject(openFileDialog1.FileName); groupBoxStep2.Enabled = true; labelNoElements.Text = plp.MyIndex.AllNames.Count.ToString(); } }
private void buttonLoadPLP_Click(object sender, EventArgs e) { //Sparse Matrix Code openFileDialog1.Filter = "PatternLab project file (*.plp)|*.plp"; if (openFileDialog1.ShowDialog() != DialogResult.Cancel) { plp = new PatternLabProject(openFileDialog1.FileName); if (plp.MySparseMatrix.allDims().Count <= 2) { throw new Exception("The Anova test should only be used for experiments with at least 3 conditions"); } if (checkBoxTotalSignalNormalization.Checked) { plp.MySparseMatrix.totalSignalNormalization(); } buttonRecalculate.Enabled = true; buttonSavePlot.Enabled = true; Populate(); } }
private void MenuItemExporToPLP_Click(object sender, RoutedEventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.DefaultExt = ".txt"; sfd.Filter = "PatternLab Project (*.plp)|*.plp"; Nullable <bool> result = sfd.ShowDialog(); // Get the selected file name and display in a TextBox if (result == true) { SparseMatrixIndexParserV2 smi = new SparseMatrixIndexParserV2(); int counter = 0; List <FastaItem> orderedKeys = new List <FastaItem>(); foreach (KeyValuePair <FastaItem, List <PepQuant> > kvp in protPepDict) { if (kvp.Value.Count > IntegerUpDown.Value) { counter++; SparseMatrixIndexParserV2.Index i = new SparseMatrixIndexParserV2.Index(); i.ID = counter; i.Name = kvp.Key.SequenceIdentifier; i.Description = kvp.Key.Description; smi.Add(i); orderedKeys.Add(kvp.Key); } } SparseMatrix sm = new SparseMatrix(); sm.ClassDescriptionDictionary = new Dictionary <int, string>(); List <int> labels = Regex.Split(TextBoxClassLabel.Text, " ").Select(a => int.Parse(a)).ToList(); //Generate the dictionary for (int i = 0; i < labels.Count; i++) { if (labels[i] < 0) { continue; } //Create the dictionary for the class sm.ClassDescriptionDictionary.Add(i, (i).ToString()); List <int> dims = new List <int>(); List <double> values = new List <double>(); for (int j = 0; j < orderedKeys.Count; j++) { FastaItem fi = orderedKeys[j]; List <PepQuant> thePepQuants = protPepDict[fi]; double theIntensitySum = 0; foreach (PepQuant pq in thePepQuants) { theIntensitySum += pq.MyQuants.Sum(a => a.MarkerIntensities[i]); } if (theIntensitySum > 0) { dims.Add(j + 1); values.Add(theIntensitySum); } } sparseMatrixRow smr = new sparseMatrixRow(i, dims, values); sm.theMatrixInRows.Add(smr); } PatternLabProject plp = new PatternLabProject(sm, smi, "Isobaric Quant Project"); plp.Save(sfd.FileName); MessageBox.Show("PLP file was saved"); Console.WriteLine("PLP file was saved."); } }
private void ButtonLoad_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "PatternLab project file (*.plp)|*.plp"; ofd.FileName = ""; if (ofd.ShowDialog() == true) { //- do the work ButtonLoad.Content = "Working"; this.UpdateLayout(); TextBoxLegend.Clear(); TextBoxPatternLabProjectFile.Text = ofd.FileName; PatternLabProject plp = new PatternLabProject(ofd.FileName); plp.MySparseMatrix.UnsparseTheMatrix(); foreach (sparseMatrixRow unitSparseMatrixRow in plp.MySparseMatrix.theMatrixInRows) { unitSparseMatrixRow.Values = PatternTools.pTools.UnitVector(unitSparseMatrixRow.Values); } //Do the clustering SparseMatrix smCLuster = new SparseMatrix(); if ((bool)RadioKernelPCA.IsChecked) { double[,] sm = plp.MySparseMatrix.ToDoubleArrayMatrix(); IKernel kernel = null; //"Gaussian", "Linear", "Power", "Quadratic", "Sigmoid", "Spline" if (ComboBoxKPCAKernels.SelectedValue.Equals("Gaussian")) { kernel = new Gaussian(); } else if (ComboBoxKPCAKernels.SelectedValue.Equals("Linear")) { kernel = new Linear(); } else if (ComboBoxKPCAKernels.SelectedValue.Equals("Power")) { kernel = new Power(2); } else if (ComboBoxKPCAKernels.SelectedValue.Equals("Quadratic")) { kernel = new Quadratic(); } else if (ComboBoxKPCAKernels.SelectedValue.Equals("Sigmoid")) { kernel = new Sigmoid(); } else { kernel = new Spline(); } // Creates the Kernel Principal Component Analysis of the given data var kpca = new KernelPrincipalComponentAnalysis(sm, kernel); // Compute the Kernel Principal Component Analysis kpca.Compute(); // Creates a projection of the information double[,] components = kpca.Transform(sm, 2); for (int j = 0; j < components.GetLength(0); j++) { int l = plp.MySparseMatrix.theMatrixInRows[j].Lable; sparseMatrixRow smr = new sparseMatrixRow(l, new List<int>() { 0, 1 }, new List<double>() { components[j, 0], components[j, 1] }); smr.FileName = plp.MySparseMatrix.theMatrixInRows[j].FileName; smCLuster.addRow(smr); } smCLuster.ClassDescriptionDictionary = plp.MySparseMatrix.ClassDescriptionDictionary; } else { MDS2 mds2 = new MDS2(plp.MySparseMatrix); smCLuster = mds2.Converge(250, (double)DoubleUpDownSpringOutlier.Value); } Plot(smCLuster); ButtonLoad.Content = "Browse"; } }
public void Plot(List <TermScoreCalculator.TermScoreAnalysis> terms, PatternLabProject plp, int fontSize) { PlotModel MyModel = new PlotModel(); MyModel.Title = "Identification distribution along selected GO Terms"; var categoryAxis1 = new CategoryAxis(); categoryAxis1.Position = AxisPosition.Left; categoryAxis1.FontSize = fontSize; MyModel.Axes.Add(categoryAxis1); var linearAxis1 = new LinearAxis(); linearAxis1.Position = AxisPosition.Bottom; linearAxis1.FontSize = fontSize; MyModel.Axes.Add(linearAxis1); if (plp == null) { var barSeries1 = new BarSeries(); MyModel.Series.Add(barSeries1); foreach (var tsa in terms) { categoryAxis1.Labels.Add(tsa.TermName); barSeries1.Items.Add(new BarItem(tsa.ProteinIDs.Keys.Count, -1)); } } else { SparseMatrix sm = plp.MySparseMatrix.ShatterMatrixSum(); List <int> labels = sm.ExtractLabels(); Dictionary <int, BarSeries> barDict = new Dictionary <int, BarSeries>(); foreach (KeyValuePair <int, string> kvp in sm.ClassDescriptionDictionary) { BarSeries bs = new BarSeries(); bs.Title = kvp.Value; barDict.Add(kvp.Key, bs); MyModel.Series.Add(bs); } foreach (var tsa in terms) { int globalProtCounter = 0; Dictionary <int, BarItem> tmpDict = new Dictionary <int, BarItem>(); foreach (int l in labels) { sparseMatrixRow theRow = sm.theMatrixInRows.Find(a => a.Lable == l); int protCounter = 0; foreach (string p in tsa.ProteinIDs.Keys) { //Search for proteins in this class string cleanID = PatternTools.pTools.CleanPeptide(p, true); int index = plp.MyIndex.TheIndexes.FindIndex(a => a.Name.Equals(cleanID)); if (index > -1) { double value = theRow.Values[index]; if (value > 0) { protCounter++; globalProtCounter++; } else { Debug.Assert(true, "Protein not found"); } } } //We need to use this as a work around as there are some terms that get 0 prots. tmpDict.Add(l, new BarItem(protCounter, -1)); } if (globalProtCounter > 0) { categoryAxis1.Labels.Add(tsa.TermName); foreach (KeyValuePair <int, BarItem> kvp in tmpDict) { barDict[kvp.Key].Items.Add(kvp.Value); } } } } MyPlot.Model = MyModel; }
private async void Button_Click(object sender, RoutedEventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "PatternLab Project (*.plp)|*.plp"; ofd.FileName = ""; if (ofd.ShowDialog() != true) { return; } Dictionary <int, string> allClassDescriptions = new Dictionary <int, string>(); try { WaitWindowWPF.Visibility = Visibility.Visible; await Task.Run(() => { plp = new PatternLabProject(ofd.FileName); allClassDescriptions = plp.MySparseMatrix.ClassDescriptionDictionary; plp.MySparseMatrix.theMatrixInRows.Sort((a, b) => a.Lable.CompareTo(b.Lable)); //Verify if the sparse matrix classes are appropriate List <int> theLabels = plp.MySparseMatrix.ExtractLabels(); List <int> newLabels = new List <int>(); for (int i = 0; i < theLabels.Count; i++) { newLabels.Add(i + 1); } if (theLabels.Count != 2) { ClassSelection cs = new ClassSelection(theLabels, newLabels, plp.MySparseMatrix, true, 3); cs.ShowDialog(); } }); WaitWindowWPF.Visibility = Visibility.Collapsed; ComboBoxFonts.Text = "Times New Roman"; ButtonPlot.IsEnabled = true; ButtonSavePlot.IsEnabled = true; } catch { MessageBox.Show("Problems loading sparse matrix / index files"); return; } //Verify if the classes follow the pattern 1,2,3, else we should correct and warn the uses List <int> lables = plp.MySparseMatrix.ExtractLabels(); Dictionary <int, int> labelConversion = new Dictionary <int, int>(); Dictionary <int, string> newClassDescriptions = new Dictionary <int, string>(); for (int i = 0; i < lables.Count; i++) { labelConversion.Add(lables[i], i + 1); if (lables[i] != i + 1) { MessageBox.Show("Matrix lable " + lables[i] + " will be represented as group " + (i + 1)); } } foreach (sparseMatrixRow r in plp.MySparseMatrix.theMatrixInRows) { r.Lable = labelConversion[r.Lable]; } //---------------------------------- //Update the descriptions, in case they have the word group if (TextBoxC1Name.Text.Equals("Group") && lables.Count >= 1 && plp.MySparseMatrix.ClassDescriptionDictionary.ContainsKey(lables[0]) || allClassDescriptions.ContainsValue(TextBoxC1Name.Text)) { TextBoxC1Name.Text = plp.MySparseMatrix.ClassDescriptionDictionary[lables[0]]; } if (TextBoxC2Name.Text.Equals("Group") && lables.Count >= 2 && plp.MySparseMatrix.ClassDescriptionDictionary.ContainsKey(lables[1]) || allClassDescriptions.ContainsValue(TextBoxC2Name.Text)) { TextBoxC2Name.Text = plp.MySparseMatrix.ClassDescriptionDictionary[lables[1]]; } if (TextBoxC3Name.Text.Equals("Group") && lables.Count >= 3 && plp.MySparseMatrix.ClassDescriptionDictionary.ContainsKey(lables[2]) || allClassDescriptions.ContainsValue(TextBoxC3Name.Text)) { TextBoxC3Name.Text = plp.MySparseMatrix.ClassDescriptionDictionary[lables[2]]; } if (lables.Count != 2) { RadioButtonFilteringProbability.IsEnabled = false; } }
private void buttonParse_Click(object sender, EventArgs e) { openFileDialog1.Filter = "PatternLab Project (*.plp)|*.plp"; openFileDialog1.FileName = ""; if (openFileDialog1.ShowDialog() == DialogResult.Cancel) { return; } plp = new PatternLabProject(openFileDialog1.FileName); //To make sure we dont duplicate info in the table buttonParse.Text = "Wait!"; this.Update(); dataGridView1.Rows.Clear(); folds.Clear(); //try //{ //Calculate the pscores and folds ClassSelection cs; //Verify if the sparse matrix classes are appropriate List <int> theLabels = plp.MySparseMatrix.ExtractLabels(); buttonOptimizeFStringency.Enabled = true; if (theLabels.Count > 2 || (theLabels.Count == 2 && ((!theLabels.Contains(1) || !theLabels.Contains(-1))))) { if (radioButtonAC.Checked) { cs = new ClassSelection(theLabels, new List <int> { -1, 1 }, plp.MySparseMatrix, false, 2); } else if (radioButtonTTest.Checked) { cs = new ClassSelection(theLabels, new List <int> { -1, 1 }, plp.MySparseMatrix, true, 2); } else { cs = new ClassSelection(theLabels, new List <int> { -1, 1 }, plp.MySparseMatrix, true, 2); } cs.ShowDialog(); } if (theLabels.Count == 1 && !theLabels.Contains(-1) && radioButtonTTest.Checked) { cs = new ClassSelection(theLabels, new List <int> { -1 }, plp.MySparseMatrix, true, 1); cs.ShowDialog(); } //Refresh the labels theLabels = plp.MySparseMatrix.ExtractLabels(); //Compress the matrix if (radioButtonAC.Checked) { plp.MySparseMatrix.shatterMatrix(); } else if (radioButtonTTest.Checked) { //Eliminate dims that do not satisfy the minimum readings if (radioButtonAllClasses.Checked) { List <int> allDims = plp.MySparseMatrix.allDims(); List <int> dimsToEliminate = new List <int>(); foreach (int dim in allDims) { List <double> valuesT = plp.MySparseMatrix.ExtractDimValues(dim, 0, true); if (valuesT.Count < (double)numericUpDownMinReplicates.Value) { dimsToEliminate.Add(dim); } } foreach (int dim in dimsToEliminate) { plp.MySparseMatrix.eliminateDim(dim, 0, true); } } else if (radioButtonPerClass.Checked) { List <int> allDims = plp.MySparseMatrix.allDims(); List <int> allClasses = plp.MySparseMatrix.ExtractLabels(); List <int> dimsToEliminate = new List <int>(); foreach (int dim in allDims) { foreach (int label in allClasses) { List <double> valuesT = plp.MySparseMatrix.ExtractDimValues(dim, label, false); if (valuesT.Count < (double)numericUpDownMinReplicates.Value) { dimsToEliminate.Add(dim); } } } dimsToEliminate = dimsToEliminate.Distinct().ToList(); foreach (int dim in dimsToEliminate) { plp.MySparseMatrix.eliminateDim(dim, 0, true); } } } //matrix.saveMatrix(@"C:\Users\Paulo C Carvalho\Desktop\PatternLabExampleData\ExampleData\mstep2DimElimination.txt"); //Add pseudo spectral counts if (!radioButtonUsingLabeledData.Checked) { plp.MySparseMatrix.addPseudoCounts(1); } //Determine what normalization the user specified int normalization = 0; if (radioButtonNRowSigma.Checked) { normalization = 1; } else if (radioButtonNTS.Checked) { normalization = 2; } else if (radioButtonUsingLabeledData.Checked) { normalization = 3; } if (theLabels.Count <= 2) { XFoldCalculations fs = new XFoldCalculations(plp.MySparseMatrix); theData = fs.Xfold(normalization, radioButtonAC.Checked, (double)numericUpDownPValueLowerClip.Minimum); //Calculate all the folds folds.Clear(); foreach (var dataPoint in theData) { double correctedFoldChange; correctedFoldChange = dataPoint.CorrectedFold(); //keep track of fold Changes double foldChangeToAdd = correctedFoldChange; if (foldChangeToAdd > 3) { foldChangeToAdd = 3; } else if (foldChangeToAdd < -3) { foldChangeToAdd = -3; } folds.Add(correctedFoldChange); } //Populate Result Table //Fill the Data Table foreach (XFoldStruct ac in theData) { //Just in case if (ac.GPI == 0) { continue; } try { dataGridView1.Rows.Add( ac.GPI, plp.MyIndex.GetName(ac.GPI), Math.Round(ac.FoldChange, 2), Math.Round(ac.pValue, 4), ac.QuantitationPositiveClass, ac.QuantitationNegativeClass, plp.MyIndex.GetDescription(ac.GPI) ); } catch (Exception e2) { MessageBox.Show(e2.Message); } } } //Were done groupBoxSelectionParameters.Enabled = true; groupBoxFunctions.Enabled = true; //Make sure the canvas is clean //acPlotWPF1.dispose(); //Clear the labels labelBlueDots.Text = "0"; labelGreenDots.Text = "0"; labelRedDots.Text = "0"; labelTotalNumber.Text = "0"; //} //catch (Exception z) //{ // ErrorWindow ew = new ErrorWindow(z.GetBaseException().ToString()); // ew.ShowDialog(); //} buttonParse.Text = "Parse"; }
private void buttonGo_Click(object sender, EventArgs e) { //Verify write permission to directory if (!Directory.Exists(textBoxOutputDirectory.Text)) { MessageBox.Show("Please specify a valid output directory"); return; } if (!Regex.IsMatch(textBoxIsobaricMasses.Text, "[0-9]+ [0-9]+")) { MessageBox.Show("Please fill out the masses of the isobaric tags."); return; } if (!PatternTools.pTools.HasWriteAccessToFolder(textBoxOutputDirectory.Text)) { MessageBox.Show("Please specify a valid output directory"); return; } //Obtain class labels if (textBoxClassLabels.Text.Length == 0) { MessageBox.Show("Please input the class labels (eg., for iTRAQ 1,2,3,4"); return; } List <int> labels = Regex.Split(textBoxClassLabels.Text, " ").Select(a => int.Parse(a)).ToList(); //Obtain the isobaric masses string[] im = Regex.Split(textBoxIsobaricMasses.Text, " "); List <double> isobaricMasses = im.Select(a => double.Parse(a)).ToList(); if (labels.Count != isobaricMasses.Count) { MessageBox.Show("Please make sure that the class labels and isobaric masses match"); return; } buttonGo.Text = "Working..."; this.Update(); richTextBoxLog.Clear(); //-------------------------------------------- //Get signal from all signalAllNormalizationDictionary = new Dictionary <string, double[]>(); //if (false) FileInfo fi = new FileInfo(textBoxitraqSEPro.Text); bool extractSignal = false; ResultPackage rp = null; if (checkBoxNormalizationChannelSignal.Checked) { //We should get the MS infor and merge it the the sepro package if (fi.Extension.Equals(".sepr")) { rp = ResultPackage.Load(textBoxitraqSEPro.Text); extractSignal = true; } List <FileInfo> rawFiles = fi.Directory.GetFiles("*.RAW").ToList(); foreach (FileInfo rawFile in rawFiles) { Console.WriteLine("Extracting data for " + rawFile.Name); PatternTools.RawReader.RawReaderParams rParams = new PatternTools.RawReader.RawReaderParams(); rParams.ExtractMS1 = false; rParams.ExtractMS2 = true; rParams.ExtractMS3 = false; PatternTools.RawReader.Reader reader = new PatternTools.RawReader.Reader(rParams); List <MSLight> theMS2 = reader.GetSpectra(rawFile.FullName, new List <int>(), false); theMS2.RemoveAll(a => a.Ions == null); double [] totalSignal = new double[isobaricMasses.Count]; List <SQTScan> theScans = null; //Update the sepro result package with the signal if (extractSignal) { //Get all the scans from this file string rawName = rawFile.Name.Substring(0, rawFile.Name.Length - 4); theScans = rp.MyProteins.AllSQTScans.FindAll(a => a.FileName.Substring(0, a.FileName.Length - 4).Equals(rawName)); } foreach (MSLight ms in theMS2) { double[] thisQuantitation = GetIsobaricSignal(ms.Ions, isobaricMasses); if (extractSignal) { SQTScan scn = theScans.Find(a => a.ScanNumber == ms.ScanNumber); if (scn != null) { scn.MSLight = ms; scn.MSLight.Ions.RemoveAll(a => a.MZ > 400); } } for (int i = 0; i < thisQuantitation.Length; i++) { totalSignal[i] += thisQuantitation[i]; } } string theName = rawFile.Name.Substring(0, rawFile.Name.Length - 3); theName += "sqt"; signalAllNormalizationDictionary.Add(theName, totalSignal); } } Console.WriteLine("Loading SEPro File"); if (!File.Exists(textBoxitraqSEPro.Text)) { MessageBox.Show("Unable to find SEPro file"); return; } #region Load the spero or pepexplorer file theScansToAnalyze = new List <SQTScan>(); List <FastaItem> theFastaItems = new List <FastaItem>(); if (fi.Extension.Equals(".sepr")) { Console.WriteLine("Loading SEPro file"); if (!extractSignal) { rp = ResultPackage.Load(textBoxitraqSEPro.Text); } rp.MyProteins.AllSQTScans.RemoveAll(a => a.MSLight == null); theScansToAnalyze = rp.MyProteins.AllSQTScans; Console.WriteLine("Done reading SEPro result"); theFastaItems = rp.MyProteins.MyProteinList.Select(a => new FastaItem(a.Locus, a.Sequence, a.Description)).ToList(); } else if (fi.Extension.Equals(".mpex")) { Console.WriteLine("Loading PepExplorer file...."); PepExplorer2.Result2.ResultPckg2 result = PepExplorer2.Result2.ResultPckg2.DeserializeResultPackage(textBoxitraqSEPro.Text); theFastaItems = result.MyFasta; theScansToAnalyze = new List <SQTScan>(); foreach (PepExplorer2.Result2.AlignmentResult al in result.Alignments) { foreach (var dnr in al.DeNovoRegistries) { SQTScan sqt = new SQTScan(); sqt.ScanNumber = dnr.ScanNumber; sqt.FileName = dnr.FileName; sqt.PeptideSequence = dnr.PtmSequence; theScansToAnalyze.Add(sqt); } } //And now we need to retrieve the mass spectra. For this, the raw files should be inside the directory containing the mpex file List <string> rawFiles = theScansToAnalyze.Select(a => a.FileName).Distinct().ToList(); for (int i = 0; i < rawFiles.Count; i++) { rawFiles[i] = rawFiles[i].Remove(rawFiles[i].Length - 3, 3); rawFiles[i] = rawFiles[i] += "raw"; } foreach (string fn in rawFiles) { Console.WriteLine("Retrieving spectra for file: " + fn); ParserUltraLightRAW parser = new ParserUltraLightRAW(); string tmpFile = fn.Substring(0, fn.Length - 3); List <SQTScan> scansForThisFile = theScansToAnalyze.FindAll(a => Regex.IsMatch(tmpFile, a.FileName.Substring(0, a.FileName.Length - 3), RegexOptions.IgnoreCase)).ToList(); List <int> scnNumbers = scansForThisFile.Select(a => a.ScanNumber).ToList(); FileInfo theInputFile = new FileInfo(textBoxitraqSEPro.Text); List <MSUltraLight> theSpectra = parser.ParseFile(theInputFile.DirectoryName + "/" + fn, -1, 2, scnNumbers); foreach (SQTScan sqt in scansForThisFile) { MSUltraLight spec = theSpectra.Find(a => a.ScanNumber == sqt.ScanNumber); sqt.MSLight = new MSLight(); sqt.MSLight.MZ = spec.Ions.Select(a => (double)a.Item1).ToList(); sqt.MSLight.Intensity = spec.Ions.Select(a => (double)a.Item2).ToList(); } Console.WriteLine("\tDone processing this file."); } } else { throw new Exception("This file format is not supported."); } #endregion //Obtaining multiplexed spectra SEProQ.IsobaricQuant.YadaMultiplexCorrection.YMC ymc = null; if (textBoxCorrectedYadaDirectory.Text.Length > 0) { Console.WriteLine("Reading Yada results"); ymc = new IsobaricQuant.YadaMultiplexCorrection.YMC(new DirectoryInfo(textBoxCorrectedYadaDirectory.Text)); Console.WriteLine("Done loading Yada results"); } //Remove multiplexed spectra from sepro results if (textBoxCorrectedYadaDirectory.Text.Length > 0) { int removedCounter = 0; foreach (KeyValuePair <string, List <int> > kvp in ymc.fileNameScanNumberMultiplexDictionary) { Console.WriteLine("Removing multiplexed spectra for file :: " + kvp.Key); richTextBoxLog.AppendText("Removing multiplexed spectra for file :: " + kvp.Key + "\n"); string cleanName = kvp.Key.Substring(0, kvp.Key.Length - 4); cleanName += ".sqt"; foreach (int scnNo in kvp.Value) { int index = theScansToAnalyze.FindIndex(a => a.ScanNumber == scnNo && a.FileName.Equals(cleanName)); if (index >= 0) { Console.Write(theScansToAnalyze[index].ScanNumber + " "); richTextBoxLog.AppendText(theScansToAnalyze[index].ScanNumber + " "); removedCounter++; theScansToAnalyze.RemoveAt(index); } } Console.WriteLine("\n"); richTextBoxLog.AppendText("\n"); } Console.WriteLine("Done removing multiplexed spectra :: " + removedCounter); } PatternTools.CSML.Matrix correctionMatrix = new PatternTools.CSML.Matrix(); if (checkBoxApplyPurityCorrection.Checked) { List <List <double> > correctionData = GetPurityCorrectionsFromForm(); correctionMatrix = IsobaricQuant.IsobaricImpurityCorrection.GenerateInverseCorrectionMatrix(correctionData); } //-------------------------------------------------------------------------------------------------------------------- //Prepare normalization Dictionary signalIdentifiedNormalizationDictionary = new Dictionary <string, double[]>(); List <string> fileNames = theScansToAnalyze.Select(a => a.FileName).Distinct().ToList(); foreach (string fileName in fileNames) { signalIdentifiedNormalizationDictionary.Add(fileName, new double[isobaricMasses.Count]); } //------------------------------------- //If necessary, correct for impurity and feed global signal dictionary foreach (SQTScan scn in theScansToAnalyze) { double[] thisQuantitation = GetIsobaricSignal(scn.MSLight.Ions, isobaricMasses); double maxSignal = thisQuantitation.Max(); //We can only correct for signal for those that have quantitation values in all places if (checkBoxApplyPurityCorrection.Checked && (thisQuantitation.Count(a => a > maxSignal * (double)numericUpDownIonCountThreshold.Value) == isobaricMasses.Count)) { thisQuantitation = IsobaricQuant.IsobaricImpurityCorrection.CorrectForSignal(correctionMatrix, thisQuantitation).ToArray(); } if (checkBoxNormalizationChannelSignal.Checked) { for (int k = 0; k < thisQuantitation.Length; k++) { signalIdentifiedNormalizationDictionary[scn.FileName][k] += thisQuantitation[k]; } } scn.Quantitation = new List <List <double> >() { thisQuantitation.ToList() }; } //And now normalize ------------------- if (checkBoxNormalizationChannelSignal.Checked) { Console.WriteLine("Performing channel signal normalization for " + theScansToAnalyze.Count + " scans."); foreach (SQTScan scn2 in theScansToAnalyze) { for (int m = 0; m < isobaricMasses.Count; m++) { scn2.Quantitation[0][m] /= signalIdentifiedNormalizationDictionary[scn2.FileName][m]; } if (scn2.Quantitation[0].Contains(double.NaN)) { Console.WriteLine("Problems on signal of scan " + scn2.FileNameWithScanNumberAndChargeState); } } } comboBoxSelectFileForGraphs.Items.Clear(); foreach (string file in signalIdentifiedNormalizationDictionary.Keys.ToList()) { comboBoxSelectFileForGraphs.Items.Add(file); } tabControlMain.SelectedIndex = 1; if (radioButtonAnalysisPeptideReport.Checked) { //Peptide Analysis //Write Peptide Analysis StreamWriter sw = new StreamWriter(textBoxOutputDirectory.Text + "/" + "PeptideQuantitationReport.txt"); //Eliminate problematic quants int removed = theScansToAnalyze.RemoveAll(a => Object.ReferenceEquals(a.Quantitation, null)); Console.WriteLine("Problematic scans removed: " + removed); var pepDic = from scn in theScansToAnalyze group scn by scn.PeptideSequenceCleaned into groupedSequences select new { PeptideSequence = groupedSequences.Key, TheScans = groupedSequences.ToList() }; foreach (var pep in pepDic) { sw.WriteLine("Peptide:" + pep.PeptideSequence + "\tSpecCounts:" + pep.TheScans.Count); foreach (SQTScan sqt in pep.TheScans) { sw.WriteLine(sqt.FileNameWithScanNumberAndChargeState + "\t" + string.Join("\t", sqt.Quantitation[0])); } } //And now write the Fasta sw.WriteLine("#Fasta Items"); foreach (FastaItem fastaItem in theFastaItems) { sw.WriteLine(">" + fastaItem.SequenceIdentifier + " " + fastaItem.Description); sw.WriteLine(fastaItem.Sequence); } sw.Close(); } else { rp = ResultPackage.Load(textBoxitraqSEPro.Text); //Peptide Level if (true) { PatternTools.SparseMatrixIndexParserV2 ip = new SparseMatrixIndexParserV2(); List <int> allDims = new List <int>(); List <PeptideResult> peptides = rp.MyProteins.MyPeptideList; if (checkBoxOnlyUniquePeptides.Checked) { int removedPeptides = peptides.RemoveAll(a => a.MyMapableProteins.Count > 1); Console.WriteLine("Removing {0} peptides for not being unique.", removedPeptides); } for (int i = 0; i < peptides.Count; i++) { SparseMatrixIndexParserV2.Index index = new SparseMatrixIndexParserV2.Index(); index.Name = peptides[i].PeptideSequence; index.Description = string.Join(" ", peptides[i].MyMapableProteins); index.ID = i; ip.Add(index, true); allDims.Add(i); } SparseMatrix sm = new SparseMatrix(); List <int> dims = ip.allIDs(); for (int l = 0; l < labels.Count; l++) { if (labels[l] < 0) { continue; } sparseMatrixRow smr = new sparseMatrixRow(labels[l]); List <double> values = new List <double>(dims.Count); List <int> dimsWithValues = new List <int>(); foreach (int d in dims) { List <SQTScan> scns = peptides[d].MyScans.FindAll(a => !object.ReferenceEquals(a.Quantitation, null)); if (scns.Count > 0) { double signalSum = scns.FindAll(a => !double.IsNaN(a.Quantitation[0][l])).Sum(a => a.Quantitation[0][l]); values.Add(signalSum); dimsWithValues.Add(d); } } smr.Dims = dimsWithValues; smr.Values = values; smr.FileName = isobaricMasses[l].ToString(); sm.addRow(smr); } PatternLabProject plp = new PatternLabProject(sm, ip, "IsobaricQuant"); plp.Save(textBoxOutputDirectory.Text + "/MyPatternLabProjectPeptides.plp"); } //Protein Level if (true) { //Generate Index PatternTools.SparseMatrixIndexParserV2 ip = new SparseMatrixIndexParserV2(); List <MyProtein> theProteins = rp.MyProteins.MyProteinList; if (checkBoxOnlyUniquePeptides.Checked) { int removedProteins = theProteins.RemoveAll(a => !a.PeptideResults.Exists(b => b.NoMyMapableProteins == 1)); Console.WriteLine("{0} removed proteins for not having unique peptides", removedProteins); } for (int i = 0; i < theProteins.Count; i++) { SparseMatrixIndexParserV2.Index index = new SparseMatrixIndexParserV2.Index(); index.ID = i; index.Name = theProteins[i].Locus; index.Description = theProteins[i].Description; ip.Add(index, false); } //SparseMatrix SparseMatrix sm = new SparseMatrix(); List <int> dims = ip.allIDs(); for (int l = 0; l < labels.Count; l++) { if (labels[l] < 0) { continue; } if (!sm.ClassDescriptionDictionary.ContainsKey(labels[l])) { sm.ClassDescriptionDictionary.Add(labels[l], labels[l].ToString()); } sparseMatrixRow smr = new sparseMatrixRow(labels[l]); List <double> values = new List <double>(dims.Count); List <int> dimsToInclude = new List <int>(); foreach (int d in dims) { double signalSum = 0; List <PeptideResult> thePeptides = theProteins[d].PeptideResults; if (checkBoxOnlyUniquePeptides.Checked) { thePeptides.RemoveAll(a => a.MyMapableProteins.Count > 1); } foreach (PeptideResult pr in thePeptides) { List <SQTScan> scns = pr.MyScans.FindAll(a => !object.ReferenceEquals(a.Quantitation, null)); foreach (SQTScan sqt in scns) { if (!double.IsNaN(sqt.Quantitation[0][l]) && !double.IsInfinity(sqt.Quantitation[0][l])) { signalSum += sqt.Quantitation[0][l]; } } } if (signalSum > 0) { dimsToInclude.Add(d); values.Add(signalSum); } else { Console.WriteLine("No signal found for " + theProteins[d].Locus + " on marker " + l); } } smr.Dims = dims; smr.Values = values; smr.FileName = isobaricMasses[l].ToString(); sm.addRow(smr); } PatternLabProject plp = new PatternLabProject(sm, ip, "IsobaricQuant"); plp.Save(textBoxOutputDirectory.Text + "/MyPatternLabProjectProteins.plp"); } } comboBoxSelectFileForGraphs.Enabled = true; tabControlMain.SelectedIndex = 2; Console.WriteLine("Done"); buttonGo.Text = "Generate Report"; }
public void ParseTrendQuestACFoldOrIndex(string fileName) { FileInfo fi = new FileInfo(fileName); if (fi.Extension.Equals(".plp")) { MyPatternLabProject = new PatternLabProject(fileName); foreach (var i in MyPatternLabProject.MyIndex.TheIndexes) { theResults.Add(i.Name, 1); AddProtein(i.Name, i.Description); } } else { StreamReader sr = new StreamReader(fileName); List <string> duplicateKeys = new List <string>(); //Used for debugging string read; Regex tabSpliter = new Regex(@"\t"); theResults.Clear(); //We first need to know if we are dealing with an ACFold Report or Index file //We believe that the indexFile contains no "#" bool indexFile = true; bool skip = false; int lineCounter = 0; while ((read = sr.ReadLine()) != null) { lineCounter++; if (read.StartsWith("#") || read.Length == 0) { //This is a comment if (!skip) { indexFile = false; } if (read.StartsWith("#TrendQuest")) { indexFile = true; //It is a trendquest file skip = true; } } else { string[] theLine = tabSpliter.Split(read); if (indexFile) { //Make sure we are not duplicating keys! if (theResults.ContainsKey(theLine[1])) { duplicateKeys.Add(theLine[1]); } else { theResults.Add(theLine[1], 1); AddProtein(theLine[1], theLine[2]); } } else { //We are dealing with an ACFold report if (read.StartsWith("#") || read.Length == 0 || read.StartsWith("\t") || read.StartsWith("\"")) { continue; } theResults.Add(theLine[0], double.Parse(theLine[1])); AddProtein(theLine[0], theLine[6]); } } } sr.Close(); } }
private void buttonLoad_Click(object sender, EventArgs e) { openFileDialog1.Filter = "PatternLab Project (*.plp)|*.plp"; openFileDialog1.FileName = ""; if (openFileDialog1.ShowDialog() == DialogResult.Cancel) { return; } Dictionary <int, string> allClassDescriptions = new Dictionary <int, string>(); try { plp = new PatternLabProject(openFileDialog1.FileName); allClassDescriptions = plp.MySparseMatrix.ClassDescriptionDictionary; plp.MySparseMatrix.theMatrixInRows.Sort((a, b) => a.Lable.CompareTo(b.Lable)); //Verify if the sparse matrix classes are appropriate List <int> theLabels = plp.MySparseMatrix.ExtractLabels(); List <int> newLabels = new List <int>(); for (int i = 0; i < theLabels.Count; i++) { newLabels.Add(i + 1); } if (theLabels.Count != 2 || (theLabels.Count == 2 && (!theLabels.Contains(1) || !theLabels.Contains(-1)))) { ClassSelection cs = new ClassSelection(theLabels, newLabels, plp.MySparseMatrix, true, 3); cs.ShowDialog(); } groupBoxPlotOptions.Enabled = true; } catch { MessageBox.Show("Problems loading sparse matrix / index files"); return; } //Verify if the classes follow the pattern 1,2,3, else we should correct and warn the uses List <int> lables = plp.MySparseMatrix.ExtractLabels(); Dictionary <int, int> labelConversion = new Dictionary <int, int>(); Dictionary <int, string> newClassDescriptions = new Dictionary <int, string>(); for (int i = 0; i < lables.Count; i++) { labelConversion.Add(lables[i], i + 1); if (lables[i] != i + 1) { MessageBox.Show("Matrix lable " + lables[i] + " will be represented as group " + (i + 1)); } } foreach (sparseMatrixRow r in plp.MySparseMatrix.theMatrixInRows) { r.Lable = labelConversion[r.Lable]; } //---------------------------------- //Update the descriptions, in case they have the word group if (textBoxC1Name.Text.Equals("Group") && lables.Count >= 1 && plp.MySparseMatrix.ClassDescriptionDictionary.ContainsKey(lables[0]) || allClassDescriptions.ContainsValue(textBoxC1Name.Text)) { textBoxC1Name.Text = plp.MySparseMatrix.ClassDescriptionDictionary[lables[0]]; //textBoxC1Name.Text = sMatrix.ClassDescriptionDictionary[1]; } if (textBoxC2Name.Text.Equals("Group") && lables.Count >= 2 && plp.MySparseMatrix.ClassDescriptionDictionary.ContainsKey(lables[1]) || allClassDescriptions.ContainsValue(textBoxC2Name.Text)) { textBoxC2Name.Text = plp.MySparseMatrix.ClassDescriptionDictionary[lables[1]]; //textBoxC2Name.Text = sMatrix.ClassDescriptionDictionary[2]; } if (textBoxC3Name.Text.Equals("Group") && lables.Count >= 3 && plp.MySparseMatrix.ClassDescriptionDictionary.ContainsKey(lables[2]) || allClassDescriptions.ContainsValue(textBoxC3Name.Text)) { textBoxC3Name.Text = plp.MySparseMatrix.ClassDescriptionDictionary[lables[2]];; //textBoxC3Name.Text = sMatrix.ClassDescriptionDictionary[3]; } if (lables.Count != 2) { radioButtonFilteringProbability.Enabled = false; } }