diff --git a/src/Common/CommonStandard/Parser/MspFileParcer.cs b/src/Common/CommonStandard/Parser/MspFileParcer.cs index 406449a7d..daf09e4ff 100644 --- a/src/Common/CommonStandard/Parser/MspFileParcer.cs +++ b/src/Common/CommonStandard/Parser/MspFileParcer.cs @@ -10,6 +10,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Reflection; using System.Text; namespace CompMs.Common.Parser @@ -183,6 +184,29 @@ public static List ReadSerializedLbmLibrary(string file, Li return usedMspDB; } + public static void SeializedMspObjToAsciiMsp(string input, string output) { + var mspDB = ReadSerializedMspObject(input); + WriteAsMsp(output, mspDB); + } + + public static void SeializedLbmObjToAsciiMspAsPublicUse(string input, string output) { + var mspDB = ReadSerializedMspObject(input); + var queries = LbmQueryParcer.GetLbmQueries(false); + foreach (var query in queries) { query.IsSelected = true; } + var tQueries = getTrueQueryStrings(queries); + + var usedMspDB = new List(); + var counter = 0; + foreach (var mspRecord in mspDB) { + if (tQueries.Contains(mspRecord.CompoundClass + "_" + mspRecord.AdductType.ToString())) { + mspRecord.ScanID = counter; + usedMspDB.Add(mspRecord); + counter++; + } + } + WriteAsLbmMsp(output, usedMspDB); + } + public static void AsciiMspToSerializedMspObj(string input, string output) { var queries = MspFileReader(input); MoleculeMsRefMethods.SaveMspToFile(queries, output); @@ -505,6 +529,12 @@ public static void WriteAsMsp(string filePath, IEnumerable } } + public static void WriteAsLbmMsp(string filePath, IEnumerable mspRecords) { + using (var stream = File.Open(filePath, FileMode.Create, FileAccess.Write)) { + WriteAsLbmMsp(stream, mspRecords); + } + } + public static void WriteAsMsp(Stream stream, IEnumerable mspRecords) { using (var sw = new StreamWriter(stream, Encoding.ASCII, 512, leaveOpen: true)) { foreach (var record in mspRecords) { @@ -512,7 +542,15 @@ public static void WriteAsMsp(Stream stream, IEnumerable ms } } } - + + public static void WriteAsLbmMsp(Stream stream, IEnumerable mspRecords) { + using (var sw = new StreamWriter(stream, Encoding.ASCII, 512, leaveOpen: true)) { + foreach (var record in mspRecords) { + WriteLbmMspFields(record, sw); + } + } + } + public static void ConvertMspToSeparatedMSPs(string filepath, string folderpath) { var mspRecords = MspFileReader(filepath); WriteAsSeparatedMSPs(folderpath, mspRecords); @@ -562,6 +600,37 @@ public static void WriteSpectrumAsMsp(MoleculeMsReference record, StreamWriter s sw.WriteLine(); } + public static void WriteLbmMspFields(MoleculeMsReference record, StreamWriter sw) { + sw.WriteLine("NAME: " + record.Name); + sw.WriteLine("PRECURSORMZ: " + record.PrecursorMz); + sw.WriteLine("PRECURSORTYPE: " + record.AdductType.AdductIonName); + sw.WriteLine("RETENTIONTIME: " + record.ChromXs.RT.Value); + sw.WriteLine("CCS: " + record.CollisionCrossSection); + sw.WriteLine("FORMULA: " + record.Formula); + sw.WriteLine("ONTOLOGY: " + record.CompoundClass); + sw.WriteLine("SMILES: " + record.SMILES); + sw.WriteLine("INCHIKEY: " + record.InChIKey); + sw.WriteLine("IONMODE: " + record.IonMode); + sw.WriteLine("Comment: Computationally generated spectral record in MS-DIAL project"); + sw.WriteLine("Num Peaks: " + record.Spectrum.Count); + + foreach (var peak in record.Spectrum) { + if (string.IsNullOrEmpty(peak.Comment)) { + sw.WriteLine(peak.Mass + "\t" + peak.Intensity); + } + else { + // tantative version; if user want to split exported msp file by MS-FINDER + if (peak.Comment.Contains(";")) { + sw.WriteLine(peak.Mass + "\t" + peak.Intensity + "\t" + "\"" + peak.Comment.Split(';')[0] + "\""); + } + else { + sw.WriteLine(peak.Mass + "\t" + peak.Intensity); + } + } + } + sw.WriteLine(); + } + public static void WriteMspFields(MoleculeMsReference record, StreamWriter sw) { var adducttype = string.Empty; diff --git a/src/MSDIAL4/MsdialPrivateConsoleApp/Program.cs b/src/MSDIAL4/MsdialPrivateConsoleApp/Program.cs index 64fc8f31d..624bdcdbe 100644 --- a/src/MSDIAL4/MsdialPrivateConsoleApp/Program.cs +++ b/src/MSDIAL4/MsdialPrivateConsoleApp/Program.cs @@ -1,4 +1,6 @@ -using Msdial.Lcms.Dataprocess.Algorithm.Clustering; +using CompMs.Common.Parser; +using Msdial.Lcms.Dataprocess.Algorithm.Clustering; +using Rfx.Riken.OsakaUniv; using System; using System.Collections.Generic; using System.Linq; @@ -50,13 +52,18 @@ static void Main(string[] args) { // @"E:\6_Projects\PROJECT_MsMachineLearning\msn\mtbks\neg\mtbks_neg.edge"); //MspManager.MergeMspFiles(@"\\165.93.102.222\Public\MetaboBankPeakPick\ogawa_20240123\input_msn_neg", // @"E:\6_Projects\PROJECT_MsMachineLearning\msn\mtbks\neg\mtbks_neg.msp"); - MspManager.Msp2TextAsMsdialAlignmentResultFormat(@"E:\6_Projects\PROJECT_MsMachineLearning\msn\mtbks\neg\mtbks_neg.msp", - @"E:\6_Projects\PROJECT_MsMachineLearning\msn\mtbks\neg\mtbks_neg.txt"); + //MspManager.Msp2TextAsMsdialAlignmentResultFormat(@"E:\6_Projects\PROJECT_MsMachineLearning\msn\mtbks\neg\mtbks_neg.msp", + // @"E:\6_Projects\PROJECT_MsMachineLearning\msn\mtbks\neg\mtbks_neg.txt"); + //MspManager.Msp2TextAsMsdialAlignmentResultFormat( // @"E:\6_Projects\PROJECT_MsMachineLearning\msn\msp\neg\casmi2022_neg.msp", // @"E:\6_Projects\PROJECT_MsMachineLearning\msn\msp\neg\casmi2022_neg.txt", // "casmi_neg"); + MspFileParser.SeializedLbmObjToAsciiMspAsPublicUse( + @"E:\0_SourceCode\lbm_versions\Msp20250124141632_NCDK_converted_dev\Msp20250124141632_NCDK-TUAT-LC25_converted_dev.lbm2", + @"E:\0_SourceCode\lbm_versions\Msp20250124141632_NCDK_converted_dev\Msp20250124141632_NCDK-TUAT-LC25_converted_dev.msp"); + //mspfile = @"D:\9_Spectral library curations\Distributed MSPs\MSMS-RIKEN-Neg-VS15.msp"; //new_mspfile = @"D:\9_Spectral library curations\Distributed MSPs\MSMS-RIKEN-Neg-VS15-For-Statistics.msp";