예제 #1
0
        private void ExportImport(ResultsTestDocumentContainer docContainer, string resultsPath)
        {
            var optRegression = docContainer.Document.Settings.TransitionSettings.Prediction.CollisionEnergy;
            int optSteps      = optRegression.StepCount * 2 + 1;
            int optSteps1     = optSteps - 1; // First precursor is below 10 volts CE for 1 step
            int optSteps2     = optSteps - 3; // Second precursor is below 10 volts CE for 3 steps

            // First export
            var exporter = new AbiMassListExporter(docContainer.Document)
            {
                OptimizeType      = ExportOptimize.CE,
                OptimizeStepCount = optRegression.StepCount,
                OptimizeStepSize  = optRegression.StepSize
            };
            string tranListPath = Path.ChangeExtension(docContainer.DocumentFilePath, TextUtil.EXT_CSV);

            exporter.Export(tranListPath);
            // Make sure line count matches expectations for steps below 10 volts CE
            Assert.AreEqual(5 * optSteps1 + 5 * optSteps2, File.ReadAllLines(tranListPath).Length);

            // Then import
            var resultsUri      = new MsDataFilePath(resultsPath);
            var chromSet        = new ChromatogramSet("Optimize", new[] { resultsUri }, Annotations.EMPTY, optRegression);
            var measuredResults = new MeasuredResults(new[] { chromSet });

            docContainer.ChangeMeasuredResults(measuredResults, 2, optSteps1 + optSteps2, 5 * optSteps1 + 5 * optSteps2);

            // Check expected optimization data with missing values for steps below 10 volts CE
            int expectedMissingSteps = optSteps - optSteps1;

            foreach (var nodeGroup in docContainer.Document.MoleculeTransitionGroups)
            {
                foreach (var nodeTran in nodeGroup.Transitions)
                {
                    Assert.IsTrue(nodeTran.HasResults, "No results for transition Mz: {0}", nodeTran.Mz);
                    Assert.IsNotNull(nodeTran.Results[0]);
                    Assert.AreEqual(optSteps, nodeTran.Results[0].Count);
                    for (int i = 0; i < optSteps; i++)
                    {
                        if (i < expectedMissingSteps)
                        {
                            Assert.IsTrue(nodeTran.Results[0][i].IsEmpty);
                        }
                        else
                        {
                            Assert.IsFalse(nodeTran.Results[0][i].IsEmpty);
                        }
                    }
                }

                expectedMissingSteps = optSteps - optSteps2;
            }
        }
예제 #2
0
        protected override void WriteTransition(TextWriter writer,
                                                XmlFastaSequence sequence,
                                                XmlPeptide peptide,
                                                XmlTransition transition)
        {
            char separator = TextUtil.GetCsvSeparator(_cultureInfo);

            writer.Write(transition.PrecursorMz.ToString(_cultureInfo));
            writer.Write(separator);
            writer.Write(transition.ProductMz.ToString(_cultureInfo));
            writer.Write(separator);
            if (MethodType == ExportMethodType.Standard)
            {
                writer.Write(Math.Round(DwellTime, 2).ToString(_cultureInfo));
            }
            else
            {
                if (!peptide.PredictedRetentionTime.HasValue)
                {
                    throw new InvalidOperationException(Resources.XmlThermoMassListExporter_WriteTransition_Attempt_to_write_scheduling_parameters_failed);
                }
                writer.Write(peptide.PredictedRetentionTime.Value.ToString(_cultureInfo));
            }
            writer.Write(separator);

            // Write special ID for ABI software
            var    fastaSequence       = new FastaSequence(sequence.Name, sequence.Description, null, peptide.Sequence);
            var    newPeptide          = new Peptide(fastaSequence, peptide.Sequence, 0, peptide.Sequence.Length, peptide.MissedCleavages);
            var    nodePep             = new PeptideDocNode(newPeptide);
            string modifiedPepSequence = AbiMassListExporter.GetSequenceWithModsString(nodePep, _document.Settings); // Not L10N;

            string extPeptideId = string.Format("{0}.{1}.{2}.{3}",                                                   // Not L10N
                                                sequence.Name,
                                                modifiedPepSequence,
                                                GetTransitionName(transition),
                                                "light"); // Not L10N : file format

            writer.WriteDsvField(extPeptideId, separator);
            writer.Write(separator);
            writer.Write(Math.Round(transition.DeclusteringPotential ?? 0, 1).ToString(_cultureInfo));

            writer.Write(separator);
            writer.Write(Math.Round(transition.CollisionEnergy, 1).ToString(_cultureInfo));


            writer.WriteLine();
        }
