From 335f92e0ce6a7ad2d6d616d06280e26fa8efa6ae Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Tue, 15 Jul 2025 16:23:47 -0400 Subject: [PATCH 1/7] feat(diann): Add support for DIANN 2.0 --- R/clean_DIANN.R | 16 +++++++++++++++- R/converters_DIANNtoMSstatsFormat.R | 6 ++++-- man/DIANNtoMSstatsFormat.Rd | 6 ++++-- man/MSstatsClean.Rd | 4 +++- man/dot-cleanRawDIANN.Rd | 4 +++- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/R/clean_DIANN.R b/R/clean_DIANN.R index e972eb88..07a34db7 100644 --- a/R/clean_DIANN.R +++ b/R/clean_DIANN.R @@ -1,7 +1,9 @@ #' Clean raw Diann files #' @param msstats_object an object of class `MSstatsDIANNFiles`. #' @param MBR True if analysis was done with match between runs -#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities. 'FragmentQuantRaw' can be used instead. +#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities. +#' 'FragmentQuantRaw' can be used instead. +#' 'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity. #' @return data.table #' @importFrom stats na.omit #' @keywords internal @@ -10,6 +12,18 @@ dn_input = getInputFile(msstats_object, "input") dn_input = data.table::as.data.table(dn_input) + # Auto-detect and collapse multiple fragment columns (DIANN 2.0 format) + if (quantificationColumn == "auto") { + fragment_columns <- grep("^Fr[0-9]+Quantity$", names(dn_input), value = TRUE) + if (length(fragment_columns) == 0) { + stop("No fragment quantification columns found. Please check your input.") + } + dn_input[, FragmentQuantCorrected := apply(.SD, 1, function(row) { + paste(as.character(row), collapse = ";") + }), .SDcols = fragment_columns] + quantificationColumn <- "FragmentQuantCorrected" + } + if (!is.element("PrecursorMz", colnames(dn_input))) { dn_input[, PrecursorMz := NA] } diff --git a/R/converters_DIANNtoMSstatsFormat.R b/R/converters_DIANNtoMSstatsFormat.R index df3c4bd7..2c358b49 100644 --- a/R/converters_DIANNtoMSstatsFormat.R +++ b/R/converters_DIANNtoMSstatsFormat.R @@ -20,7 +20,9 @@ #' @param removeFewMeasurements should proteins with few measurements be removed #' @param removeOxidationMpeptides should peptides with oxidation be removed #' @param removeProtein_with1Feature should proteins with a single feature be removed -#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities. 'FragmentQuantRaw' can be used instead. +#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities. +#' 'FragmentQuantRaw' can be used instead. +#' 'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity. #' @param ... additional parameters to `data.table::fread`. #' #' @return data.frame in the MSstats required format. @@ -30,7 +32,7 @@ #' @export #' #' @examples -#' # See https://github.com/vdemichev/DiaNN/discussions/1525 for workaround for DIANN 2.0 +#' # For DIANN 2.0, set quantificationColumn = 'auto' #' input_file_path = system.file("tinytest/raw_data/DIANN/diann_input.tsv", #' package="MSstatsConvert") #' annotation_file_path = system.file("tinytest/raw_data/DIANN/annotation.csv", diff --git a/man/DIANNtoMSstatsFormat.Rd b/man/DIANNtoMSstatsFormat.Rd index f7c2a68c..1719555a 100644 --- a/man/DIANNtoMSstatsFormat.Rd +++ b/man/DIANNtoMSstatsFormat.Rd @@ -67,7 +67,9 @@ If \code{append = TRUE}, has to be a valid path to a file.} \item{MBR}{True if analysis was done with match between runs} -\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. 'FragmentQuantRaw' can be used instead.} +\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. +'FragmentQuantRaw' can be used instead. +'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity.} \item{...}{additional parameters to \code{data.table::fread}.} } @@ -78,7 +80,7 @@ data.frame in the MSstats required format. Import Diann files } \examples{ -# See https://github.com/vdemichev/DiaNN/discussions/1525 for workaround for DIANN 2.0 +# For DIANN 2.0, set quantificationColumn = 'auto' input_file_path = system.file("tinytest/raw_data/DIANN/diann_input.tsv", package="MSstatsConvert") annotation_file_path = system.file("tinytest/raw_data/DIANN/annotation.csv", diff --git a/man/MSstatsClean.Rd b/man/MSstatsClean.Rd index 93ce567e..7e94b964 100644 --- a/man/MSstatsClean.Rd +++ b/man/MSstatsClean.Rd @@ -116,7 +116,9 @@ removed based on the IsUnique column from Philosopher output} \item{MBR}{True if analysis was done with match between runs} -\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. 'FragmentQuantRaw' can be used instead.} +\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. +'FragmentQuantRaw' can be used instead. +'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity.} \item{qvalue_cutoff}{The q-value cutoff for filtering peaks detected by MBR} } diff --git a/man/dot-cleanRawDIANN.Rd b/man/dot-cleanRawDIANN.Rd index 109d3de9..c17556bb 100644 --- a/man/dot-cleanRawDIANN.Rd +++ b/man/dot-cleanRawDIANN.Rd @@ -15,7 +15,9 @@ \item{MBR}{True if analysis was done with match between runs} -\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. 'FragmentQuantRaw' can be used instead.} +\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. +'FragmentQuantRaw' can be used instead. +'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity.} } \value{ data.table From 1b37ae529fdd8687e845c25689903ae90bc8e34b Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Tue, 15 Jul 2025 17:01:30 -0400 Subject: [PATCH 2/7] add unit tests - pending test files --- R/converters_DIANNtoMSstatsFormat.R | 11 ++++++++++ .../test_converters_DIANNtoMSstatsFormat.R | 20 +++++++++++++++++++ man/DIANNtoMSstatsFormat.Rd | 11 ++++++++++ 3 files changed, 42 insertions(+) diff --git a/R/converters_DIANNtoMSstatsFormat.R b/R/converters_DIANNtoMSstatsFormat.R index 2c358b49..f771bea5 100644 --- a/R/converters_DIANNtoMSstatsFormat.R +++ b/R/converters_DIANNtoMSstatsFormat.R @@ -42,6 +42,17 @@ #' output = DIANNtoMSstatsFormat(input, annotation = annot, MBR = FALSE, #' use_log_file = FALSE) #' head(output) +#' +#' # For DIANN 2.0, set quantificationColumn = 'auto' +#' input_file_path_2_0 = system.file("tinytest/raw_data/DIANN/diann_input_2.0.csv", +#' package="MSstatsConvert") +#' annotation_file_path_2_0 = system.file("tinytest/raw_data/DIANN/annotation_diann_2.0.csv", +#' package = "MSstatsConvert") +#' input_2_0 = data.table::fread(input_file_path_2_0) +#' annot_2_0 = data.table::fread(annotation_file_path_2_0) +#' output_2_0 = DIANNtoMSstatsFormat(input_2_0, annotation = annot_2_0, MBR = FALSE, +#' use_log_file = FALSE, quantificationColumn = 'auto') +#' head(output_2_0) DIANNtoMSstatsFormat = function(input, annotation = NULL, global_qvalue_cutoff = 0.01, qvalue_cutoff = 0.01, diff --git a/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R b/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R index d54011ff..275bbeaf 100644 --- a/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R +++ b/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R @@ -16,4 +16,24 @@ expect_true("ProductCharge" %in% colnames(output)) expect_true("IsotopeLabelType" %in% colnames(output)) expect_true("Condition" %in% colnames(output)) expect_true("BioReplicate" %in% colnames(output)) +expect_true("Fraction" %in% colnames(output)) + +# Test DIANNtoMSstatsFormat DIANN 2.0 ------------------------ +input_file_path = system.file("tinytest/raw_data/DIANN/diann_input_2.0.csv", package="MSstatsConvert") +annotation_file_path = system.file("tinytest/raw_data/DIANN/annotation_diann_2.0.csv", package = "MSstatsConvert") +input = data.table::fread(input_file_path) +annot = data.table::fread(annotation_file_path) +output = DIANNtoMSstatsFormat(input, annotation = annot, MBR = FALSE, use_log_file = FALSE, quantificationColumn = 'auto') +expect_equal(ncol(output), 11) +expect_equal(nrow(output), 180) +expect_true("Run" %in% colnames(output)) +expect_true("ProteinName" %in% colnames(output)) +expect_true("PeptideSequence" %in% colnames(output)) +expect_true("PrecursorCharge" %in% colnames(output)) +expect_true("Intensity" %in% colnames(output)) +expect_true("FragmentIon" %in% colnames(output)) +expect_true("ProductCharge" %in% colnames(output)) +expect_true("IsotopeLabelType" %in% colnames(output)) +expect_true("Condition" %in% colnames(output)) +expect_true("BioReplicate" %in% colnames(output)) expect_true("Fraction" %in% colnames(output)) \ No newline at end of file diff --git a/man/DIANNtoMSstatsFormat.Rd b/man/DIANNtoMSstatsFormat.Rd index 1719555a..c702e644 100644 --- a/man/DIANNtoMSstatsFormat.Rd +++ b/man/DIANNtoMSstatsFormat.Rd @@ -90,6 +90,17 @@ annot = data.table::fread(annotation_file_path) output = DIANNtoMSstatsFormat(input, annotation = annot, MBR = FALSE, use_log_file = FALSE) head(output) + +# For DIANN 2.0, set quantificationColumn = 'auto' +input_file_path_2_0 = system.file("tinytest/raw_data/DIANN/diann_input_2.0.csv", + package="MSstatsConvert") +annotation_file_path_2_0 = system.file("tinytest/raw_data/DIANN/annotation_diann_2.0.csv", + package = "MSstatsConvert") +input_2_0 = data.table::fread(input_file_path_2_0) +annot_2_0 = data.table::fread(annotation_file_path_2_0) +output_2_0 = DIANNtoMSstatsFormat(input_2_0, annotation = annot_2_0, MBR = FALSE, + use_log_file = FALSE, quantificationColumn = 'auto') +head(output_2_0) } \author{ Elijah Willie From 861beb6ed7d2cc6e5729ec217b720ce69b9e5df9 Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Wed, 16 Jul 2025 11:44:37 -0400 Subject: [PATCH 3/7] optimize code for large datasets --- R/clean_DIANN.R | 5 ++--- .../raw_data/DIANN/annotation_diann_2.0.csv | 9 +++++++++ inst/tinytest/raw_data/DIANN/diann_input_2.0.csv | 16 ++++++++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 inst/tinytest/raw_data/DIANN/annotation_diann_2.0.csv create mode 100644 inst/tinytest/raw_data/DIANN/diann_input_2.0.csv diff --git a/R/clean_DIANN.R b/R/clean_DIANN.R index 07a34db7..3759a7ce 100644 --- a/R/clean_DIANN.R +++ b/R/clean_DIANN.R @@ -18,9 +18,8 @@ if (length(fragment_columns) == 0) { stop("No fragment quantification columns found. Please check your input.") } - dn_input[, FragmentQuantCorrected := apply(.SD, 1, function(row) { - paste(as.character(row), collapse = ";") - }), .SDcols = fragment_columns] + dn_input[, FragmentQuantCorrected := do.call(paste, c(.SD, sep = ";")), + .SDcols = fragment_columns] quantificationColumn <- "FragmentQuantCorrected" } diff --git a/inst/tinytest/raw_data/DIANN/annotation_diann_2.0.csv b/inst/tinytest/raw_data/DIANN/annotation_diann_2.0.csv new file mode 100644 index 00000000..d876c3bd --- /dev/null +++ b/inst/tinytest/raw_data/DIANN/annotation_diann_2.0.csv @@ -0,0 +1,9 @@ +Run,BioReplicate,Condition +Run1,1,Control +Run2,2,Control +Run3,3,Control +Run4,4,Control +Run5,5,Treatment +Run6,6,Treatment +Run7,7,Treatment +Run8,8,Treatment diff --git a/inst/tinytest/raw_data/DIANN/diann_input_2.0.csv b/inst/tinytest/raw_data/DIANN/diann_input_2.0.csv new file mode 100644 index 00000000..33af2550 --- /dev/null +++ b/inst/tinytest/raw_data/DIANN/diann_input_2.0.csv @@ -0,0 +1,16 @@ +Run.Index,Run,Channel,Precursor.Id,Modified.Sequence,Stripped.Sequence,Precursor.Charge,Precursor.Lib.Index,Decoy,Proteotypic,Precursor.Mz,Protein.Ids,Protein.Group,Protein.Names,Genes,RT,iRT,Predicted.RT,Predicted.iRT,IM,iIM,Predicted.IM,Predicted.iIM,Precursor.Quantity,Precursor.Normalised,Ms1.Area,Ms1.Normalised,Ms1.Apex.Area,Ms1.Apex.Mz.Delta,Normalisation.Factor,Quantity.Quality,Empirical.Quality,Normalisation.Noise,Ms1.Profile.Corr,Evidence,Mass.Evidence,Channel.Evidence,Ms1.Total.Signal.Before,Ms1.Total.Signal.After,RT.Start,RT.Stop,FWHM,PG.TopN,PG.MaxLFQ,Genes.TopN,Genes.MaxLFQ,Genes.MaxLFQ.Unique,PG.MaxLFQ.Quality,Genes.MaxLFQ.Quality,Genes.MaxLFQ.Unique.Quality,Q.Value,PEP,Global.Q.Value,Lib.Q.Value,Peptidoform.Q.Value,Global.Peptidoform.Q.Value,Lib.Peptidoform.Q.Value,PTM.Site.Confidence,Site.Occupancy.Probabilities,Protein.Sites,Lib.PTM.Site.Confidence,Translated.Q.Value,Channel.Q.Value,PG.Q.Value,PG.PEP,GG.Q.Value,Protein.Q.Value,Global.PG.Q.Value,Lib.PG.Q.Value,Best.Fr.Mz,Best.Fr.Mz.Delta,Ms2.Scan,Fr.0.Index,Fr.0.Id,Fr.0.Quantity,Fr.0.Score,Fr.1.Index,Fr.1.Id,Fr.1.Quantity,Fr.1.Score,Fr.2.Index,Fr.2.Id,Fr.2.Quantity,Fr.2.Score,Fr.3.Index,Fr.3.Id,Fr.3.Quantity,Fr.3.Score,Fr.4.Index,Fr.4.Id,Fr.4.Quantity,Fr.4.Score,Fr.5.Index,Fr.5.Id,Fr.5.Quantity,Fr.5.Score,Fr.6.Index,Fr.6.Id,Fr.6.Quantity,Fr.6.Score,Fr.7.Index,Fr.7.Id,Fr.7.Quantity,Fr.7.Score,Fr.8.Index,Fr.8.Id,Fr.8.Quantity,Fr.8.Score,Fr.9.Index,Fr.9.Id,Fr.9.Quantity,Fr.9.Score,Fr.10.Index,Fr.10.Id,Fr.10.Quantity,Fr.10.Score,Fr.11.Index,Fr.11.Id,Fr.11.Quantity,Fr.11.Score +0,Run1,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2000000.25,1984732.125,6012342.5,4973213,1232412,0,0.7736825346946716,0.8215332770347595,0.9491070508956909,-0.127797082,0.6448458433151245,5.119085788726807,0,0.7137690782546997,5973495296,6104890880,26.150163650512695,26.442462921142578,0.1435783952474594,0,53768948,0,0,0,0.9792587757110596,0,0,2.913922685365833e-7,4.54065201438425e-7,1.9544228280210518e-7,1.74486572745991e-7,0.001948073,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1675423593260348e-4,2.2968705161474645e-4,1,1.1811954027507454e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,2.44140625e-4,295795,0,y9^1/858.431580,102640.4063,0.9636287689208984,1,y7^1/690.341675,20122.30273,0.9645853638648987,2,y10^1/957.500000,4221.658203,0.4246550500392914,3,b8^1/569.304199,31232.24609,0.8853869438171387,4,y9^2/429.719421,5321.414063,0.39449870586395264,5,b9^1/640.341309,7399.935056,0.7074820399284363,6,b7^1/498.267059,4778.041502,0.8712910413742065,7,y12^1/1215.585205,5221.414063,0.417682409,8,b10^1/711.378418,5331.414063,0.688555121,9,y11^1/1086.542603,5521.414063,0.7300840020179749,10,b6^1/427.229950,4321.414063,0.7281083464622498,11,y4^1/435.219788,3321.414063,0.073952734 +1,Run2,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2000500.35,2013631.5,6032061.5,5102324,1253221,4.2724609375e-4,1.0813568830490112,0.9248327016830444,0.9335431456565857,0.009042856,0.5508553981781006,4.766242504119873,0,0.7685475945472717,4541554176,4435917312,25.857284545898438,26.15038299560547,0.14414852857589722,0,42105744,0,0,0,0.978475034,0,0,2.2170982560965058e-7,4.422577433160768e-7,1.9544228280210518e-7,1.74486572745991e-7,6.454735994338989e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1768859258154407e-4,2.2963430092204362e-4,1,1.190476177725941e-4,1.0840108734555542e-4,1.0612331243464723e-4,640.3413086,-0.002807617,291595,0,y9^1/858.431580,73939.53125,0.9669122099876404,1,y7^1/690.341675,21322.3,0.7487028241157532,2,y10^1/957.500000,5222.868652,0.44808775186538696,3,b8^1/569.304199,33425.83398,0.284358948,4,y9^2/429.719421,5552.36084,0.6579657196998596,5,b9^1/640.341309,7630.881833,0.926406741,6,b7^1/498.267059,4698.988279,0.6208616495132446,7,y12^1/1215.585205,5332.36084,0.1570264846086502,8,b10^1/711.378418,5252.36084,0.7863963842391968,9,y11^1/1086.542603,5652.36084,0.5743991732597351,10,b6^1/427.229950,4552.36084,0.30207791924476624,11,y4^1/435.219788,3552.36084,0.015680965036153793 +2,Run3,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2001000.45,2042530.875,6051780.5,5231435,1274030,0.003662109,1.4800283908843994,0.9242040514945984,0.9096652269363403,0.2408170998096466,0.9109777808189392,5.709319591522217,0,0.9464238286018372,1752253056,1688557440,27.617525100708008,27.911840438842773,0.11598417162895203,0,73938704,0,0,0,0.9832645654678345,0,0,2.8488403813753393e-7,5.492166792464559e-7,1.9544228280210518e-7,1.74486572745991e-7,8.238671580329537e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.2211503053549677e-4,2.437389484839514e-4,1,1.2348727614153177e-4,1.0840108734555542e-4,1.0612331243464723e-4,640.3413086,-0.001708984,311395,0,y9^1/858.431580,102379.3672,0.8809528350830078,1,y7^1/690.341675,22522.29727,0.9320334196090698,2,y10^1/957.500000,6224.079101,0.8154875040054321,3,b8^1/569.304199,35619.42187,0.5835613012313843,4,y9^2/429.719421,5783.307617,0.4513078033924103,5,b9^1/640.341309,1743.066895,0.9340524673461914,6,b7^1/498.267059,4619.935056,0.7005748152732849,7,y12^1/1215.585205,5443.307617,0.7987542748451233,8,b10^1/711.378418,5173.307617,0.48033758997917175,9,y11^1/1086.542603,5783.307617,0.2964768707752228,10,b6^1/427.229950,4783.307617,0.6705795526504517,11,y4^1/435.219788,3783.307617,0.17254789173603058 +3,Run4,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2001500.55,2071430.25,6071499.5,5360546,1294839,0.001281738,1.0961941480636597,0.9021240472793579,0.9170920848846436,-0.110924929,0.706253707,4.492057800292969,0,0.7483969926834106,4410458112,4211434496,25.638751983642578,25.98506736755371,0.1300731599330902,0,44966324,0,0,0,0.9782786965370178,0,0,2.8159496423540986e-7,4.589311117797479e-7,1.9544228280210518e-7,1.74486572745991e-7,0.002136074,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1650937813101336e-4,2.2876751609146595e-4,1,1.1781338253058493e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.00177002,289495,0,y9^1/858.431580,87483.39063,0.7935284376144409,1,y7^1/690.341675,23722.29454,0.5273796916007996,2,y10^1/957.500000,7225.28955,0.5571760535240173,3,b8^1/569.304199,37813.00976,0.23208525776863098,4,y9^2/429.719421,6014.254394,0.648905873,5,b9^1/640.341309,5332.36084,0.7817479372024536,6,b7^1/498.267059,4540.881833,0.5346116423606873,7,y12^1/1215.585205,5554.254394,0.24068021774291992,8,b10^1/711.378418,5094.254394,0.6848428249359131,9,y11^1/1086.542603,5914.254394,0.32643792033195496,10,b6^1/427.229950,5014.254394,0.7794831395149231,11,y4^1/435.219788,4014.254394,0.2992447316646576 +4,Run5,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2002000.65,2100329.625,6091218.5,5489657,1315648,0.001098633,0.5160978436470032,0.9162616729736328,0.9358870983123779,-0.194742888,0.5991845726966858,5.170557975769043,0,0.8274463415145874,6375653376,6178286080,25.463668823242188,25.72978973388672,0.1553127020597458,0,38769268,0,0,0,0.9838945865631104,0,0,1.7771459681625856e-7,3.5023509781240136e-7,1.9544228280210518e-7,1.74486572745991e-7,4.1591108310967684e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1194447870366275e-4,2.2093343432061374e-4,1,1.1309658293612301e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,-9.77E-04,287695,0,y9^1/858.431580,153506.25,0.860227108,1,y7^1/690.341675,24922.29181,0.8670507669448853,2,y10^1/957.500000,8226.499999,0.3764512240886688,3,b8^1/569.304199,40006.59765,0.6166418194770813,4,y9^2/429.719421,6245.201171,0.7852916717529297,5,b9^1/640.341309,4778.041502,0.7290893793106079,6,b7^1/498.267059,4461.82861,0.8512157797813416,7,y12^1/1215.585205,5665.201171,0.44217950105667114,8,b10^1/711.378418,5015.201171,0.6431896090507507,9,y11^1/1086.542603,6045.201171,0.23014047741889954,10,b6^1/427.229950,5245.201171,0.7702154517173767,11,y4^1/435.219788,4245.201171,0.7932649850845337 +5,Run6,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2002500.75,2129229,6110937.5,5618768,1336457,0.001098633,0.5896118879318237,0.923232913,0.9427148699760437,-0.045998894,0.8580753803253174,4.858544826507568,0,0.7851871252059937,5412494336,5126430720,25.698915481567383,25.99173927307129,0.096979544,0,38389224,0,0,0,0.9875781536102295,0,0,1.856734428429263e-7,3.288635070930468e-7,1.9544228280210518e-7,1.74486572745991e-7,0.004961585,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1258725862717256e-4,2.1904605091549456e-4,1,1.1384335084585473e-4,1.0840108734555542e-4,1.0612331243464723e-4,429.71942138671875,-0.001312256,290695,0,y9^1/858.431580,148201.9688,0.9073516130447388,1,y7^1/690.341675,26122.28908,0.7333306074142456,2,y10^1/957.500000,9227.710448,0.49652913212776184,3,b8^1/569.304199,42200.18554,0.3920160233974457,4,y9^2/429.719421,6476.147948,0.8369044661521912,5,b9^1/640.341309,4698.988279,0.8506255745887756,6,b7^1/498.267059,4382.775387,0.8182463645935059,7,y12^1/1215.585205,5776.147948,0.2063419669866562,8,b10^1/711.378418,4936.147948,0.6889411211013794,9,y11^1/1086.542603,6176.147948,0.21369382739067078,10,b6^1/427.229950,5476.147948,0.8870164155960083,11,y4^1/435.219788,4476.147948,0.31518787145614624 +6,Run7,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2003000.85,2158128.375,6130656.5,5747879,1357266,4.8828125e-4,1.1614890098571777,0.9050971269607544,0.933946967,-0.119282782,0.7500326633453369,4.726232051849365,0,0.8604538440704346,4190676736,4112776448,27.27856445,27.517900466918945,0.087783374,0,63085860,0,0,0,0.984515369,0,0,3.538946111802943e-5,6.997288437560201e-5,1.9544228280210518e-7,1.74486572745991e-7,0.001404293,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1884953710250556e-4,2.3133421200327575e-4,1,1.203079882543534e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,1.220703125e-4,308095,0,y9^1/858.431580,91054.60938,0.8227729201316833,1,y7^1/690.341675,27322.28635,0.8354610204696655,2,y10^1/957.500000,10228.9209,0.7712465524673462,3,b8^1/569.304199,44393.77343,0.5117278695106506,4,y9^2/429.719421,6707.094725,-0.026255654,5,b9^1/640.341309,4619.935056,0.6163007616996765,6,b7^1/498.267059,5221.414063,0.8180134296417236,7,y12^1/1215.585205,5887.094725,0.7299585938453674,8,b10^1/711.378418,4857.094725,0.22520777583122253,9,y11^1/1086.542603,6307.094725,0.26610103249549866,10,b6^1/427.229950,5707.094725,0.6587355136871338,11,y4^1/435.219788,4707.094725,0.1385849416255951 +7,Run8,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2003500.95,2187027.75,6150375.5,5876990,1378075,0.001220703,0.5559011101722717,0.9399603009223938,0.9490805864334106,0.067381017,0.9037928581237793,5.247560977935791,0,0.9128645658493042,4810823680,4858950656,25.44921303,25.742422103881836,0.081555597,0,42671760,0,0,0,0.9892690181732178,0,0,1.9544228280210518e-7,3.3489891393401194e-7,1.9544228280210518e-7,1.74486572745991e-7,3.9383862167596817e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.110247612814419e-4,2.2176637139637023e-4,1,1.1224604531889781e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,-9.77E-04,287695,0,y9^1/858.431580,151515.9219,0.9792392253875732,1,y7^1/690.341675,28522.28362,0.9142202734947205,2,y10^1/957.500000,11230.13135,0.7215958833694458,3,b8^1/569.304199,46587.36132,0.19495196640491486,4,y9^2/429.719421,6938.041502,0.774726927,5,b9^1/640.341309,6938.041502,0.8317809700965881,6,b7^1/498.267059,5332.36084,0.9115861654281616,7,y12^1/1215.585205,4778.041502,0.4190266728401184,8,b10^1/711.378418,4778.041502,0.8871794939041138,9,y11^1/1086.542603,6438.041502,0.8353926539421082,10,b6^1/427.229950,5938.041502,0.8530306816101074,11,y4^1/435.219788,4938.041502,0.4969766139984131 +0,Run1,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2004001.05,2215927.125,6170094.5,6006101,1398884,0.002441406,0.7616479992866516,0.7476723790168762,0.9899548292160034,-0.052945156,0.3461257219314575,1.627706527709961,0,0.6698732972145081,5906822144,5662480384,26.27754020690918,26.463232040405273,0.076400347,0,53768948,0,0,0,0.9792587757110596,0,0,6.544411298818886e-4,0.002815925,0.002070931,0.001560513,0.004534268,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1675423593260348e-4,2.2968705161474645e-4,1,1.1811954027507454e-4,1.0840108734555542e-4,1.0612331243464723e-4,429.71942138671875,2.74658203125e-4,296332,0,y9^1/858.431580,19674.51172,-0.005684508,1,y7^1/690.341675,29722.28089,0.39183443784713745,2,y9^2/429.719421,12231.3418,0.7347833514213562,3,b8^1/569.304199,48780.94921,0.096094586,4,y7^2/345.674500,7168.988279,0.37478628754615784,5,b7^1/498.267059,7168.988279,0.7088735103607178,6,b9^1/640.341309,5443.307617,0.4804055392742157,7,b6^1/427.229950,4698.988279,-0.05524461,8,b10^1/711.378418,4698.988279,0.019428946,9,y10^1/957.500000,6568.988279,0,10,y8^1/761.378784,6168.988279,0.009580953,11,b5^1/356.192841,5168.988279,-0.039693564 +1,Run2,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2004501.15,2244826.5,6189813.5,6135212,1419693,0,1.0277941226959229,0.7002038955688477,0.6689087152481079,-0.013279664,0.075294919,1.3314199447631836,0,0.11837191134691238,4392438784,4241816320,25.85157012939453,26.06476402282715,0.092632338,0,42105744,0,0,0,0.978475034,0,0,0.001404837,0.009191917,0.002070931,0.001560513,0.005887166,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1768859258154407e-4,2.2963430092204362e-4,1,1.190476177725941e-4,1.0840108734555542e-4,1.0612331243464723e-4,498.2670593261719,0,292132,0,y9^1/858.431580,6452.367188,-0.158036575,1,y7^1/690.341675,30922.27816,0.031890918,2,y9^2/429.719421,13232.55224,0.17046302556991577,3,b8^1/569.304199,50974.5371,-0.072938785,4,y7^2/345.674500,7399.935056,0,5,b7^1/498.267059,7399.935056,0.24835728108882904,6,b9^1/640.341309,0,0.071428567,7,b6^1/427.229950,4619.935056,0.31205257773399353,8,b10^1/711.378418,4619.935056,0,9,y10^1/957.500000,6699.935056,0.071428567,10,y8^1/761.378784,6399.935056,0.14365364611148834,11,b5^1/356.192841,5399.935056,0.3164454400539398 +2,Run3,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2005001.25,2273725.875,6209532.5,6264323,1440502,0.004150391,1.487552523612976,0.7828665971755981,0.6839308738708496,0.0030193,0.33301427960395813,2.8454606533050537,0,0.575896144,1644299136,1596601600,27.638486862182617,27.906097412109375,0.067620441,0,73938704,0,0,0,0.9832645654678345,0,0,0.001278264,0.008944825,0.002070931,0.001560513,0.008131186,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.2211503053549677e-4,2.437389484839514e-4,1,1.2348727614153177e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-7.32E-04,311632,0,y9^1/858.431580,14263.73145,0.6888699531555176,1,y7^1/690.341675,32122.27543,0.5426011085510254,2,y9^2/429.719421,0,-0.040480696,3,b8^1/569.304199,53168.12499,0.18495593965053558,4,y7^2/345.674500,7630.881833,0.32614174485206604,5,b7^1/498.267059,7630.881833,0.4178531765937805,6,b9^1/640.341309,0,0,7,b6^1/427.229950,4540.881833,0.037963852286338806,8,b10^1/711.378418,4540.881833,0.6775354743003845,9,y10^1/957.500000,6830.881833,0,10,y8^1/761.378784,6630.881833,0.1967964768409729,11,b5^1/356.192841,5630.881833,0.1369970589876175 +3,Run4,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2005501.35,2302625.25,6229251.5,6393434,1461311,0,1.0956181287765503,0.8113372325897217,0.7615056037902832,-0.154439732,0,1.5434247255325317,0,0.12031623721122742,4521091072,4412118016,25.73971176147461,26.006107330322266,0.072686404,0,44966324,0,0,0,0.9782786965370178,0,0,0.001245123,0.008891947,0.002070931,0.001560513,0.007487536,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1650937813101336e-4,2.2876751609146595e-4,1,1.1781338253058493e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.005615234,290032,0,y9^1/858.431580,9819.144531,0.6521614789962769,1,y7^1/690.341675,33322.2727,-0.028485917,2,y9^2/429.719421,15234.97314,0.643043041,3,b8^1/569.304199,55361.71288,0.4810103178024292,4,y7^2/345.674500,0,0,5,b7^1/498.267059,6938.041502,0.045485395938158035,6,b9^1/640.341309,0,-0.051898863,7,b6^1/427.229950,4461.82861,0.3660598397254944,8,b10^1/711.378418,4461.82861,0.021896243,9,y10^1/957.500000,6961.82861,0.27865642309188843,10,y8^1/761.378784,6861.82861,0.17993679642677307,11,b5^1/356.192841,5861.82861,0.07439962 +4,Run5,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2006001.45,2331524.625,6248970.5,6522545,1482120,0.002563477,0.5123195648193359,0.8244078159332275,0.6683515310287476,-0.297664583,0.4175456464290619,2.704219341278076,0,0.6060269474983215,5706509312,5501472256,25.458023071289062,25.724084854125977,0.12983058393001556,0,38769268,0,0,0,0.9838945865631104,0,0,6.192892324179411e-4,0.006148204,0.002070931,0.001560513,0.001650827,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1194447870366275e-4,2.2093343432061374e-4,1,1.1309658293612301e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.001953125,288232,0,y9^1/858.431580,25022.89844,0.7473883628845215,1,y7^1/690.341675,34522.26997,-0.043146659,2,y9^2/429.719421,16236.18359,0.40268921852111816,3,b8^1/569.304199,57555.30077,0.7384170293807983,4,y7^2/345.674500,0,0,5,b7^1/498.267059,7168.988279,-0.012492409,6,b9^1/640.341309,4461.82861,0.31055015325546265,7,b6^1/427.229950,4382.775387,0.4112129807472229,8,b10^1/711.378418,4382.775387,-0.049218785,9,y10^1/957.500000,7092.775387,-0.032381333,10,y8^1/761.378784,7092.775387,-0.115154825,11,b5^1/356.192841,6092.775387,0.20957231521606445 +5,Run6,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2006501.55,2360424,6268689.5,0,1502929,0,0.5988659262657166,0.8162186741828918,0.5860345959663391,-0.086607456,0,0.882223904,0,0,5664380416,5841450496,25.720083236694336,25.853025436401367,0.05675599,0,38389224,0,0,0,0.9875781536102295,0,0,0.002861763,0.024625311,0.002070931,0.001560513,0.009113105,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1258725862717256e-4,2.1904605091549456e-4,1,1.1384335084585473e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.005310059,290032,0,y9^1/858.431580,6671.251953,0.7648688554763794,1,y7^1/690.341675,35722.26724,-0.030563259,2,y9^2/429.719421,17237.39404,0.21892286837100983,3,b8^1/569.304199,59748.88866,0.2353132963180542,4,y7^2/345.674500,0,-0.037419975,5,b7^1/498.267059,3728.52002,0.11039182543754578,6,b9^1/640.341309,4382.775387,-0.010085775,7,b6^1/427.229950,4303.722164,0.758058488,8,b10^1/711.378418,4303.722164,0.09309829,9,y10^1/957.500000,7223.722164,0.7028805613517761,10,y8^1/761.378784,7323.722164,-0.226211801,11,b5^1/356.192841,6323.722164,0.480023056 +7,Run7,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2007001.65,2389323.375,6288408.5,6780767,1523738,0,0.5563687086105347,0.8212248682975769,0.8553768396377563,-0.020479461,0.16043028235435486,2.240114212036133,0,0.5191697478294373,5205047296,4810823680,25.49679946899414,25.63015365600586,0.050942726,0,42671760,0,0,0,0.9892690181732178,0,0,8.211528765968978e-4,0.007439667,0.002070931,0.001560513,0.007191904,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.110247612814419e-4,2.2176637139637023e-4,1,1.1224604531889781e-4,1.0840108734555542e-4,1.0612331243464723e-4,429.71942138671875,-9.16E-05,287632,0,y9^1/858.431580,12305.23047,0.51445365,1,y7^1/690.341675,36922.26451,-0.036980223,2,y9^2/429.719421,18238.60449,0.8040527701377869,3,b8^1/569.304199,61942.47655,0.15852494537830353,4,y7^2/345.674500,7999.78302001953125,0.23178376257419586,5,b7^1/498.267059,0,0,6,b9^1/640.341309,4303.722164,0.23178376257419586,7,b6^1/427.229950,0,0,8,b10^1/711.378418,4224.668941,-0.036292803,9,y10^1/957.500000,7354.668941,0.19903361797332764,10,y8^1/761.378784,7554.668941,0.18090558052062988,11,b5^1/356.192841,6554.668941,0.9589868187904358 From 6a053d4061670495baffcf2a9a2f1586d452f3c1 Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Wed, 16 Jul 2025 12:00:32 -0400 Subject: [PATCH 4/7] use parquet file for input instead of CSV for examples --- DESCRIPTION | 3 ++- R/converters_DIANNtoMSstatsFormat.R | 5 ++--- inst/tinytest/raw_data/DIANN/diann_2.0.parquet | Bin 0 -> 51014 bytes .../tinytest/raw_data/DIANN/diann_input_2.0.csv | 16 ---------------- .../test_converters_DIANNtoMSstatsFormat.R | 4 ++-- man/DIANNtoMSstatsFormat.Rd | 5 ++--- 6 files changed, 8 insertions(+), 25 deletions(-) create mode 100644 inst/tinytest/raw_data/DIANN/diann_2.0.parquet delete mode 100644 inst/tinytest/raw_data/DIANN/diann_input_2.0.csv diff --git a/DESCRIPTION b/DESCRIPTION index 4c4f60b6..a18e60bd 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -29,7 +29,8 @@ Suggests: tinytest, covr, knitr, - rmarkdown + rmarkdown, + arrow Collate: 'clean_ProteinProspector.R' 'clean_Metamorpheus.R' diff --git a/R/converters_DIANNtoMSstatsFormat.R b/R/converters_DIANNtoMSstatsFormat.R index f771bea5..950c0b66 100644 --- a/R/converters_DIANNtoMSstatsFormat.R +++ b/R/converters_DIANNtoMSstatsFormat.R @@ -32,7 +32,6 @@ #' @export #' #' @examples -#' # For DIANN 2.0, set quantificationColumn = 'auto' #' input_file_path = system.file("tinytest/raw_data/DIANN/diann_input.tsv", #' package="MSstatsConvert") #' annotation_file_path = system.file("tinytest/raw_data/DIANN/annotation.csv", @@ -44,11 +43,11 @@ #' head(output) #' #' # For DIANN 2.0, set quantificationColumn = 'auto' -#' input_file_path_2_0 = system.file("tinytest/raw_data/DIANN/diann_input_2.0.csv", +#' input_file_path_2_0 = system.file("tinytest/raw_data/DIANN/diann_2.0.parquet", #' package="MSstatsConvert") #' annotation_file_path_2_0 = system.file("tinytest/raw_data/DIANN/annotation_diann_2.0.csv", #' package = "MSstatsConvert") -#' input_2_0 = data.table::fread(input_file_path_2_0) +#' input_2_0 = arrow::read_parquet(input_file_path_2_0) #' annot_2_0 = data.table::fread(annotation_file_path_2_0) #' output_2_0 = DIANNtoMSstatsFormat(input_2_0, annotation = annot_2_0, MBR = FALSE, #' use_log_file = FALSE, quantificationColumn = 'auto') diff --git a/inst/tinytest/raw_data/DIANN/diann_2.0.parquet b/inst/tinytest/raw_data/DIANN/diann_2.0.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7423eddd5a2a7efa5c2d505506b55ac5c808d518 GIT binary patch literal 51014 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 R|9}L9&OZu5nv@aze*kMYt^@!8 literal 0 HcmV?d00001 diff --git a/inst/tinytest/raw_data/DIANN/diann_input_2.0.csv b/inst/tinytest/raw_data/DIANN/diann_input_2.0.csv deleted file mode 100644 index 33af2550..00000000 --- a/inst/tinytest/raw_data/DIANN/diann_input_2.0.csv +++ /dev/null @@ -1,16 +0,0 @@ -Run.Index,Run,Channel,Precursor.Id,Modified.Sequence,Stripped.Sequence,Precursor.Charge,Precursor.Lib.Index,Decoy,Proteotypic,Precursor.Mz,Protein.Ids,Protein.Group,Protein.Names,Genes,RT,iRT,Predicted.RT,Predicted.iRT,IM,iIM,Predicted.IM,Predicted.iIM,Precursor.Quantity,Precursor.Normalised,Ms1.Area,Ms1.Normalised,Ms1.Apex.Area,Ms1.Apex.Mz.Delta,Normalisation.Factor,Quantity.Quality,Empirical.Quality,Normalisation.Noise,Ms1.Profile.Corr,Evidence,Mass.Evidence,Channel.Evidence,Ms1.Total.Signal.Before,Ms1.Total.Signal.After,RT.Start,RT.Stop,FWHM,PG.TopN,PG.MaxLFQ,Genes.TopN,Genes.MaxLFQ,Genes.MaxLFQ.Unique,PG.MaxLFQ.Quality,Genes.MaxLFQ.Quality,Genes.MaxLFQ.Unique.Quality,Q.Value,PEP,Global.Q.Value,Lib.Q.Value,Peptidoform.Q.Value,Global.Peptidoform.Q.Value,Lib.Peptidoform.Q.Value,PTM.Site.Confidence,Site.Occupancy.Probabilities,Protein.Sites,Lib.PTM.Site.Confidence,Translated.Q.Value,Channel.Q.Value,PG.Q.Value,PG.PEP,GG.Q.Value,Protein.Q.Value,Global.PG.Q.Value,Lib.PG.Q.Value,Best.Fr.Mz,Best.Fr.Mz.Delta,Ms2.Scan,Fr.0.Index,Fr.0.Id,Fr.0.Quantity,Fr.0.Score,Fr.1.Index,Fr.1.Id,Fr.1.Quantity,Fr.1.Score,Fr.2.Index,Fr.2.Id,Fr.2.Quantity,Fr.2.Score,Fr.3.Index,Fr.3.Id,Fr.3.Quantity,Fr.3.Score,Fr.4.Index,Fr.4.Id,Fr.4.Quantity,Fr.4.Score,Fr.5.Index,Fr.5.Id,Fr.5.Quantity,Fr.5.Score,Fr.6.Index,Fr.6.Id,Fr.6.Quantity,Fr.6.Score,Fr.7.Index,Fr.7.Id,Fr.7.Quantity,Fr.7.Score,Fr.8.Index,Fr.8.Id,Fr.8.Quantity,Fr.8.Score,Fr.9.Index,Fr.9.Id,Fr.9.Quantity,Fr.9.Score,Fr.10.Index,Fr.10.Id,Fr.10.Quantity,Fr.10.Score,Fr.11.Index,Fr.11.Id,Fr.11.Quantity,Fr.11.Score -0,Run1,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2000000.25,1984732.125,6012342.5,4973213,1232412,0,0.7736825346946716,0.8215332770347595,0.9491070508956909,-0.127797082,0.6448458433151245,5.119085788726807,0,0.7137690782546997,5973495296,6104890880,26.150163650512695,26.442462921142578,0.1435783952474594,0,53768948,0,0,0,0.9792587757110596,0,0,2.913922685365833e-7,4.54065201438425e-7,1.9544228280210518e-7,1.74486572745991e-7,0.001948073,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1675423593260348e-4,2.2968705161474645e-4,1,1.1811954027507454e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,2.44140625e-4,295795,0,y9^1/858.431580,102640.4063,0.9636287689208984,1,y7^1/690.341675,20122.30273,0.9645853638648987,2,y10^1/957.500000,4221.658203,0.4246550500392914,3,b8^1/569.304199,31232.24609,0.8853869438171387,4,y9^2/429.719421,5321.414063,0.39449870586395264,5,b9^1/640.341309,7399.935056,0.7074820399284363,6,b7^1/498.267059,4778.041502,0.8712910413742065,7,y12^1/1215.585205,5221.414063,0.417682409,8,b10^1/711.378418,5331.414063,0.688555121,9,y11^1/1086.542603,5521.414063,0.7300840020179749,10,b6^1/427.229950,4321.414063,0.7281083464622498,11,y4^1/435.219788,3321.414063,0.073952734 -1,Run2,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2000500.35,2013631.5,6032061.5,5102324,1253221,4.2724609375e-4,1.0813568830490112,0.9248327016830444,0.9335431456565857,0.009042856,0.5508553981781006,4.766242504119873,0,0.7685475945472717,4541554176,4435917312,25.857284545898438,26.15038299560547,0.14414852857589722,0,42105744,0,0,0,0.978475034,0,0,2.2170982560965058e-7,4.422577433160768e-7,1.9544228280210518e-7,1.74486572745991e-7,6.454735994338989e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1768859258154407e-4,2.2963430092204362e-4,1,1.190476177725941e-4,1.0840108734555542e-4,1.0612331243464723e-4,640.3413086,-0.002807617,291595,0,y9^1/858.431580,73939.53125,0.9669122099876404,1,y7^1/690.341675,21322.3,0.7487028241157532,2,y10^1/957.500000,5222.868652,0.44808775186538696,3,b8^1/569.304199,33425.83398,0.284358948,4,y9^2/429.719421,5552.36084,0.6579657196998596,5,b9^1/640.341309,7630.881833,0.926406741,6,b7^1/498.267059,4698.988279,0.6208616495132446,7,y12^1/1215.585205,5332.36084,0.1570264846086502,8,b10^1/711.378418,5252.36084,0.7863963842391968,9,y11^1/1086.542603,5652.36084,0.5743991732597351,10,b6^1/427.229950,4552.36084,0.30207791924476624,11,y4^1/435.219788,3552.36084,0.015680965036153793 -2,Run3,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2001000.45,2042530.875,6051780.5,5231435,1274030,0.003662109,1.4800283908843994,0.9242040514945984,0.9096652269363403,0.2408170998096466,0.9109777808189392,5.709319591522217,0,0.9464238286018372,1752253056,1688557440,27.617525100708008,27.911840438842773,0.11598417162895203,0,73938704,0,0,0,0.9832645654678345,0,0,2.8488403813753393e-7,5.492166792464559e-7,1.9544228280210518e-7,1.74486572745991e-7,8.238671580329537e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.2211503053549677e-4,2.437389484839514e-4,1,1.2348727614153177e-4,1.0840108734555542e-4,1.0612331243464723e-4,640.3413086,-0.001708984,311395,0,y9^1/858.431580,102379.3672,0.8809528350830078,1,y7^1/690.341675,22522.29727,0.9320334196090698,2,y10^1/957.500000,6224.079101,0.8154875040054321,3,b8^1/569.304199,35619.42187,0.5835613012313843,4,y9^2/429.719421,5783.307617,0.4513078033924103,5,b9^1/640.341309,1743.066895,0.9340524673461914,6,b7^1/498.267059,4619.935056,0.7005748152732849,7,y12^1/1215.585205,5443.307617,0.7987542748451233,8,b10^1/711.378418,5173.307617,0.48033758997917175,9,y11^1/1086.542603,5783.307617,0.2964768707752228,10,b6^1/427.229950,4783.307617,0.6705795526504517,11,y4^1/435.219788,3783.307617,0.17254789173603058 -3,Run4,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2001500.55,2071430.25,6071499.5,5360546,1294839,0.001281738,1.0961941480636597,0.9021240472793579,0.9170920848846436,-0.110924929,0.706253707,4.492057800292969,0,0.7483969926834106,4410458112,4211434496,25.638751983642578,25.98506736755371,0.1300731599330902,0,44966324,0,0,0,0.9782786965370178,0,0,2.8159496423540986e-7,4.589311117797479e-7,1.9544228280210518e-7,1.74486572745991e-7,0.002136074,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1650937813101336e-4,2.2876751609146595e-4,1,1.1781338253058493e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.00177002,289495,0,y9^1/858.431580,87483.39063,0.7935284376144409,1,y7^1/690.341675,23722.29454,0.5273796916007996,2,y10^1/957.500000,7225.28955,0.5571760535240173,3,b8^1/569.304199,37813.00976,0.23208525776863098,4,y9^2/429.719421,6014.254394,0.648905873,5,b9^1/640.341309,5332.36084,0.7817479372024536,6,b7^1/498.267059,4540.881833,0.5346116423606873,7,y12^1/1215.585205,5554.254394,0.24068021774291992,8,b10^1/711.378418,5094.254394,0.6848428249359131,9,y11^1/1086.542603,5914.254394,0.32643792033195496,10,b6^1/427.229950,5014.254394,0.7794831395149231,11,y4^1/435.219788,4014.254394,0.2992447316646576 -4,Run5,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2002000.65,2100329.625,6091218.5,5489657,1315648,0.001098633,0.5160978436470032,0.9162616729736328,0.9358870983123779,-0.194742888,0.5991845726966858,5.170557975769043,0,0.8274463415145874,6375653376,6178286080,25.463668823242188,25.72978973388672,0.1553127020597458,0,38769268,0,0,0,0.9838945865631104,0,0,1.7771459681625856e-7,3.5023509781240136e-7,1.9544228280210518e-7,1.74486572745991e-7,4.1591108310967684e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1194447870366275e-4,2.2093343432061374e-4,1,1.1309658293612301e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,-9.77E-04,287695,0,y9^1/858.431580,153506.25,0.860227108,1,y7^1/690.341675,24922.29181,0.8670507669448853,2,y10^1/957.500000,8226.499999,0.3764512240886688,3,b8^1/569.304199,40006.59765,0.6166418194770813,4,y9^2/429.719421,6245.201171,0.7852916717529297,5,b9^1/640.341309,4778.041502,0.7290893793106079,6,b7^1/498.267059,4461.82861,0.8512157797813416,7,y12^1/1215.585205,5665.201171,0.44217950105667114,8,b10^1/711.378418,5015.201171,0.6431896090507507,9,y11^1/1086.542603,6045.201171,0.23014047741889954,10,b6^1/427.229950,5245.201171,0.7702154517173767,11,y4^1/435.219788,4245.201171,0.7932649850845337 -5,Run6,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2002500.75,2129229,6110937.5,5618768,1336457,0.001098633,0.5896118879318237,0.923232913,0.9427148699760437,-0.045998894,0.8580753803253174,4.858544826507568,0,0.7851871252059937,5412494336,5126430720,25.698915481567383,25.99173927307129,0.096979544,0,38389224,0,0,0,0.9875781536102295,0,0,1.856734428429263e-7,3.288635070930468e-7,1.9544228280210518e-7,1.74486572745991e-7,0.004961585,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1258725862717256e-4,2.1904605091549456e-4,1,1.1384335084585473e-4,1.0840108734555542e-4,1.0612331243464723e-4,429.71942138671875,-0.001312256,290695,0,y9^1/858.431580,148201.9688,0.9073516130447388,1,y7^1/690.341675,26122.28908,0.7333306074142456,2,y10^1/957.500000,9227.710448,0.49652913212776184,3,b8^1/569.304199,42200.18554,0.3920160233974457,4,y9^2/429.719421,6476.147948,0.8369044661521912,5,b9^1/640.341309,4698.988279,0.8506255745887756,6,b7^1/498.267059,4382.775387,0.8182463645935059,7,y12^1/1215.585205,5776.147948,0.2063419669866562,8,b10^1/711.378418,4936.147948,0.6889411211013794,9,y11^1/1086.542603,6176.147948,0.21369382739067078,10,b6^1/427.229950,5476.147948,0.8870164155960083,11,y4^1/435.219788,4476.147948,0.31518787145614624 -6,Run7,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2003000.85,2158128.375,6130656.5,5747879,1357266,4.8828125e-4,1.1614890098571777,0.9050971269607544,0.933946967,-0.119282782,0.7500326633453369,4.726232051849365,0,0.8604538440704346,4190676736,4112776448,27.27856445,27.517900466918945,0.087783374,0,63085860,0,0,0,0.984515369,0,0,3.538946111802943e-5,6.997288437560201e-5,1.9544228280210518e-7,1.74486572745991e-7,0.001404293,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.1884953710250556e-4,2.3133421200327575e-4,1,1.203079882543534e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,1.220703125e-4,308095,0,y9^1/858.431580,91054.60938,0.8227729201316833,1,y7^1/690.341675,27322.28635,0.8354610204696655,2,y10^1/957.500000,10228.9209,0.7712465524673462,3,b8^1/569.304199,44393.77343,0.5117278695106506,4,y9^2/429.719421,6707.094725,-0.026255654,5,b9^1/640.341309,4619.935056,0.6163007616996765,6,b7^1/498.267059,5221.414063,0.8180134296417236,7,y12^1/1215.585205,5887.094725,0.7299585938453674,8,b10^1/711.378418,4857.094725,0.22520777583122253,9,y11^1/1086.542603,6307.094725,0.26610103249549866,10,b6^1/427.229950,5707.094725,0.6587355136871338,11,y4^1/435.219788,4707.094725,0.1385849416255951 -7,Run8,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,3,0,0,1,678.35,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2003500.95,2187027.75,6150375.5,5876990,1378075,0.001220703,0.5559011101722717,0.9399603009223938,0.9490805864334106,0.067381017,0.9037928581237793,5.247560977935791,0,0.9128645658493042,4810823680,4858950656,25.44921303,25.742422103881836,0.081555597,0,42671760,0,0,0,0.9892690181732178,0,0,1.9544228280210518e-7,3.3489891393401194e-7,1.9544228280210518e-7,1.74486572745991e-7,3.9383862167596817e-4,2.996553957927972e-4,5.146656576471287e-7,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK3,,1,0,0,1.110247612814419e-4,2.2176637139637023e-4,1,1.1224604531889781e-4,1.0840108734555542e-4,1.0612331243464723e-4,690.3416748046875,-9.77E-04,287695,0,y9^1/858.431580,151515.9219,0.9792392253875732,1,y7^1/690.341675,28522.28362,0.9142202734947205,2,y10^1/957.500000,11230.13135,0.7215958833694458,3,b8^1/569.304199,46587.36132,0.19495196640491486,4,y9^2/429.719421,6938.041502,0.774726927,5,b9^1/640.341309,6938.041502,0.8317809700965881,6,b7^1/498.267059,5332.36084,0.9115861654281616,7,y12^1/1215.585205,4778.041502,0.4190266728401184,8,b10^1/711.378418,4778.041502,0.8871794939041138,9,y11^1/1086.542603,6438.041502,0.8353926539421082,10,b6^1/427.229950,5938.041502,0.8530306816101074,11,y4^1/435.219788,4938.041502,0.4969766139984131 -0,Run1,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2004001.05,2215927.125,6170094.5,6006101,1398884,0.002441406,0.7616479992866516,0.7476723790168762,0.9899548292160034,-0.052945156,0.3461257219314575,1.627706527709961,0,0.6698732972145081,5906822144,5662480384,26.27754020690918,26.463232040405273,0.076400347,0,53768948,0,0,0,0.9792587757110596,0,0,6.544411298818886e-4,0.002815925,0.002070931,0.001560513,0.004534268,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1675423593260348e-4,2.2968705161474645e-4,1,1.1811954027507454e-4,1.0840108734555542e-4,1.0612331243464723e-4,429.71942138671875,2.74658203125e-4,296332,0,y9^1/858.431580,19674.51172,-0.005684508,1,y7^1/690.341675,29722.28089,0.39183443784713745,2,y9^2/429.719421,12231.3418,0.7347833514213562,3,b8^1/569.304199,48780.94921,0.096094586,4,y7^2/345.674500,7168.988279,0.37478628754615784,5,b7^1/498.267059,7168.988279,0.7088735103607178,6,b9^1/640.341309,5443.307617,0.4804055392742157,7,b6^1/427.229950,4698.988279,-0.05524461,8,b10^1/711.378418,4698.988279,0.019428946,9,y10^1/957.500000,6568.988279,0,10,y8^1/761.378784,6168.988279,0.009580953,11,b5^1/356.192841,5168.988279,-0.039693564 -1,Run2,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2004501.15,2244826.5,6189813.5,6135212,1419693,0,1.0277941226959229,0.7002038955688477,0.6689087152481079,-0.013279664,0.075294919,1.3314199447631836,0,0.11837191134691238,4392438784,4241816320,25.85157012939453,26.06476402282715,0.092632338,0,42105744,0,0,0,0.978475034,0,0,0.001404837,0.009191917,0.002070931,0.001560513,0.005887166,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1768859258154407e-4,2.2963430092204362e-4,1,1.190476177725941e-4,1.0840108734555542e-4,1.0612331243464723e-4,498.2670593261719,0,292132,0,y9^1/858.431580,6452.367188,-0.158036575,1,y7^1/690.341675,30922.27816,0.031890918,2,y9^2/429.719421,13232.55224,0.17046302556991577,3,b8^1/569.304199,50974.5371,-0.072938785,4,y7^2/345.674500,7399.935056,0,5,b7^1/498.267059,7399.935056,0.24835728108882904,6,b9^1/640.341309,0,0.071428567,7,b6^1/427.229950,4619.935056,0.31205257773399353,8,b10^1/711.378418,4619.935056,0,9,y10^1/957.500000,6699.935056,0.071428567,10,y8^1/761.378784,6399.935056,0.14365364611148834,11,b5^1/356.192841,5399.935056,0.3164454400539398 -2,Run3,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2005001.25,2273725.875,6209532.5,6264323,1440502,0.004150391,1.487552523612976,0.7828665971755981,0.6839308738708496,0.0030193,0.33301427960395813,2.8454606533050537,0,0.575896144,1644299136,1596601600,27.638486862182617,27.906097412109375,0.067620441,0,73938704,0,0,0,0.9832645654678345,0,0,0.001278264,0.008944825,0.002070931,0.001560513,0.008131186,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.2211503053549677e-4,2.437389484839514e-4,1,1.2348727614153177e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-7.32E-04,311632,0,y9^1/858.431580,14263.73145,0.6888699531555176,1,y7^1/690.341675,32122.27543,0.5426011085510254,2,y9^2/429.719421,0,-0.040480696,3,b8^1/569.304199,53168.12499,0.18495593965053558,4,y7^2/345.674500,7630.881833,0.32614174485206604,5,b7^1/498.267059,7630.881833,0.4178531765937805,6,b9^1/640.341309,0,0,7,b6^1/427.229950,4540.881833,0.037963852286338806,8,b10^1/711.378418,4540.881833,0.6775354743003845,9,y10^1/957.500000,6830.881833,0,10,y8^1/761.378784,6630.881833,0.1967964768409729,11,b5^1/356.192841,5630.881833,0.1369970589876175 -3,Run4,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2005501.35,2302625.25,6229251.5,6393434,1461311,0,1.0956181287765503,0.8113372325897217,0.7615056037902832,-0.154439732,0,1.5434247255325317,0,0.12031623721122742,4521091072,4412118016,25.73971176147461,26.006107330322266,0.072686404,0,44966324,0,0,0,0.9782786965370178,0,0,0.001245123,0.008891947,0.002070931,0.001560513,0.007487536,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1650937813101336e-4,2.2876751609146595e-4,1,1.1781338253058493e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.005615234,290032,0,y9^1/858.431580,9819.144531,0.6521614789962769,1,y7^1/690.341675,33322.2727,-0.028485917,2,y9^2/429.719421,15234.97314,0.643043041,3,b8^1/569.304199,55361.71288,0.4810103178024292,4,y7^2/345.674500,0,0,5,b7^1/498.267059,6938.041502,0.045485395938158035,6,b9^1/640.341309,0,-0.051898863,7,b6^1/427.229950,4461.82861,0.3660598397254944,8,b10^1/711.378418,4461.82861,0.021896243,9,y10^1/957.500000,6961.82861,0.27865642309188843,10,y8^1/761.378784,6861.82861,0.17993679642677307,11,b5^1/356.192841,5861.82861,0.07439962 -4,Run5,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2006001.45,2331524.625,6248970.5,6522545,1482120,0.002563477,0.5123195648193359,0.8244078159332275,0.6683515310287476,-0.297664583,0.4175456464290619,2.704219341278076,0,0.6060269474983215,5706509312,5501472256,25.458023071289062,25.724084854125977,0.12983058393001556,0,38769268,0,0,0,0.9838945865631104,0,0,6.192892324179411e-4,0.006148204,0.002070931,0.001560513,0.001650827,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1194447870366275e-4,2.2093343432061374e-4,1,1.1309658293612301e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.001953125,288232,0,y9^1/858.431580,25022.89844,0.7473883628845215,1,y7^1/690.341675,34522.26997,-0.043146659,2,y9^2/429.719421,16236.18359,0.40268921852111816,3,b8^1/569.304199,57555.30077,0.7384170293807983,4,y7^2/345.674500,0,0,5,b7^1/498.267059,7168.988279,-0.012492409,6,b9^1/640.341309,4461.82861,0.31055015325546265,7,b6^1/427.229950,4382.775387,0.4112129807472229,8,b10^1/711.378418,4382.775387,-0.049218785,9,y10^1/957.500000,7092.775387,-0.032381333,10,y8^1/761.378784,7092.775387,-0.115154825,11,b5^1/356.192841,6092.775387,0.20957231521606445 -5,Run6,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2006501.55,2360424,6268689.5,0,1502929,0,0.5988659262657166,0.8162186741828918,0.5860345959663391,-0.086607456,0,0.882223904,0,0,5664380416,5841450496,25.720083236694336,25.853025436401367,0.05675599,0,38389224,0,0,0,0.9875781536102295,0,0,0.002861763,0.024625311,0.002070931,0.001560513,0.009113105,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.1258725862717256e-4,2.1904605091549456e-4,1,1.1384335084585473e-4,1.0840108734555542e-4,1.0612331243464723e-4,858.43157958984375,-0.005310059,290032,0,y9^1/858.431580,6671.251953,0.7648688554763794,1,y7^1/690.341675,35722.26724,-0.030563259,2,y9^2/429.719421,17237.39404,0.21892286837100983,3,b8^1/569.304199,59748.88866,0.2353132963180542,4,y7^2/345.674500,0,-0.037419975,5,b7^1/498.267059,3728.52002,0.11039182543754578,6,b9^1/640.341309,4382.775387,-0.010085775,7,b6^1/427.229950,4303.722164,0.758058488,8,b10^1/711.378418,4303.722164,0.09309829,9,y10^1/957.500000,7223.722164,0.7028805613517761,10,y8^1/761.378784,7323.722164,-0.226211801,11,b5^1/356.192841,6323.722164,0.480023056 -7,Run7,,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,MKWVTFISLLFLFSSAYSRG,4,1,0,1,523.26,P69905,P69905,P69905,,32.45,87.2,31.87,85.9,0,0,0,0,2007001.65,2389323.375,6288408.5,6780767,1523738,0,0.5563687086105347,0.8212248682975769,0.8553768396377563,-0.020479461,0.16043028235435486,2.240114212036133,0,0.5191697478294373,5205047296,4810823680,25.49679946899414,25.63015365600586,0.050942726,0,42671760,0,0,0,0.9892690181732178,0,0,8.211528765968978e-4,0.007439667,0.002070931,0.001560513,0.007191904,0.002070931,0.001560513,1,AAAAAAAAAAEEESEEEVEEVPAPSASSNK4,,1,0,0,1.110247612814419e-4,2.2176637139637023e-4,1,1.1224604531889781e-4,1.0840108734555542e-4,1.0612331243464723e-4,429.71942138671875,-9.16E-05,287632,0,y9^1/858.431580,12305.23047,0.51445365,1,y7^1/690.341675,36922.26451,-0.036980223,2,y9^2/429.719421,18238.60449,0.8040527701377869,3,b8^1/569.304199,61942.47655,0.15852494537830353,4,y7^2/345.674500,7999.78302001953125,0.23178376257419586,5,b7^1/498.267059,0,0,6,b9^1/640.341309,4303.722164,0.23178376257419586,7,b6^1/427.229950,0,0,8,b10^1/711.378418,4224.668941,-0.036292803,9,y10^1/957.500000,7354.668941,0.19903361797332764,10,y8^1/761.378784,7554.668941,0.18090558052062988,11,b5^1/356.192841,6554.668941,0.9589868187904358 diff --git a/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R b/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R index 275bbeaf..94e3b617 100644 --- a/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R +++ b/inst/tinytest/test_converters_DIANNtoMSstatsFormat.R @@ -19,9 +19,9 @@ expect_true("BioReplicate" %in% colnames(output)) expect_true("Fraction" %in% colnames(output)) # Test DIANNtoMSstatsFormat DIANN 2.0 ------------------------ -input_file_path = system.file("tinytest/raw_data/DIANN/diann_input_2.0.csv", package="MSstatsConvert") +input_file_path = system.file("tinytest/raw_data/DIANN/diann_2.0.parquet", package="MSstatsConvert") annotation_file_path = system.file("tinytest/raw_data/DIANN/annotation_diann_2.0.csv", package = "MSstatsConvert") -input = data.table::fread(input_file_path) +input = arrow::read_parquet(input_file_path) annot = data.table::fread(annotation_file_path) output = DIANNtoMSstatsFormat(input, annotation = annot, MBR = FALSE, use_log_file = FALSE, quantificationColumn = 'auto') expect_equal(ncol(output), 11) diff --git a/man/DIANNtoMSstatsFormat.Rd b/man/DIANNtoMSstatsFormat.Rd index c702e644..93b27a88 100644 --- a/man/DIANNtoMSstatsFormat.Rd +++ b/man/DIANNtoMSstatsFormat.Rd @@ -80,7 +80,6 @@ data.frame in the MSstats required format. Import Diann files } \examples{ -# For DIANN 2.0, set quantificationColumn = 'auto' input_file_path = system.file("tinytest/raw_data/DIANN/diann_input.tsv", package="MSstatsConvert") annotation_file_path = system.file("tinytest/raw_data/DIANN/annotation.csv", @@ -92,11 +91,11 @@ output = DIANNtoMSstatsFormat(input, annotation = annot, MBR = FALSE, head(output) # For DIANN 2.0, set quantificationColumn = 'auto' -input_file_path_2_0 = system.file("tinytest/raw_data/DIANN/diann_input_2.0.csv", +input_file_path_2_0 = system.file("tinytest/raw_data/DIANN/diann_2.0.parquet", package="MSstatsConvert") annotation_file_path_2_0 = system.file("tinytest/raw_data/DIANN/annotation_diann_2.0.csv", package = "MSstatsConvert") -input_2_0 = data.table::fread(input_file_path_2_0) +input_2_0 = arrow::read_parquet(input_file_path_2_0) annot_2_0 = data.table::fread(annotation_file_path_2_0) output_2_0 = DIANNtoMSstatsFormat(input_2_0, annotation = annot_2_0, MBR = FALSE, use_log_file = FALSE, quantificationColumn = 'auto') From 2ed89d43005ec75ce7b3cf40ef30817adbd75174 Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Tue, 22 Jul 2025 14:04:54 -0400 Subject: [PATCH 5/7] update documentation for quantificationColumn --- R/converters_DIANNtoMSstatsFormat.R | 6 +++--- man/DIANNtoMSstatsFormat.Rd | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/R/converters_DIANNtoMSstatsFormat.R b/R/converters_DIANNtoMSstatsFormat.R index 950c0b66..56d1bf0d 100644 --- a/R/converters_DIANNtoMSstatsFormat.R +++ b/R/converters_DIANNtoMSstatsFormat.R @@ -20,9 +20,9 @@ #' @param removeFewMeasurements should proteins with few measurements be removed #' @param removeOxidationMpeptides should peptides with oxidation be removed #' @param removeProtein_with1Feature should proteins with a single feature be removed -#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities. -#' 'FragmentQuantRaw' can be used instead. -#' 'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity. +#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities for DIANN 1.8.x. +#' Use 'FragmentQuantRaw' for quantified intensities for DIANN 1.9.x. +#' Use 'auto' for quantified intensities for DIANN 2.x where each fragment intensity is a separate column, e.g. Fr0Quantity. #' @param ... additional parameters to `data.table::fread`. #' #' @return data.frame in the MSstats required format. diff --git a/man/DIANNtoMSstatsFormat.Rd b/man/DIANNtoMSstatsFormat.Rd index 93b27a88..269db0a3 100644 --- a/man/DIANNtoMSstatsFormat.Rd +++ b/man/DIANNtoMSstatsFormat.Rd @@ -67,9 +67,9 @@ If \code{append = TRUE}, has to be a valid path to a file.} \item{MBR}{True if analysis was done with match between runs} -\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. -'FragmentQuantRaw' can be used instead. -'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity.} +\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities for DIANN 1.8.x. +Use 'FragmentQuantRaw' for quantified intensities for DIANN 1.9.x. +Use 'auto' for quantified intensities for DIANN 2.x where each fragment intensity is a separate column, e.g. Fr0Quantity.} \item{...}{additional parameters to \code{data.table::fread}.} } From 41ea1aa3c0f350311b19902c57f01578518abb12 Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Tue, 22 Jul 2025 14:37:13 -0400 Subject: [PATCH 6/7] edit docs for clean diann function --- R/clean_DIANN.R | 6 +++--- man/MSstatsClean.Rd | 6 +++--- man/dot-cleanRawDIANN.Rd | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/R/clean_DIANN.R b/R/clean_DIANN.R index 3759a7ce..525e5c94 100644 --- a/R/clean_DIANN.R +++ b/R/clean_DIANN.R @@ -1,9 +1,9 @@ #' Clean raw Diann files #' @param msstats_object an object of class `MSstatsDIANNFiles`. #' @param MBR True if analysis was done with match between runs -#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities. -#' 'FragmentQuantRaw' can be used instead. -#' 'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity. +#' @param quantificationColumn Use 'FragmentQuantCorrected'(default) column for quantified intensities for DIANN 1.8.x. +#' Use 'FragmentQuantRaw' for quantified intensities for DIANN 1.9.x. +#' Use 'auto' for quantified intensities for DIANN 2.x where each fragment intensity is a separate column, e.g. Fr0Quantity. #' @return data.table #' @importFrom stats na.omit #' @keywords internal diff --git a/man/MSstatsClean.Rd b/man/MSstatsClean.Rd index 7e94b964..dbe04478 100644 --- a/man/MSstatsClean.Rd +++ b/man/MSstatsClean.Rd @@ -116,9 +116,9 @@ removed based on the IsUnique column from Philosopher output} \item{MBR}{True if analysis was done with match between runs} -\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. -'FragmentQuantRaw' can be used instead. -'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity.} +\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities for DIANN 1.8.x. +Use 'FragmentQuantRaw' for quantified intensities for DIANN 1.9.x. +Use 'auto' for quantified intensities for DIANN 2.x where each fragment intensity is a separate column, e.g. Fr0Quantity.} \item{qvalue_cutoff}{The q-value cutoff for filtering peaks detected by MBR} } diff --git a/man/dot-cleanRawDIANN.Rd b/man/dot-cleanRawDIANN.Rd index c17556bb..118195e7 100644 --- a/man/dot-cleanRawDIANN.Rd +++ b/man/dot-cleanRawDIANN.Rd @@ -15,9 +15,9 @@ \item{MBR}{True if analysis was done with match between runs} -\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities. -'FragmentQuantRaw' can be used instead. -'auto' should be used for DIANN 2.0 where each fragment intensity is a separate column, e.g. Fr0Quantity.} +\item{quantificationColumn}{Use 'FragmentQuantCorrected'(default) column for quantified intensities for DIANN 1.8.x. +Use 'FragmentQuantRaw' for quantified intensities for DIANN 1.9.x. +Use 'auto' for quantified intensities for DIANN 2.x where each fragment intensity is a separate column, e.g. Fr0Quantity.} } \value{ data.table From 67f51af4d699926bef59e200ef5bf9b191b6b889 Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Tue, 22 Jul 2025 14:42:34 -0400 Subject: [PATCH 7/7] refactor DIANN code to be more readable --- R/clean_DIANN.R | 236 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 172 insertions(+), 64 deletions(-) diff --git a/R/clean_DIANN.R b/R/clean_DIANN.R index 525e5c94..97272d0e 100644 --- a/R/clean_DIANN.R +++ b/R/clean_DIANN.R @@ -7,69 +7,177 @@ #' @return data.table #' @importFrom stats na.omit #' @keywords internal -.cleanRawDIANN = function(msstats_object, MBR = TRUE, - quantificationColumn = "FragmentQuantCorrected") { - dn_input = getInputFile(msstats_object, "input") - dn_input = data.table::as.data.table(dn_input) - - # Auto-detect and collapse multiple fragment columns (DIANN 2.0 format) - if (quantificationColumn == "auto") { - fragment_columns <- grep("^Fr[0-9]+Quantity$", names(dn_input), value = TRUE) - if (length(fragment_columns) == 0) { - stop("No fragment quantification columns found. Please check your input.") - } - dn_input[, FragmentQuantCorrected := do.call(paste, c(.SD, sep = ";")), - .SDcols = fragment_columns] - quantificationColumn <- "FragmentQuantCorrected" - } +.cleanRawDIANN <- function(msstats_object, MBR = TRUE, + quantificationColumn = "FragmentQuantCorrected") { + dn_input <- getInputFile(msstats_object, "input") + dn_input <- data.table::as.data.table(dn_input) + + # Process quantification columns + quantificationColumn <- .cleanDIANNProcessQuantificationColumns(dn_input, quantificationColumn) + + # Add missing columns + dn_input <- .cleanDIANNAddMissingColumns(dn_input) + + # Select required columns + dn_input <- .cleanDIANNSelectRequiredColumns(dn_input, quantificationColumn, MBR) + + # Split concatenated values + dn_input <- .cleanDIANNSplitConcatenatedValues(dn_input, quantificationColumn) + + # Process fragment information + dn_input <- .cleanDIANNProcessFragmentInfo(dn_input, quantificationColumn) + + # Clean and filter data + dn_input <- .cleanDIANNCleanAndFilterData(dn_input, quantificationColumn) + + # Rename columns + dn_input <- .cleanDIANNRenameColumns(dn_input, quantificationColumn) + + .logSuccess("DIANN", "clean") + dn_input +} + +#' Process quantification columns for DIANN 2.0 format +#' @param dn_input data.table input +#' @param quantificationColumn quantification column name +#' @return updated quantification column name +#' @noRd +.cleanDIANNProcessQuantificationColumns <- function(dn_input, quantificationColumn) { + if (quantificationColumn == "auto") { + fragment_columns <- grep("^Fr[0-9]+Quantity$", names(dn_input), value = TRUE) + if (length(fragment_columns) == 0) { + stop("No fragment quantification columns found. Please check your input.") + } + dn_input[, FragmentQuantCorrected := do.call(paste, c(.SD, sep = ";")), + .SDcols = fragment_columns] + quantificationColumn <- "FragmentQuantCorrected" + } + return(quantificationColumn) +} + +#' Add missing required columns +#' @param dn_input data.table input +#' @return data.table with missing columns added +#' @noRd +.cleanDIANNAddMissingColumns <- function(dn_input) { + if (!is.element("PrecursorMz", colnames(dn_input))) { + dn_input[, PrecursorMz := NA] + } + if (!is.element('FragmentInfo', colnames(dn_input))) { + dn_input[, FragmentInfo := NA] + } + return(dn_input) +} + +#' Select required columns based on MBR setting +#' @param dn_input data.table input +#' @param quantificationColumn quantification column name +#' @param MBR logical indicating if match between runs was used +#' @return data.table with selected columns +#' @noRd +.cleanDIANNSelectRequiredColumns <- function(dn_input, quantificationColumn, MBR) { + base_cols <- c('ProteinNames', 'StrippedSequence', 'ModifiedSequence', + 'PrecursorCharge', quantificationColumn, 'QValue', + 'PrecursorMz', 'FragmentInfo', 'Run') + + mbr_cols <- if (MBR) { + c('LibQValue', 'LibPGQValue') + } else { + c('GlobalQValue', 'GlobalPGQValue') + } + + req_cols <- c(base_cols, mbr_cols) + return(dn_input[, req_cols, with = FALSE]) +} - if (!is.element("PrecursorMz", colnames(dn_input))) { - dn_input[, PrecursorMz := NA] - } - if (!is.element('FragmentInfo', colnames(dn_input))) { - dn_input[, FragmentInfo := NA] - } - req_cols = c('ProteinNames', 'StrippedSequence', - 'ModifiedSequence', 'PrecursorCharge', - quantificationColumn, 'QValue', - 'PrecursorMz', 'FragmentInfo', 'Run') - if (MBR) { - req_cols = c(req_cols, c('LibQValue', 'LibPGQValue')) - } else{ - req_cols = c(req_cols, c('GlobalQValue', 'GlobalPGQValue')) - } - dn_input = dn_input[, req_cols, with = FALSE] - dn_input = dn_input[, lapply(.SD, function(x) unlist(tstrsplit(x, ";"))), - .SDcols = c(quantificationColumn, "FragmentInfo"), - by = setdiff(colnames(dn_input), c("FragmentInfo", quantificationColumn))] - if (all(is.na(dn_input[["FragmentInfo"]]))) { - dn_input[, FragmentInfo := paste0("Frag", 1:.N), - by = c("ProteinNames", "ModifiedSequence", "PrecursorCharge", "Run")] - } - dn_input[, (quantificationColumn) := lapply(.SD, as.numeric), .SDcols = quantificationColumn] - dn_input[, FragmentIon := sub('\\^\\.\\*', '', FragmentInfo)] - if (any(grepl("/", dn_input$FragmentInfo))) { - dn_input[, ProductCharge := unlist(strsplit(FragmentInfo, split = "/"))[[1]], by = FragmentInfo] - dn_input[, ProductCharge := strtoi(sub("\\.\\*\\^", "", ProductCharge))] - } else { - dn_input[, ProductCharge := 1] - } - dn_input = dn_input[!grepl("NH3", FragmentIon), ] - dn_input = dn_input[!grepl("H2O", FragmentIon), ] - dn_input = na.omit(dn_input, cols = quantificationColumn) - data.table::setnames(dn_input, old = c('ProteinNames', 'StrippedSequence', - 'ModifiedSequence','PrecursorCharge', - quantificationColumn, 'QValue', - 'PrecursorMz', 'FragmentIon','Run', - 'ProductCharge'), - new = c('ProteinName', 'PeptideSequence', - 'PeptideModifiedSequence','PrecursorCharge', - 'Intensity', 'DetectionQValue', - 'PrecursorMz', 'FragmentIon','Run', - 'ProductCharge'), - skip_absent = TRUE) - dn_input[, PeptideSequence := NULL] - setnames(dn_input, "PeptideModifiedSequence", "PeptideSequence") - .logSuccess("DIANN", "clean") - dn_input +#' Split concatenated values in quantification and fragment info columns +#' @param dn_input data.table input +#' @param quantificationColumn quantification column name +#' @return data.table with split values +#' @noRd +.cleanDIANNSplitConcatenatedValues <- function(dn_input, quantificationColumn) { + split_cols <- c(quantificationColumn, "FragmentInfo") + by_cols <- setdiff(colnames(dn_input), split_cols) + + dn_input <- dn_input[, lapply(.SD, function(x) unlist(tstrsplit(x, ";"))), + .SDcols = split_cols, + by = by_cols] + return(dn_input) } + +#' Process fragment information and add derived columns +#' @param dn_input data.table input +#' @param quantificationColumn quantification column name +#' @return data.table with processed fragment info +#' @noRd +.cleanDIANNProcessFragmentInfo <- function(dn_input, quantificationColumn) { + # Generate fragment info if missing + if (all(is.na(dn_input[["FragmentInfo"]]))) { + dn_input[, FragmentInfo := paste0("Frag", 1:.N), + by = c("ProteinNames", "ModifiedSequence", "PrecursorCharge", "Run")] + } + + # Convert quantification column to numeric + dn_input[, (quantificationColumn) := lapply(.SD, as.numeric), + .SDcols = quantificationColumn] + + # Process fragment ion information + dn_input[, FragmentIon := sub('\\^\\.\\*', '', FragmentInfo)] + + # Extract product charge + if (any(grepl("/", dn_input$FragmentInfo))) { + dn_input[, ProductCharge := .cleanDIANNExtractProductCharge(FragmentInfo), by = FragmentInfo] + } else { + dn_input[, ProductCharge := 1] + } + + return(dn_input) +} + +#' Extract product charge from fragment info +#' @param fragment_info fragment information string +#' @return numeric product charge +#' @noRd +.cleanDIANNExtractProductCharge <- function(fragment_info) { + charge_part <- unlist(strsplit(fragment_info, split = "/"))[[1]] + return(strtoi(sub("\\.\\*\\^", "", charge_part))) +} + +#' Clean and filter data by removing unwanted fragments and NA values +#' @param dn_input data.table input +#' @param quantificationColumn quantification column name +#' @return cleaned data.table +#' @noRd +.cleanDIANNCleanAndFilterData <- function(dn_input, quantificationColumn) { + # Remove NH3 and H2O loss fragments + dn_input <- dn_input[!grepl("NH3", FragmentIon)] + dn_input <- dn_input[!grepl("H2O", FragmentIon)] + + # Remove rows with NA in quantification column + dn_input <- na.omit(dn_input, cols = quantificationColumn) + + return(dn_input) +} + +#' Rename columns to standardized names +#' @param dn_input data.table input +#' @param quantificationColumn quantification column name +#' @return data.table with renamed columns +#' @noRd +.cleanDIANNRenameColumns <- function(dn_input, quantificationColumn) { + old_names <- c('ProteinNames', 'StrippedSequence', 'ModifiedSequence', + 'PrecursorCharge', quantificationColumn, 'QValue', + 'PrecursorMz', 'FragmentIon', 'Run', 'ProductCharge') + + new_names <- c('ProteinName', 'PeptideSequence', 'PeptideModifiedSequence', + 'PrecursorCharge', 'Intensity', 'DetectionQValue', + 'PrecursorMz', 'FragmentIon', 'Run', 'ProductCharge') + + data.table::setnames(dn_input, old = old_names, new = new_names, skip_absent = TRUE) + + # Clean up peptide sequence columns + dn_input[, PeptideSequence := NULL] + setnames(dn_input, "PeptideModifiedSequence", "PeptideSequence") + + return(dn_input) +} \ No newline at end of file