From b3813befd66ef8b8d4cb4ff86479f8f088353902 Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Mon, 30 Mar 2026 13:32:56 -0400 Subject: [PATCH 01/14] original implementation of spectronaut converter updates --- R/clean_Spectronaut.R | 240 ++++++++++++++++-- R/converters_SpectronauttoMSstatsFormat.R | 71 ++++-- .../boxcar_protein_turnover_input.csv | 86 +++++++ .../raw_data/Spectronaut/run_order.csv | 41 +++ inst/tinytest/test_clean_Spectronaut.R | 8 +- ...st_converters_SpectronauttoMSstatsFormat.R | 28 +- .../test_spectronaut_protein_turnover.R | 154 +++++++++++ 7 files changed, 580 insertions(+), 48 deletions(-) create mode 100644 inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv create mode 100644 inst/tinytest/raw_data/Spectronaut/run_order.csv create mode 100644 inst/tinytest/test_spectronaut_protein_turnover.R diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index 90f45da9..8bbe0dff 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -4,29 +4,47 @@ #' @return `data.table` #' @keywords internal .cleanRawSpectronaut = function(msstats_object, intensity, - calculateAnomalyScores, - anomalyModelFeatures) { + calculateAnomalyScores, + anomalyModelFeatures, + heavyLabel = NULL, + labelColumn = "FG.LabeledSequence") { FFrgLossType = FExcludedFromQuantification = NULL - + spec_input = getInputFile(msstats_object, "input") .validateSpectronautInput(spec_input) + + # --- Normalize missing columns that vary across Spectronaut report formats --- + spec_input = .addMissingSpectronautColumns(spec_input) + spec_input = spec_input[FFrgLossType == "noloss", ] f_charge_col = .findAvailable(c("FCharge", "FFrgZ"), colnames(spec_input)) pg_qval_col = .findAvailable(c("PGQvalue"), colnames(spec_input)) - interference_col = .findAvailable(c("FPossibleInterference"), + interference_col = .findAvailable(c("FPossibleInterference"), colnames(spec_input)) - exclude_col = .findAvailable(c("FExcludedFromQuantification"), + exclude_col = .findAvailable(c("FExcludedFromQuantification"), colnames(spec_input)) - intensity_column_mapping = c( - "PeakArea" = "FPeakArea", - "NormalizedPeakArea" = "FNormalizedPeakArea", - "MS1Quantity" = "FGMS1Quantity" - ) - intensity = match.arg(intensity, names(intensity_column_mapping)) - intensity_column = intensity_column_mapping[[intensity]] - cols = c("PGProteinGroups", "EGModifiedSequence", "FGCharge", "FFrgIon", - f_charge_col, "RFileName", "RCondition", "RReplicate", + + # Resolve intensity column: accepts enum alias OR raw standardized column name + intensity_column = .resolveSpectronautIntensityColumn(intensity, colnames(spec_input)) + + # Resolve peptide sequence column: prefer EGModifiedSequence, fall back to + # FGLabeledSequence (protein turnover format uses FG.LabeledSequence) + peptide_col = .findAvailable(c("EGModifiedSequence", "FGLabeledSequence"), + colnames(spec_input)) + + # Resolve protein name column: prefer PGProteinGroups, fall back to + # PGProteinAccessions (protein turnover format omits PG.ProteinGroups) + protein_col = .findAvailable(c("PGProteinGroups", "PGProteinAccessions"), + colnames(spec_input)) + + # Resolve BioReplicate column: prefer RReplicate, fall back to RCondition + # (protein turnover format does not include R.Replicate) + replicate_col = .findAvailable(c("RReplicate", "RCondition"), + colnames(spec_input)) + + cols = c(protein_col, peptide_col, "FGCharge", "FFrgIon", + f_charge_col, "RFileName", "RCondition", replicate_col, "EGQvalue", pg_qval_col, interference_col, exclude_col, intensity_column) if (calculateAnomalyScores){ @@ -34,30 +52,206 @@ } cols = intersect(cols, colnames(spec_input)) spec_input = spec_input[, cols, with = FALSE] + data.table::setnames( - spec_input, - c("PGProteinGroups", "EGModifiedSequence", "FGCharge", "FFrgIon", - f_charge_col, "RFileName", intensity_column, - "RCondition", "RReplicate"), + spec_input, + c(protein_col, peptide_col, "FGCharge", "FFrgIon", + f_charge_col, "RFileName", intensity_column, + "RCondition", replicate_col), c("ProteinName", "PeptideSequence", "PrecursorCharge", "FragmentIon", - "ProductCharge", "Run", "Intensity", "Condition", "BioReplicate"), + "ProductCharge", "Run", "Intensity", "Condition", "BioReplicate"), skip_absent = TRUE) + + # Assign IsotopeLabelType based on heavy label detection when requested + spec_input = .assignSpectronautIsotopeLabelType( + spec_input, heavyLabel, labelColumn, msstats_object) + .logSuccess("Spectronaut", "clean") spec_input } + +#' Add synthetic columns that are absent in protein turnover Spectronaut reports. +#' +#' Spectronaut's protein turnover export omits several columns that the +#' standard MSstats pipeline expects. Rather than requiring callers to patch +#' the data frame before passing it in (the "hacks" documented in the design +#' document), we synthesize sensible defaults here so the rest of the pipeline +#' sees a consistent schema. +#' +#' Columns synthesized when absent: +#' \describe{ +#' \item{FFrgLossType}{"noloss" — the filter \code{spec_input[FFrgLossType == "noloss"]} +#' keeps all rows, which is the correct behavior when the column is missing.} +#' \item{FExcludedFromQuantification}{FALSE — no rows are excluded.} +#' \item{FFrgIon}{NA — fragment ion identity is not available at the precursor +#' level used by MS1-based protein turnover workflows.} +#' \item{FCharge}{NA — product charge is not applicable when fragment-level +#' columns are absent.} +#' } +#' +#' @param spec_input `data.table` with standardized column names. +#' @return `data.table` with missing columns added. +#' @keywords internal +.addMissingSpectronautColumns = function(spec_input) { + if (!("FFrgLossType" %in% colnames(spec_input))) { + spec_input[, FFrgLossType := "noloss"] + } + if (!("FExcludedFromQuantification" %in% colnames(spec_input))) { + spec_input[, FExcludedFromQuantification := FALSE] + } + if (!("FFrgIon" %in% colnames(spec_input))) { + spec_input[, FFrgIon := NA_character_] + } + if (!("FCharge" %in% colnames(spec_input))) { + spec_input[, FCharge := NA_integer_] + } + spec_input +} + + +#' Resolve the Spectronaut intensity column from user input. +#' +#' Accepts either a legacy enum alias or a raw (standardized) column name. +#' The legacy aliases map to their canonical standardized column names so that +#' old code continues to work unchanged. When the user passes a raw column +#' name (e.g. \code{"FGMS1Quantity"} or \code{"FGMS2Quantity"}), it is used +#' directly after verifying that the column exists. +#' +#' @param intensity Character scalar: enum alias or raw column name. +#' @param available_cols Character vector of available standardized column names. +#' @return The resolved standardized column name. +#' @keywords internal +.resolveSpectronautIntensityColumn = function(intensity, available_cols) { + legacy_mapping = c( + "PeakArea" = "FPeakArea", + "NormalizedPeakArea" = "FNormalizedPeakArea", + "MS1Quantity" = "FGMS1Quantity", + "MS2Quantity" = "FGMS2Quantity" + ) + + if (intensity %in% names(legacy_mapping)) { + resolved = legacy_mapping[[intensity]] + } else { + # Treat as a raw standardized column name + resolved = intensity + } + + if (!(resolved %in% available_cols)) { + stop(paste0( + "Intensity column '", resolved, "' not found in input data. ", + "Available columns include: ", + paste(grep("Quantity|PeakArea", available_cols, value = TRUE), collapse = ", ") + )) + } + resolved +} + + +#' Assign IsotopeLabelType based on heavy label detection. +#' +#' When \code{heavyLabel} is provided, each row is classified as heavy +#' (\code{"H"}), light (\code{"L"}), or unlabeled (\code{NA}) by inspecting +#' the labeled sequence column for the presence of the label tag. +#' +#' In Spectronaut protein turnover reports, heavy peptides appear in +#' \code{FG.LabeledSequence} with a bracketed modification, e.g. +#' \code{_PEPTIDEK[Lys6]_}. Any sequence that contains +#' \code{[]} is classified as heavy; all others are light. +#' Sequences that belong to peptide families that cannot carry the label +#' (i.e. the same stripped sequence never appears in a heavy form in the +#' entire dataset) are classified as \code{NA}. +#' +#' When \code{heavyLabel} is \code{NULL} the column is left untouched so +#' that the downstream \code{columns_to_fill} default of \code{"L"} applies, +#' preserving backwards compatibility. +#' +#' @param spec_input `data.table` after column renaming. +#' @param heavyLabel Character scalar heavy label name (e.g. \code{"Lys6"}), +#' or \code{NULL}. +#' @param labelColumn Raw (dot-separated) column name that holds the labeled +#' sequence (e.g. \code{"FG.LabeledSequence"}). +#' @param msstats_object The original MSstats object (used to access the +#' standardized label column after import). +#' @return `data.table` with \code{IsotopeLabelType} column added or updated. +#' @keywords internal +.assignSpectronautIsotopeLabelType = function(spec_input, heavyLabel, + labelColumn, msstats_object) { + IsotopeLabelType = PeptideSequence = NULL + + if (is.null(heavyLabel)) { + return(spec_input) + } + + # The label column may have already been renamed to PeptideSequence if it was + # the chosen peptide column. We need the original labeled sequence values. + # Retrieve them from the cleaned input (PeptideSequence column). + if (!("PeptideSequence" %in% colnames(spec_input))) { + msg = paste0("Cannot assign IsotopeLabelType: 'PeptideSequence' column ", + "not found after cleaning. Skipping label assignment.") + getOption("MSstatsLog")("WARN", msg) + getOption("MSstatsMsg")("WARN", msg) + return(spec_input) + } + + heavy_pattern = paste0("[", heavyLabel, "]") + + spec_input[, IsotopeLabelType := data.table::fifelse( + grepl(heavy_pattern, PeptideSequence, fixed = TRUE), + "H", + "L" + )] + + # Identify stripped sequences that appear ONLY as light (no heavy counterpart + # exists anywhere in the dataset). These peptides cannot be labelled and + # should receive NA rather than "L" to distinguish them from the light + # channel of a quantified heavy/light pair. + stripped_col = .findAvailable( + c("PEPStrippedSequence", "PeptideSequence"), colnames(spec_input)) + + if (!is.null(stripped_col) && stripped_col != "PeptideSequence") { + heavy_sequences = spec_input[IsotopeLabelType == "H", + unique(get(stripped_col))] + spec_input[IsotopeLabelType == "L" & + !(get(stripped_col) %in% heavy_sequences), + IsotopeLabelType := NA_character_] + } + + msg = paste0("** IsotopeLabelType assigned using heavy label: '", heavyLabel, + "'. Heavy (H): ", + sum(spec_input$IsotopeLabelType == "H", na.rm = TRUE), + ", Light (L): ", + sum(spec_input$IsotopeLabelType == "L", na.rm = TRUE), + ", Unlabeled (NA): ", + sum(is.na(spec_input$IsotopeLabelType))) + getOption("MSstatsLog")("INFO", msg) + getOption("MSstatsMsg")("INFO", msg) + + spec_input +} + + #' Helper method to validate input has necessary columns #' @param spec_input dataframe input #' @noRd .validateSpectronautInput = function(spec_input) { - required_columns = c( - "FFrgLossType", "FExcludedFromQuantification", "PGProteinGroups", - "FGCharge") + # Only FGCharge is truly required; all other formerly-required columns are + # either synthesized by .addMissingSpectronautColumns or detected via + # .findAvailable fallbacks so that protein turnover reports (which omit + # several standard columns) are handled without pre-processing by the caller. + required_columns = c("FGCharge") missing_columns = setdiff(required_columns, colnames(spec_input)) if (length(missing_columns) > 0) { - msg = paste("The following columns are missing from the input data:", + msg = paste("The following columns are missing from the input data:", paste(missing_columns, sep = ", ", collapse = ", ")) getOption("MSstatsLog")("ERROR", msg) stop(msg) } + # Ensure at least one protein name column is present + if (!any(c("PGProteinGroups", "PGProteinAccessions") %in% colnames(spec_input))) { + msg = paste("The following columns are missing from the input data:", + "PGProteinGroups") + getOption("MSstatsLog")("ERROR", msg) + stop(msg) + } } diff --git a/R/converters_SpectronauttoMSstatsFormat.R b/R/converters_SpectronauttoMSstatsFormat.R index bf53f1cc..8590ea0a 100644 --- a/R/converters_SpectronauttoMSstatsFormat.R +++ b/R/converters_SpectronauttoMSstatsFormat.R @@ -1,9 +1,29 @@ #' Import Spectronaut files -#' +#' #' @param input name of Spectronaut output, which is long-format. ProteinName, PeptideSequence, PrecursorCharge, FragmentIon, ProductCharge, IsotopeLabelType, Condition, BioReplicate, Run, Intensity, F.ExcludedFromQuantification are required. Rows with F.ExcludedFromQuantification=True will be removed. #' @param annotation name of 'annotation.txt' data which includes Condition, BioReplicate, Run. If annotation is already complete in Spectronaut, use annotation=NULL (default). It will use the annotation information from input. -#' @param intensity 'PeakArea'(default) uses not normalized MS2 peak area. 'NormalizedPeakArea' uses MS2 peak area normalized by Spectronaut. -#' 'MS1Quantity' uses MS1 level quantification, which should be used if MS2 is unreliable. +#' @param intensity Intensity column to use. Accepts legacy enum values +#' \code{'PeakArea'} (default, uses F.PeakArea), \code{'NormalizedPeakArea'} +#' (uses F.NormalizedPeakArea), \code{'MS1Quantity'} (uses FG.MS1Quantity), +#' or \code{'MS2Quantity'} (uses FG.MS2Quantity). Can also be any raw +#' Spectronaut column name passed as a string (e.g. +#' \code{"FG.MS1Quantity"}); the column name is standardized internally. +#' For protein turnover workflows the recommended default is +#' \code{'MS1Quantity'} (FG.MS1Quantity). +#' @param heavyLabel Character string identifying the heavy isotope label as it +#' appears inside square brackets in the labeled sequence column, e.g. +#' \code{"Lys6"} matches peptides containing \code{[Lys6]}. Supports any +#' novel label name reported by Spectronaut (e.g. \code{"Leu6"}, +#' \code{"Phe10"}, \code{"Lys8"}). When provided, each peptide is +#' classified as heavy (\code{IsotopeLabelType = "H"}), light +#' (\code{IsotopeLabelType = "L"}), or unlabeled +#' (\code{IsotopeLabelType = NA}) based on its labeled sequence. When +#' \code{NULL} (default) all peptides receive \code{IsotopeLabelType = "L"} +#' as in previous versions. +#' @param labelColumn Name of the Spectronaut column that contains the labeled +#' peptide sequence used for heavy/light classification. Defaults to +#' \code{"FG.LabeledSequence"}. The value is standardized internally +#' (dots and spaces removed) before column lookup. #' @param excludedFromQuantificationFilter Remove rows with F.ExcludedFromQuantification=TRUE Default is TRUE. #' @param filter_with_Qvalue FALSE(default) will not perform any filtering. TRUE will filter out the intensities that have greater than qvalue_cutoff in EG.Qvalue column. Those intensities will be replaced with zero and will be considered as censored missing values for imputation purpose. #' @param qvalue_cutoff Cutoff for EG.Qvalue. default is 0.01. @@ -33,8 +53,10 @@ #' head(spectronaut_imported) #' SpectronauttoMSstatsFormat = function( - input, annotation = NULL, - intensity = c('PeakArea', 'NormalizedPeakArea', 'MS1Quantity'), + input, annotation = NULL, + intensity = c('PeakArea', 'NormalizedPeakArea', 'MS1Quantity', 'MS2Quantity'), + heavyLabel = NULL, + labelColumn = "FG.LabeledSequence", excludedFromQuantificationFilter = TRUE, filter_with_Qvalue = FALSE, qvalue_cutoff = 0.01, useUniquePeptide = TRUE, removeFewMeasurements=TRUE, @@ -47,10 +69,22 @@ SpectronauttoMSstatsFormat = function( use_log_file = TRUE, append = FALSE, verbose = TRUE, log_file_path = NULL, ... ) { + # Standardize the intensity value when it is a raw column name so that the + # legacy match.arg() inside .cleanRawSpectronaut sees it correctly. + known_aliases = c('PeakArea', 'NormalizedPeakArea', 'MS1Quantity', 'MS2Quantity') + if (length(intensity) > 1) { + # No value supplied: use first (default) + intensity = intensity[1] + } + if (!(intensity %in% known_aliases)) { + # Treat as a raw column name and standardize it + intensity = .standardizeColnames(intensity) + } + validation_config = list( - input = input, - annotation = annotation, - intensity = intensity, + input = input, + annotation = annotation, + intensity = intensity, excludedFromQuantificationFilter = excludedFromQuantificationFilter, filter_with_Qvalue = filter_with_Qvalue, qvalue_cutoff = qvalue_cutoff, @@ -84,8 +118,10 @@ SpectronauttoMSstatsFormat = function( "MSstats", "Spectronaut", ...) input = MSstatsConvert::MSstatsClean(input, intensity = intensity, - calculateAnomalyScores, - anomalyModelFeatures) + calculateAnomalyScores, + anomalyModelFeatures, + heavyLabel = heavyLabel, + labelColumn = labelColumn) annotation = MSstatsConvert::MSstatsMakeAnnotation(input, annotation) pq_filter = list(score_column = "PGQvalue", @@ -113,20 +149,25 @@ SpectronauttoMSstatsFormat = function( drop_column = TRUE ) - feature_columns = c("PeptideSequence", "PrecursorCharge", + feature_columns = c("PeptideSequence", "PrecursorCharge", "FragmentIon", "ProductCharge") + # When heavyLabel is provided IsotopeLabelType is already assigned per-row + # by .cleanRawSpectronaut. We must not overwrite those values with "L". + # When heavyLabel is NULL we preserve the original behaviour: fill any + # missing IsotopeLabelType with "L". + fill_isotope = if (is.null(heavyLabel)) list("IsotopeLabelType" = "L") else list() input = MSstatsConvert::MSstatsPreprocess( - input, - annotation, + input, + annotation, feature_columns, remove_shared_peptides = useUniquePeptide, remove_single_feature_proteins = removeProtein_with1Feature, feature_cleaning = list(remove_features_with_few_measurements = removeFewMeasurements, summarize_multiple_psms = summaryforMultipleRows), - score_filtering = list(pgq = pq_filter, + score_filtering = list(pgq = pq_filter, psm_q = qval_filter), exact_filtering = list(excluded_quant = excluded_quant_filter), - columns_to_fill = list("IsotopeLabelType" = "L"), + columns_to_fill = fill_isotope, anomaly_metrics = anomalyModelFeatures) input[, Intensity := ifelse(Intensity == 0, NA, Intensity)] diff --git a/inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv b/inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv new file mode 100644 index 00000000..4c578cbf --- /dev/null +++ b/inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv @@ -0,0 +1,86 @@ +"R.Condition","R.Fraction","R.FileName","PG.Genes","PG.ProteinAccessions","PG.ProteinDescriptions","PEP.StrippedSequence","PEP.MS1Channel1","PEP.MS1Channel2","PEP.MS2Channel1","PEP.MS2Channel2","PEP.MS1Quantity","PEP.MS2Quantity","EG.Channel1Quantity","EG.Channel2Quantity","EG.DeltaiRT","EG.PeakWidth","EG.SignalToNoise","EG.ReferenceQuantity (Settings)","EG.TargetQuantity (Settings)","EG.Cscore","FG.Charge","FG.LabeledSequence","FG.PrecMz","FG.ShapeQualityScore","FG.ShapeQualityScore (MS1)","FG.ShapeQualityScore (MS2)","FG.MS1Quantity","FG.MS2Quantity","FG.CalibratedMassAccuracy (PPM)","FG.CalibratedMz","FG.MeasuredMz","FG.Noise","FG.PPMTolerance","FG.PriorIonRatio","FG.RawMassAccuracy (PPM)","FG.TheoreticalMz","FG.Tolerance" +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",52214.48438,6.28794241,2526.726807,NA,52214.48438,2526.726807,52214.48438,6.28794241,-0.417411486,0.118343353,11.43745518,NA,NA,39.35884476,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.084113663,-0.206461176,0.113449925,6.28794241,NA,NA,798.9501368,NA,0.545019031,15.81776564,0.071346797,NA,798.9561768,0.012637702 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",53901.19531,33668.39063,2727.578613,2531.486572,53901.19531,2727.578613,53901.19531,33668.39063,-0.003388584,0.119680405,19.09109497,NA,NA,53.78583527,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.503702706,0.31842348,0.548168798,33668.39063,2531.486572,0.661405242,798.9499913,NA,6137.880859,16.26055612,0.020507174,8.403298378,798.9561768,0.012991472 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",361218.75,789789.5625,29711.5918,99134.04688,361218.75,29711.5918,361218.75,789789.5625,0.200303709,0.136451721,33.30825043,NA,NA,49.5711937,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.953213739,0.983853102,0.933836937,789789.5625,99134.04688,-0.774962251,698.8322221,NA,35286.28125,12.10626035,0.002172636,7.423735619,698.8379517,0.008460314 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,317544.3125,28474.84375,317544.3125,NA,0.089715797,0.179130554,18.59780312,NA,317544.3125,54.02045441,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.685566238,-0.214917466,0.935134053,317544.3125,28474.84375,0.163214573,610.3088154,NA,21569.01172,15.44265139,8.08e-05,8.200508118,610.3137207,0.009424862 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",14551.48145,10963.46484,2088.205078,NA,14551.48145,2088.205078,14551.48145,10963.46484,-0.030491702,0.106908798,5.555503368,NA,NA,41.95940781,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.053336553,0.102215819,0.063812832,10963.46484,NA,NA,698.8331232,NA,4808.626465,11.14718404,0.052520957,NA,698.8379517,0.007790075 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",54474.81641,26552.10742,5579.812988,NA,54474.81641,5579.812988,54474.81641,26552.10742,0.15870407,0.108121872,9.77047348,NA,NA,46.18510056,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.193241477,0.406558335,0.221918148,26552.10742,NA,NA,698.8322132,NA,0.637417674,13.65568532,0.106278472,NA,698.8379517,0.009543111 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",39677.51563,16425.48047,684.1309204,1013.757019,39677.51563,684.1309204,39677.51563,16425.48047,0.117555344,0.106966019,5.408240795,NA,NA,38.59564972,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.311630216,0.354606122,0.326806843,16425.48047,1013.757019,-0.573573055,798.949615,NA,5993.632813,15.41047812,0.076787531,7.639362335,798.9561768,0.012312297 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,330560.5313,31252.33008,330560.5313,NA,0.033369286,0.220161438,26.41818619,NA,330560.5313,45.18108749,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.67101143,0.273708791,0.803494811,330560.5313,31252.33008,-0.101102046,610.3090203,NA,13844.26758,18.42940488,4.36e-05,7.60047102,610.3137207,0.011247719 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,307435.125,17000.37305,307435.125,NA,0.240706499,0.193317413,14.41809559,NA,307435.125,50.67734528,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.571282928,0.124966092,0.855466564,307435.125,17000.37305,-6.050453499,610.309906,NA,13613.83887,21.05542674,0.000104272,0.200012401,610.3137207,0.012850416 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",47506.33984,1106.301758,3690.832031,NA,47506.33984,3690.832031,47506.33984,1106.301758,0.306791189,0.086696625,25.48948097,NA,NA,41.01118088,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.123627679,-0.109247744,0.21090438,1106.301758,NA,NA,798.9493011,NA,0.682145774,13.3257948,0.071346797,NA,798.9561768,0.010646726 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,265152.4688,26584.7168,265152.4688,NA,-0.072200018,0.173988342,24.26990891,NA,265152.4688,44.1951828,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.730396223,0.692343533,0.826470395,265152.4688,26584.7168,-0.462319765,610.3084947,NA,16428.00781,14.25596383,0.000145931,8.100502014,610.3137207,0.00870061 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",64753.25391,37103.47656,2771.676758,5288.981445,64753.25391,2771.676758,64753.25391,37103.47656,-0.334582803,0.090234756,40.38325882,NA,NA,58.64351273,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.752488297,0.42474547,0.847430766,37103.47656,5288.981445,1.418732529,698.8332058,NA,17725.63281,14.27251496,0.000159417,8.209778786,698.8379517,0.009974175 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,229366.5313,13161.7207,301880,NA,0.099583001,0.1547966,53.65778351,NA,301880,46.13341141,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.945391178,0.902295232,0.945409735,301880,21813.95898,-0.661647506,944.471482,NA,7672.527344,13.79176039,3.08e-05,5.880710125,944.4776611,0.01302601 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,1738399,24785.98438,511836,NA,0.193479974,0.122386932,170.5673981,NA,511836,45.50453186,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.939145482,0.962462068,0.914132794,511836,37570.00781,-2.429901179,944.4707275,NA,6155.03418,12.28872375,2.77e-05,4.911362171,944.4776611,0.011606425 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",54474.81641,26552.10742,5579.812988,NA,54474.81641,5579.812988,54474.81641,26552.10742,0.15870407,0.108121872,9.77047348,NA,NA,46.18510056,2,"_ANGYTTEYSASVK_",695.8278809,0.70080474,0.408324808,0.776748916,54474.81641,5579.812988,-1.43997412,695.8222402,NA,19640.46289,13.57279993,0.000219595,6.666407108,695.8278809,0.009444333 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,178688.2813,16291.08301,49225.04688,NA,0.03367288,0.141269684,3.429688454,NA,49225.04688,4.163423061,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.342585838,0.755802751,0.298213966,49225.04688,843.75,-1.744663479,961.9528505,NA,6774.844727,11.75396998,0.088062547,5.520041943,961.9598389,0.011306847 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,147666.9844,2556.02124,49906.51172,NA,0.105416125,0.087011337,19.55953407,NA,49906.51172,50.80852127,1,"_DIVMTQSQK_",1049.529541,0.762291521,0.718976796,0.88452059,49906.51172,1987.451782,-0.340762043,1049.522592,NA,3885.237549,11.93060613,0.000304638,6.280715942,1049.529541,0.012521524 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","DNSQSILYLQMNALR",NA,NA,NA,NA,32949.09766,1983.132813,32949.09766,NA,-0.055576582,0.134498596,3.408590317,NA,32949.09766,45.18378067,2,"_DNSQSILYLQMNALR_",883.4487305,0.568902045,0.509661198,0.662240028,32949.09766,1983.132813,0.420739097,883.4411066,NA,15572.7666,12.79803757,0.019278135,9.05044651,883.4487305,0.01130641 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,229366.5313,13161.7207,156853.0469,NA,-0.192097269,0.145561218,3.154168844,NA,156853.0469,32.83724213,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.47311473,0.053626869,0.639628977,156853.0469,4509.482422,NA,952.4688328,NA,32506.30078,13.66085687,0.008043985,NA,952.4750977,0.013011626 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,5286713.5,42479.61719,9406117,NA,0.212553134,0.136051178,4.639051914,NA,9406117,20.27957153,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.313945824,0.303904533,0.506884257,9406117,5501.03125,-3.846004353,952.4683217,NA,27018.625,11.59629195,0.018160522,3.26810956,952.4750977,0.011045179 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,396396.3125,26660.05273,181685.8438,NA,-0.058827182,0.181724548,12.47270584,NA,181685.8438,35.14596558,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.671352214,0.795062184,0.63551121,181685.8438,4501.779785,-0.79095052,961.9527304,NA,8517.833984,13.50843026,0.021970971,6.598670959,961.9598389,0.012994567 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,48204.21875,4471.815918,48204.21875,NA,7.87e-05,0.115951538,180572.5313,NA,48204.21875,35.81245804,2,"_LVESGGGLVQSGR_",629.8411255,0.572125667,0.518132031,0.585245798,48204.21875,4471.815918,-0.174501771,629.8354614,NA,0.549019933,13.19085954,0.027632874,8.818412781,629.8411255,0.008308146 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,147666.9844,2556.02124,245427.4688,NA,0.488357752,0.204304695,9.938085556,NA,245427.4688,23.26274681,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.310197904,0.328751445,0.330117547,245427.4688,3124.59082,0.809784766,533.2616013,NA,6957.676758,19.00785454,0.032186132,8.813065529,533.2658691,0.01013624 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,22874.2793,3278.338867,22874.2793,NA,-0.07309582,0.087404251,8.534190178,NA,22874.2793,39.99494171,2,"_LVESGGGLVQSGR_",629.8411255,0.577427874,-0.007701109,0.774999062,22874.2793,3278.338867,-0.648323506,629.8357123,NA,11945.79785,12.72379816,0.01656705,7.94626236,629.8411255,0.008013971 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,143826.2969,29114.22656,287476.0625,NA,-0.442978126,0.099250793,66.16171265,NA,287476.0625,48.09414673,2,"_GLEWVAQIR_",536.3009033,0.852551711,0.6651057,0.891533136,287476.0625,31638.02344,-1.890337544,536.2961664,NA,14677.47461,21.7628811,2.7e-05,6.942267895,536.3009033,0.011671453 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,396396.3125,26660.05273,611106.75,NA,-0.276540207,0.155319214,60.07998657,NA,611106.75,44.26254654,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.833773804,0.715957105,0.86554714,611106.75,48818.32422,0.601651314,953.9563235,NA,13007.24023,13.63675443,0.019007353,6.973893166,953.9624023,0.013008951 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",64753.25391,37103.47656,2771.676758,5288.981445,64753.25391,2771.676758,64753.25391,37103.47656,-0.334582803,0.090234756,40.38325882,NA,NA,58.64351273,2,"_ANGYTTEYSASVK_",695.8278809,0.554959814,0.44701153,0.811589549,64753.25391,2771.676758,-0.415953271,695.823319,NA,6603.822266,14.27813947,0.000338258,6.140111923,695.8278809,0.009935128 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,149688.4844,5037.118164,37325.11328,NA,-0.122204219,0.139766693,18.9133091,NA,37325.11328,50.67339706,1,"_DIVMTQSQK_",1049.529541,0.786729583,0.994622231,0.921459198,37325.11328,5042.44043,-0.337613546,1049.521374,NA,5278.383789,10.98428883,0.000270601,7.443811417,1049.529541,0.011528336 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,187616.75,40963.83594,184.656723,NA,-0.743380425,0.139030457,41.55771255,NA,184.656723,27.77791405,3,"_GLEWVAQIR_",357.8696899,0.501662409,0.19953613,0.717801531,184.656723,34967.05078,NA,357.8667651,NA,14427.96777,22.70728908,0.010838341,NA,357.8696899,0.008126251 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,93384.82813,10611.82227,93384.82813,NA,-0.070280012,0.139417648,23.94354248,NA,93384.82813,41.66125488,2,"_LVESGGGLVQSGR_",629.8411255,0.807707769,0.436359495,0.891696811,93384.82813,10611.82227,-0.230153229,629.8361588,NA,8046.242188,16.859308,0.000213283,7.655545235,629.8411255,0.010618686 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",47506.33984,1106.301758,3690.832031,NA,47506.33984,3690.832031,47506.33984,1106.301758,0.306791189,0.086696625,25.48948097,NA,NA,41.01118088,2,"_RLIYAASTLDSGVPK_",795.946106,0.712214041,0.765812516,0.704079906,47506.33984,3690.832031,-0.985626551,795.9392179,NA,4217.413574,13.37790976,0.029425923,7.668252468,795.946106,0.010648095 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,38214.57031,6194.37793,38214.57031,NA,-0.224670601,0.11548996,264904,NA,38214.57031,41.84169006,2,"_SSQSLLNSGNQK_",631.8203735,0.734587829,0.065157317,0.895376523,38214.57031,6194.37793,1.608111883,631.8148588,NA,0.586804807,13.07086766,0.000181341,10.33642197,631.8203735,0.00825844 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,62163.67969,7727.032227,62163.67969,NA,0.003407426,0.155735016,24.55526352,NA,62163.67969,44.81443024,2,"_SSQSLLNSGNQK_",631.8203735,0.678574008,0.157909423,0.799956719,62163.67969,7727.032227,1.431083891,631.8154794,NA,6401.953125,13.7202384,0.000324573,9.177196503,631.8203735,0.008668726 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,421333.5313,15314.60742,421333.5313,NA,0.032018054,0.134592056,35.69604492,NA,421333.5313,42.9654274,2,"_ESGVPDR_",380.1852112,0.482137168,0.035211179,0.602062593,421333.5313,15314.60742,-0.71326106,380.1806065,NA,10022.75195,20.17494025,0.020062588,11.39838123,380.1852112,0.007670214 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,40561.89844,6457.5625,40561.89844,NA,0.043395966,0.086130142,14.70406055,NA,40561.89844,47.93177032,2,"_LASGVPGR_",378.7217712,0.751975816,0.327599853,0.876715382,40561.89844,6457.5625,0.8087924,378.7179272,NA,14732.39941,21.17748202,0.000160107,10.95894432,378.7217712,0.008020374 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,34643.60156,10162.12305,34643.60156,NA,-0.110934683,0.134130478,68.39783478,NA,34643.60156,45.13002396,2,"_SSQSLLNSGNQK_",631.8203735,0.670892413,-0.115899347,0.890572588,34643.60156,10162.12305,0.553389755,631.815169,NA,3419.266602,13.54227681,9.35e-05,8.790788651,631.8203735,0.008556286 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,74124.27344,8953.532227,74124.27344,NA,-0.057866427,0.094194412,815966.75,NA,74124.27344,20.96912766,2,"_LASGVPGR_",378.7217712,0.780312967,0.576413453,0.819269339,74124.27344,8953.532227,NA,378.7177604,NA,0.352298945,21.22419019,0.162490115,NA,378.7217712,0.008038063 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,217273.4688,51354.16406,93.76393127,NA,0.134248501,0.143848419,49.98695755,NA,93.76393127,45.35460663,3,"_GLEWVAQIR_",357.8696899,0.375550719,0.065310054,0.667793671,93.76393127,44008.9375,NA,357.8669958,NA,15709.49805,23.11696979,0.017297966,NA,357.8696899,0.008272863 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,36380.21484,2105.18042,36380.21484,NA,0.034265994,0.086641312,5.539525509,NA,36380.21484,20.1314621,2,"_LVESGGGLVQSGR_",629.8411255,0.403452128,-0.071699917,0.565245708,36380.21484,2105.18042,1.019569361,629.8365797,NA,10508.61816,17.83817446,0.038286321,8.236979485,629.8411255,0.011235216 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,34088.78125,3314.893066,34088.78125,NA,-0.256381999,0.119749069,23.55079842,NA,34088.78125,25.48985291,2,"_LASGVPGR_",378.7217712,0.607291108,0.582502902,0.631222337,34088.78125,3314.893066,NA,378.7175368,NA,4629.78125,20.07175392,0.023707954,NA,378.7217712,0.00760161 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,2847187,30921.66797,4966314,NA,0.115094693,0.174533844,12.23575306,NA,4966314,35.78164673,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.352036663,0.028716052,0.476488406,4966314,6750.053711,NA,952.4677267,NA,14191.68164,12.7976063,0.017662339,NA,952.4750977,0.012189401 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,252.4756165,6598.768555,252.4756165,NA,-19.39030003,0.129676819,19.47958183,NA,252.4756165,7.776296139,3,"_GLEWVAQIR_",357.8696899,0.399248751,0.152013704,0.645378451,252.4756165,6598.768555,NA,357.8667302,NA,8575.535156,24.65875585,0.046996329,NA,357.8696899,0.008824621 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,85018.82813,17185.79688,85018.82813,NA,-0.065742497,0.089722633,19.48124504,NA,85018.82813,44.84368134,2,"_LASGVPGR_",378.7217712,0.724694358,0.065945499,0.889223377,85018.82813,17185.79688,-2.039643113,378.7174282,NA,26244.89063,21.84417016,8.04e-05,9.427914619,378.7217712,0.008272863 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,54464.34766,4312.399414,54464.34766,NA,-0.009691533,0.086205482,13.71266937,NA,54464.34766,43.58045959,2,"_LASGVPGR_",378.7217712,0.485525545,-0.275202662,0.834820569,54464.34766,4312.399414,-0.581695183,378.7181025,NA,12547.28906,22.81217271,0.000180537,9.105592728,378.7217712,0.008639466 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,149688.4844,5037.118164,262051.8438,NA,0.124375611,0.086915016,17.40413284,NA,262051.8438,36.49317932,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.638100621,0.544970334,0.8088998,262051.8438,5031.79541,-0.266602942,533.2612714,NA,7469.393066,19.51888269,0.000265419,8.355243683,533.2658691,0.010408754 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,180697.3281,6746.006348,180697.3281,NA,-18.73761365,0.193958282,38.84557343,NA,180697.3281,18.32796288,2,"_GLEWVAQIR_",536.3009033,0.326026075,0.085552938,0.372378742,180697.3281,4735.131836,-11.65838312,536.2960548,NA,5355.10791,21.39167153,0.02038528,-2.617576361,536.3009033,0.011472373 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,5286713.5,42479.61719,1167310.375,NA,0.081209259,0.15102005,162.4558105,NA,1167310.375,45.21546555,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.96048125,0.986220479,0.944204807,1167310.375,79458.20313,-0.436381611,944.4719389,NA,10859.31738,11.46625296,1.64e-05,5.622217178,944.4776611,0.01082962 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,155749.6406,20581.24219,155749.6406,NA,0.061587915,0.130859375,11.83160591,NA,155749.6406,42.6566925,2,"_SSQSLLNSGNQK_",631.8203735,0.828751457,0.461061954,0.927074194,155749.6406,20581.24219,-0.644105605,631.8150227,NA,38182.14063,16.69144331,8.52e-05,7.82476759,631.8203735,0.010545994 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,178688.2813,16291.08301,308151.5,NA,0.188489549,0.185123444,34.05329895,NA,308151.5,46.79378128,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.807676232,0.68375212,0.861349444,308151.5,31738.41602,-0.929072839,953.9555956,NA,14673.27344,11.6202352,0.011265448,6.206125259,953.9624023,0.011085267 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,361692.6875,24124.88672,361692.6875,NA,0.094628639,0.088125229,102.159729,NA,361692.6875,35.32171249,2,"_ESGVPDR_",380.1852112,0.501526141,0.159686252,0.84596314,361692.6875,24124.88672,-0.217664543,380.180978,NA,7813.942871,22.60701494,0.000142115,10.91675949,380.1852112,0.008594853 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,422408.875,56053.24219,422408.875,NA,0.139962334,0.098086357,137.5969696,NA,422408.875,29.66729164,2,"_ESGVPDR_",380.1852112,0.78014428,0.295456976,0.901861747,422408.875,56053.24219,1.021948481,380.1808695,NA,12694.67383,21.07853147,7.95e-05,12.44189548,380.1852112,0.008013746 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,90379.96875,2110.332764,90379.96875,NA,-0.080734307,0.167215347,15.16658974,NA,90379.96875,42.54452515,2,"_EVQLQQSGTVLAR_",714.8939209,0.659268075,0.48839429,0.715047419,90379.96875,2110.332764,-2.772060775,714.8877278,NA,7233.833984,12.29751142,0.000188751,5.890979767,714.8939209,0.008791416 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,171963.3125,6393.916992,104969.5234,NA,0.351699524,0.157506943,18.63591957,NA,104969.5234,42.83591843,1,"_DIVMTQSQK_",1049.529541,0.941030812,0.997522652,0.926512818,104969.5234,9071.912109,-0.643194128,1049.521786,NA,8524.163086,13.34211313,0.000182124,6.745954037,1049.529541,0.014002942 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,458039.75,66439.0625,458039.75,NA,0.042736049,0.093457222,84.7664566,NA,458039.75,43.39373398,2,"_ESGVPDR_",380.1852112,0.713035631,0.322995186,0.898812215,458039.75,66439.0625,-1.597836465,380.1801787,NA,26113.44336,20.92248188,6.81e-05,11.63919258,380.1852112,0.007954418 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,59430.11719,3629.192627,59430.11719,NA,0.068124597,0.131816864,2.854508877,NA,59430.11719,48.00843811,2,"_EVQLQQSGTVLAR_",714.8939209,0.419514182,0.211320519,0.579452236,59430.11719,3629.192627,-1.241399928,714.8883337,NA,39950.14453,14.34599152,0.00018518,6.573992252,714.8939209,0.010255862 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",52214.48438,6.28794241,2526.726807,NA,52214.48438,2526.726807,52214.48438,6.28794241,-0.417411486,0.118343353,11.43745518,NA,NA,39.35884476,2,"_RLIYAASTLDSGVPK_",795.946106,0.599587473,0.896141291,0.519005353,52214.48438,2526.726807,-0.368876459,795.940014,NA,6504.936523,16.05424291,0.038895503,7.28483963,795.946106,0.012778312 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,245849.2188,24123.67383,103493.4609,NA,0.103369548,0.139175415,15.81296349,NA,103493.4609,40.658638,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.692753929,0.815976918,0.655150483,103493.4609,3835.226074,-1.086981289,961.951469,NA,5757.803711,12.26203108,0.022786409,7.61385107,961.9598389,0.011795581 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,417053.7188,74786.57031,417053.7188,NA,0.094570482,0.088767052,71.76859283,NA,417053.7188,50.8679657,2,"_ESGVPDR_",380.1852112,0.668493402,0.254962921,0.891186853,417053.7188,74786.57031,1.584113011,380.180778,NA,35968.30469,20.85149436,3.37e-05,13.24459839,380.1852112,0.00792743 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,189571.7344,15675.78027,340508.6875,NA,0.321218361,0.173164368,34.99713516,NA,340508.6875,47.9161644,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.806273425,0.661062658,0.920055548,340508.6875,30486.08203,-0.996429601,953.9552262,NA,14221.10254,12.79384636,7.55e-05,6.526028633,953.9624023,0.012204848 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,98718.1875,15457.56445,197294.9063,NA,0.115379787,0.141094208,55.41744614,NA,197294.9063,57.49145508,2,"_GLEWVAQIR_",536.3009033,0.669511867,0.364464402,0.78997467,197294.9063,17192.82031,-1.395424882,536.2970422,NA,6698.502441,19.33399342,6.96e-05,5.804191113,536.3009033,0.010368838 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,281472.6875,12274.17383,281472.6875,NA,-0.009148698,0.141078949,29.95099258,NA,281472.6875,54.69283676,2,"_EVQLQQSGTVLAR_",714.8939209,0.787592483,0.643390656,0.859908799,281472.6875,12274.17383,0.125132836,714.8876627,NA,16583.92578,14.7462946,2.98e-05,8.87915802,714.8939209,0.010542036 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,171963.3125,6393.916992,238957.0938,NA,0.027248793,0.195654869,12.47838497,NA,238957.0938,31.18780899,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.354385158,0.215730071,0.502457192,238957.0938,3715.921875,0.459495493,533.2617196,NA,5526.215332,19.45718244,0.016677275,8.24078846,533.2658691,0.010375851 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,109748.1406,8005.039551,109748.1406,NA,0.045752123,0.137292862,19.1373806,NA,109748.1406,47.62768555,2,"_LVESGGGLVQSGR_",629.8411255,0.7515329,0.682607412,0.761301935,109748.1406,8005.039551,0.625895638,629.8359045,NA,7562.283691,13.84225086,0.026846524,8.915318489,629.8411255,0.008718419 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,180697.3281,6746.006348,NA,NA,-18.75847841,0.138790131,41.47955322,NA,NA,11.13634109,3,"_GLEWVAQIR_",357.8696899,0.266773769,-0.256991982,0.580768963,NA,8756.880859,NA,357.8663173,NA,5355.571777,21.66061936,0.03378927,NA,357.8696899,0.007751679 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,143826.2969,29114.22656,176.5438995,NA,-0.422388058,0.100460052,47.38766861,NA,176.5438995,33.31496429,3,"_GLEWVAQIR_",357.8696899,0.492405444,-0.270404309,0.789944291,176.5438995,26590.42969,-0.522799673,357.8666647,NA,14676.9541,22.45996866,0.012530557,7.93063736,357.8696899,0.008037742 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",14551.48145,10963.46484,2088.205078,NA,14551.48145,2088.205078,14551.48145,10963.46484,-0.030491702,0.106908798,5.555503368,NA,NA,41.95940781,2,"_ANGYTTEYSASVK_",695.8278809,0.349652399,-0.024759866,0.579598586,14551.48145,2088.205078,-1.417910954,695.8231711,NA,10655.0166,11.20790105,0.025207262,5.350668907,695.8278809,0.00779877 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,2847187,30921.66797,728059.75,NA,-0.074267771,0.160419464,145.4159088,NA,728059.75,52.73627472,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.931303608,0.875339866,0.932078719,728059.75,55093.28125,-1.795198543,944.4706556,NA,9055.828125,12.81802703,1.7e-05,5.622217178,944.4776611,0.01210634 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,245849.2188,24123.67383,388204.9688,NA,0.18942137,0.148498535,48.67911911,NA,388204.9688,42.28108597,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.859763169,0.663609803,0.91425246,388204.9688,44412.12109,-0.450058124,953.9547709,NA,19986.22266,12.27693644,2.75e-05,7.549719334,953.9624023,0.011711736 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,153061.125,4557.393066,153061.125,NA,-0.036240706,0.154052734,9.070569992,NA,153061.125,39.80711365,2,"_EVQLQQSGTVLAR_",714.8939209,0.370704806,0.088267803,0.620294064,153061.125,4557.393066,-4.595291166,714.8877061,NA,22671.82031,13.98628415,7.36e-05,4.098073006,714.8939209,0.00999871 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",361218.75,789789.5625,29711.5918,99134.04688,361218.75,29711.5918,361218.75,789789.5625,0.200303709,0.136451721,33.30825043,NA,NA,49.5711937,2,"_ANGYTTEYSASVK_",695.8278809,0.912354898,0.961664677,0.909997483,361218.75,29711.5918,-2.156436107,695.822291,NA,46425.78516,12.06942338,4.43e-05,5.876964092,695.8278809,0.008398241 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",53901.19531,33668.39063,2727.578613,2531.486572,53901.19531,2727.578613,53901.19531,33668.39063,-0.003388584,0.119680405,19.09109497,NA,NA,53.78583527,2,"_RLIYAASTLDSGVPK_",795.946106,0.505019141,0.84996891,0.443053595,53901.19531,2727.578613,0.948916828,795.9399032,NA,0.601176143,16.30183289,0.057064805,8.741807938,795.946106,0.01297538 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,98718.1875,15457.56445,141.4631042,NA,0.067860338,0.138896942,24.95126152,NA,141.4631042,34.9570694,3,"_GLEWVAQIR_",357.8696899,0.231323308,-0.087234139,0.515916427,141.4631042,13722.30859,NA,357.8674875,NA,10981.80078,23.48433002,0.018261088,NA,357.8696899,0.00840433 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,187616.75,40963.83594,375048.8438,NA,-0.743380425,0.140129089,72.70896149,NA,375048.8438,42.41449356,2,"_GLEWVAQIR_",536.3009033,0.722308257,0.991955996,0.937889278,375048.8438,46960.625,-0.667730502,536.2964559,NA,11339.20605,19.35679426,3.76e-05,7.625113964,536.3009033,0.010381066 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,189571.7344,15675.78027,38634.77734,NA,0.118118848,0.101478577,5.050991058,NA,38634.77734,22.54578018,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.425373527,0.423984468,0.440279946,38634.77734,865.479248,-1.387331313,961.9520956,NA,8115.036621,12.80874476,0.050739482,6.662119389,961.9598389,0.012321498 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,1376082,58033.21484,1376082,NA,0.232158686,0.113842964,212.7084351,NA,1376082,41.60545349,2,"_ESGVPDR_",380.1852112,0.702998769,0.325599313,0.876872222,1376082,58033.21484,4.519388547,380.1810395,NA,8061.205566,21.76008579,5.94e-05,15.49216652,380.1852112,0.008272863 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,217273.4688,51354.16406,434453.1875,NA,0.107120856,0.142055511,55.00777054,NA,434453.1875,47.9986763,2,"_GLEWVAQIR_",536.3009033,0.941255295,0.930132568,0.943093757,434453.1875,58699.39063,-0.617161117,536.2967882,NA,20073.91602,18.8991068,2.42e-05,7.056075573,536.3009033,0.010135608 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv5-9","A0A075B5Q2","Immunoglobulin heavy variable 5-9 (Fragment)","RLEWVATISGGGGNTYYPDSVK",NA,NA,NA,NA,30222.12891,7391.517578,30222.12891,NA,-0.003115418,0.155101776,16.61532974,NA,30222.12891,27.39152908,3,"_RLEWVATISGGGGNTYYPDSVK_",790.7290039,0.723604631,0.27114886,0.858860989,30222.12891,7391.517578,3.385472786,790.7224035,NA,8965.591797,13.46917604,0.000185257,11.73264599,790.7290039,0.010650468 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,156859.9375,1840.379517,226233.7656,NA,0.192068064,0.101008415,9.658528328,NA,226233.7656,-4.735836506,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.194500379,0.512719035,0.175549199,226233.7656,836.5979614,-2.738983541,533.2611737,NA,4660.330078,21.86779476,0.051081933,6.066135883,533.2658691,0.011661349 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,72494.51563,6361.625488,72494.51563,NA,-0.003475138,0.093101501,5.973305225,NA,72494.51563,53.03592682,2,"_LVESGGGLVQSGR_",629.8411255,0.792762804,0.549250424,0.885242581,72494.51563,6361.625488,-0.767490225,629.8357593,NA,31995.91211,13.71174521,0.000189315,7.752450943,629.8411255,0.008636221 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,156859.9375,1840.379517,87486.10938,NA,0.084272784,0.121294022,3.043318272,NA,87486.10938,51.37187958,1,"_DIVMTQSQK_",1049.529541,0.798743445,0.913141966,0.863805572,87486.10938,2844.161133,-0.534778609,1049.521533,NA,17260.38867,11.39859743,0.000470148,7.094882965,1049.529541,0.011963165 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,69222.67188,697.854187,69222.67188,NA,0.061694747,0.086156845,6.418026447,NA,69222.67188,11.6861372,2,"_SSQSLLNSGNQK_",631.8203735,0.193638889,0.342970282,0.305564957,69222.67188,697.854187,1.685616629,631.8158233,NA,3558.77002,17.67744699,0.060024314,8.887390137,631.8203735,0.011168971 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,231731.25,27972.57813,231731.25,NA,-0.083277777,0.09370327,163.8052521,NA,231731.25,37.17317581,2,"_LASGVPGR_",378.7217712,0.864091957,0.844812334,0.862011492,231731.25,27972.57813,-0.151254179,378.7172279,NA,5214.903809,21.16415386,4.45e-05,11.84532928,378.7217712,0.008015326 +"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,1738399,24785.98438,2964962,NA,0.092455855,0.224506378,15.9526062,NA,2964962,40.48913956,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.616060108,0.548114777,0.733136714,2964962,12001.96094,NA,952.4675536,NA,11837.67871,12.27876929,0.000178525,NA,952.4750977,0.011695222 +"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,8659.84375,1189.40625,8659.84375,NA,-0.120270506,0.086936951,70159.11719,NA,8659.84375,45.17756271,2,"_SSQSLLNSGNQK_",631.8203735,0.259268835,-0.304832578,0.448586479,8659.84375,1189.40625,-1.564976375,631.8149292,NA,0.506191313,12.5715031,0.046368949,7.051950932,631.8203735,0.007942932 +"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",39677.51563,16425.48047,684.1309204,1013.757019,39677.51563,684.1309204,39677.51563,16425.48047,0.117555344,0.106966019,5.408240795,NA,NA,38.59564972,2,"_RLIYAASTLDSGVPK_",795.946106,0.343346803,0.524190784,0.327267118,39677.51563,684.1309204,0.228438482,795.9395739,NA,5549.635254,15.49018806,0.092307463,8.435077667,795.946106,0.012329355 diff --git a/inst/tinytest/raw_data/Spectronaut/run_order.csv b/inst/tinytest/raw_data/Spectronaut/run_order.csv new file mode 100644 index 00000000..4981fcff --- /dev/null +++ b/inst/tinytest/raw_data/Spectronaut/run_order.csv @@ -0,0 +1,41 @@ +Run,Order +20250102_Tulum_NeatK562_Seq1,1 +20250102_Tulum_NeatK562_Seq2,2 +20250102_Tulum_1to2K562_Seq3,3 +20250102_Tulum_1to2K563_Seq4,4 +20250102_Tulum_NeatK562_Seq5,5 +20250102_Tulum_NeatK562_Seq6,6 +20250102_Tulum_1to2K562_Seq7,7 +20250102_Tulum_NeatK562_Seq8,8 +20250102_Tulum_1to2K562_Seq9,9 +20250102_Tulum_NeatK562_Seq10,10 +20250102_Tulum_NeatK562_Seq11,11 +20250102_Tulum_1to2K562_Seq12,12 +20250102_Tulum_1to2K562_Seq13,13 +20250102_Tulum_1to2K562_Seq14,14 +20250102_Tulum_NeatK562_Seq15,15 +20250102_Tulum_NeatK562_Seq16,16 +20250102_Tulum_1to2K562_Seq17,17 +20250102_Tulum_NeatK562_Seq18,18 +20250102_Tulum_1to2K562_Seq19,19 +20250102_Tulum_NeatK562_Seq20,20 +20250102_Tulum_1to2K562_Seq21,21 +20250102_Tulum_NeatK562_Seq22,22 +20250102_Tulum_NeatK562_Seq23,23 +20250102_Tulum_1to2K562_Seq24,24 +20250102_Tulum_1to2K562_Seq25,25 +20250102_Tulum_NeatK562_Seq26,26 +20250102_Tulum_NeatK562_Seq27,27 +20250102_Tulum_1to2K562_Seq28,28 +20250102_Tulum_1to2K562_Seq29,29 +20250102_Tulum_1to2K562_Seq30,30 +20250102_Tulum_1to4K562_Seq31,31 +20250102_Tulum_1to2K562_Seq32,32 +20250102_Tulum_1to8K562_Seq33,33 +20250102_Tulum_1to4K562_Seq34,34 +20250102_Tulum_1to16K562_Seq35,35 +20250102_Tulum_1to8K562_Seq36,36 +20250102_Tulum_1to32K562_Seq37,37 +20250102_Tulum_1to16K562_Seq38,38 +20250102_Tulum_1to64K562_Seq39,39 +20250102_Tulum_1to32K562_Seq40,40 diff --git a/inst/tinytest/test_clean_Spectronaut.R b/inst/tinytest/test_clean_Spectronaut.R index 47d7b429..9dc6dd93 100644 --- a/inst/tinytest/test_clean_Spectronaut.R +++ b/inst/tinytest/test_clean_Spectronaut.R @@ -10,7 +10,7 @@ output = MSstatsConvert:::.cleanRawSpectronaut(msstats_input, intensity = 'MS1Qu anomalyModelFeatures = c()) expect_true(all(output$Intensity == 100000)) -expect_error(MSstatsConvert:::.cleanRawSpectronaut(msstats_input, intensity = 'invalid', - calculateAnomalyScores = FALSE, - anomalyModelFeatures = c()), - pattern = "'arg' should be one of .*PeakArea") +expect_error(MSstatsConvert:::.cleanRawSpectronaut(msstats_input, intensity = 'invalid', + calculateAnomalyScores = FALSE, + anomalyModelFeatures = c()), + pattern = "not found in input data") diff --git a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R index 09107563..fe76176e 100644 --- a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R +++ b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R @@ -19,33 +19,49 @@ expect_true("Fraction" %in% colnames(output)) # Test SpectronauttoMSstatsFormat Missing Columns --------------------------- +# F.ExcludedFromQuantification is now synthesized as FALSE when absent, so +# removing it should NOT cause an error. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) spectronaut_raw$F.ExcludedFromQuantification = NULL -expect_error( - SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE), - "The following columns are missing from the input data: FExcludedFromQuantification" +expect_silent( + SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE) ) +# F.FrgLossType is now synthesized as "noloss" when absent, so removing it +# should NOT cause an error. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) spectronaut_raw$F.FrgLossType = NULL -expect_error( - SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE), - "The following columns are missing from the input data: FFrgLossType" +expect_silent( + SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE) +) + +# PG.ProteinGroups is now optional when PG.ProteinAccessions is present. +# The standard test file has both columns, so removing PG.ProteinGroups should +# fall back to PG.ProteinAccessions without error. +spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", + package = "MSstatsConvert") +spectronaut_raw = data.table::fread(spectronaut_raw) +spectronaut_raw$PG.ProteinGroups = NULL +expect_silent( + SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE) ) +# When BOTH protein name columns are absent the converter must still error. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) spectronaut_raw$PG.ProteinGroups = NULL +spectronaut_raw$PG.ProteinAccessions = NULL expect_error( SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE), "The following columns are missing from the input data: PGProteinGroups" ) +# FG.Charge remains required. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) diff --git a/inst/tinytest/test_spectronaut_protein_turnover.R b/inst/tinytest/test_spectronaut_protein_turnover.R new file mode 100644 index 00000000..11b172d7 --- /dev/null +++ b/inst/tinytest/test_spectronaut_protein_turnover.R @@ -0,0 +1,154 @@ +# Tests for SpectronauttoMSstatsFormat with protein turnover (BoxCar) data. +# +# The BoxCar report differs from a standard Spectronaut export in several ways: +# - No PG.ProteinGroups (uses PG.ProteinAccessions instead) +# - No F.FrgLossType (synthesized as "noloss") +# - No F.ExcludedFromQuantification (synthesized as FALSE) +# - No R.Replicate (falls back to R.Condition for BioReplicate) +# - No EG.ModifiedSequence (uses FG.LabeledSequence) +# - No F.FrgIon / F.Charge (synthesized as NA) +# - Intensity sourced from FG.MS1Quantity or FG.MS2Quantity +# - Heavy peptides identified by a bracketed label, e.g. [Lys6] + +boxcar_path = system.file( + "tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv", + package = "MSstatsConvert") +boxcar_raw = data.table::fread(boxcar_path) + + +# --- Basic format conversion (no heavy label) -------------------------------- + +output_basic = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "MS1Quantity", + use_log_file = FALSE +) + +expect_true("Run" %in% colnames(output_basic)) +expect_true("ProteinName" %in% colnames(output_basic)) +expect_true("PeptideSequence" %in% colnames(output_basic)) +expect_true("PrecursorCharge" %in% colnames(output_basic)) +expect_true("Intensity" %in% colnames(output_basic)) +expect_true("FragmentIon" %in% colnames(output_basic)) +expect_true("ProductCharge" %in% colnames(output_basic)) +expect_true("IsotopeLabelType" %in% colnames(output_basic)) +expect_true("Condition" %in% colnames(output_basic)) +expect_true("BioReplicate" %in% colnames(output_basic)) + +# Without heavyLabel all rows should be "L" (backwards compatible default) +expect_true(all(output_basic$IsotopeLabelType == "L")) + +# Condition values should reflect R.Condition (0d, 8d, 32d) +expect_true(all(c("0d", "8d", "32d") %in% unique(output_basic$Condition))) + +# BioReplicate falls back to R.Condition since R.Replicate is absent +expect_true(all(output_basic$BioReplicate %in% output_basic$Condition)) + +# Protein names come from PG.ProteinAccessions (no PG.ProteinGroups column) +expect_true(nrow(output_basic) > 0) +expect_false(any(is.na(output_basic$ProteinName))) + + +# --- Heavy label classification (Lys6) -------------------------------------- + +output_heavy = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "MS1Quantity", + heavyLabel = "Lys6", + use_log_file = FALSE +) + +expect_true("IsotopeLabelType" %in% colnames(output_heavy)) + +# Both heavy and light peptides must be present +expect_true("H" %in% unique(output_heavy$IsotopeLabelType)) +expect_true("L" %in% unique(output_heavy$IsotopeLabelType)) + +# Heavy peptides must have [Lys6] in their PeptideSequence +heavy_rows = output_heavy[IsotopeLabelType == "H"] +expect_true(all(grepl("[Lys6]", heavy_rows$PeptideSequence, fixed = TRUE))) + +# Light peptides must NOT have [Lys6] in their PeptideSequence +light_rows = output_heavy[IsotopeLabelType == "L"] +expect_false(any(grepl("[Lys6]", light_rows$PeptideSequence, fixed = TRUE))) + +# Unlabeled (NA) peptides must NOT have [Lys6] in their PeptideSequence +na_rows = output_heavy[is.na(IsotopeLabelType)] +if (nrow(na_rows) > 0) { + expect_false(any(grepl("[Lys6]", na_rows$PeptideSequence, fixed = TRUE))) +} + + +# --- MS2 intensity channel --------------------------------------------------- + +output_ms2 = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "MS2Quantity", + use_log_file = FALSE +) + +expect_true("Intensity" %in% colnames(output_ms2)) +# MS1 and MS2 intensity values should generally differ +output_ms1 = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "MS1Quantity", + use_log_file = FALSE +) +# At least some intensities must differ between MS1 and MS2 channels +shared_keys = merge( + output_ms1[, .(ProteinName, PeptideSequence, Run, ms1 = Intensity)], + output_ms2[, .(ProteinName, PeptideSequence, Run, ms2 = Intensity)], + by = c("ProteinName", "PeptideSequence", "Run") +) +if (nrow(shared_keys) > 0) { + expect_false(all(shared_keys$ms1 == shared_keys$ms2, na.rm = TRUE)) +} + + +# --- Raw column name as intensity string ------------------------------------- + +output_raw_col = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "FG.MS1Quantity", + use_log_file = FALSE +) +# Should produce the same intensities as the alias "MS1Quantity" +expect_equal(nrow(output_raw_col), nrow(output_ms1)) + + +# --- Invalid intensity column ------------------------------------------------ + +expect_error( + SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "FG.NonExistentColumn", + use_log_file = FALSE + ), + "not found in input data" +) + + +# --- Novel heavy labels (non-Lys6) ------------------------------------------ + +# Deuterium leucine label; none in this file, so all should be L or NA +output_leu = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "MS1Quantity", + heavyLabel = "Leu6", + use_log_file = FALSE +) +expect_false("H" %in% unique(output_leu$IsotopeLabelType)) + + +# --- Backwards compatibility: standard Spectronaut file ---------------------- +# The standard format (with all columns present) must still work unchanged. + +spectronaut_std_path = system.file( + "tinytest/raw_data/Spectronaut/spectronaut_input.csv", + package = "MSstatsConvert") +spectronaut_std = data.table::fread(spectronaut_std_path) + +output_std = SpectronauttoMSstatsFormat(spectronaut_std, use_log_file = FALSE) +expect_equal(ncol(output_std), 11) +expect_equal(nrow(output_std), 372) +expect_true(all(output_std$IsotopeLabelType == "L")) From 20b61111db387baf57f4f1204ed0d972e2cf2977 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 1 Apr 2026 09:02:43 -0400 Subject: [PATCH 02/14] clean up spectronaut converter code --- R/clean_Spectronaut.R | 188 ++++++++-------------- R/converters_SpectronauttoMSstatsFormat.R | 70 ++++---- man/DIANNtoMSstatsFormat.Rd | 2 +- man/MSstatsClean.Rd | 29 +++- man/SpectronauttoMSstatsFormat.Rd | 29 +++- man/dot-cleanRawDIANN.Rd | 4 + man/dot-cleanRawSpectronaut.Rd | 29 +++- 7 files changed, 188 insertions(+), 163 deletions(-) diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index 8bbe0dff..916c0b31 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -6,47 +6,31 @@ .cleanRawSpectronaut = function(msstats_object, intensity, calculateAnomalyScores, anomalyModelFeatures, - heavyLabel = NULL, - labelColumn = "FG.LabeledSequence") { + peptideSequenceColumn = "EG.ModifiedSequence", + heavyLabels = NULL) { FFrgLossType = FExcludedFromQuantification = NULL spec_input = getInputFile(msstats_object, "input") - .validateSpectronautInput(spec_input) - - # --- Normalize missing columns that vary across Spectronaut report formats --- - spec_input = .addMissingSpectronautColumns(spec_input) - + .validateSpectronautInput(spec_input, peptideSequenceColumn) + spec_input = .addSpectronautColumnsIfMissing(spec_input) spec_input = spec_input[FFrgLossType == "noloss", ] - + f_charge_col = .findAvailable(c("FCharge", "FFrgZ"), colnames(spec_input)) pg_qval_col = .findAvailable(c("PGQvalue"), colnames(spec_input)) interference_col = .findAvailable(c("FPossibleInterference"), colnames(spec_input)) exclude_col = .findAvailable(c("FExcludedFromQuantification"), colnames(spec_input)) - - # Resolve intensity column: accepts enum alias OR raw standardized column name - intensity_column = .resolveSpectronautIntensityColumn(intensity, colnames(spec_input)) - - # Resolve peptide sequence column: prefer EGModifiedSequence, fall back to - # FGLabeledSequence (protein turnover format uses FG.LabeledSequence) - peptide_col = .findAvailable(c("EGModifiedSequence", "FGLabeledSequence"), + intensity_col = .resolveSpectronautIntensityColumn(intensity, colnames(spec_input)) + peptide_col = .findAvailable(.standardizeColnames(peptideSequenceColumn), colnames(spec_input)) - - # Resolve protein name column: prefer PGProteinGroups, fall back to - # PGProteinAccessions (protein turnover format omits PG.ProteinGroups) protein_col = .findAvailable(c("PGProteinGroups", "PGProteinAccessions"), colnames(spec_input)) - # Resolve BioReplicate column: prefer RReplicate, fall back to RCondition - # (protein turnover format does not include R.Replicate) - replicate_col = .findAvailable(c("RReplicate", "RCondition"), - colnames(spec_input)) - cols = c(protein_col, peptide_col, "FGCharge", "FFrgIon", - f_charge_col, "RFileName", "RCondition", replicate_col, + f_charge_col, "RFileName", "RCondition", "RReplicate", "EGQvalue", pg_qval_col, interference_col, exclude_col, - intensity_column) + intensity_col) if (calculateAnomalyScores){ cols = c(cols, anomalyModelFeatures) } @@ -56,20 +40,49 @@ data.table::setnames( spec_input, c(protein_col, peptide_col, "FGCharge", "FFrgIon", - f_charge_col, "RFileName", intensity_column, - "RCondition", replicate_col), + f_charge_col, "RFileName", intensity_col, + "RCondition", "RReplicate"), c("ProteinName", "PeptideSequence", "PrecursorCharge", "FragmentIon", "ProductCharge", "Run", "Intensity", "Condition", "BioReplicate"), skip_absent = TRUE) - # Assign IsotopeLabelType based on heavy label detection when requested spec_input = .assignSpectronautIsotopeLabelType( - spec_input, heavyLabel, labelColumn, msstats_object) + spec_input, heavyLabels, peptideSequenceColumn, msstats_object) .logSuccess("Spectronaut", "clean") spec_input } +#' Helper method to validate input has necessary columns +#' @param spec_input dataframe input +#' @param peptideSequenceColumn character, name of the column containing peptide +#' sequences, passed from user +#' @noRd +.validateSpectronautInput = function(spec_input, peptideSequenceColumn) { + # Only FGCharge is truly required + required_columns = c("FGCharge") + missing_columns = setdiff(required_columns, colnames(spec_input)) + if (length(missing_columns) > 0) { + msg = paste("The following columns are missing from the input data:", + paste(missing_columns, sep = ", ", collapse = ", ")) + getOption("MSstatsLog")("ERROR", msg) + stop(msg) + } + # Ensure at least one protein name column is present + if (!any(c("PGProteinGroups", "PGProteinAccessions") %in% colnames(spec_input))) { + msg = paste("The following columns are missing from the input data:", + "PGProteinGroups") + getOption("MSstatsLog")("ERROR", msg) + stop(msg) + } + # Ensure at least one protein name column is present + if (.standardizeColnames(peptideSequenceColumn) %in% colnames(spec_input)) { + msg = paste("The following column are missing from the input data:", + peptideSequenceColumn) + getOption("MSstatsLog")("ERROR", msg) + stop(msg) + } +} #' Add synthetic columns that are absent in protein turnover Spectronaut reports. #' @@ -93,7 +106,8 @@ #' @param spec_input `data.table` with standardized column names. #' @return `data.table` with missing columns added. #' @keywords internal -.addMissingSpectronautColumns = function(spec_input) { +#' @noRd +.addSpectronautColumnsIfMissing = function(spec_input) { if (!("FFrgLossType" %in% colnames(spec_input))) { spec_input[, FFrgLossType := "noloss"] } @@ -122,27 +136,23 @@ #' @param available_cols Character vector of available standardized column names. #' @return The resolved standardized column name. #' @keywords internal +#' @noRd .resolveSpectronautIntensityColumn = function(intensity, available_cols) { legacy_mapping = c( "PeakArea" = "FPeakArea", "NormalizedPeakArea" = "FNormalizedPeakArea", - "MS1Quantity" = "FGMS1Quantity", - "MS2Quantity" = "FGMS2Quantity" ) if (intensity %in% names(legacy_mapping)) { resolved = legacy_mapping[[intensity]] } else { - # Treat as a raw standardized column name - resolved = intensity + resolved = .standardizeColnames(intensity) } if (!(resolved %in% available_cols)) { stop(paste0( - "Intensity column '", resolved, "' not found in input data. ", - "Available columns include: ", - paste(grep("Quantity|PeakArea", available_cols, value = TRUE), collapse = ", ") - )) + "Intensity column '", intensity, "' not found in input data. ", collapse = ", ") + ) } resolved } @@ -167,91 +177,35 @@ #' preserving backwards compatibility. #' #' @param spec_input `data.table` after column renaming. -#' @param heavyLabel Character scalar heavy label name (e.g. \code{"Lys6"}), +#' @param heavyLabels Character scalar heavy label name (e.g. \code{"Lys6"}), #' or \code{NULL}. -#' @param labelColumn Raw (dot-separated) column name that holds the labeled +#' @param peptideSequenceColumn Raw (dot-separated) column name that holds the labeled #' sequence (e.g. \code{"FG.LabeledSequence"}). #' @param msstats_object The original MSstats object (used to access the #' standardized label column after import). #' @return `data.table` with \code{IsotopeLabelType} column added or updated. #' @keywords internal -.assignSpectronautIsotopeLabelType = function(spec_input, heavyLabel, - labelColumn, msstats_object) { - IsotopeLabelType = PeptideSequence = NULL - - if (is.null(heavyLabel)) { - return(spec_input) - } - - # The label column may have already been renamed to PeptideSequence if it was - # the chosen peptide column. We need the original labeled sequence values. - # Retrieve them from the cleaned input (PeptideSequence column). - if (!("PeptideSequence" %in% colnames(spec_input))) { - msg = paste0("Cannot assign IsotopeLabelType: 'PeptideSequence' column ", - "not found after cleaning. Skipping label assignment.") - getOption("MSstatsLog")("WARN", msg) - getOption("MSstatsMsg")("WARN", msg) - return(spec_input) - } - - heavy_pattern = paste0("[", heavyLabel, "]") - - spec_input[, IsotopeLabelType := data.table::fifelse( - grepl(heavy_pattern, PeptideSequence, fixed = TRUE), - "H", - "L" - )] - - # Identify stripped sequences that appear ONLY as light (no heavy counterpart - # exists anywhere in the dataset). These peptides cannot be labelled and - # should receive NA rather than "L" to distinguish them from the light - # channel of a quantified heavy/light pair. - stripped_col = .findAvailable( - c("PEPStrippedSequence", "PeptideSequence"), colnames(spec_input)) - - if (!is.null(stripped_col) && stripped_col != "PeptideSequence") { - heavy_sequences = spec_input[IsotopeLabelType == "H", - unique(get(stripped_col))] - spec_input[IsotopeLabelType == "L" & - !(get(stripped_col) %in% heavy_sequences), - IsotopeLabelType := NA_character_] - } - - msg = paste0("** IsotopeLabelType assigned using heavy label: '", heavyLabel, - "'. Heavy (H): ", - sum(spec_input$IsotopeLabelType == "H", na.rm = TRUE), - ", Light (L): ", - sum(spec_input$IsotopeLabelType == "L", na.rm = TRUE), - ", Unlabeled (NA): ", - sum(is.na(spec_input$IsotopeLabelType))) - getOption("MSstatsLog")("INFO", msg) - getOption("MSstatsMsg")("INFO", msg) - - spec_input -} - - -#' Helper method to validate input has necessary columns -#' @param spec_input dataframe input #' @noRd -.validateSpectronautInput = function(spec_input) { - # Only FGCharge is truly required; all other formerly-required columns are - # either synthesized by .addMissingSpectronautColumns or detected via - # .findAvailable fallbacks so that protein turnover reports (which omit - # several standard columns) are handled without pre-processing by the caller. - required_columns = c("FGCharge") - missing_columns = setdiff(required_columns, colnames(spec_input)) - if (length(missing_columns) > 0) { - msg = paste("The following columns are missing from the input data:", - paste(missing_columns, sep = ", ", collapse = ", ")) - getOption("MSstatsLog")("ERROR", msg) - stop(msg) - } - # Ensure at least one protein name column is present - if (!any(c("PGProteinGroups", "PGProteinAccessions") %in% colnames(spec_input))) { - msg = paste("The following columns are missing from the input data:", - "PGProteinGroups") - getOption("MSstatsLog")("ERROR", msg) - stop(msg) +.assignSpectronautIsotopeLabelType = function(spec_input, heavyLabels, + peptideSequenceColumn) { + IsotopeLabelType = PeptideSequence = NULL + if (is.null(heavyLabels)) { + return(spec_input) } + + bare_amino_acids = sub("\\[.*\\]", "", heavyLabels) + bare_amino_acids_pattern = paste(bare_amino_acids, collapse = "|") + heavy_pattern = paste(heavyLabels, collapse = "|") + heavy_brackets_escaped_pattern = paste( + gsub("([\\[\\]])", "\\\\\\1", heavyLabels), + collapse = "|" + ) + + spec_input[, IsotopeLabelType := data.table::fcase( + grepl(heavy_pattern_escaped, PeptideSequence, perl = TRUE), "H", + grepl(bare_pattern, PeptideSequence, perl = TRUE), "L", + default = NA_character_ + )] + + spec_input } diff --git a/R/converters_SpectronauttoMSstatsFormat.R b/R/converters_SpectronauttoMSstatsFormat.R index 8590ea0a..812a6fbd 100644 --- a/R/converters_SpectronauttoMSstatsFormat.R +++ b/R/converters_SpectronauttoMSstatsFormat.R @@ -4,26 +4,25 @@ #' @param annotation name of 'annotation.txt' data which includes Condition, BioReplicate, Run. If annotation is already complete in Spectronaut, use annotation=NULL (default). It will use the annotation information from input. #' @param intensity Intensity column to use. Accepts legacy enum values #' \code{'PeakArea'} (default, uses F.PeakArea), \code{'NormalizedPeakArea'} -#' (uses F.NormalizedPeakArea), \code{'MS1Quantity'} (uses FG.MS1Quantity), -#' or \code{'MS2Quantity'} (uses FG.MS2Quantity). Can also be any raw +#' (uses F.NormalizedPeakArea). Can also be any raw #' Spectronaut column name passed as a string (e.g. #' \code{"FG.MS1Quantity"}); the column name is standardized internally. #' For protein turnover workflows the recommended default is -#' \code{'MS1Quantity'} (FG.MS1Quantity). -#' @param heavyLabel Character string identifying the heavy isotope label as it -#' appears inside square brackets in the labeled sequence column, e.g. -#' \code{"Lys6"} matches peptides containing \code{[Lys6]}. Supports any -#' novel label name reported by Spectronaut (e.g. \code{"Leu6"}, -#' \code{"Phe10"}, \code{"Lys8"}). When provided, each peptide is +#' \code{"FG.MS1Quantity"}. +#' @param peptideSequenceColumn Name of the Spectronaut column that contains the +#' peptide sequence. Defaults to \code{"EG.ModifiedSequence"}. The value is +#' standardized internally (dots and spaces removed) before column lookup. +#' @param heavyLabels Character list identifying the heavy isotope labels as it +#' appears inside square brackets in the peptide sequence column, e.g. +#' \code{c("Lys6")} matches peptides containing \code{[Lys6]}. +#' \code{c("Lys6", "Arg10")} matches peptides containing either \code{[Lys6]} or \code{[Arg10]}. +#' Supports any novel label name reported by Spectronaut (e.g. \code{"Leu6"}, +#' \code{"Phe10"}). When provided, peptides are #' classified as heavy (\code{IsotopeLabelType = "H"}), light #' (\code{IsotopeLabelType = "L"}), or unlabeled #' (\code{IsotopeLabelType = NA}) based on its labeled sequence. When -#' \code{NULL} (default) all peptides receive \code{IsotopeLabelType = "L"} -#' as in previous versions. -#' @param labelColumn Name of the Spectronaut column that contains the labeled -#' peptide sequence used for heavy/light classification. Defaults to -#' \code{"FG.LabeledSequence"}. The value is standardized internally -#' (dots and spaces removed) before column lookup. +#' \code{NULL} (default) all peptides receive \code{IsotopeLabelType = "L"}. +#' Useful for protein turnover experiments. #' @param excludedFromQuantificationFilter Remove rows with F.ExcludedFromQuantification=TRUE Default is TRUE. #' @param filter_with_Qvalue FALSE(default) will not perform any filtering. TRUE will filter out the intensities that have greater than qvalue_cutoff in EG.Qvalue column. Those intensities will be replaced with zero and will be considered as censored missing values for imputation purpose. #' @param qvalue_cutoff Cutoff for EG.Qvalue. default is 0.01. @@ -54,9 +53,9 @@ #' SpectronauttoMSstatsFormat = function( input, annotation = NULL, - intensity = c('PeakArea', 'NormalizedPeakArea', 'MS1Quantity', 'MS2Quantity'), - heavyLabel = NULL, - labelColumn = "FG.LabeledSequence", + intensity = c('PeakArea', 'NormalizedPeakArea'), + peptideSequenceColumn = "EG.ModifiedSequence", + heavyLabels = NULL, excludedFromQuantificationFilter = TRUE, filter_with_Qvalue = FALSE, qvalue_cutoff = 0.01, useUniquePeptide = TRUE, removeFewMeasurements=TRUE, @@ -69,17 +68,17 @@ SpectronauttoMSstatsFormat = function( use_log_file = TRUE, append = FALSE, verbose = TRUE, log_file_path = NULL, ... ) { - # Standardize the intensity value when it is a raw column name so that the - # legacy match.arg() inside .cleanRawSpectronaut sees it correctly. - known_aliases = c('PeakArea', 'NormalizedPeakArea', 'MS1Quantity', 'MS2Quantity') - if (length(intensity) > 1) { - # No value supplied: use first (default) - intensity = intensity[1] - } - if (!(intensity %in% known_aliases)) { - # Treat as a raw column name and standardize it - intensity = .standardizeColnames(intensity) - } + # # Standardize the intensity value when it is a raw column name so that the + # # legacy match.arg() inside .cleanRawSpectronaut sees it correctly. + # known_aliases = c('PeakArea', 'NormalizedPeakArea') + # if (length(intensity) > 1) { + # # No value supplied: use first (default) + # intensity = intensity[1] + # } + # if (!(intensity %in% known_aliases)) { + # # Treat as a raw column name and standardize it + # intensity = .standardizeColnames(intensity) + # } validation_config = list( input = input, @@ -120,8 +119,8 @@ SpectronauttoMSstatsFormat = function( input = MSstatsConvert::MSstatsClean(input, intensity = intensity, calculateAnomalyScores, anomalyModelFeatures, - heavyLabel = heavyLabel, - labelColumn = labelColumn) + peptideSequenceColumn = peptideSequenceColumn, + heavyLabels = heavyLabels) annotation = MSstatsConvert::MSstatsMakeAnnotation(input, annotation) pq_filter = list(score_column = "PGQvalue", @@ -151,11 +150,10 @@ SpectronauttoMSstatsFormat = function( feature_columns = c("PeptideSequence", "PrecursorCharge", "FragmentIon", "ProductCharge") - # When heavyLabel is provided IsotopeLabelType is already assigned per-row - # by .cleanRawSpectronaut. We must not overwrite those values with "L". - # When heavyLabel is NULL we preserve the original behaviour: fill any - # missing IsotopeLabelType with "L". - fill_isotope = if (is.null(heavyLabel)) list("IsotopeLabelType" = "L") else list() + + fill_isotope_label_type = if (is.null(heavyLabels)) + list("IsotopeLabelType" = "L") else list() + input = MSstatsConvert::MSstatsPreprocess( input, annotation, @@ -167,7 +165,7 @@ SpectronauttoMSstatsFormat = function( score_filtering = list(pgq = pq_filter, psm_q = qval_filter), exact_filtering = list(excluded_quant = excluded_quant_filter), - columns_to_fill = fill_isotope, + columns_to_fill = fill_isotope_label_type, anomaly_metrics = anomalyModelFeatures) input[, Intensity := ifelse(Intensity == 0, NA, Intensity)] diff --git a/man/DIANNtoMSstatsFormat.Rd b/man/DIANNtoMSstatsFormat.Rd index b7566ee5..eac6e97d 100644 --- a/man/DIANNtoMSstatsFormat.Rd +++ b/man/DIANNtoMSstatsFormat.Rd @@ -75,7 +75,7 @@ Use 'auto' for quantified intensities for DIANN 2.x where each fragment intensit \item{anomalyModelFeatureCount}{Feature selection for anomaly model. Anomaly detection works on the precursor-level and can be much slower if all features used. We will by default filter to the top-100 highest intensity features. This can be adjusted as necessary. To turn feature-selection off, set this value to a high number (e.g. 10000). Only used if calculateAnomalyScores=TRUE.} -\item{runOrder}{Temporal order of MS runs. Should be a two column data.table with columns \code{Run} and \code{Order}, where \code{Run} matches the run name output by Spectronaut and \code{Order} is an integer. Used to engineer the temporal features defined in anomalyModelFeatureTemporal.} +\item{runOrder}{Temporal order of MS runs. Should be a two column data.table with columns \code{Run} and \code{Order}, where \code{Run} matches the run name output by DIA-NN and \code{Order} is an integer. Used to engineer the temporal features defined in anomalyModelFeatureTemporal.} \item{n_trees}{Number of trees to use in isolation forest when calculateAnomalyScores=TRUE. Default is 100.} diff --git a/man/MSstatsClean.Rd b/man/MSstatsClean.Rd index 8c11da0c..3a7e896f 100644 --- a/man/MSstatsClean.Rd +++ b/man/MSstatsClean.Rd @@ -52,7 +52,9 @@ MSstatsClean(msstats_object, ...) msstats_object, intensity, calculateAnomalyScores, - anomalyModelFeatures + anomalyModelFeatures, + peptideSequenceColumn = "EG.ModifiedSequence", + heavyLabels = NULL ) \S4method{MSstatsClean}{MSstatsPhilosopherFiles}( @@ -115,13 +117,34 @@ in TMT data.} Defaults to "Abundance", which means that columns that contain the word "Abundance" will be treated as corresponding to intensities for different channels.} -\item{intensity}{'PeakArea'(default) uses not normalized MS2 peak area. 'NormalizedPeakArea' uses MS2 peak area normalized by Spectronaut. -'MS1Quantity' uses MS1 level quantification, which should be used if MS2 is unreliable.} +\item{intensity}{Intensity column to use. Accepts legacy enum values +\code{'PeakArea'} (default, uses F.PeakArea), \code{'NormalizedPeakArea'} +(uses F.NormalizedPeakArea). Can also be any raw +Spectronaut column name passed as a string (e.g. +\code{"FG.MS1Quantity"}); the column name is standardized internally. +For protein turnover workflows the recommended default is +\code{"FG.MS1Quantity"}.} \item{calculateAnomalyScores}{Default is FALSE. If TRUE, will run anomaly detection model and calculate anomaly scores for each feature. Used downstream to weigh measurements in differential analysis.} \item{anomalyModelFeatures}{character vector of quality metric column names to be used as features in the anomaly detection model. List must not be empty if calculateAnomalyScores=TRUE.} +\item{peptideSequenceColumn}{Name of the Spectronaut column that contains the +peptide sequence. Defaults to \code{"EG.ModifiedSequence"}. The value is +standardized internally (dots and spaces removed) before column lookup.} + +\item{heavyLabels}{Character list identifying the heavy isotope labels as it +appears inside square brackets in the peptide sequence column, e.g. +\code{c("Lys6")} matches peptides containing \code{[Lys6]}. +\code{c("Lys6", "Arg10")} matches peptides containing either \code{[Lys6]} or \code{[Arg10]}. +Supports any novel label name reported by Spectronaut (e.g. \code{"Leu6"}, +\code{"Phe10"}). When provided, peptides are +classified as heavy (\code{IsotopeLabelType = "H"}), light +(\code{IsotopeLabelType = "L"}), or unlabeled +(\code{IsotopeLabelType = NA}) based on its labeled sequence. When +\code{NULL} (default) all peptides receive \code{IsotopeLabelType = "L"}. +Useful for protein turnover experiments.} + \item{peptide_id_col}{character name of a column that identifies peptides} \item{channels}{character vector of channel labels} diff --git a/man/SpectronauttoMSstatsFormat.Rd b/man/SpectronauttoMSstatsFormat.Rd index 36ef3f85..62ecd7de 100644 --- a/man/SpectronauttoMSstatsFormat.Rd +++ b/man/SpectronauttoMSstatsFormat.Rd @@ -7,7 +7,9 @@ SpectronauttoMSstatsFormat( input, annotation = NULL, - intensity = c("PeakArea", "NormalizedPeakArea", "MS1Quantity"), + intensity = c("PeakArea", "NormalizedPeakArea"), + peptideSequenceColumn = "EG.ModifiedSequence", + heavyLabels = NULL, excludedFromQuantificationFilter = TRUE, filter_with_Qvalue = FALSE, qvalue_cutoff = 0.01, @@ -36,8 +38,29 @@ SpectronauttoMSstatsFormat( \item{annotation}{name of 'annotation.txt' data which includes Condition, BioReplicate, Run. If annotation is already complete in Spectronaut, use annotation=NULL (default). It will use the annotation information from input.} -\item{intensity}{'PeakArea'(default) uses not normalized MS2 peak area. 'NormalizedPeakArea' uses MS2 peak area normalized by Spectronaut. -'MS1Quantity' uses MS1 level quantification, which should be used if MS2 is unreliable.} +\item{intensity}{Intensity column to use. Accepts legacy enum values +\code{'PeakArea'} (default, uses F.PeakArea), \code{'NormalizedPeakArea'} +(uses F.NormalizedPeakArea). Can also be any raw +Spectronaut column name passed as a string (e.g. +\code{"FG.MS1Quantity"}); the column name is standardized internally. +For protein turnover workflows the recommended default is +\code{"FG.MS1Quantity"}.} + +\item{peptideSequenceColumn}{Name of the Spectronaut column that contains the +peptide sequence. Defaults to \code{"EG.ModifiedSequence"}. The value is +standardized internally (dots and spaces removed) before column lookup.} + +\item{heavyLabels}{Character list identifying the heavy isotope labels as it +appears inside square brackets in the peptide sequence column, e.g. +\code{c("Lys6")} matches peptides containing \code{[Lys6]}. +\code{c("Lys6", "Arg10")} matches peptides containing either \code{[Lys6]} or \code{[Arg10]}. +Supports any novel label name reported by Spectronaut (e.g. \code{"Leu6"}, +\code{"Phe10"}). When provided, peptides are +classified as heavy (\code{IsotopeLabelType = "H"}), light +(\code{IsotopeLabelType = "L"}), or unlabeled +(\code{IsotopeLabelType = NA}) based on its labeled sequence. When +\code{NULL} (default) all peptides receive \code{IsotopeLabelType = "L"}. +Useful for protein turnover experiments.} \item{excludedFromQuantificationFilter}{Remove rows with F.ExcludedFromQuantification=TRUE Default is TRUE.} diff --git a/man/dot-cleanRawDIANN.Rd b/man/dot-cleanRawDIANN.Rd index dbdd9840..51af8bc2 100644 --- a/man/dot-cleanRawDIANN.Rd +++ b/man/dot-cleanRawDIANN.Rd @@ -36,6 +36,10 @@ Default is 0.01.} column, i.e. the global q-value for the protein group. If MBR is true, the qvalue cutoff for the Lib.PG.Q.Value column, i.e. the protein group q-value for the library created after the first MBR pass. Default is 0.01.} + +\item{calculateAnomalyScores}{Default is FALSE. If TRUE, will run anomaly detection model and calculate anomaly scores for each feature. Used downstream to weigh measurements in differential analysis.} + +\item{anomalyModelFeatures}{character vector of quality metric column names to be used as features in the anomaly detection model. List must not be empty if calculateAnomalyScores=TRUE.} } \value{ data.table diff --git a/man/dot-cleanRawSpectronaut.Rd b/man/dot-cleanRawSpectronaut.Rd index 70d2a600..edc51a3a 100644 --- a/man/dot-cleanRawSpectronaut.Rd +++ b/man/dot-cleanRawSpectronaut.Rd @@ -8,18 +8,41 @@ msstats_object, intensity, calculateAnomalyScores, - anomalyModelFeatures + anomalyModelFeatures, + peptideSequenceColumn = "EG.ModifiedSequence", + heavyLabels = NULL ) } \arguments{ \item{msstats_object}{an object of class \code{MSstatsSpectronautFiles}.} -\item{intensity}{'PeakArea'(default) uses not normalized MS2 peak area. 'NormalizedPeakArea' uses MS2 peak area normalized by Spectronaut. -'MS1Quantity' uses MS1 level quantification, which should be used if MS2 is unreliable.} +\item{intensity}{Intensity column to use. Accepts legacy enum values +\code{'PeakArea'} (default, uses F.PeakArea), \code{'NormalizedPeakArea'} +(uses F.NormalizedPeakArea). Can also be any raw +Spectronaut column name passed as a string (e.g. +\code{"FG.MS1Quantity"}); the column name is standardized internally. +For protein turnover workflows the recommended default is +\code{"FG.MS1Quantity"}.} \item{calculateAnomalyScores}{Default is FALSE. If TRUE, will run anomaly detection model and calculate anomaly scores for each feature. Used downstream to weigh measurements in differential analysis.} \item{anomalyModelFeatures}{character vector of quality metric column names to be used as features in the anomaly detection model. List must not be empty if calculateAnomalyScores=TRUE.} + +\item{peptideSequenceColumn}{Name of the Spectronaut column that contains the +peptide sequence. Defaults to \code{"EG.ModifiedSequence"}. The value is +standardized internally (dots and spaces removed) before column lookup.} + +\item{heavyLabels}{Character list identifying the heavy isotope labels as it +appears inside square brackets in the peptide sequence column, e.g. +\code{c("Lys6")} matches peptides containing \code{[Lys6]}. +\code{c("Lys6", "Arg10")} matches peptides containing either \code{[Lys6]} or \code{[Arg10]}. +Supports any novel label name reported by Spectronaut (e.g. \code{"Leu6"}, +\code{"Phe10"}). When provided, peptides are +classified as heavy (\code{IsotopeLabelType = "H"}), light +(\code{IsotopeLabelType = "L"}), or unlabeled +(\code{IsotopeLabelType = NA}) based on its labeled sequence. When +\code{NULL} (default) all peptides receive \code{IsotopeLabelType = "L"}. +Useful for protein turnover experiments.} } \value{ \code{data.table} From e983f28656b1cbde85fcf0b1c601d9f1c3cd04f1 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 1 Apr 2026 09:09:12 -0400 Subject: [PATCH 03/14] clean up runtime bugs --- R/clean_Spectronaut.R | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index 916c0b31..ae8a49a6 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -76,7 +76,7 @@ stop(msg) } # Ensure at least one protein name column is present - if (.standardizeColnames(peptideSequenceColumn) %in% colnames(spec_input)) { + if (!(.standardizeColnames(peptideSequenceColumn) %in% colnames(spec_input))) { msg = paste("The following column are missing from the input data:", peptideSequenceColumn) getOption("MSstatsLog")("ERROR", msg) @@ -168,10 +168,10 @@ #' \code{FG.LabeledSequence} with a bracketed modification, e.g. #' \code{_PEPTIDEK[Lys6]_}. Any sequence that contains #' \code{[]} is classified as heavy; all others are light. -#' Sequences that belong to peptide families that cannot carry the label -#' (i.e. the same stripped sequence never appears in a heavy form in the -#' entire dataset) are classified as \code{NA}. -#' +#' Sequences that do not have amino acids that can carry the label +#' are classified as \code{NA}. For example, if \code{heavyLabels} is +#' \code{"Lys6"}, then \code{PEPTIDEZ} is classified as NA since it +#' has no lysine residues that could be labeled. #' When \code{heavyLabel} is \code{NULL} the column is left untouched so #' that the downstream \code{columns_to_fill} default of \code{"L"} applies, #' preserving backwards compatibility. @@ -194,16 +194,16 @@ } bare_amino_acids = sub("\\[.*\\]", "", heavyLabels) - bare_amino_acids_pattern = paste(bare_amino_acids, collapse = "|") - heavy_pattern = paste(heavyLabels, collapse = "|") + bare_amino_acids_pattern = paste0(bare_amino_acids, collapse = "|") + heavy_pattern = paste0(heavyLabels, collapse = "|") heavy_brackets_escaped_pattern = paste( - gsub("([\\[\\]])", "\\\\\\1", heavyLabels), + gsub("([\\[\\]])", "\\\\\\1", heavy_pattern), collapse = "|" ) spec_input[, IsotopeLabelType := data.table::fcase( - grepl(heavy_pattern_escaped, PeptideSequence, perl = TRUE), "H", - grepl(bare_pattern, PeptideSequence, perl = TRUE), "L", + grepl(heavy_brackets_escaped_pattern, PeptideSequence, perl = TRUE), "H", + grepl(bare_amino_acids_pattern, PeptideSequence, perl = TRUE), "L", default = NA_character_ )] From c0bbc21a088e7e91fe3992827d35137ee20f9b8b Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 1 Apr 2026 09:14:42 -0400 Subject: [PATCH 04/14] clean up some unit tests --- inst/tinytest/test_clean_Spectronaut.R | 2 +- .../test_converters_SpectronauttoMSstatsFormat.R | 9 --------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/inst/tinytest/test_clean_Spectronaut.R b/inst/tinytest/test_clean_Spectronaut.R index 9dc6dd93..17f17acf 100644 --- a/inst/tinytest/test_clean_Spectronaut.R +++ b/inst/tinytest/test_clean_Spectronaut.R @@ -5,7 +5,7 @@ spectronaut_raw = data.table::fread(spectronaut_raw) spectronaut_raw$FG.MS1Quantity = 100000 msstats_input = MSstatsConvert::MSstatsImport( list(input = spectronaut_raw), "MSstats", "Spectronaut") -output = MSstatsConvert:::.cleanRawSpectronaut(msstats_input, intensity = 'MS1Quantity', +output = MSstatsConvert:::.cleanRawSpectronaut(msstats_input, intensity = 'FG.MS1Quantity', calculateAnomalyScores = FALSE, anomalyModelFeatures = c()) expect_true(all(output$Intensity == 100000)) diff --git a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R index fe76176e..a50d783a 100644 --- a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R +++ b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R @@ -19,8 +19,6 @@ expect_true("Fraction" %in% colnames(output)) # Test SpectronauttoMSstatsFormat Missing Columns --------------------------- -# F.ExcludedFromQuantification is now synthesized as FALSE when absent, so -# removing it should NOT cause an error. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) @@ -29,8 +27,6 @@ expect_silent( SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE) ) -# F.FrgLossType is now synthesized as "noloss" when absent, so removing it -# should NOT cause an error. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) @@ -39,9 +35,6 @@ expect_silent( SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE) ) -# PG.ProteinGroups is now optional when PG.ProteinAccessions is present. -# The standard test file has both columns, so removing PG.ProteinGroups should -# fall back to PG.ProteinAccessions without error. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) @@ -50,7 +43,6 @@ expect_silent( SpectronauttoMSstatsFormat(spectronaut_raw, use_log_file = FALSE) ) -# When BOTH protein name columns are absent the converter must still error. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) @@ -61,7 +53,6 @@ expect_error( "The following columns are missing from the input data: PGProteinGroups" ) -# FG.Charge remains required. spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", package = "MSstatsConvert") spectronaut_raw = data.table::fread(spectronaut_raw) From 419f7a837c5f446774a0bddf9b5bd7d14867c483 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 1 Apr 2026 09:21:34 -0400 Subject: [PATCH 05/14] reorganize test files --- ...st_converters_SpectronauttoMSstatsFormat.R | 50 +++++- .../test_spectronaut_protein_turnover.R | 154 ------------------ 2 files changed, 49 insertions(+), 155 deletions(-) delete mode 100644 inst/tinytest/test_spectronaut_protein_turnover.R diff --git a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R index a50d783a..721a5fd6 100644 --- a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R +++ b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R @@ -16,7 +16,7 @@ expect_true("IsotopeLabelType" %in% colnames(output)) expect_true("Condition" %in% colnames(output)) expect_true("BioReplicate" %in% colnames(output)) expect_true("Fraction" %in% colnames(output)) - +expect_true(all(spectronaut_raw$IsotopeLabelType == "L")) # Test SpectronauttoMSstatsFormat Missing Columns --------------------------- spectronaut_raw = system.file("tinytest/raw_data/Spectronaut/spectronaut_input.csv", @@ -380,3 +380,51 @@ expect_error(SpectronauttoMSstatsFormat( n_trees = 100, max_depth = "auto" )) + + + +boxcar_path = system.file( + "tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv", + package = "MSstatsConvert") +boxcar_raw = data.table::fread(boxcar_path) + + +# --- Heavy Label Testing -------------------------------- + +output_heavy = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "FG.MS1Quantity", + peptideSequenceColumn = "FG.LabeledSequence", + heavyLabel = c("K[Lys6]"), + use_log_file = FALSE +) + +expect_true("Run" %in% colnames(output_heavy)) +expect_true("ProteinName" %in% colnames(output_heavy)) +expect_true("PeptideSequence" %in% colnames(output_heavy)) +expect_true("PrecursorCharge" %in% colnames(output_heavy)) +expect_true("Intensity" %in% colnames(output_heavy)) +expect_true("FragmentIon" %in% colnames(output_heavy)) +expect_true("ProductCharge" %in% colnames(output_heavy)) +expect_true("IsotopeLabelType" %in% colnames(output_heavy)) +expect_true("Condition" %in% colnames(output_heavy)) +expect_true("BioReplicate" %in% colnames(output_heavy)) + +expect_true(all(c("0d", "8d", "32d") %in% unique(output_heavy$Condition))) +expect_true(nrow(output_heavy) > 0) +expect_false(any(is.na(output_heavy$ProteinName))) +expect_true("H" %in% unique(output_heavy$IsotopeLabelType)) +expect_true("L" %in% unique(output_heavy$IsotopeLabelType)) +heavy_rows = output_heavy[IsotopeLabelType == "H"] +expect_true(all(grepl("[Lys6]", heavy_rows$PeptideSequence, fixed = TRUE))) +light_rows = output_heavy[IsotopeLabelType == "L"] +expect_false(any(grepl("[Lys6]", light_rows$PeptideSequence, fixed = TRUE))) +na_rows = output_heavy[is.na(IsotopeLabelType)] +expect_false(any(grepl("K", na_rows$PeptideSequence, fixed = TRUE))) +output_leu = SpectronauttoMSstatsFormat( + boxcar_raw, + intensity = "MS1Quantity", + heavyLabel = c("L[Leu6]"), + use_log_file = FALSE +) +expect_false("H" %in% unique(output_leu$IsotopeLabelType)) diff --git a/inst/tinytest/test_spectronaut_protein_turnover.R b/inst/tinytest/test_spectronaut_protein_turnover.R deleted file mode 100644 index 11b172d7..00000000 --- a/inst/tinytest/test_spectronaut_protein_turnover.R +++ /dev/null @@ -1,154 +0,0 @@ -# Tests for SpectronauttoMSstatsFormat with protein turnover (BoxCar) data. -# -# The BoxCar report differs from a standard Spectronaut export in several ways: -# - No PG.ProteinGroups (uses PG.ProteinAccessions instead) -# - No F.FrgLossType (synthesized as "noloss") -# - No F.ExcludedFromQuantification (synthesized as FALSE) -# - No R.Replicate (falls back to R.Condition for BioReplicate) -# - No EG.ModifiedSequence (uses FG.LabeledSequence) -# - No F.FrgIon / F.Charge (synthesized as NA) -# - Intensity sourced from FG.MS1Quantity or FG.MS2Quantity -# - Heavy peptides identified by a bracketed label, e.g. [Lys6] - -boxcar_path = system.file( - "tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv", - package = "MSstatsConvert") -boxcar_raw = data.table::fread(boxcar_path) - - -# --- Basic format conversion (no heavy label) -------------------------------- - -output_basic = SpectronauttoMSstatsFormat( - boxcar_raw, - intensity = "MS1Quantity", - use_log_file = FALSE -) - -expect_true("Run" %in% colnames(output_basic)) -expect_true("ProteinName" %in% colnames(output_basic)) -expect_true("PeptideSequence" %in% colnames(output_basic)) -expect_true("PrecursorCharge" %in% colnames(output_basic)) -expect_true("Intensity" %in% colnames(output_basic)) -expect_true("FragmentIon" %in% colnames(output_basic)) -expect_true("ProductCharge" %in% colnames(output_basic)) -expect_true("IsotopeLabelType" %in% colnames(output_basic)) -expect_true("Condition" %in% colnames(output_basic)) -expect_true("BioReplicate" %in% colnames(output_basic)) - -# Without heavyLabel all rows should be "L" (backwards compatible default) -expect_true(all(output_basic$IsotopeLabelType == "L")) - -# Condition values should reflect R.Condition (0d, 8d, 32d) -expect_true(all(c("0d", "8d", "32d") %in% unique(output_basic$Condition))) - -# BioReplicate falls back to R.Condition since R.Replicate is absent -expect_true(all(output_basic$BioReplicate %in% output_basic$Condition)) - -# Protein names come from PG.ProteinAccessions (no PG.ProteinGroups column) -expect_true(nrow(output_basic) > 0) -expect_false(any(is.na(output_basic$ProteinName))) - - -# --- Heavy label classification (Lys6) -------------------------------------- - -output_heavy = SpectronauttoMSstatsFormat( - boxcar_raw, - intensity = "MS1Quantity", - heavyLabel = "Lys6", - use_log_file = FALSE -) - -expect_true("IsotopeLabelType" %in% colnames(output_heavy)) - -# Both heavy and light peptides must be present -expect_true("H" %in% unique(output_heavy$IsotopeLabelType)) -expect_true("L" %in% unique(output_heavy$IsotopeLabelType)) - -# Heavy peptides must have [Lys6] in their PeptideSequence -heavy_rows = output_heavy[IsotopeLabelType == "H"] -expect_true(all(grepl("[Lys6]", heavy_rows$PeptideSequence, fixed = TRUE))) - -# Light peptides must NOT have [Lys6] in their PeptideSequence -light_rows = output_heavy[IsotopeLabelType == "L"] -expect_false(any(grepl("[Lys6]", light_rows$PeptideSequence, fixed = TRUE))) - -# Unlabeled (NA) peptides must NOT have [Lys6] in their PeptideSequence -na_rows = output_heavy[is.na(IsotopeLabelType)] -if (nrow(na_rows) > 0) { - expect_false(any(grepl("[Lys6]", na_rows$PeptideSequence, fixed = TRUE))) -} - - -# --- MS2 intensity channel --------------------------------------------------- - -output_ms2 = SpectronauttoMSstatsFormat( - boxcar_raw, - intensity = "MS2Quantity", - use_log_file = FALSE -) - -expect_true("Intensity" %in% colnames(output_ms2)) -# MS1 and MS2 intensity values should generally differ -output_ms1 = SpectronauttoMSstatsFormat( - boxcar_raw, - intensity = "MS1Quantity", - use_log_file = FALSE -) -# At least some intensities must differ between MS1 and MS2 channels -shared_keys = merge( - output_ms1[, .(ProteinName, PeptideSequence, Run, ms1 = Intensity)], - output_ms2[, .(ProteinName, PeptideSequence, Run, ms2 = Intensity)], - by = c("ProteinName", "PeptideSequence", "Run") -) -if (nrow(shared_keys) > 0) { - expect_false(all(shared_keys$ms1 == shared_keys$ms2, na.rm = TRUE)) -} - - -# --- Raw column name as intensity string ------------------------------------- - -output_raw_col = SpectronauttoMSstatsFormat( - boxcar_raw, - intensity = "FG.MS1Quantity", - use_log_file = FALSE -) -# Should produce the same intensities as the alias "MS1Quantity" -expect_equal(nrow(output_raw_col), nrow(output_ms1)) - - -# --- Invalid intensity column ------------------------------------------------ - -expect_error( - SpectronauttoMSstatsFormat( - boxcar_raw, - intensity = "FG.NonExistentColumn", - use_log_file = FALSE - ), - "not found in input data" -) - - -# --- Novel heavy labels (non-Lys6) ------------------------------------------ - -# Deuterium leucine label; none in this file, so all should be L or NA -output_leu = SpectronauttoMSstatsFormat( - boxcar_raw, - intensity = "MS1Quantity", - heavyLabel = "Leu6", - use_log_file = FALSE -) -expect_false("H" %in% unique(output_leu$IsotopeLabelType)) - - -# --- Backwards compatibility: standard Spectronaut file ---------------------- -# The standard format (with all columns present) must still work unchanged. - -spectronaut_std_path = system.file( - "tinytest/raw_data/Spectronaut/spectronaut_input.csv", - package = "MSstatsConvert") -spectronaut_std = data.table::fread(spectronaut_std_path) - -output_std = SpectronauttoMSstatsFormat(spectronaut_std, use_log_file = FALSE) -expect_equal(ncol(output_std), 11) -expect_equal(nrow(output_std), 372) -expect_true(all(output_std$IsotopeLabelType == "L")) From 57edfc31f58e1931a4244c00256c0408e9992e7a Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 1 Apr 2026 09:48:28 -0400 Subject: [PATCH 06/14] more testing cleanup --- R/clean_Spectronaut.R | 10 +- R/converters_SpectronauttoMSstatsFormat.R | 13 +- .../boxcar_protein_turnover_input.csv | 172 +++++++++--------- .../raw_data/Spectronaut/run_order.csv | 41 ----- ...st_converters_SpectronauttoMSstatsFormat.R | 7 +- man/SpectronauttoMSstatsFormat.Rd | 2 +- 6 files changed, 95 insertions(+), 150 deletions(-) delete mode 100644 inst/tinytest/raw_data/Spectronaut/run_order.csv diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index ae8a49a6..0d7e6884 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -15,7 +15,7 @@ spec_input = .addSpectronautColumnsIfMissing(spec_input) spec_input = spec_input[FFrgLossType == "noloss", ] - f_charge_col = .findAvailable(c("FCharge", "FFrgZ"), colnames(spec_input)) + f_charge_col = .findAvailable(c("FCharge", "FFrgZ"), colnames(spec_input), fall_back = "FCharge") pg_qval_col = .findAvailable(c("PGQvalue"), colnames(spec_input)) interference_col = .findAvailable(c("FPossibleInterference"), colnames(spec_input)) @@ -25,7 +25,7 @@ peptide_col = .findAvailable(.standardizeColnames(peptideSequenceColumn), colnames(spec_input)) protein_col = .findAvailable(c("PGProteinGroups", "PGProteinAccessions"), - colnames(spec_input)) + colnames(spec_input), fall_back = "PGProteinGroups") cols = c(protein_col, peptide_col, "FGCharge", "FFrgIon", f_charge_col, "RFileName", "RCondition", "RReplicate", @@ -47,7 +47,7 @@ skip_absent = TRUE) spec_input = .assignSpectronautIsotopeLabelType( - spec_input, heavyLabels, peptideSequenceColumn, msstats_object) + spec_input, heavyLabels, peptideSequenceColumn) .logSuccess("Spectronaut", "clean") spec_input @@ -140,7 +140,7 @@ .resolveSpectronautIntensityColumn = function(intensity, available_cols) { legacy_mapping = c( "PeakArea" = "FPeakArea", - "NormalizedPeakArea" = "FNormalizedPeakArea", + "NormalizedPeakArea" = "FNormalizedPeakArea" ) if (intensity %in% names(legacy_mapping)) { @@ -181,8 +181,6 @@ #' or \code{NULL}. #' @param peptideSequenceColumn Raw (dot-separated) column name that holds the labeled #' sequence (e.g. \code{"FG.LabeledSequence"}). -#' @param msstats_object The original MSstats object (used to access the -#' standardized label column after import). #' @return `data.table` with \code{IsotopeLabelType} column added or updated. #' @keywords internal #' @noRd diff --git a/R/converters_SpectronauttoMSstatsFormat.R b/R/converters_SpectronauttoMSstatsFormat.R index 812a6fbd..42f14987 100644 --- a/R/converters_SpectronauttoMSstatsFormat.R +++ b/R/converters_SpectronauttoMSstatsFormat.R @@ -53,7 +53,7 @@ #' SpectronauttoMSstatsFormat = function( input, annotation = NULL, - intensity = c('PeakArea', 'NormalizedPeakArea'), + intensity = 'PeakArea', peptideSequenceColumn = "EG.ModifiedSequence", heavyLabels = NULL, excludedFromQuantificationFilter = TRUE, @@ -68,17 +68,6 @@ SpectronauttoMSstatsFormat = function( use_log_file = TRUE, append = FALSE, verbose = TRUE, log_file_path = NULL, ... ) { - # # Standardize the intensity value when it is a raw column name so that the - # # legacy match.arg() inside .cleanRawSpectronaut sees it correctly. - # known_aliases = c('PeakArea', 'NormalizedPeakArea') - # if (length(intensity) > 1) { - # # No value supplied: use first (default) - # intensity = intensity[1] - # } - # if (!(intensity %in% known_aliases)) { - # # Treat as a raw column name and standardize it - # intensity = .standardizeColnames(intensity) - # } validation_config = list( input = input, diff --git a/inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv b/inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv index 4c578cbf..c7e34886 100644 --- a/inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv +++ b/inst/tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv @@ -1,86 +1,86 @@ -"R.Condition","R.Fraction","R.FileName","PG.Genes","PG.ProteinAccessions","PG.ProteinDescriptions","PEP.StrippedSequence","PEP.MS1Channel1","PEP.MS1Channel2","PEP.MS2Channel1","PEP.MS2Channel2","PEP.MS1Quantity","PEP.MS2Quantity","EG.Channel1Quantity","EG.Channel2Quantity","EG.DeltaiRT","EG.PeakWidth","EG.SignalToNoise","EG.ReferenceQuantity (Settings)","EG.TargetQuantity (Settings)","EG.Cscore","FG.Charge","FG.LabeledSequence","FG.PrecMz","FG.ShapeQualityScore","FG.ShapeQualityScore (MS1)","FG.ShapeQualityScore (MS2)","FG.MS1Quantity","FG.MS2Quantity","FG.CalibratedMassAccuracy (PPM)","FG.CalibratedMz","FG.MeasuredMz","FG.Noise","FG.PPMTolerance","FG.PriorIonRatio","FG.RawMassAccuracy (PPM)","FG.TheoreticalMz","FG.Tolerance" -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",52214.48438,6.28794241,2526.726807,NA,52214.48438,2526.726807,52214.48438,6.28794241,-0.417411486,0.118343353,11.43745518,NA,NA,39.35884476,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.084113663,-0.206461176,0.113449925,6.28794241,NA,NA,798.9501368,NA,0.545019031,15.81776564,0.071346797,NA,798.9561768,0.012637702 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",53901.19531,33668.39063,2727.578613,2531.486572,53901.19531,2727.578613,53901.19531,33668.39063,-0.003388584,0.119680405,19.09109497,NA,NA,53.78583527,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.503702706,0.31842348,0.548168798,33668.39063,2531.486572,0.661405242,798.9499913,NA,6137.880859,16.26055612,0.020507174,8.403298378,798.9561768,0.012991472 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",361218.75,789789.5625,29711.5918,99134.04688,361218.75,29711.5918,361218.75,789789.5625,0.200303709,0.136451721,33.30825043,NA,NA,49.5711937,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.953213739,0.983853102,0.933836937,789789.5625,99134.04688,-0.774962251,698.8322221,NA,35286.28125,12.10626035,0.002172636,7.423735619,698.8379517,0.008460314 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,317544.3125,28474.84375,317544.3125,NA,0.089715797,0.179130554,18.59780312,NA,317544.3125,54.02045441,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.685566238,-0.214917466,0.935134053,317544.3125,28474.84375,0.163214573,610.3088154,NA,21569.01172,15.44265139,8.08e-05,8.200508118,610.3137207,0.009424862 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",14551.48145,10963.46484,2088.205078,NA,14551.48145,2088.205078,14551.48145,10963.46484,-0.030491702,0.106908798,5.555503368,NA,NA,41.95940781,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.053336553,0.102215819,0.063812832,10963.46484,NA,NA,698.8331232,NA,4808.626465,11.14718404,0.052520957,NA,698.8379517,0.007790075 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",54474.81641,26552.10742,5579.812988,NA,54474.81641,5579.812988,54474.81641,26552.10742,0.15870407,0.108121872,9.77047348,NA,NA,46.18510056,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.193241477,0.406558335,0.221918148,26552.10742,NA,NA,698.8322132,NA,0.637417674,13.65568532,0.106278472,NA,698.8379517,0.009543111 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",39677.51563,16425.48047,684.1309204,1013.757019,39677.51563,684.1309204,39677.51563,16425.48047,0.117555344,0.106966019,5.408240795,NA,NA,38.59564972,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.311630216,0.354606122,0.326806843,16425.48047,1013.757019,-0.573573055,798.949615,NA,5993.632813,15.41047812,0.076787531,7.639362335,798.9561768,0.012312297 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,330560.5313,31252.33008,330560.5313,NA,0.033369286,0.220161438,26.41818619,NA,330560.5313,45.18108749,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.67101143,0.273708791,0.803494811,330560.5313,31252.33008,-0.101102046,610.3090203,NA,13844.26758,18.42940488,4.36e-05,7.60047102,610.3137207,0.011247719 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,307435.125,17000.37305,307435.125,NA,0.240706499,0.193317413,14.41809559,NA,307435.125,50.67734528,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.571282928,0.124966092,0.855466564,307435.125,17000.37305,-6.050453499,610.309906,NA,13613.83887,21.05542674,0.000104272,0.200012401,610.3137207,0.012850416 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",47506.33984,1106.301758,3690.832031,NA,47506.33984,3690.832031,47506.33984,1106.301758,0.306791189,0.086696625,25.48948097,NA,NA,41.01118088,2,"_RLIYAASTLDSGVPK[Lys6]_",798.9561768,0.123627679,-0.109247744,0.21090438,1106.301758,NA,NA,798.9493011,NA,0.682145774,13.3257948,0.071346797,NA,798.9561768,0.010646726 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","NYLAWYQQK",NA,NA,NA,NA,265152.4688,26584.7168,265152.4688,NA,-0.072200018,0.173988342,24.26990891,NA,265152.4688,44.1951828,2,"_NYLAWYQQK[Lys6]_",610.3137207,0.730396223,0.692343533,0.826470395,265152.4688,26584.7168,-0.462319765,610.3084947,NA,16428.00781,14.25596383,0.000145931,8.100502014,610.3137207,0.00870061 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",64753.25391,37103.47656,2771.676758,5288.981445,64753.25391,2771.676758,64753.25391,37103.47656,-0.334582803,0.090234756,40.38325882,NA,NA,58.64351273,2,"_ANGYTTEYSASVK[Lys6]_",698.8379517,0.752488297,0.42474547,0.847430766,37103.47656,5288.981445,1.418732529,698.8332058,NA,17725.63281,14.27251496,0.000159417,8.209778786,698.8379517,0.009974175 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,229366.5313,13161.7207,301880,NA,0.099583001,0.1547966,53.65778351,NA,301880,46.13341141,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.945391178,0.902295232,0.945409735,301880,21813.95898,-0.661647506,944.471482,NA,7672.527344,13.79176039,3.08e-05,5.880710125,944.4776611,0.01302601 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,1738399,24785.98438,511836,NA,0.193479974,0.122386932,170.5673981,NA,511836,45.50453186,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.939145482,0.962462068,0.914132794,511836,37570.00781,-2.429901179,944.4707275,NA,6155.03418,12.28872375,2.77e-05,4.911362171,944.4776611,0.011606425 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",54474.81641,26552.10742,5579.812988,NA,54474.81641,5579.812988,54474.81641,26552.10742,0.15870407,0.108121872,9.77047348,NA,NA,46.18510056,2,"_ANGYTTEYSASVK_",695.8278809,0.70080474,0.408324808,0.776748916,54474.81641,5579.812988,-1.43997412,695.8222402,NA,19640.46289,13.57279993,0.000219595,6.666407108,695.8278809,0.009444333 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,178688.2813,16291.08301,49225.04688,NA,0.03367288,0.141269684,3.429688454,NA,49225.04688,4.163423061,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.342585838,0.755802751,0.298213966,49225.04688,843.75,-1.744663479,961.9528505,NA,6774.844727,11.75396998,0.088062547,5.520041943,961.9598389,0.011306847 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,147666.9844,2556.02124,49906.51172,NA,0.105416125,0.087011337,19.55953407,NA,49906.51172,50.80852127,1,"_DIVMTQSQK_",1049.529541,0.762291521,0.718976796,0.88452059,49906.51172,1987.451782,-0.340762043,1049.522592,NA,3885.237549,11.93060613,0.000304638,6.280715942,1049.529541,0.012521524 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","DNSQSILYLQMNALR",NA,NA,NA,NA,32949.09766,1983.132813,32949.09766,NA,-0.055576582,0.134498596,3.408590317,NA,32949.09766,45.18378067,2,"_DNSQSILYLQMNALR_",883.4487305,0.568902045,0.509661198,0.662240028,32949.09766,1983.132813,0.420739097,883.4411066,NA,15572.7666,12.79803757,0.019278135,9.05044651,883.4487305,0.01130641 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,229366.5313,13161.7207,156853.0469,NA,-0.192097269,0.145561218,3.154168844,NA,156853.0469,32.83724213,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.47311473,0.053626869,0.639628977,156853.0469,4509.482422,NA,952.4688328,NA,32506.30078,13.66085687,0.008043985,NA,952.4750977,0.013011626 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,5286713.5,42479.61719,9406117,NA,0.212553134,0.136051178,4.639051914,NA,9406117,20.27957153,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.313945824,0.303904533,0.506884257,9406117,5501.03125,-3.846004353,952.4683217,NA,27018.625,11.59629195,0.018160522,3.26810956,952.4750977,0.011045179 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,396396.3125,26660.05273,181685.8438,NA,-0.058827182,0.181724548,12.47270584,NA,181685.8438,35.14596558,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.671352214,0.795062184,0.63551121,181685.8438,4501.779785,-0.79095052,961.9527304,NA,8517.833984,13.50843026,0.021970971,6.598670959,961.9598389,0.012994567 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,48204.21875,4471.815918,48204.21875,NA,7.87e-05,0.115951538,180572.5313,NA,48204.21875,35.81245804,2,"_LVESGGGLVQSGR_",629.8411255,0.572125667,0.518132031,0.585245798,48204.21875,4471.815918,-0.174501771,629.8354614,NA,0.549019933,13.19085954,0.027632874,8.818412781,629.8411255,0.008308146 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,147666.9844,2556.02124,245427.4688,NA,0.488357752,0.204304695,9.938085556,NA,245427.4688,23.26274681,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.310197904,0.328751445,0.330117547,245427.4688,3124.59082,0.809784766,533.2616013,NA,6957.676758,19.00785454,0.032186132,8.813065529,533.2658691,0.01013624 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,22874.2793,3278.338867,22874.2793,NA,-0.07309582,0.087404251,8.534190178,NA,22874.2793,39.99494171,2,"_LVESGGGLVQSGR_",629.8411255,0.577427874,-0.007701109,0.774999062,22874.2793,3278.338867,-0.648323506,629.8357123,NA,11945.79785,12.72379816,0.01656705,7.94626236,629.8411255,0.008013971 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,143826.2969,29114.22656,287476.0625,NA,-0.442978126,0.099250793,66.16171265,NA,287476.0625,48.09414673,2,"_GLEWVAQIR_",536.3009033,0.852551711,0.6651057,0.891533136,287476.0625,31638.02344,-1.890337544,536.2961664,NA,14677.47461,21.7628811,2.7e-05,6.942267895,536.3009033,0.011671453 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,396396.3125,26660.05273,611106.75,NA,-0.276540207,0.155319214,60.07998657,NA,611106.75,44.26254654,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.833773804,0.715957105,0.86554714,611106.75,48818.32422,0.601651314,953.9563235,NA,13007.24023,13.63675443,0.019007353,6.973893166,953.9624023,0.013008951 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",64753.25391,37103.47656,2771.676758,5288.981445,64753.25391,2771.676758,64753.25391,37103.47656,-0.334582803,0.090234756,40.38325882,NA,NA,58.64351273,2,"_ANGYTTEYSASVK_",695.8278809,0.554959814,0.44701153,0.811589549,64753.25391,2771.676758,-0.415953271,695.823319,NA,6603.822266,14.27813947,0.000338258,6.140111923,695.8278809,0.009935128 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,149688.4844,5037.118164,37325.11328,NA,-0.122204219,0.139766693,18.9133091,NA,37325.11328,50.67339706,1,"_DIVMTQSQK_",1049.529541,0.786729583,0.994622231,0.921459198,37325.11328,5042.44043,-0.337613546,1049.521374,NA,5278.383789,10.98428883,0.000270601,7.443811417,1049.529541,0.011528336 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,187616.75,40963.83594,184.656723,NA,-0.743380425,0.139030457,41.55771255,NA,184.656723,27.77791405,3,"_GLEWVAQIR_",357.8696899,0.501662409,0.19953613,0.717801531,184.656723,34967.05078,NA,357.8667651,NA,14427.96777,22.70728908,0.010838341,NA,357.8696899,0.008126251 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,93384.82813,10611.82227,93384.82813,NA,-0.070280012,0.139417648,23.94354248,NA,93384.82813,41.66125488,2,"_LVESGGGLVQSGR_",629.8411255,0.807707769,0.436359495,0.891696811,93384.82813,10611.82227,-0.230153229,629.8361588,NA,8046.242188,16.859308,0.000213283,7.655545235,629.8411255,0.010618686 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",47506.33984,1106.301758,3690.832031,NA,47506.33984,3690.832031,47506.33984,1106.301758,0.306791189,0.086696625,25.48948097,NA,NA,41.01118088,2,"_RLIYAASTLDSGVPK_",795.946106,0.712214041,0.765812516,0.704079906,47506.33984,3690.832031,-0.985626551,795.9392179,NA,4217.413574,13.37790976,0.029425923,7.668252468,795.946106,0.010648095 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,38214.57031,6194.37793,38214.57031,NA,-0.224670601,0.11548996,264904,NA,38214.57031,41.84169006,2,"_SSQSLLNSGNQK_",631.8203735,0.734587829,0.065157317,0.895376523,38214.57031,6194.37793,1.608111883,631.8148588,NA,0.586804807,13.07086766,0.000181341,10.33642197,631.8203735,0.00825844 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,62163.67969,7727.032227,62163.67969,NA,0.003407426,0.155735016,24.55526352,NA,62163.67969,44.81443024,2,"_SSQSLLNSGNQK_",631.8203735,0.678574008,0.157909423,0.799956719,62163.67969,7727.032227,1.431083891,631.8154794,NA,6401.953125,13.7202384,0.000324573,9.177196503,631.8203735,0.008668726 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,421333.5313,15314.60742,421333.5313,NA,0.032018054,0.134592056,35.69604492,NA,421333.5313,42.9654274,2,"_ESGVPDR_",380.1852112,0.482137168,0.035211179,0.602062593,421333.5313,15314.60742,-0.71326106,380.1806065,NA,10022.75195,20.17494025,0.020062588,11.39838123,380.1852112,0.007670214 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,40561.89844,6457.5625,40561.89844,NA,0.043395966,0.086130142,14.70406055,NA,40561.89844,47.93177032,2,"_LASGVPGR_",378.7217712,0.751975816,0.327599853,0.876715382,40561.89844,6457.5625,0.8087924,378.7179272,NA,14732.39941,21.17748202,0.000160107,10.95894432,378.7217712,0.008020374 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,34643.60156,10162.12305,34643.60156,NA,-0.110934683,0.134130478,68.39783478,NA,34643.60156,45.13002396,2,"_SSQSLLNSGNQK_",631.8203735,0.670892413,-0.115899347,0.890572588,34643.60156,10162.12305,0.553389755,631.815169,NA,3419.266602,13.54227681,9.35e-05,8.790788651,631.8203735,0.008556286 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,74124.27344,8953.532227,74124.27344,NA,-0.057866427,0.094194412,815966.75,NA,74124.27344,20.96912766,2,"_LASGVPGR_",378.7217712,0.780312967,0.576413453,0.819269339,74124.27344,8953.532227,NA,378.7177604,NA,0.352298945,21.22419019,0.162490115,NA,378.7217712,0.008038063 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,217273.4688,51354.16406,93.76393127,NA,0.134248501,0.143848419,49.98695755,NA,93.76393127,45.35460663,3,"_GLEWVAQIR_",357.8696899,0.375550719,0.065310054,0.667793671,93.76393127,44008.9375,NA,357.8669958,NA,15709.49805,23.11696979,0.017297966,NA,357.8696899,0.008272863 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,36380.21484,2105.18042,36380.21484,NA,0.034265994,0.086641312,5.539525509,NA,36380.21484,20.1314621,2,"_LVESGGGLVQSGR_",629.8411255,0.403452128,-0.071699917,0.565245708,36380.21484,2105.18042,1.019569361,629.8365797,NA,10508.61816,17.83817446,0.038286321,8.236979485,629.8411255,0.011235216 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,34088.78125,3314.893066,34088.78125,NA,-0.256381999,0.119749069,23.55079842,NA,34088.78125,25.48985291,2,"_LASGVPGR_",378.7217712,0.607291108,0.582502902,0.631222337,34088.78125,3314.893066,NA,378.7175368,NA,4629.78125,20.07175392,0.023707954,NA,378.7217712,0.00760161 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,2847187,30921.66797,4966314,NA,0.115094693,0.174533844,12.23575306,NA,4966314,35.78164673,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.352036663,0.028716052,0.476488406,4966314,6750.053711,NA,952.4677267,NA,14191.68164,12.7976063,0.017662339,NA,952.4750977,0.012189401 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,252.4756165,6598.768555,252.4756165,NA,-19.39030003,0.129676819,19.47958183,NA,252.4756165,7.776296139,3,"_GLEWVAQIR_",357.8696899,0.399248751,0.152013704,0.645378451,252.4756165,6598.768555,NA,357.8667302,NA,8575.535156,24.65875585,0.046996329,NA,357.8696899,0.008824621 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,85018.82813,17185.79688,85018.82813,NA,-0.065742497,0.089722633,19.48124504,NA,85018.82813,44.84368134,2,"_LASGVPGR_",378.7217712,0.724694358,0.065945499,0.889223377,85018.82813,17185.79688,-2.039643113,378.7174282,NA,26244.89063,21.84417016,8.04e-05,9.427914619,378.7217712,0.008272863 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,54464.34766,4312.399414,54464.34766,NA,-0.009691533,0.086205482,13.71266937,NA,54464.34766,43.58045959,2,"_LASGVPGR_",378.7217712,0.485525545,-0.275202662,0.834820569,54464.34766,4312.399414,-0.581695183,378.7181025,NA,12547.28906,22.81217271,0.000180537,9.105592728,378.7217712,0.008639466 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,149688.4844,5037.118164,262051.8438,NA,0.124375611,0.086915016,17.40413284,NA,262051.8438,36.49317932,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.638100621,0.544970334,0.8088998,262051.8438,5031.79541,-0.266602942,533.2612714,NA,7469.393066,19.51888269,0.000265419,8.355243683,533.2658691,0.010408754 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,180697.3281,6746.006348,180697.3281,NA,-18.73761365,0.193958282,38.84557343,NA,180697.3281,18.32796288,2,"_GLEWVAQIR_",536.3009033,0.326026075,0.085552938,0.372378742,180697.3281,4735.131836,-11.65838312,536.2960548,NA,5355.10791,21.39167153,0.02038528,-2.617576361,536.3009033,0.011472373 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,5286713.5,42479.61719,1167310.375,NA,0.081209259,0.15102005,162.4558105,NA,1167310.375,45.21546555,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.96048125,0.986220479,0.944204807,1167310.375,79458.20313,-0.436381611,944.4719389,NA,10859.31738,11.46625296,1.64e-05,5.622217178,944.4776611,0.01082962 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,155749.6406,20581.24219,155749.6406,NA,0.061587915,0.130859375,11.83160591,NA,155749.6406,42.6566925,2,"_SSQSLLNSGNQK_",631.8203735,0.828751457,0.461061954,0.927074194,155749.6406,20581.24219,-0.644105605,631.8150227,NA,38182.14063,16.69144331,8.52e-05,7.82476759,631.8203735,0.010545994 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,178688.2813,16291.08301,308151.5,NA,0.188489549,0.185123444,34.05329895,NA,308151.5,46.79378128,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.807676232,0.68375212,0.861349444,308151.5,31738.41602,-0.929072839,953.9555956,NA,14673.27344,11.6202352,0.011265448,6.206125259,953.9624023,0.011085267 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,361692.6875,24124.88672,361692.6875,NA,0.094628639,0.088125229,102.159729,NA,361692.6875,35.32171249,2,"_ESGVPDR_",380.1852112,0.501526141,0.159686252,0.84596314,361692.6875,24124.88672,-0.217664543,380.180978,NA,7813.942871,22.60701494,0.000142115,10.91675949,380.1852112,0.008594853 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,422408.875,56053.24219,422408.875,NA,0.139962334,0.098086357,137.5969696,NA,422408.875,29.66729164,2,"_ESGVPDR_",380.1852112,0.78014428,0.295456976,0.901861747,422408.875,56053.24219,1.021948481,380.1808695,NA,12694.67383,21.07853147,7.95e-05,12.44189548,380.1852112,0.008013746 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,90379.96875,2110.332764,90379.96875,NA,-0.080734307,0.167215347,15.16658974,NA,90379.96875,42.54452515,2,"_EVQLQQSGTVLAR_",714.8939209,0.659268075,0.48839429,0.715047419,90379.96875,2110.332764,-2.772060775,714.8877278,NA,7233.833984,12.29751142,0.000188751,5.890979767,714.8939209,0.008791416 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,171963.3125,6393.916992,104969.5234,NA,0.351699524,0.157506943,18.63591957,NA,104969.5234,42.83591843,1,"_DIVMTQSQK_",1049.529541,0.941030812,0.997522652,0.926512818,104969.5234,9071.912109,-0.643194128,1049.521786,NA,8524.163086,13.34211313,0.000182124,6.745954037,1049.529541,0.014002942 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,458039.75,66439.0625,458039.75,NA,0.042736049,0.093457222,84.7664566,NA,458039.75,43.39373398,2,"_ESGVPDR_",380.1852112,0.713035631,0.322995186,0.898812215,458039.75,66439.0625,-1.597836465,380.1801787,NA,26113.44336,20.92248188,6.81e-05,11.63919258,380.1852112,0.007954418 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,59430.11719,3629.192627,59430.11719,NA,0.068124597,0.131816864,2.854508877,NA,59430.11719,48.00843811,2,"_EVQLQQSGTVLAR_",714.8939209,0.419514182,0.211320519,0.579452236,59430.11719,3629.192627,-1.241399928,714.8883337,NA,39950.14453,14.34599152,0.00018518,6.573992252,714.8939209,0.010255862 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",52214.48438,6.28794241,2526.726807,NA,52214.48438,2526.726807,52214.48438,6.28794241,-0.417411486,0.118343353,11.43745518,NA,NA,39.35884476,2,"_RLIYAASTLDSGVPK_",795.946106,0.599587473,0.896141291,0.519005353,52214.48438,2526.726807,-0.368876459,795.940014,NA,6504.936523,16.05424291,0.038895503,7.28483963,795.946106,0.012778312 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,245849.2188,24123.67383,103493.4609,NA,0.103369548,0.139175415,15.81296349,NA,103493.4609,40.658638,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.692753929,0.815976918,0.655150483,103493.4609,3835.226074,-1.086981289,961.951469,NA,5757.803711,12.26203108,0.022786409,7.61385107,961.9598389,0.011795581 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,417053.7188,74786.57031,417053.7188,NA,0.094570482,0.088767052,71.76859283,NA,417053.7188,50.8679657,2,"_ESGVPDR_",380.1852112,0.668493402,0.254962921,0.891186853,417053.7188,74786.57031,1.584113011,380.180778,NA,35968.30469,20.85149436,3.37e-05,13.24459839,380.1852112,0.00792743 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,189571.7344,15675.78027,340508.6875,NA,0.321218361,0.173164368,34.99713516,NA,340508.6875,47.9161644,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.806273425,0.661062658,0.920055548,340508.6875,30486.08203,-0.996429601,953.9552262,NA,14221.10254,12.79384636,7.55e-05,6.526028633,953.9624023,0.012204848 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,98718.1875,15457.56445,197294.9063,NA,0.115379787,0.141094208,55.41744614,NA,197294.9063,57.49145508,2,"_GLEWVAQIR_",536.3009033,0.669511867,0.364464402,0.78997467,197294.9063,17192.82031,-1.395424882,536.2970422,NA,6698.502441,19.33399342,6.96e-05,5.804191113,536.3009033,0.010368838 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,281472.6875,12274.17383,281472.6875,NA,-0.009148698,0.141078949,29.95099258,NA,281472.6875,54.69283676,2,"_EVQLQQSGTVLAR_",714.8939209,0.787592483,0.643390656,0.859908799,281472.6875,12274.17383,0.125132836,714.8876627,NA,16583.92578,14.7462946,2.98e-05,8.87915802,714.8939209,0.010542036 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,171963.3125,6393.916992,238957.0938,NA,0.027248793,0.195654869,12.47838497,NA,238957.0938,31.18780899,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.354385158,0.215730071,0.502457192,238957.0938,3715.921875,0.459495493,533.2617196,NA,5526.215332,19.45718244,0.016677275,8.24078846,533.2658691,0.010375851 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,109748.1406,8005.039551,109748.1406,NA,0.045752123,0.137292862,19.1373806,NA,109748.1406,47.62768555,2,"_LVESGGGLVQSGR_",629.8411255,0.7515329,0.682607412,0.761301935,109748.1406,8005.039551,0.625895638,629.8359045,NA,7562.283691,13.84225086,0.026846524,8.915318489,629.8411255,0.008718419 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,180697.3281,6746.006348,NA,NA,-18.75847841,0.138790131,41.47955322,NA,NA,11.13634109,3,"_GLEWVAQIR_",357.8696899,0.266773769,-0.256991982,0.580768963,NA,8756.880859,NA,357.8663173,NA,5355.571777,21.66061936,0.03378927,NA,357.8696899,0.007751679 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,143826.2969,29114.22656,176.5438995,NA,-0.422388058,0.100460052,47.38766861,NA,176.5438995,33.31496429,3,"_GLEWVAQIR_",357.8696899,0.492405444,-0.270404309,0.789944291,176.5438995,26590.42969,-0.522799673,357.8666647,NA,14676.9541,22.45996866,0.012530557,7.93063736,357.8696899,0.008037742 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",14551.48145,10963.46484,2088.205078,NA,14551.48145,2088.205078,14551.48145,10963.46484,-0.030491702,0.106908798,5.555503368,NA,NA,41.95940781,2,"_ANGYTTEYSASVK_",695.8278809,0.349652399,-0.024759866,0.579598586,14551.48145,2088.205078,-1.417910954,695.8231711,NA,10655.0166,11.20790105,0.025207262,5.350668907,695.8278809,0.00779877 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,2847187,30921.66797,728059.75,NA,-0.074267771,0.160419464,145.4159088,NA,728059.75,52.73627472,2,"_DIVMTQSPATLSVTPGDR_",944.4776611,0.931303608,0.875339866,0.932078719,728059.75,55093.28125,-1.795198543,944.4706556,NA,9055.828125,12.81802703,1.7e-05,5.622217178,944.4776611,0.01210634 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,245849.2188,24123.67383,388204.9688,NA,0.18942137,0.148498535,48.67911911,NA,388204.9688,42.28108597,2,"_DIQMTQSPSSLSASLGER_",953.9624023,0.859763169,0.663609803,0.91425246,388204.9688,44412.12109,-0.450058124,953.9547709,NA,19986.22266,12.27693644,2.75e-05,7.549719334,953.9624023,0.011711736 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv1-5","A0A075B5T5","Immunoglobulin heavy variable V1-5","EVQLQQSGTVLAR",NA,NA,NA,NA,153061.125,4557.393066,153061.125,NA,-0.036240706,0.154052734,9.070569992,NA,153061.125,39.80711365,2,"_EVQLQQSGTVLAR_",714.8939209,0.370704806,0.088267803,0.620294064,153061.125,4557.393066,-4.595291166,714.8877061,NA,22671.82031,13.98628415,7.36e-05,4.098073006,714.8939209,0.00999871 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Ighv7-3","A0A075B5R2","Immunoglobulin heavy variable 7-3 (Fragment)","ANGYTTEYSASVK",361218.75,789789.5625,29711.5918,99134.04688,361218.75,29711.5918,361218.75,789789.5625,0.200303709,0.136451721,33.30825043,NA,NA,49.5711937,2,"_ANGYTTEYSASVK_",695.8278809,0.912354898,0.961664677,0.909997483,361218.75,29711.5918,-2.156436107,695.822291,NA,46425.78516,12.06942338,4.43e-05,5.876964092,695.8278809,0.008398241 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",53901.19531,33668.39063,2727.578613,2531.486572,53901.19531,2727.578613,53901.19531,33668.39063,-0.003388584,0.119680405,19.09109497,NA,NA,53.78583527,2,"_RLIYAASTLDSGVPK_",795.946106,0.505019141,0.84996891,0.443053595,53901.19531,2727.578613,0.948916828,795.9399032,NA,0.601176143,16.30183289,0.057064805,8.741807938,795.946106,0.01297538 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,98718.1875,15457.56445,141.4631042,NA,0.067860338,0.138896942,24.95126152,NA,141.4631042,34.9570694,3,"_GLEWVAQIR_",357.8696899,0.231323308,-0.087234139,0.515916427,141.4631042,13722.30859,NA,357.8674875,NA,10981.80078,23.48433002,0.018261088,NA,357.8696899,0.00840433 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,187616.75,40963.83594,375048.8438,NA,-0.743380425,0.140129089,72.70896149,NA,375048.8438,42.41449356,2,"_GLEWVAQIR_",536.3009033,0.722308257,0.991955996,0.937889278,375048.8438,46960.625,-0.667730502,536.2964559,NA,11339.20605,19.35679426,3.76e-05,7.625113964,536.3009033,0.010381066 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","DIQMTQSPSSLSASLGER",NA,NA,NA,NA,189571.7344,15675.78027,38634.77734,NA,0.118118848,0.101478577,5.050991058,NA,38634.77734,22.54578018,2,"_DIQM[Oxidation (M)]TQSPSSLSASLGER_",961.9598389,0.425373527,0.423984468,0.440279946,38634.77734,865.479248,-1.387331313,961.9520956,NA,8115.036621,12.80874476,0.050739482,6.662119389,961.9598389,0.012321498 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","ESGVPDR",NA,NA,NA,NA,1376082,58033.21484,1376082,NA,0.232158686,0.113842964,212.7084351,NA,1376082,41.60545349,2,"_ESGVPDR_",380.1852112,0.702998769,0.325599313,0.876872222,1376082,58033.21484,4.519388547,380.1810395,NA,8061.205566,21.76008579,5.94e-05,15.49216652,380.1852112,0.008272863 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1","Ighv6-3","A0A075B5T2","Immunoglobulin heavy variable 6-3 (Fragment)","GLEWVAQIR",NA,NA,NA,NA,217273.4688,51354.16406,434453.1875,NA,0.107120856,0.142055511,55.00777054,NA,434453.1875,47.9986763,2,"_GLEWVAQIR_",536.3009033,0.941255295,0.930132568,0.943093757,434453.1875,58699.39063,-0.617161117,536.2967882,NA,20073.91602,18.8991068,2.42e-05,7.056075573,536.3009033,0.010135608 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Ighv5-9","A0A075B5Q2","Immunoglobulin heavy variable 5-9 (Fragment)","RLEWVATISGGGGNTYYPDSVK",NA,NA,NA,NA,30222.12891,7391.517578,30222.12891,NA,-0.003115418,0.155101776,16.61532974,NA,30222.12891,27.39152908,3,"_RLEWVATISGGGGNTYYPDSVK_",790.7290039,0.723604631,0.27114886,0.858860989,30222.12891,7391.517578,3.385472786,790.7224035,NA,8965.591797,13.46917604,0.000185257,11.73264599,790.7290039,0.010650468 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,156859.9375,1840.379517,226233.7656,NA,0.192068064,0.101008415,9.658528328,NA,226233.7656,-4.735836506,2,"_DIVM[Oxidation (M)]TQSQK_",533.2658691,0.194500379,0.512719035,0.175549199,226233.7656,836.5979614,-2.738983541,533.2611737,NA,4660.330078,21.86779476,0.051081933,6.066135883,533.2658691,0.011661349 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Ighv7-1","A0A075B5S2","Immunoglobulin heavy variable 7-1 (Fragment)","LVESGGGLVQSGR",NA,NA,NA,NA,72494.51563,6361.625488,72494.51563,NA,-0.003475138,0.093101501,5.973305225,NA,72494.51563,53.03592682,2,"_LVESGGGLVQSGR_",629.8411255,0.792762804,0.549250424,0.885242581,72494.51563,6361.625488,-0.767490225,629.8357593,NA,31995.91211,13.71174521,0.000189315,7.752450943,629.8411255,0.008636221 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv6-13","A0A075B5N7","Immunoglobulin kappa variable 6-13","DIVMTQSQK",NA,NA,NA,NA,156859.9375,1840.379517,87486.10938,NA,0.084272784,0.121294022,3.043318272,NA,87486.10938,51.37187958,1,"_DIVMTQSQK_",1049.529541,0.798743445,0.913141966,0.863805572,87486.10938,2844.161133,-0.534778609,1049.521533,NA,17260.38867,11.39859743,0.000470148,7.094882965,1049.529541,0.011963165 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,69222.67188,697.854187,69222.67188,NA,0.061694747,0.086156845,6.418026447,NA,69222.67188,11.6861372,2,"_SSQSLLNSGNQK_",631.8203735,0.193638889,0.342970282,0.305564957,69222.67188,697.854187,1.685616629,631.8158233,NA,3558.77002,17.67744699,0.060024314,8.887390137,631.8203735,0.011168971 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv4-63","A0A075B5M1","Immunoglobulin kappa variable 4-63","LASGVPGR",NA,NA,NA,NA,231731.25,27972.57813,231731.25,NA,-0.083277777,0.09370327,163.8052521,NA,231731.25,37.17317581,2,"_LASGVPGR_",378.7217712,0.864091957,0.844812334,0.862011492,231731.25,27972.57813,-0.151254179,378.7172279,NA,5214.903809,21.16415386,4.45e-05,11.84532928,378.7217712,0.008015326 -"0d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2","Igkv5-39","A0A075B5M7","Immunoglobulin kappa variable 5-39","DIVMTQSPATLSVTPGDR",NA,NA,NA,NA,1738399,24785.98438,2964962,NA,0.092455855,0.224506378,15.9526062,NA,2964962,40.48913956,2,"_DIVM[Oxidation (M)]TQSPATLSVTPGDR_",952.4750977,0.616060108,0.548114777,0.733136714,2964962,12001.96094,NA,952.4675536,NA,11837.67871,12.27876929,0.000178525,NA,952.4750977,0.011695222 -"32d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2","Igkv8-28","A0A075B5N3","Immunoglobulin kappa variable 8-28","SSQSLLNSGNQK",NA,NA,NA,NA,8659.84375,1189.40625,8659.84375,NA,-0.120270506,0.086936951,70159.11719,NA,8659.84375,45.17756271,2,"_SSQSLLNSGNQK_",631.8203735,0.259268835,-0.304832578,0.448586479,8659.84375,1189.40625,-1.564976375,631.8149292,NA,0.506191313,12.5715031,0.046368949,7.051950932,631.8203735,0.007942932 -"8d",NA,"20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2","Igkv9-124","A0A075B5K2","Immunoglobulin kappa chain variable 9-124","RLIYAASTLDSGVPK",39677.51563,16425.48047,684.1309204,1013.757019,39677.51563,684.1309204,39677.51563,16425.48047,0.117555344,0.106966019,5.408240795,NA,NA,38.59564972,2,"_RLIYAASTLDSGVPK_",795.946106,0.343346803,0.524190784,0.327267118,39677.51563,684.1309204,0.228438482,795.9395739,NA,5549.635254,15.49018806,0.092307463,8.435077667,795.946106,0.012329355 +R.Condition,R.Fraction,R.FileName,PG.Genes,PG.ProteinAccessions,PG.ProteinDescriptions,PEP.StrippedSequence,PEP.MS1Channel1,PEP.MS1Channel2,PEP.MS2Channel1,PEP.MS2Channel2,PEP.MS1Quantity,PEP.MS2Quantity,EG.Channel1Quantity,EG.Channel2Quantity,EG.DeltaiRT,EG.PeakWidth,EG.SignalToNoise,EG.ReferenceQuantity (Settings),EG.TargetQuantity (Settings),EG.Cscore,FG.Charge,FG.LabeledSequence,FG.PrecMz,FG.ShapeQualityScore,FG.ShapeQualityScore (MS1),FG.ShapeQualityScore (MS2),FG.MS1Quantity,FG.MS2Quantity,FG.CalibratedMassAccuracy (PPM),FG.CalibratedMz,FG.MeasuredMz,FG.Noise,FG.PPMTolerance,FG.PriorIonRatio,FG.RawMassAccuracy (PPM),FG.TheoreticalMz,FG.Tolerance,R.Replicate +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,52214.48438,6.28794241,2526.726807,NA,52214.48438,2526.726807,52214.48438,6.28794241,-0.417411486,0.118343353,11.43745518,NA,NA,39.35884476,2,_RLIYAASTLDSGVPK[Lys6]_,798.9561768,0.084113663,-0.206461176,0.113449925,6.28794241,NA,NA,798.9501368,NA,0.545019031,15.81776564,0.071346797,NA,798.9561768,0.012637702,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,53901.19531,33668.39063,2727.578613,2531.486572,53901.19531,2727.578613,53901.19531,33668.39063,-0.003388584,0.119680405,19.09109497,NA,NA,53.78583527,2,_RLIYAASTLDSGVPK[Lys6]_,798.9561768,0.503702706,0.31842348,0.548168798,33668.39063,2531.486572,0.661405242,798.9499913,NA,6137.880859,16.26055612,0.020507174,8.403298378,798.9561768,0.012991472,3 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,361218.75,789789.5625,29711.5918,99134.04688,361218.75,29711.5918,361218.75,789789.5625,0.200303709,0.136451721,33.30825043,NA,NA,49.5711937,2,_ANGYTTEYSASVK[Lys6]_,698.8379517,0.953213739,0.983853102,0.933836937,789789.5625,99134.04688,-0.774962251,698.8322221,NA,35286.28125,12.10626035,0.002172636,7.423735619,698.8379517,0.008460314,6 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,NYLAWYQQK,NA,NA,NA,NA,317544.3125,28474.84375,317544.3125,NA,0.089715797,0.179130554,18.59780312,NA,317544.3125,54.02045441,2,_NYLAWYQQK[Lys6]_,610.3137207,0.685566238,-0.214917466,0.935134053,317544.3125,28474.84375,0.163214573,610.3088154,NA,21569.01172,15.44265139,8.08E-05,8.200508118,610.3137207,0.009424862,4 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,14551.48145,10963.46484,2088.205078,NA,14551.48145,2088.205078,14551.48145,10963.46484,-0.030491702,0.106908798,5.555503368,NA,NA,41.95940781,2,_ANGYTTEYSASVK[Lys6]_,698.8379517,0.053336553,0.102215819,0.063812832,10963.46484,NA,NA,698.8331232,NA,4808.626465,11.14718404,0.052520957,NA,698.8379517,0.007790075,1 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,54474.81641,26552.10742,5579.812988,NA,54474.81641,5579.812988,54474.81641,26552.10742,0.15870407,0.108121872,9.77047348,NA,NA,46.18510056,2,_ANGYTTEYSASVK[Lys6]_,698.8379517,0.193241477,0.406558335,0.221918148,26552.10742,NA,NA,698.8322132,NA,0.637417674,13.65568532,0.106278472,NA,698.8379517,0.009543111,2 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,39677.51563,16425.48047,684.1309204,1013.757019,39677.51563,684.1309204,39677.51563,16425.48047,0.117555344,0.106966019,5.408240795,NA,NA,38.59564972,2,_RLIYAASTLDSGVPK[Lys6]_,798.9561768,0.311630216,0.354606122,0.326806843,16425.48047,1013.757019,-0.573573055,798.949615,NA,5993.632813,15.41047812,0.076787531,7.639362335,798.9561768,0.012312297,4 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,NYLAWYQQK,NA,NA,NA,NA,330560.5313,31252.33008,330560.5313,NA,0.033369286,0.220161438,26.41818619,NA,330560.5313,45.18108749,2,_NYLAWYQQK[Lys6]_,610.3137207,0.67101143,0.273708791,0.803494811,330560.5313,31252.33008,-0.101102046,610.3090203,NA,13844.26758,18.42940488,4.36E-05,7.60047102,610.3137207,0.011247719,3 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,NYLAWYQQK,NA,NA,NA,NA,307435.125,17000.37305,307435.125,NA,0.240706499,0.193317413,14.41809559,NA,307435.125,50.67734528,2,_NYLAWYQQK[Lys6]_,610.3137207,0.571282928,0.124966092,0.855466564,307435.125,17000.37305,-6.050453499,610.309906,NA,13613.83887,21.05542674,0.000104272,0.200012401,610.3137207,0.012850416,5 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,47506.33984,1106.301758,3690.832031,NA,47506.33984,3690.832031,47506.33984,1106.301758,0.306791189,0.086696625,25.48948097,NA,NA,41.01118088,2,_RLIYAASTLDSGVPK[Lys6]_,798.9561768,0.123627679,-0.109247744,0.21090438,1106.301758,NA,NA,798.9493011,NA,0.682145774,13.3257948,0.071346797,NA,798.9561768,0.010646726,2 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,NYLAWYQQK,NA,NA,NA,NA,265152.4688,26584.7168,265152.4688,NA,-0.072200018,0.173988342,24.26990891,NA,265152.4688,44.1951828,2,_NYLAWYQQK[Lys6]_,610.3137207,0.730396223,0.692343533,0.826470395,265152.4688,26584.7168,-0.462319765,610.3084947,NA,16428.00781,14.25596383,0.000145931,8.100502014,610.3137207,0.00870061,6 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,64753.25391,37103.47656,2771.676758,5288.981445,64753.25391,2771.676758,64753.25391,37103.47656,-0.334582803,0.090234756,40.38325882,NA,NA,58.64351273,2,_ANGYTTEYSASVK[Lys6]_,698.8379517,0.752488297,0.42474547,0.847430766,37103.47656,5288.981445,1.418732529,698.8332058,NA,17725.63281,14.27251496,0.000159417,8.209778786,698.8379517,0.009974175,3 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,229366.5313,13161.7207,301880,NA,0.099583001,0.1547966,53.65778351,NA,301880,46.13341141,2,_DIVMTQSPATLSVTPGDR_,944.4776611,0.945391178,0.902295232,0.945409735,301880,21813.95898,-0.661647506,944.471482,NA,7672.527344,13.79176039,3.08E-05,5.880710125,944.4776611,0.01302601,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,1738399,24785.98438,511836,NA,0.193479974,0.122386932,170.5673981,NA,511836,45.50453186,2,_DIVMTQSPATLSVTPGDR_,944.4776611,0.939145482,0.962462068,0.914132794,511836,37570.00781,-2.429901179,944.4707275,NA,6155.03418,12.28872375,2.77E-05,4.911362171,944.4776611,0.011606425,2 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,54474.81641,26552.10742,5579.812988,NA,54474.81641,5579.812988,54474.81641,26552.10742,0.15870407,0.108121872,9.77047348,NA,NA,46.18510056,2,_ANGYTTEYSASVK_,695.8278809,0.70080474,0.408324808,0.776748916,54474.81641,5579.812988,-1.43997412,695.8222402,NA,19640.46289,13.57279993,0.000219595,6.666407108,695.8278809,0.009444333,2 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,178688.2813,16291.08301,49225.04688,NA,0.03367288,0.141269684,3.429688454,NA,49225.04688,4.163423061,2,_DIQM[Oxidation (M)]TQSPSSLSASLGER_,961.9598389,0.342585838,0.755802751,0.298213966,49225.04688,843.75,-1.744663479,961.9528505,NA,6774.844727,11.75396998,0.088062547,5.520041943,961.9598389,0.011306847,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,147666.9844,2556.02124,49906.51172,NA,0.105416125,0.087011337,19.55953407,NA,49906.51172,50.80852127,1,_DIVMTQSQK_,1049.529541,0.762291521,0.718976796,0.88452059,49906.51172,1987.451782,-0.340762043,1049.522592,NA,3885.237549,11.93060613,0.000304638,6.280715942,1049.529541,0.012521524,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),DNSQSILYLQMNALR,NA,NA,NA,NA,32949.09766,1983.132813,32949.09766,NA,-0.055576582,0.134498596,3.408590317,NA,32949.09766,45.18378067,2,_DNSQSILYLQMNALR_,883.4487305,0.568902045,0.509661198,0.662240028,32949.09766,1983.132813,0.420739097,883.4411066,NA,15572.7666,12.79803757,0.019278135,9.05044651,883.4487305,0.01130641,2 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,229366.5313,13161.7207,156853.0469,NA,-0.192097269,0.145561218,3.154168844,NA,156853.0469,32.83724213,2,_DIVM[Oxidation (M)]TQSPATLSVTPGDR_,952.4750977,0.47311473,0.053626869,0.639628977,156853.0469,4509.482422,NA,952.4688328,NA,32506.30078,13.66085687,0.008043985,NA,952.4750977,0.013011626,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,5286713.5,42479.61719,9406117,NA,0.212553134,0.136051178,4.639051914,NA,9406117,20.27957153,2,_DIVM[Oxidation (M)]TQSPATLSVTPGDR_,952.4750977,0.313945824,0.303904533,0.506884257,9406117,5501.03125,-3.846004353,952.4683217,NA,27018.625,11.59629195,0.018160522,3.26810956,952.4750977,0.011045179,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,396396.3125,26660.05273,181685.8438,NA,-0.058827182,0.181724548,12.47270584,NA,181685.8438,35.14596558,2,_DIQM[Oxidation (M)]TQSPSSLSASLGER_,961.9598389,0.671352214,0.795062184,0.63551121,181685.8438,4501.779785,-0.79095052,961.9527304,NA,8517.833984,13.50843026,0.021970971,6.598670959,961.9598389,0.012994567,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv7-1,A0A075B5S2,Immunoglobulin heavy variable 7-1 (Fragment),LVESGGGLVQSGR,NA,NA,NA,NA,48204.21875,4471.815918,48204.21875,NA,7.87E-05,0.115951538,180572.5313,NA,48204.21875,35.81245804,2,_LVESGGGLVQSGR_,629.8411255,0.572125667,0.518132031,0.585245798,48204.21875,4471.815918,-0.174501771,629.8354614,NA,0.549019933,13.19085954,0.027632874,8.818412781,629.8411255,0.008308146,2 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,147666.9844,2556.02124,245427.4688,NA,0.488357752,0.204304695,9.938085556,NA,245427.4688,23.26274681,2,_DIVM[Oxidation (M)]TQSQK_,533.2658691,0.310197904,0.328751445,0.330117547,245427.4688,3124.59082,0.809784766,533.2616013,NA,6957.676758,19.00785454,0.032186132,8.813065529,533.2658691,0.01013624,3 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Ighv7-1,A0A075B5S2,Immunoglobulin heavy variable 7-1 (Fragment),LVESGGGLVQSGR,NA,NA,NA,NA,22874.2793,3278.338867,22874.2793,NA,-0.07309582,0.087404251,8.534190178,NA,22874.2793,39.99494171,2,_LVESGGGLVQSGR_,629.8411255,0.577427874,-0.007701109,0.774999062,22874.2793,3278.338867,-0.648323506,629.8357123,NA,11945.79785,12.72379816,0.01656705,7.94626236,629.8411255,0.008013971,6 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,143826.2969,29114.22656,287476.0625,NA,-0.442978126,0.099250793,66.16171265,NA,287476.0625,48.09414673,2,_GLEWVAQIR_,536.3009033,0.852551711,0.6651057,0.891533136,287476.0625,31638.02344,-1.890337544,536.2961664,NA,14677.47461,21.7628811,2.70E-05,6.942267895,536.3009033,0.011671453,4 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,396396.3125,26660.05273,611106.75,NA,-0.276540207,0.155319214,60.07998657,NA,611106.75,44.26254654,2,_DIQMTQSPSSLSASLGER_,953.9624023,0.833773804,0.715957105,0.86554714,611106.75,48818.32422,0.601651314,953.9563235,NA,13007.24023,13.63675443,0.019007353,6.973893166,953.9624023,0.013008951,3 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,64753.25391,37103.47656,2771.676758,5288.981445,64753.25391,2771.676758,64753.25391,37103.47656,-0.334582803,0.090234756,40.38325882,NA,NA,58.64351273,2,_ANGYTTEYSASVK_,695.8278809,0.554959814,0.44701153,0.811589549,64753.25391,2771.676758,-0.415953271,695.823319,NA,6603.822266,14.27813947,0.000338258,6.140111923,695.8278809,0.009935128,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,149688.4844,5037.118164,37325.11328,NA,-0.122204219,0.139766693,18.9133091,NA,37325.11328,50.67339706,1,_DIVMTQSQK_,1049.529541,0.786729583,0.994622231,0.921459198,37325.11328,5042.44043,-0.337613546,1049.521374,NA,5278.383789,10.98428883,0.000270601,7.443811417,1049.529541,0.011528336,2 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,187616.75,40963.83594,184.656723,NA,-0.743380425,0.139030457,41.55771255,NA,184.656723,27.77791405,3,_GLEWVAQIR_,357.8696899,0.501662409,0.19953613,0.717801531,184.656723,34967.05078,NA,357.8667651,NA,14427.96777,22.70728908,0.010838341,NA,357.8696899,0.008126251,2 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Ighv7-1,A0A075B5S2,Immunoglobulin heavy variable 7-1 (Fragment),LVESGGGLVQSGR,NA,NA,NA,NA,93384.82813,10611.82227,93384.82813,NA,-0.070280012,0.139417648,23.94354248,NA,93384.82813,41.66125488,2,_LVESGGGLVQSGR_,629.8411255,0.807707769,0.436359495,0.891696811,93384.82813,10611.82227,-0.230153229,629.8361588,NA,8046.242188,16.859308,0.000213283,7.655545235,629.8411255,0.010618686,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,47506.33984,1106.301758,3690.832031,NA,47506.33984,3690.832031,47506.33984,1106.301758,0.306791189,0.086696625,25.48948097,NA,NA,41.01118088,2,_RLIYAASTLDSGVPK_,795.946106,0.712214041,0.765812516,0.704079906,47506.33984,3690.832031,-0.985626551,795.9392179,NA,4217.413574,13.37790976,0.029425923,7.668252468,795.946106,0.010648095,2 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,SSQSLLNSGNQK,NA,NA,NA,NA,38214.57031,6194.37793,38214.57031,NA,-0.224670601,0.11548996,264904,NA,38214.57031,41.84169006,2,_SSQSLLNSGNQK_,631.8203735,0.734587829,0.065157317,0.895376523,38214.57031,6194.37793,1.608111883,631.8148588,NA,0.586804807,13.07086766,0.000181341,10.33642197,631.8203735,0.00825844,2 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,SSQSLLNSGNQK,NA,NA,NA,NA,62163.67969,7727.032227,62163.67969,NA,0.003407426,0.155735016,24.55526352,NA,62163.67969,44.81443024,2,_SSQSLLNSGNQK_,631.8203735,0.678574008,0.157909423,0.799956719,62163.67969,7727.032227,1.431083891,631.8154794,NA,6401.953125,13.7202384,0.000324573,9.177196503,631.8203735,0.008668726,1 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,ESGVPDR,NA,NA,NA,NA,421333.5313,15314.60742,421333.5313,NA,0.032018054,0.134592056,35.69604492,NA,421333.5313,42.9654274,2,_ESGVPDR_,380.1852112,0.482137168,0.035211179,0.602062593,421333.5313,15314.60742,-0.71326106,380.1806065,NA,10022.75195,20.17494025,0.020062588,11.39838123,380.1852112,0.007670214,6 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv4-63,A0A075B5M1,Immunoglobulin kappa variable 4-63,LASGVPGR,NA,NA,NA,NA,40561.89844,6457.5625,40561.89844,NA,0.043395966,0.086130142,14.70406055,NA,40561.89844,47.93177032,2,_LASGVPGR_,378.7217712,0.751975816,0.327599853,0.876715382,40561.89844,6457.5625,0.8087924,378.7179272,NA,14732.39941,21.17748202,0.000160107,10.95894432,378.7217712,0.008020374,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,SSQSLLNSGNQK,NA,NA,NA,NA,34643.60156,10162.12305,34643.60156,NA,-0.110934683,0.134130478,68.39783478,NA,34643.60156,45.13002396,2,_SSQSLLNSGNQK_,631.8203735,0.670892413,-0.115899347,0.890572588,34643.60156,10162.12305,0.553389755,631.815169,NA,3419.266602,13.54227681,9.35E-05,8.790788651,631.8203735,0.008556286,4 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv4-63,A0A075B5M1,Immunoglobulin kappa variable 4-63,LASGVPGR,NA,NA,NA,NA,74124.27344,8953.532227,74124.27344,NA,-0.057866427,0.094194412,815966.75,NA,74124.27344,20.96912766,2,_LASGVPGR_,378.7217712,0.780312967,0.576413453,0.819269339,74124.27344,8953.532227,NA,378.7177604,NA,0.352298945,21.22419019,0.162490115,NA,378.7217712,0.008038063,2 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,217273.4688,51354.16406,93.76393127,NA,0.134248501,0.143848419,49.98695755,NA,93.76393127,45.35460663,3,_GLEWVAQIR_,357.8696899,0.375550719,0.065310054,0.667793671,93.76393127,44008.9375,NA,357.8669958,NA,15709.49805,23.11696979,0.017297966,NA,357.8696899,0.008272863,3 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1,Ighv7-1,A0A075B5S2,Immunoglobulin heavy variable 7-1 (Fragment),LVESGGGLVQSGR,NA,NA,NA,NA,36380.21484,2105.18042,36380.21484,NA,0.034265994,0.086641312,5.539525509,NA,36380.21484,20.1314621,2,_LVESGGGLVQSGR_,629.8411255,0.403452128,-0.071699917,0.565245708,36380.21484,2105.18042,1.019569361,629.8365797,NA,10508.61816,17.83817446,0.038286321,8.236979485,629.8411255,0.011235216,5 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Igkv4-63,A0A075B5M1,Immunoglobulin kappa variable 4-63,LASGVPGR,NA,NA,NA,NA,34088.78125,3314.893066,34088.78125,NA,-0.256381999,0.119749069,23.55079842,NA,34088.78125,25.48985291,2,_LASGVPGR_,378.7217712,0.607291108,0.582502902,0.631222337,34088.78125,3314.893066,NA,378.7175368,NA,4629.78125,20.07175392,0.023707954,NA,378.7217712,0.00760161,6 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,2847187,30921.66797,4966314,NA,0.115094693,0.174533844,12.23575306,NA,4966314,35.78164673,2,_DIVM[Oxidation (M)]TQSPATLSVTPGDR_,952.4750977,0.352036663,0.028716052,0.476488406,4966314,6750.053711,NA,952.4677267,NA,14191.68164,12.7976063,0.017662339,NA,952.4750977,0.012189401,4 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,252.4756165,6598.768555,252.4756165,NA,-19.39030003,0.129676819,19.47958183,NA,252.4756165,7.776296139,3,_GLEWVAQIR_,357.8696899,0.399248751,0.152013704,0.645378451,252.4756165,6598.768555,NA,357.8667302,NA,8575.535156,24.65875585,0.046996329,NA,357.8696899,0.008824621,5 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv4-63,A0A075B5M1,Immunoglobulin kappa variable 4-63,LASGVPGR,NA,NA,NA,NA,85018.82813,17185.79688,85018.82813,NA,-0.065742497,0.089722633,19.48124504,NA,85018.82813,44.84368134,2,_LASGVPGR_,378.7217712,0.724694358,0.065945499,0.889223377,85018.82813,17185.79688,-2.039643113,378.7174282,NA,26244.89063,21.84417016,8.04E-05,9.427914619,378.7217712,0.008272863,3 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1,Igkv4-63,A0A075B5M1,Immunoglobulin kappa variable 4-63,LASGVPGR,NA,NA,NA,NA,54464.34766,4312.399414,54464.34766,NA,-0.009691533,0.086205482,13.71266937,NA,54464.34766,43.58045959,2,_LASGVPGR_,378.7217712,0.485525545,-0.275202662,0.834820569,54464.34766,4312.399414,-0.581695183,378.7181025,NA,12547.28906,22.81217271,0.000180537,9.105592728,378.7217712,0.008639466,5 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,149688.4844,5037.118164,262051.8438,NA,0.124375611,0.086915016,17.40413284,NA,262051.8438,36.49317932,2,_DIVM[Oxidation (M)]TQSQK_,533.2658691,0.638100621,0.544970334,0.8088998,262051.8438,5031.79541,-0.266602942,533.2612714,NA,7469.393066,19.51888269,0.000265419,8.355243683,533.2658691,0.010408754,2 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,180697.3281,6746.006348,180697.3281,NA,-18.73761365,0.193958282,38.84557343,NA,180697.3281,18.32796288,2,_GLEWVAQIR_,536.3009033,0.326026075,0.085552938,0.372378742,180697.3281,4735.131836,-11.65838312,536.2960548,NA,5355.10791,21.39167153,0.02038528,-2.617576361,536.3009033,0.011472373,6 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,5286713.5,42479.61719,1167310.375,NA,0.081209259,0.15102005,162.4558105,NA,1167310.375,45.21546555,2,_DIVMTQSPATLSVTPGDR_,944.4776611,0.96048125,0.986220479,0.944204807,1167310.375,79458.20313,-0.436381611,944.4719389,NA,10859.31738,11.46625296,1.64E-05,5.622217178,944.4776611,0.01082962,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,SSQSLLNSGNQK,NA,NA,NA,NA,155749.6406,20581.24219,155749.6406,NA,0.061587915,0.130859375,11.83160591,NA,155749.6406,42.6566925,2,_SSQSLLNSGNQK_,631.8203735,0.828751457,0.461061954,0.927074194,155749.6406,20581.24219,-0.644105605,631.8150227,NA,38182.14063,16.69144331,8.52E-05,7.82476759,631.8203735,0.010545994,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,178688.2813,16291.08301,308151.5,NA,0.188489549,0.185123444,34.05329895,NA,308151.5,46.79378128,2,_DIQMTQSPSSLSASLGER_,953.9624023,0.807676232,0.68375212,0.861349444,308151.5,31738.41602,-0.929072839,953.9555956,NA,14673.27344,11.6202352,0.011265448,6.206125259,953.9624023,0.011085267,1 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,ESGVPDR,NA,NA,NA,NA,361692.6875,24124.88672,361692.6875,NA,0.094628639,0.088125229,102.159729,NA,361692.6875,35.32171249,2,_ESGVPDR_,380.1852112,0.501526141,0.159686252,0.84596314,361692.6875,24124.88672,-0.217664543,380.180978,NA,7813.942871,22.60701494,0.000142115,10.91675949,380.1852112,0.008594853,5 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,ESGVPDR,NA,NA,NA,NA,422408.875,56053.24219,422408.875,NA,0.139962334,0.098086357,137.5969696,NA,422408.875,29.66729164,2,_ESGVPDR_,380.1852112,0.78014428,0.295456976,0.901861747,422408.875,56053.24219,1.021948481,380.1808695,NA,12694.67383,21.07853147,7.95E-05,12.44189548,380.1852112,0.008013746,2 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Ighv1-5,A0A075B5T5,Immunoglobulin heavy variable V1-5,EVQLQQSGTVLAR,NA,NA,NA,NA,90379.96875,2110.332764,90379.96875,NA,-0.080734307,0.167215347,15.16658974,NA,90379.96875,42.54452515,2,_EVQLQQSGTVLAR_,714.8939209,0.659268075,0.48839429,0.715047419,90379.96875,2110.332764,-2.772060775,714.8877278,NA,7233.833984,12.29751142,0.000188751,5.890979767,714.8939209,0.008791416,6 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,171963.3125,6393.916992,104969.5234,NA,0.351699524,0.157506943,18.63591957,NA,104969.5234,42.83591843,1,_DIVMTQSQK_,1049.529541,0.941030812,0.997522652,0.926512818,104969.5234,9071.912109,-0.643194128,1049.521786,NA,8524.163086,13.34211313,0.000182124,6.745954037,1049.529541,0.014002942,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,ESGVPDR,NA,NA,NA,NA,458039.75,66439.0625,458039.75,NA,0.042736049,0.093457222,84.7664566,NA,458039.75,43.39373398,2,_ESGVPDR_,380.1852112,0.713035631,0.322995186,0.898812215,458039.75,66439.0625,-1.597836465,380.1801787,NA,26113.44336,20.92248188,6.81E-05,11.63919258,380.1852112,0.007954418,4 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Ighv1-5,A0A075B5T5,Immunoglobulin heavy variable V1-5,EVQLQQSGTVLAR,NA,NA,NA,NA,59430.11719,3629.192627,59430.11719,NA,0.068124597,0.131816864,2.854508877,NA,59430.11719,48.00843811,2,_EVQLQQSGTVLAR_,714.8939209,0.419514182,0.211320519,0.579452236,59430.11719,3629.192627,-1.241399928,714.8883337,NA,39950.14453,14.34599152,0.00018518,6.573992252,714.8939209,0.010255862,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,52214.48438,6.28794241,2526.726807,NA,52214.48438,2526.726807,52214.48438,6.28794241,-0.417411486,0.118343353,11.43745518,NA,NA,39.35884476,2,_RLIYAASTLDSGVPK_,795.946106,0.599587473,0.896141291,0.519005353,52214.48438,2526.726807,-0.368876459,795.940014,NA,6504.936523,16.05424291,0.038895503,7.28483963,795.946106,0.012778312,1 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,245849.2188,24123.67383,103493.4609,NA,0.103369548,0.139175415,15.81296349,NA,103493.4609,40.658638,2,_DIQM[Oxidation (M)]TQSPSSLSASLGER_,961.9598389,0.692753929,0.815976918,0.655150483,103493.4609,3835.226074,-1.086981289,961.951469,NA,5757.803711,12.26203108,0.022786409,7.61385107,961.9598389,0.011795581,2 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,ESGVPDR,NA,NA,NA,NA,417053.7188,74786.57031,417053.7188,NA,0.094570482,0.088767052,71.76859283,NA,417053.7188,50.8679657,2,_ESGVPDR_,380.1852112,0.668493402,0.254962921,0.891186853,417053.7188,74786.57031,1.584113011,380.180778,NA,35968.30469,20.85149436,3.37E-05,13.24459839,380.1852112,0.00792743,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,189571.7344,15675.78027,340508.6875,NA,0.321218361,0.173164368,34.99713516,NA,340508.6875,47.9161644,2,_DIQMTQSPSSLSASLGER_,953.9624023,0.806273425,0.661062658,0.920055548,340508.6875,30486.08203,-0.996429601,953.9552262,NA,14221.10254,12.79384636,7.55E-05,6.526028633,953.9624023,0.012204848,4 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,98718.1875,15457.56445,197294.9063,NA,0.115379787,0.141094208,55.41744614,NA,197294.9063,57.49145508,2,_GLEWVAQIR_,536.3009033,0.669511867,0.364464402,0.78997467,197294.9063,17192.82031,-1.395424882,536.2970422,NA,6698.502441,19.33399342,6.96E-05,5.804191113,536.3009033,0.010368838,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Ighv1-5,A0A075B5T5,Immunoglobulin heavy variable V1-5,EVQLQQSGTVLAR,NA,NA,NA,NA,281472.6875,12274.17383,281472.6875,NA,-0.009148698,0.141078949,29.95099258,NA,281472.6875,54.69283676,2,_EVQLQQSGTVLAR_,714.8939209,0.787592483,0.643390656,0.859908799,281472.6875,12274.17383,0.125132836,714.8876627,NA,16583.92578,14.7462946,2.98E-05,8.87915802,714.8939209,0.010542036,4 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,171963.3125,6393.916992,238957.0938,NA,0.027248793,0.195654869,12.47838497,NA,238957.0938,31.18780899,2,_DIVM[Oxidation (M)]TQSQK_,533.2658691,0.354385158,0.215730071,0.502457192,238957.0938,3715.921875,0.459495493,533.2617196,NA,5526.215332,19.45718244,0.016677275,8.24078846,533.2658691,0.010375851,1 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Ighv7-1,A0A075B5S2,Immunoglobulin heavy variable 7-1 (Fragment),LVESGGGLVQSGR,NA,NA,NA,NA,109748.1406,8005.039551,109748.1406,NA,0.045752123,0.137292862,19.1373806,NA,109748.1406,47.62768555,2,_LVESGGGLVQSGR_,629.8411255,0.7515329,0.682607412,0.761301935,109748.1406,8005.039551,0.625895638,629.8359045,NA,7562.283691,13.84225086,0.026846524,8.915318489,629.8411255,0.008718419,1 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,180697.3281,6746.006348,NA,NA,-18.75847841,0.138790131,41.47955322,NA,NA,11.13634109,3,_GLEWVAQIR_,357.8696899,0.266773769,-0.256991982,0.580768963,NA,8756.880859,NA,357.8663173,NA,5355.571777,21.66061936,0.03378927,NA,357.8696899,0.007751679,6 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,143826.2969,29114.22656,176.5438995,NA,-0.422388058,0.100460052,47.38766861,NA,176.5438995,33.31496429,3,_GLEWVAQIR_,357.8696899,0.492405444,-0.270404309,0.789944291,176.5438995,26590.42969,-0.522799673,357.8666647,NA,14676.9541,22.45996866,0.012530557,7.93063736,357.8696899,0.008037742,4 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,14551.48145,10963.46484,2088.205078,NA,14551.48145,2088.205078,14551.48145,10963.46484,-0.030491702,0.106908798,5.555503368,NA,NA,41.95940781,2,_ANGYTTEYSASVK_,695.8278809,0.349652399,-0.024759866,0.579598586,14551.48145,2088.205078,-1.417910954,695.8231711,NA,10655.0166,11.20790105,0.025207262,5.350668907,695.8278809,0.00779877,1 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,2847187,30921.66797,728059.75,NA,-0.074267771,0.160419464,145.4159088,NA,728059.75,52.73627472,2,_DIVMTQSPATLSVTPGDR_,944.4776611,0.931303608,0.875339866,0.932078719,728059.75,55093.28125,-1.795198543,944.4706556,NA,9055.828125,12.81802703,1.70E-05,5.622217178,944.4776611,0.01210634,4 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,245849.2188,24123.67383,388204.9688,NA,0.18942137,0.148498535,48.67911911,NA,388204.9688,42.28108597,2,_DIQMTQSPSSLSASLGER_,953.9624023,0.859763169,0.663609803,0.91425246,388204.9688,44412.12109,-0.450058124,953.9547709,NA,19986.22266,12.27693644,2.75E-05,7.549719334,953.9624023,0.011711736,2 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv1-5,A0A075B5T5,Immunoglobulin heavy variable V1-5,EVQLQQSGTVLAR,NA,NA,NA,NA,153061.125,4557.393066,153061.125,NA,-0.036240706,0.154052734,9.070569992,NA,153061.125,39.80711365,2,_EVQLQQSGTVLAR_,714.8939209,0.370704806,0.088267803,0.620294064,153061.125,4557.393066,-4.595291166,714.8877061,NA,22671.82031,13.98628415,7.36E-05,4.098073006,714.8939209,0.00999871,2 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Ighv7-3,A0A075B5R2,Immunoglobulin heavy variable 7-3 (Fragment),ANGYTTEYSASVK,361218.75,789789.5625,29711.5918,99134.04688,361218.75,29711.5918,361218.75,789789.5625,0.200303709,0.136451721,33.30825043,NA,NA,49.5711937,2,_ANGYTTEYSASVK_,695.8278809,0.912354898,0.961664677,0.909997483,361218.75,29711.5918,-2.156436107,695.822291,NA,46425.78516,12.06942338,4.43E-05,5.876964092,695.8278809,0.008398241,6 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,53901.19531,33668.39063,2727.578613,2531.486572,53901.19531,2727.578613,53901.19531,33668.39063,-0.003388584,0.119680405,19.09109497,NA,NA,53.78583527,2,_RLIYAASTLDSGVPK_,795.946106,0.505019141,0.84996891,0.443053595,53901.19531,2727.578613,0.948916828,795.9399032,NA,0.601176143,16.30183289,0.057064805,8.741807938,795.946106,0.01297538,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_1,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,98718.1875,15457.56445,141.4631042,NA,0.067860338,0.138896942,24.95126152,NA,141.4631042,34.9570694,3,_GLEWVAQIR_,357.8696899,0.231323308,-0.087234139,0.515916427,141.4631042,13722.30859,NA,357.8674875,NA,10981.80078,23.48433002,0.018261088,NA,357.8696899,0.00840433,1 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,187616.75,40963.83594,375048.8438,NA,-0.743380425,0.140129089,72.70896149,NA,375048.8438,42.41449356,2,_GLEWVAQIR_,536.3009033,0.722308257,0.991955996,0.937889278,375048.8438,46960.625,-0.667730502,536.2964559,NA,11339.20605,19.35679426,3.76E-05,7.625113964,536.3009033,0.010381066,2 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,DIQMTQSPSSLSASLGER,NA,NA,NA,NA,189571.7344,15675.78027,38634.77734,NA,0.118118848,0.101478577,5.050991058,NA,38634.77734,22.54578018,2,_DIQM[Oxidation (M)]TQSPSSLSASLGER_,961.9598389,0.425373527,0.423984468,0.440279946,38634.77734,865.479248,-1.387331313,961.9520956,NA,8115.036621,12.80874476,0.050739482,6.662119389,961.9598389,0.012321498,4 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,ESGVPDR,NA,NA,NA,NA,1376082,58033.21484,1376082,NA,0.232158686,0.113842964,212.7084351,NA,1376082,41.60545349,2,_ESGVPDR_,380.1852112,0.702998769,0.325599313,0.876872222,1376082,58033.21484,4.519388547,380.1810395,NA,8061.205566,21.76008579,5.94E-05,15.49216652,380.1852112,0.008272863,3 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_1,Ighv6-3,A0A075B5T2,Immunoglobulin heavy variable 6-3 (Fragment),GLEWVAQIR,NA,NA,NA,NA,217273.4688,51354.16406,434453.1875,NA,0.107120856,0.142055511,55.00777054,NA,434453.1875,47.9986763,2,_GLEWVAQIR_,536.3009033,0.941255295,0.930132568,0.943093757,434453.1875,58699.39063,-0.617161117,536.2967882,NA,20073.91602,18.8991068,2.42E-05,7.056075573,536.3009033,0.010135608,3 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Ighv5-9,A0A075B5Q2,Immunoglobulin heavy variable 5-9 (Fragment),RLEWVATISGGGGNTYYPDSVK,NA,NA,NA,NA,30222.12891,7391.517578,30222.12891,NA,-0.003115418,0.155101776,16.61532974,NA,30222.12891,27.39152908,3,_RLEWVATISGGGGNTYYPDSVK_,790.7290039,0.723604631,0.27114886,0.858860989,30222.12891,7391.517578,3.385472786,790.7224035,NA,8965.591797,13.46917604,0.000185257,11.73264599,790.7290039,0.010650468,2 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,156859.9375,1840.379517,226233.7656,NA,0.192068064,0.101008415,9.658528328,NA,226233.7656,-4.735836506,2,_DIVM[Oxidation (M)]TQSQK_,533.2658691,0.194500379,0.512719035,0.175549199,226233.7656,836.5979614,-2.738983541,533.2611737,NA,4660.330078,21.86779476,0.051081933,6.066135883,533.2658691,0.011661349,4 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Ighv7-1,A0A075B5S2,Immunoglobulin heavy variable 7-1 (Fragment),LVESGGGLVQSGR,NA,NA,NA,NA,72494.51563,6361.625488,72494.51563,NA,-0.003475138,0.093101501,5.973305225,NA,72494.51563,53.03592682,2,_LVESGGGLVQSGR_,629.8411255,0.792762804,0.549250424,0.885242581,72494.51563,6361.625488,-0.767490225,629.8357593,NA,31995.91211,13.71174521,0.000189315,7.752450943,629.8411255,0.008636221,4 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv6-13,A0A075B5N7,Immunoglobulin kappa variable 6-13,DIVMTQSQK,NA,NA,NA,NA,156859.9375,1840.379517,87486.10938,NA,0.084272784,0.121294022,3.043318272,NA,87486.10938,51.37187958,1,_DIVMTQSQK_,1049.529541,0.798743445,0.913141966,0.863805572,87486.10938,2844.161133,-0.534778609,1049.521533,NA,17260.38867,11.39859743,0.000470148,7.094882965,1049.529541,0.011963165,4 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_1,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,SSQSLLNSGNQK,NA,NA,NA,NA,69222.67188,697.854187,69222.67188,NA,0.061694747,0.086156845,6.418026447,NA,69222.67188,11.6861372,2,_SSQSLLNSGNQK_,631.8203735,0.193638889,0.342970282,0.305564957,69222.67188,697.854187,1.685616629,631.8158233,NA,3558.77002,17.67744699,0.060024314,8.887390137,631.8203735,0.011168971,5 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv4-63,A0A075B5M1,Immunoglobulin kappa variable 4-63,LASGVPGR,NA,NA,NA,NA,231731.25,27972.57813,231731.25,NA,-0.083277777,0.09370327,163.8052521,NA,231731.25,37.17317581,2,_LASGVPGR_,378.7217712,0.864091957,0.844812334,0.862011492,231731.25,27972.57813,-0.151254179,378.7172279,NA,5214.903809,21.16415386,4.45E-05,11.84532928,378.7217712,0.008015326,4 +0d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_0d_2,Igkv5-39,A0A075B5M7,Immunoglobulin kappa variable 5-39,DIVMTQSPATLSVTPGDR,NA,NA,NA,NA,1738399,24785.98438,2964962,NA,0.092455855,0.224506378,15.9526062,NA,2964962,40.48913956,2,_DIVM[Oxidation (M)]TQSPATLSVTPGDR_,952.4750977,0.616060108,0.548114777,0.733136714,2964962,12001.96094,NA,952.4675536,NA,11837.67871,12.27876929,0.000178525,NA,952.4750977,0.011695222,2 +32d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_32d_2,Igkv8-28,A0A075B5N3,Immunoglobulin kappa variable 8-28,SSQSLLNSGNQK,NA,NA,NA,NA,8659.84375,1189.40625,8659.84375,NA,-0.120270506,0.086936951,70159.11719,NA,8659.84375,45.17756271,2,_SSQSLLNSGNQK_,631.8203735,0.259268835,-0.304832578,0.448586479,8659.84375,1189.40625,-1.564976375,631.8149292,NA,0.506191313,12.5715031,0.046368949,7.051950932,631.8203735,0.007942932,6 +8d,NA,20210805_BoxCarmax1st_wideMS1_JM_pSIL_pro_heart_8d_2,Igkv9-124,A0A075B5K2,Immunoglobulin kappa chain variable 9-124,RLIYAASTLDSGVPK,39677.51563,16425.48047,684.1309204,1013.757019,39677.51563,684.1309204,39677.51563,16425.48047,0.117555344,0.106966019,5.408240795,NA,NA,38.59564972,2,_RLIYAASTLDSGVPK_,795.946106,0.343346803,0.524190784,0.327267118,39677.51563,684.1309204,0.228438482,795.9395739,NA,5549.635254,15.49018806,0.092307463,8.435077667,795.946106,0.012329355,4 \ No newline at end of file diff --git a/inst/tinytest/raw_data/Spectronaut/run_order.csv b/inst/tinytest/raw_data/Spectronaut/run_order.csv deleted file mode 100644 index 4981fcff..00000000 --- a/inst/tinytest/raw_data/Spectronaut/run_order.csv +++ /dev/null @@ -1,41 +0,0 @@ -Run,Order -20250102_Tulum_NeatK562_Seq1,1 -20250102_Tulum_NeatK562_Seq2,2 -20250102_Tulum_1to2K562_Seq3,3 -20250102_Tulum_1to2K563_Seq4,4 -20250102_Tulum_NeatK562_Seq5,5 -20250102_Tulum_NeatK562_Seq6,6 -20250102_Tulum_1to2K562_Seq7,7 -20250102_Tulum_NeatK562_Seq8,8 -20250102_Tulum_1to2K562_Seq9,9 -20250102_Tulum_NeatK562_Seq10,10 -20250102_Tulum_NeatK562_Seq11,11 -20250102_Tulum_1to2K562_Seq12,12 -20250102_Tulum_1to2K562_Seq13,13 -20250102_Tulum_1to2K562_Seq14,14 -20250102_Tulum_NeatK562_Seq15,15 -20250102_Tulum_NeatK562_Seq16,16 -20250102_Tulum_1to2K562_Seq17,17 -20250102_Tulum_NeatK562_Seq18,18 -20250102_Tulum_1to2K562_Seq19,19 -20250102_Tulum_NeatK562_Seq20,20 -20250102_Tulum_1to2K562_Seq21,21 -20250102_Tulum_NeatK562_Seq22,22 -20250102_Tulum_NeatK562_Seq23,23 -20250102_Tulum_1to2K562_Seq24,24 -20250102_Tulum_1to2K562_Seq25,25 -20250102_Tulum_NeatK562_Seq26,26 -20250102_Tulum_NeatK562_Seq27,27 -20250102_Tulum_1to2K562_Seq28,28 -20250102_Tulum_1to2K562_Seq29,29 -20250102_Tulum_1to2K562_Seq30,30 -20250102_Tulum_1to4K562_Seq31,31 -20250102_Tulum_1to2K562_Seq32,32 -20250102_Tulum_1to8K562_Seq33,33 -20250102_Tulum_1to4K562_Seq34,34 -20250102_Tulum_1to16K562_Seq35,35 -20250102_Tulum_1to8K562_Seq36,36 -20250102_Tulum_1to32K562_Seq37,37 -20250102_Tulum_1to16K562_Seq38,38 -20250102_Tulum_1to64K562_Seq39,39 -20250102_Tulum_1to32K562_Seq40,40 diff --git a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R index 721a5fd6..a3864615 100644 --- a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R +++ b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R @@ -382,15 +382,13 @@ expect_error(SpectronauttoMSstatsFormat( )) +# --- Heavy Label Testing -------------------------------- boxcar_path = system.file( "tinytest/raw_data/Spectronaut/boxcar_protein_turnover_input.csv", package = "MSstatsConvert") boxcar_raw = data.table::fread(boxcar_path) - -# --- Heavy Label Testing -------------------------------- - output_heavy = SpectronauttoMSstatsFormat( boxcar_raw, intensity = "FG.MS1Quantity", @@ -423,7 +421,8 @@ na_rows = output_heavy[is.na(IsotopeLabelType)] expect_false(any(grepl("K", na_rows$PeptideSequence, fixed = TRUE))) output_leu = SpectronauttoMSstatsFormat( boxcar_raw, - intensity = "MS1Quantity", + peptideSequenceColumn = "FG.LabeledSequence", + intensity = "FG.MS1Quantity", heavyLabel = c("L[Leu6]"), use_log_file = FALSE ) diff --git a/man/SpectronauttoMSstatsFormat.Rd b/man/SpectronauttoMSstatsFormat.Rd index 62ecd7de..8c9525d0 100644 --- a/man/SpectronauttoMSstatsFormat.Rd +++ b/man/SpectronauttoMSstatsFormat.Rd @@ -7,7 +7,7 @@ SpectronauttoMSstatsFormat( input, annotation = NULL, - intensity = c("PeakArea", "NormalizedPeakArea"), + intensity = "PeakArea", peptideSequenceColumn = "EG.ModifiedSequence", heavyLabels = NULL, excludedFromQuantificationFilter = TRUE, From f732e38792042582e0e5f245ac875a55601d2fd0 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 1 Apr 2026 10:21:01 -0400 Subject: [PATCH 07/14] clean up code --- R/clean_Spectronaut.R | 9 +++------ .../test_converters_SpectronauttoMSstatsFormat.R | 10 +++++----- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index 0d7e6884..24cd03d8 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -47,7 +47,7 @@ skip_absent = TRUE) spec_input = .assignSpectronautIsotopeLabelType( - spec_input, heavyLabels, peptideSequenceColumn) + spec_input, heavyLabels) .logSuccess("Spectronaut", "clean") spec_input @@ -179,13 +179,10 @@ #' @param spec_input `data.table` after column renaming. #' @param heavyLabels Character scalar heavy label name (e.g. \code{"Lys6"}), #' or \code{NULL}. -#' @param peptideSequenceColumn Raw (dot-separated) column name that holds the labeled -#' sequence (e.g. \code{"FG.LabeledSequence"}). #' @return `data.table` with \code{IsotopeLabelType} column added or updated. #' @keywords internal #' @noRd -.assignSpectronautIsotopeLabelType = function(spec_input, heavyLabels, - peptideSequenceColumn) { +.assignSpectronautIsotopeLabelType = function(spec_input, heavyLabels) { IsotopeLabelType = PeptideSequence = NULL if (is.null(heavyLabels)) { return(spec_input) @@ -195,7 +192,7 @@ bare_amino_acids_pattern = paste0(bare_amino_acids, collapse = "|") heavy_pattern = paste0(heavyLabels, collapse = "|") heavy_brackets_escaped_pattern = paste( - gsub("([\\[\\]])", "\\\\\\1", heavy_pattern), + gsub("([\\[\\]])", "\\\\\\1", heavy_pattern, perl = TRUE), collapse = "|" ) diff --git a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R index a3864615..6f733aa5 100644 --- a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R +++ b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R @@ -413,11 +413,11 @@ expect_true(nrow(output_heavy) > 0) expect_false(any(is.na(output_heavy$ProteinName))) expect_true("H" %in% unique(output_heavy$IsotopeLabelType)) expect_true("L" %in% unique(output_heavy$IsotopeLabelType)) -heavy_rows = output_heavy[IsotopeLabelType == "H"] -expect_true(all(grepl("[Lys6]", heavy_rows$PeptideSequence, fixed = TRUE))) -light_rows = output_heavy[IsotopeLabelType == "L"] -expect_false(any(grepl("[Lys6]", light_rows$PeptideSequence, fixed = TRUE))) -na_rows = output_heavy[is.na(IsotopeLabelType)] +heavy_rows = subset(output_heavy, IsotopeLabelType == "H") +expect_true(all(grepl("Lys6", heavy_rows$PeptideSequence, fixed = TRUE))) +light_rows = subset(output_heavy, IsotopeLabelType == "L") +expect_false(any(grepl("Lys6", light_rows$PeptideSequence, fixed = TRUE))) +na_rows = subset(output_heavy, is.na(IsotopeLabelType)) expect_false(any(grepl("K", na_rows$PeptideSequence, fixed = TRUE))) output_leu = SpectronauttoMSstatsFormat( boxcar_raw, From e9b79c03634661fea4369ed7cfabdd3859cdc22f Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Wed, 1 Apr 2026 12:03:15 -0400 Subject: [PATCH 08/14] strip the peptide sequence of the brackets --- R/clean_Spectronaut.R | 2 ++ R/utils_balanced_design.R | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index 24cd03d8..8f37c388 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -201,6 +201,8 @@ grepl(bare_amino_acids_pattern, PeptideSequence, perl = TRUE), "L", default = NA_character_ )] + + spec_input[, PeptideSequence := gsub(heavy_brackets_escaped_pattern, "", PeptideSequence, perl = TRUE)] spec_input } diff --git a/R/utils_balanced_design.R b/R/utils_balanced_design.R index 89f8b971..d295a832 100644 --- a/R/utils_balanced_design.R +++ b/R/utils_balanced_design.R @@ -94,7 +94,7 @@ measurement_col, group_col) result[, 2:4, with = FALSE] } else { - labels = unique(input[["IsotopeLabelType"]]) + labels = na.omit(unique(input[["IsotopeLabelType"]])) groups = unique(input[[group_col]]) by_group = vector("list", length(groups)) measurements = unique(input[[measurement_col]]) From 32766013278ccd89f85d8a80daaa56697c43f6c0 Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Wed, 1 Apr 2026 13:58:11 -0400 Subject: [PATCH 09/14] recovered NAs in IsotopeLabelType --- R/utils_balanced_design.R | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/R/utils_balanced_design.R b/R/utils_balanced_design.R index d295a832..6fc8a453 100644 --- a/R/utils_balanced_design.R +++ b/R/utils_balanced_design.R @@ -107,6 +107,15 @@ features = unique(input[[feature_col]][group_filter]), measurements = unique(input[[measurement_col]][group_filter]) )) + na_label_features = unique(input[[feature_col]][group_filter & is.na(input[["IsotopeLabelType"]])]) + if (length(na_label_features) > 0) { + na_rows = data.table::as.data.table(expand.grid( + labels = NA, + features = na_label_features, + measurements = unique(input[[measurement_col]][group_filter]) + )) + by_group[[group_id]] = data.table::rbindlist(list(by_group[[group_id]], na_rows)) + } by_group[[group_id]]$group = group } result = data.table::rbindlist(by_group) From aeeec23f4cba53ca3150685a3ed359af5a4ab80d Mon Sep 17 00:00:00 2001 From: tonywu1999 Date: Wed, 1 Apr 2026 14:29:09 -0400 Subject: [PATCH 10/14] almost working --- R/clean_Spectronaut.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index 8f37c388..fa1cda79 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -202,7 +202,10 @@ default = NA_character_ )] - spec_input[, PeptideSequence := gsub(heavy_brackets_escaped_pattern, "", PeptideSequence, perl = TRUE)] + for (i in seq_along(heavyLabels)) { + escaped = gsub("([\\[\\]])", "\\\\\\1", heavyLabels[i], perl = TRUE) + spec_input[, PeptideSequence := gsub(escaped, bare_amino_acids[i], PeptideSequence, perl = TRUE)] + } spec_input } From 7eaabb846d2f7c0baa454806a726979beace3bcb Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Thu, 2 Apr 2026 10:44:27 -0400 Subject: [PATCH 11/14] unit tests passing as expected --- R/utils_balanced_design.R | 33 +++++++++++-------- ...st_converters_SpectronauttoMSstatsFormat.R | 4 +-- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/R/utils_balanced_design.R b/R/utils_balanced_design.R index 6fc8a453..56c8d94f 100644 --- a/R/utils_balanced_design.R +++ b/R/utils_balanced_design.R @@ -101,21 +101,28 @@ for (group_id in seq_along(groups)) { group = groups[group_id] group_filter = input[[group_col]] == group - by_group[[group_id]] = data.table::as.data.table( - expand.grid( - labels = labels, - features = unique(input[[feature_col]][group_filter]), - measurements = unique(input[[measurement_col]][group_filter]) - )) - na_label_features = unique(input[[feature_col]][group_filter & is.na(input[["IsotopeLabelType"]])]) + non_na_filter = group_filter & !is.na(input[["IsotopeLabelType"]]) + na_filter = group_filter & is.na(input[["IsotopeLabelType"]]) + non_na_features = unique(input[[feature_col]][non_na_filter]) + na_label_features = unique(input[[feature_col]][na_filter]) + parts = list() + if (length(non_na_features) > 0) { + parts[[length(parts) + 1]] = data.table::as.data.table( + expand.grid( + labels = labels, + features = non_na_features, + measurements = unique(input[[measurement_col]][non_na_filter]) + )) + } if (length(na_label_features) > 0) { - na_rows = data.table::as.data.table(expand.grid( - labels = NA, - features = na_label_features, - measurements = unique(input[[measurement_col]][group_filter]) - )) - by_group[[group_id]] = data.table::rbindlist(list(by_group[[group_id]], na_rows)) + parts[[length(parts) + 1]] = data.table::as.data.table( + expand.grid( + labels = NA, + features = na_label_features, + measurements = unique(input[[measurement_col]][na_filter]) + )) } + by_group[[group_id]] = data.table::rbindlist(parts) by_group[[group_id]]$group = group } result = data.table::rbindlist(by_group) diff --git a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R index 6f733aa5..155f47eb 100644 --- a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R +++ b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R @@ -414,9 +414,9 @@ expect_false(any(is.na(output_heavy$ProteinName))) expect_true("H" %in% unique(output_heavy$IsotopeLabelType)) expect_true("L" %in% unique(output_heavy$IsotopeLabelType)) heavy_rows = subset(output_heavy, IsotopeLabelType == "H") -expect_true(all(grepl("Lys6", heavy_rows$PeptideSequence, fixed = TRUE))) +expect_true(all(grepl("K", heavy_rows$PeptideSequence, fixed = TRUE))) light_rows = subset(output_heavy, IsotopeLabelType == "L") -expect_false(any(grepl("Lys6", light_rows$PeptideSequence, fixed = TRUE))) +expect_true(all(grepl("K", light_rows$PeptideSequence, fixed = TRUE))) na_rows = subset(output_heavy, is.na(IsotopeLabelType)) expect_false(any(grepl("K", na_rows$PeptideSequence, fixed = TRUE))) output_leu = SpectronauttoMSstatsFormat( From d1a75384b4283f72508c6027fdca642fd6a6b60e Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Thu, 2 Apr 2026 10:58:06 -0400 Subject: [PATCH 12/14] account for edge case --- R/clean_Spectronaut.R | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index fa1cda79..4729683f 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -183,7 +183,7 @@ #' @keywords internal #' @noRd .assignSpectronautIsotopeLabelType = function(spec_input, heavyLabels) { - IsotopeLabelType = PeptideSequence = NULL + IsotopeLabelType = PeptideSequence = StrippedSequence = NULL if (is.null(heavyLabels)) { return(spec_input) } @@ -196,16 +196,19 @@ collapse = "|" ) + spec_input[, StrippedSequence := gsub("\\[.*?\\]", "", PeptideSequence)] + spec_input[, IsotopeLabelType := data.table::fcase( grepl(heavy_brackets_escaped_pattern, PeptideSequence, perl = TRUE), "H", - grepl(bare_amino_acids_pattern, PeptideSequence, perl = TRUE), "L", + grepl(bare_amino_acids_pattern, StrippedSequence, perl = TRUE), "L", default = NA_character_ )] + spec_input[, StrippedSequence := NULL] + for (i in seq_along(heavyLabels)) { escaped = gsub("([\\[\\]])", "\\\\\\1", heavyLabels[i], perl = TRUE) spec_input[, PeptideSequence := gsub(escaped, bare_amino_acids[i], PeptideSequence, perl = TRUE)] } - spec_input } From 6c90705b03cbb870fe1e36e9bf371fe2d7d1b2b2 Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Thu, 2 Apr 2026 14:51:02 -0400 Subject: [PATCH 13/14] add unit tests --- inst/tinytest/test_clean_Spectronaut.R | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/inst/tinytest/test_clean_Spectronaut.R b/inst/tinytest/test_clean_Spectronaut.R index 17f17acf..be05e5fd 100644 --- a/inst/tinytest/test_clean_Spectronaut.R +++ b/inst/tinytest/test_clean_Spectronaut.R @@ -14,3 +14,39 @@ expect_error(MSstatsConvert:::.cleanRawSpectronaut(msstats_input, intensity = 'i calculateAnomalyScores = FALSE, anomalyModelFeatures = c()), pattern = "not found in input data") + +# Tests for .assignSpectronautIsotopeLabelType +make_spec_input = function(peptides) { + data.table::data.table(PeptideSequence = peptides) +} + +dt = make_spec_input(c( + "_PEPTIDEK[Lys6]_", # heavy via Lys6 + "_PEPTIDER[Arg10]_", # heavy via Arg10 + "_PEPTIDEK_", # light (has K, but no Lys6 label) + "_PEPTIDER_", # light (has R, but no Arg10 label) + "_PEPTIDEAC_" # NA (no K or R) +)) +result = MSstatsConvert:::.assignSpectronautIsotopeLabelType( + dt, heavyLabels = c("K[Lys6]", "R[Arg10]")) +expect_equal(result$IsotopeLabelType, c("H", "H", "L", "L", NA_character_)) +expect_equal(result$PeptideSequence, + c("_PEPTIDEK_", "_PEPTIDER_", "_PEPTIDEK_", "_PEPTIDER_", "_PEPTIDEAC_")) + +dt = make_spec_input(c( + "_PEPTM[Oxidation]IDEK_", + "_S[Kmodification]PEPTIDEK_", + "_PEPTM[Oxidation]IDEK[Lys6]_", + "_ACDEGFHI_" +)) +result = MSstatsConvert:::.assignSpectronautIsotopeLabelType( + dt, heavyLabels = "K[Lys6]") +expect_equal(result$IsotopeLabelType, c("L", "L", "H", NA_character_)) +# Non-heavy brackets and heavy label brackets are stripped from PeptideSequence +expect_equal(result$PeptideSequence, + c("_PEPTM[Oxidation]IDEK_", "_S[Kmodification]PEPTIDEK_", + "_PEPTM[Oxidation]IDEK_", "_ACDEGFHI_")) + +dt = make_spec_input(c("_PEPTIDEK_", "_PEPTIDER_")) +result = MSstatsConvert:::.assignSpectronautIsotopeLabelType(dt, heavyLabels = NULL) +expect_equal(result, dt) From a65cdc5803b3e1ac66c21763a121f5b0b010670e Mon Sep 17 00:00:00 2001 From: Tony Wu Date: Thu, 2 Apr 2026 15:13:15 -0400 Subject: [PATCH 14/14] fix balanced design to account for an NA isotope label type --- R/utils_balanced_design.R | 4 +- inst/tinytest/test_balanced_design.R | 55 ++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/R/utils_balanced_design.R b/R/utils_balanced_design.R index 56c8d94f..efea4f0b 100644 --- a/R/utils_balanced_design.R +++ b/R/utils_balanced_design.R @@ -111,7 +111,7 @@ expand.grid( labels = labels, features = non_na_features, - measurements = unique(input[[measurement_col]][non_na_filter]) + measurements = unique(input[[measurement_col]][group_filter]) )) } if (length(na_label_features) > 0) { @@ -119,7 +119,7 @@ expand.grid( labels = NA, features = na_label_features, - measurements = unique(input[[measurement_col]][na_filter]) + measurements = unique(input[[measurement_col]][group_filter]) )) } by_group[[group_id]] = data.table::rbindlist(parts) diff --git a/inst/tinytest/test_balanced_design.R b/inst/tinytest/test_balanced_design.R index d13c88a4..09ee37bc 100644 --- a/inst/tinytest/test_balanced_design.R +++ b/inst/tinytest/test_balanced_design.R @@ -97,3 +97,58 @@ expect_equal(MSstatsConvert:::.fixMissingValues(data.table::copy(no_duplicates4) expect_equal(MSstatsConvert:::.fixMissingValues(data.table::copy(no_duplicates3), NULL)$Intensity, no_duplicates3$Intensity) +# .getFullDesign tests + +# Test 1: H/L features expand over all runs in the group even if a label was only +# observed in a subset of runs. NA-labeled features also expand to all group runs. +# "b" has H only in run 1 and L only in run 2; "a" (NA) only in run 3. +# All three should be filled out to all runs {1, 2, 3} in the group. +gfd_mixed = data.table::data.table( + feature = c("b", "b", "a"), + Run = c( 1, 2, 3), + IsotopeLabelType = c("H", "L", NA), + Fraction = 1L +) +gfd_result = MSstatsConvert:::.getFullDesign( + gfd_mixed, group_col = "Fraction", feature_col = "feature", + measurement_col = "Run", is_tmt = FALSE) +a_rows = gfd_result[gfd_result$feature == "a", ] +expect_true(all(is.na(a_rows$IsotopeLabelType))) +expect_equal(nrow(a_rows), 3L) +b_rows = gfd_result[gfd_result$feature == "b", ] +expect_equal(nrow(b_rows), 6L) +expect_true(all(sort(unique(b_rows$IsotopeLabelType)) == c("H", "L"))) + +# Test 2: All features have NA IsotopeLabelType — full design contains only NA labels, +# not the empty H/L set that na.omit() would strip from the labels vector. +gfd_all_na = data.table::data.table( + feature = c("x", "x", "y", "y"), + Run = c( 1, 2, 1, 2), + IsotopeLabelType = NA_character_, + Fraction = 1L +) +gfd_na_result = MSstatsConvert:::.getFullDesign( + gfd_all_na, group_col = "Fraction", feature_col = "feature", + measurement_col = "Run", is_tmt = FALSE) +expect_true(all(is.na(gfd_na_result$IsotopeLabelType))) +expect_equal(nrow(gfd_na_result), 4L) + +# Test 3: NA-labeled features expand over ALL runs in the group, not just the runs +# where they were observed. Feature "p" appears in runs 1 and 2 with H/L; +# feature "q" appears only in run 3 with NA, but should be filled out to runs 1-3. +gfd_separate_runs = data.table::data.table( + feature = c("p", "p", "p", "p", "q"), + Run = c( 1, 1, 2, 2, 3), + IsotopeLabelType = c("L", "H", "L", "H", NA), + Fraction = 1L +) +gfd_sep_result = MSstatsConvert:::.getFullDesign( + gfd_separate_runs, group_col = "Fraction", feature_col = "feature", + measurement_col = "Run", is_tmt = FALSE) +p_rows = gfd_sep_result[gfd_sep_result$feature == "p", ] +expect_equal(nrow(p_rows), 6) +q_rows = gfd_sep_result[gfd_sep_result$feature == "q", ] +expect_equal(nrow(q_rows), 3L) +expect_true(all(is.na(q_rows$IsotopeLabelType))) +expect_equal(sort(q_rows$Run), c(1L, 2L, 3L)) +