Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion mzLib/Chemistry/ChemicalFormula.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ namespace Chemistry
/// Formula can change!!! If isotopes or elements are changed.
/// </summary>
[Serializable]
public sealed class ChemicalFormula : IEquatable<ChemicalFormula>, IHasChemicalFormula
public sealed class ChemicalFormula : IEquatable<ChemicalFormula>, IEquatable<IHasChemicalFormula>, IHasChemicalFormula
{
// Main data stores, the isotopes and elements

Expand Down Expand Up @@ -487,6 +487,8 @@ public bool Equals(ChemicalFormula other)
return true;
}

public bool Equals(IHasChemicalFormula other) => Equals(other?.ThisChemicalFormula);

/// <summary>
/// Produces the Hill Notation of the chemical formula
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,46 @@
using Omics.SpectrumMatch;
using Chemistry;
using Omics.SpectrumMatch;
using Transcriptomics;
using Transcriptomics.Digestion;

namespace Readers
{
public class OsmFromTsv : SpectrumMatchFromTsv
{
public IHasChemicalFormula FivePrimeTerminus { get; set; }
public IHasChemicalFormula ThreePrimeTerminus { get; set; }

public OsmFromTsv(string line, char[] split, Dictionary<string, int> parsedHeader)
: base(line, split, parsedHeader)
{
// TODO: Parse Oligo specific columns
var spl = line.Split(split).Select(p => p.Trim('\"')).ToArray();

if (parsedHeader[SpectrumMatchFromTsvHeader.FivePrimeTerminus] >= 0)
FivePrimeTerminus = ChemicalFormula.ParseFormula(spl[parsedHeader[SpectrumMatchFromTsvHeader.FivePrimeTerminus]]);
else if (PreviousResidue == "-")
FivePrimeTerminus = NucleicAcid.DefaultFivePrimeTerminus;
else
FivePrimeTerminus = Rnase.DefaultFivePrimeTerminus;

if (parsedHeader[SpectrumMatchFromTsvHeader.ThreePrimeTerminus] >= 0)
ThreePrimeTerminus = ChemicalFormula.ParseFormula(spl[parsedHeader[SpectrumMatchFromTsvHeader.ThreePrimeTerminus]]);
else if (NextResidue == "-")
ThreePrimeTerminus = NucleicAcid.DefaultThreePrimeTerminus;
else
ThreePrimeTerminus = Rnase.DefaultThreePrimeTerminus;
}

/// <summary>
/// Constructor used to disambiguate PsmFromTsv to a single psm object
/// Constructor used to disambiguate PsmFromTsv to a single osm object
/// </summary>
/// <param name="psm">psm to disambiguate</param>
/// <param name="fullSequence">sequence of ambiguous psm to use</param>
public OsmFromTsv(OsmFromTsv psm, string fullSequence, int index = 0, string baseSequence = "")
: base(psm, fullSequence, index, baseSequence)
/// <param name="osm">osm to disambiguate</param>
/// <param name="fullSequence">sequence of ambiguous osm to use</param>
public OsmFromTsv(OsmFromTsv osm, string fullSequence, int index = 0, string baseSequence = "",
IHasChemicalFormula? fivePrimeTerm = null, IHasChemicalFormula? threePrimeTerm = null)
: base(osm, fullSequence, index, baseSequence)
{
// TODO: Parse Oligo specific columns
FivePrimeTerminus = fivePrimeTerm ?? osm.FivePrimeTerminus;
ThreePrimeTerminus = threePrimeTerm ?? osm.ThreePrimeTerminus;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -116,5 +116,9 @@ public class SpectrumMatchFromTsvHeader
public const string AllPotentialGlycanLocalization = "All Potential Glycan Localizations";
public const string AllSiteSpecificLocalizationProbability = "All SiteSpecific Localization Probability";
public const string LocalizationScore = "Localization Score";

// Oligo
public const string FivePrimeTerminus = "5'-Terminus";
public const string ThreePrimeTerminus = "3'-Terminus";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ public static Dictionary<string, int> ParseHeader(string header)
parsedHeader.Add(SpectrumMatchFromTsvHeader.ParentIonsLabel, Array.IndexOf(spl, SpectrumMatchFromTsvHeader.ParentIonsLabel));
parsedHeader.Add(SpectrumMatchFromTsvHeader.Ms2ScanRetentionTime, Array.IndexOf(spl, SpectrumMatchFromTsvHeader.Ms2ScanRetentionTime));


// Glyco
parsedHeader.Add(SpectrumMatchFromTsvHeader.GlycanMass, Array.IndexOf(spl, SpectrumMatchFromTsvHeader.GlycanMass));
parsedHeader.Add(SpectrumMatchFromTsvHeader.GlycanStructure, Array.IndexOf(spl, SpectrumMatchFromTsvHeader.GlycanStructure));
parsedHeader.Add(SpectrumMatchFromTsvHeader.GlycanComposition, Array.IndexOf(spl, SpectrumMatchFromTsvHeader.GlycanComposition));
Expand Down Expand Up @@ -247,6 +247,11 @@ public static Dictionary<string, int> ParseHeader(string header)
{
parsedHeader[SpectrumMatchFromTsvHeader.AllSiteSpecificLocalizationProbability] = Array.IndexOf(spl, "AllSiteSpecificLocalizationProbability");
}

// Oligo
parsedHeader.Add(SpectrumMatchFromTsvHeader.FivePrimeTerminus, Array.IndexOf(spl, SpectrumMatchFromTsvHeader.FivePrimeTerminus));
parsedHeader.Add(SpectrumMatchFromTsvHeader.ThreePrimeTerminus, Array.IndexOf(spl, SpectrumMatchFromTsvHeader.ThreePrimeTerminus));

return parsedHeader;
}

Expand Down
56 changes: 55 additions & 1 deletion mzLib/Test/TestChemicalFormula.cs
Original file line number Diff line number Diff line change
Expand Up @@ -374,12 +374,42 @@ public static void FormulaValueEquality()
}

[Test]
public static void FormulaEquality()
public static void FormulaEquality_AreEqual_SameReference()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
Assert.AreEqual(formulaA, formulaA);
}