예제 #3
0
        protected override DataObject GetNodeData()
        {
            FastaSequence fastaSeq = DocNode.Id as FastaSequence;

            if (fastaSeq == null)
            {
                return(base.GetNodeData());
            }

            DataObject data      = new DataObject();
            string     fastaText = fastaSeq.FastaFileText;

            // If protein has been renamed in the UI
            if (!Equals(DocNode.Name, fastaSeq.Name))
            {
                int oldNameLen = (fastaSeq.Name != null ? fastaSeq.Name.Length : 0);
                fastaText = @">" + DocNode.Name + fastaText.Substring(oldNameLen + 1);
            }
            data.SetData(DataFormats.Text, fastaText);

            var sb = new StringBuilder();

            sb.Append(@"<b>").Append(DocNode.Name).Append(@"</b> ");
            sb.Append(@"<i>");
            if (string.IsNullOrEmpty(DocNode.Description)) // CONSIDER bspratt - a more complete set of data here, maybe - accession etc
            {
                sb.AppendLine(@"<br/>");
            }
            else
            {
                foreach (string desc in Descriptions)
                {
                    sb.Append(desc).AppendLine(@"<br/>");
                }
            }
            sb.Append(@"</i>");

            using (var peptides = GetChoices(true).GetEnumerator())
            {
                HashSet <DocNode> peptidesChosen = new HashSet <DocNode>(Chosen);
                PeptideDocNode    nodePep        = (PeptideDocNode)(peptides.MoveNext() ? peptides.Current : null);
                bool chosen = (nodePep != null && peptidesChosen.Contains(nodePep));

                bool   inPeptide = false;
                string aa        = fastaSeq.Sequence;
                for (int i = 0; i < aa.Length; i++)
                {
                    if (nodePep != null)
                    {
                        while (nodePep != null && i >= nodePep.Peptide.End)
                        {
                            nodePep = (PeptideDocNode)(peptides.MoveNext() ? peptides.Current : null);
                            if (nodePep != null)
                            {
                                bool chosenNew = peptidesChosen.Contains(nodePep);
                                // Need a new font tag, if the chosen state is changing
                                if (chosenNew != chosen)
                                {
                                    sb.Append(@"</font>");
                                    inPeptide = false;
                                }
                                chosen = chosenNew;
                            }
                        }
                        if (nodePep != null && i >= nodePep.Peptide.Begin)
                        {
                            if (!inPeptide)
                            {
                                sb.Append(chosen
                                          // ReSharper disable LocalizableElement
                                              ? "<font style=\"font-weight: bold; color: blue\">"
                                              : "<font style=\"font-weight: bold\">");
                                // ReSharper restore LocalizableElement
                                inPeptide = true;
                            }
                        }
                        else if (inPeptide)
                        {
                            sb.Append(@"</font>");
                            inPeptide = false;
                        }
                    }
                    sb.Append(aa[i]);
                }
                if (inPeptide)
                {
                    sb.Append(@"</font>");
                }
            }

            data.SetData(DataFormats.Html, HtmlFragment.ClipBoardText(sb.ToString()));

            var transitionListExporter = new AbiMassListExporter(Document, DocNode);

            transitionListExporter.Export(null);
            data.SetData(DataFormats.CommaSeparatedValue,
                         transitionListExporter.MemoryOutput[AbstractMassListExporter.MEMORY_KEY_ROOT].ToString());

            return(data);
        }
