Beispiel #1
0
        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();
            }
        }
Beispiel #3
0
        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();
            }
        }
Beispiel #4
0
        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;
        }
Beispiel #7
0
        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;
            }
        }
Beispiel #8
0
        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";
        }
Beispiel #9
0
        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";
        }
Beispiel #10
0
        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();
            }
        }
Beispiel #11
0
        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;
            }
        }