[Test]
public static void FormulaEquality_AreEqual_DifferentReference()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
ChemicalFormula formulaB = ChemicalFormula.ParseFormula("C2H3NO");
Assert.AreEqual(formulaA, formulaB);
}

[Test]
public static void FormulaEquality_Rearranged()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
ChemicalFormula formulaB = ChemicalFormula.ParseFormula("H3NOC2");
Assert.AreEqual(formulaA, formulaB);
}

[Test]
public static void FormulaEquality_null()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
Assert.AreNotEqual(formulaA, null);
}

[Test]
public static void FormulaEquality_OtherType()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
Assert.AreNotEqual(formulaA, "C2H3NO");
}

[Test]
public static void FormulaAlmostEquality()
{
Expand All @@ -388,6 +418,30 @@ public static void FormulaAlmostEquality()
Assert.AreNotEqual(formulaA, formulaB);
}

[Test]
public static void FormulaEquality_AreEqual_DifferentReference_Interface()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
IHasChemicalFormula formulaB = ChemicalFormula.ParseFormula("C2H3NO");
Assert.IsTrue(formulaA.Equals(formulaB));
}

[Test]
public static void FormulaEquality_Rearranged_Interface()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
IHasChemicalFormula formulaB = ChemicalFormula.ParseFormula("H3NOC2");
Assert.IsTrue(formulaA.Equals(formulaB));
}

[Test]
public static void FormulaAlmostEquality_Interface()
{
ChemicalFormula formulaA = ChemicalFormula.ParseFormula("C2H3NO");
IHasChemicalFormula formulaB = ChemicalFormula.ParseFormula("C{12}2H3NO");
Assert.IsFalse(formulaA.Equals(formulaB));
}

[Test]
public static void HashCodeEquality()
{
Expand Down
Loading
Loading