예제 #4
0
 private static string GetTransitionName(XmlTransition transition)
 {
     return(AbiMassListExporter.GetTransitionName(Adduct.FromChargeProtonated(transition.PrecursorCharge),
                                                  transition.FragmentType.ToString().ToLower() + transition.FragmentOrdinal,
                                                  Adduct.FromChargeProtonated(transition.ProductCharge)));
 }
예제 #5
0
        protected override DataObject GetNodeData()
        {
            FastaSequence fastaSeq = DocNode.Id as FastaSequence;
            if (fastaSeq == null)
                return base.GetNodeData();

            DataObject data = new DataObject();
            string fastaText = fastaSeq.FastaFileText;
            // If protein has been renamed in the UI
            if (!Equals(DocNode.Name, fastaSeq.Name))
            {
                int oldNameLen = (fastaSeq.Name != null ? fastaSeq.Name.Length : 0);
                fastaText = ">" + DocNode.Name + fastaText.Substring(oldNameLen + 1); // Not L10N
            }
            data.SetData(DataFormats.Text, fastaText);

            var sb = new StringBuilder();
            sb.Append("<b>").Append(DocNode.Name).Append("</b> "); // Not L10N
            sb.Append("<i>"); // Not L10N
            if (string.IsNullOrEmpty(DocNode.Description)) // CONSIDER bspratt - a more complete set of data here, maybe - accession etc
                sb.AppendLine("<br/>"); // Not L10N
            else
            {
                foreach (string desc in Descriptions)
                    sb.Append(desc).AppendLine("<br/>"); // Not L10N
            }
            sb.Append("</i>"); // Not L10N

            IEnumerator<DocNode> peptides = GetChoices(true).GetEnumerator();
            HashSet<DocNode> peptidesChosen = new HashSet<DocNode>(Chosen);
            PeptideDocNode nodePep = (PeptideDocNode)(peptides.MoveNext() ? peptides.Current : null);
            bool chosen = (nodePep != null && peptidesChosen.Contains(nodePep));

            bool inPeptide = false;
            string aa = fastaSeq.Sequence;
            for (int i = 0; i < aa.Length; i++)
            {
                if (nodePep != null)
                {
                    while (nodePep != null && i >= nodePep.Peptide.End)
                    {
                        nodePep = (PeptideDocNode)(peptides.MoveNext() ? peptides.Current : null);
                        if (nodePep != null)
                        {
                            bool chosenNew = peptidesChosen.Contains(nodePep);
                            // Need a new font tag, if the chosen state is changing
                            if (chosenNew != chosen)
                            {
                                sb.Append("</font>"); // Not L10N
                                inPeptide = false;
                            }
                            chosen = chosenNew;
                        }
                    }
                    if (nodePep != null && i >= nodePep.Peptide.Begin)
                    {
                        if (!inPeptide)
                        {
                            sb.Append(chosen
                                          ? "<font style=\"font-weight: bold; color: blue\">" // Not L10N
                                          : "<font style=\"font-weight: bold\">"); // Not L10N
                            inPeptide = true;
                        }
                    }
                    else if (inPeptide)
                    {
                        sb.Append("</font>"); // Not L10N
                        inPeptide = false;
                    }
                }
                sb.Append(aa[i]);
            }
            if (inPeptide)
                sb.Append("</font>"); // Not L10N

            data.SetData(DataFormats.Html, HtmlFragment.ClipBoardText(sb.ToString()));

            var transitionListExporter = new AbiMassListExporter(Document, DocNode);
            transitionListExporter.Export(null);
            data.SetData(DataFormats.CommaSeparatedValue,
                         transitionListExporter.MemoryOutput[AbstractMassListExporter.MEMORY_KEY_ROOT].ToString());

            return data;
        }