diff --git a/R/clean_Spectronaut.R b/R/clean_Spectronaut.R index 90f45da9..4729683f 100644 --- a/R/clean_Spectronaut.R +++ b/R/clean_Spectronaut.R @@ -4,60 +4,211 @@ #' @return `data.table` #' @keywords internal .cleanRawSpectronaut = function(msstats_object, intensity, - calculateAnomalyScores, - anomalyModelFeatures) { + calculateAnomalyScores, + anomalyModelFeatures, + peptideSequenceColumn = "EG.ModifiedSequence", + heavyLabels = NULL) { FFrgLossType = FExcludedFromQuantification = NULL - + spec_input = getInputFile(msstats_object, "input") - .validateSpectronautInput(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)) + + 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"), + 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", + intensity_col = .resolveSpectronautIntensityColumn(intensity, colnames(spec_input)) + peptide_col = .findAvailable(.standardizeColnames(peptideSequenceColumn), + colnames(spec_input)) + protein_col = .findAvailable(c("PGProteinGroups", "PGProteinAccessions"), + colnames(spec_input), fall_back = "PGProteinGroups") + + cols = c(protein_col, peptide_col, "FGCharge", "FFrgIon", + f_charge_col, "RFileName", "RCondition", "RReplicate", "EGQvalue", pg_qval_col, interference_col, exclude_col, - intensity_column) + intensity_col) if (calculateAnomalyScores){ cols = c(cols, anomalyModelFeatures) } 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, + spec_input, + c(protein_col, peptide_col, "FGCharge", "FFrgIon", + f_charge_col, "RFileName", intensity_col, "RCondition", "RReplicate"), c("ProteinName", "PeptideSequence", "PrecursorCharge", "FragmentIon", - "ProductCharge", "Run", "Intensity", "Condition", "BioReplicate"), + "ProductCharge", "Run", "Intensity", "Condition", "BioReplicate"), skip_absent = TRUE) + + spec_input = .assignSpectronautIsotopeLabelType( + spec_input, heavyLabels) + .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) { - required_columns = c( - "FFrgLossType", "FExcludedFromQuantification", "PGProteinGroups", - "FGCharge") +.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:", + 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. +#' +#' 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 +#' @noRd +.addSpectronautColumnsIfMissing = 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 +#' @noRd +.resolveSpectronautIntensityColumn = function(intensity, available_cols) { + legacy_mapping = c( + "PeakArea" = "FPeakArea", + "NormalizedPeakArea" = "FNormalizedPeakArea" + ) + + if (intensity %in% names(legacy_mapping)) { + resolved = legacy_mapping[[intensity]] + } else { + resolved = .standardizeColnames(intensity) + } + + if (!(resolved %in% available_cols)) { + stop(paste0( + "Intensity column '", intensity, "' not found in input data. ", 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 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. +#' +#' @param spec_input `data.table` after column renaming. +#' @param heavyLabels Character scalar heavy label name (e.g. \code{"Lys6"}), +#' or \code{NULL}. +#' @return `data.table` with \code{IsotopeLabelType} column added or updated. +#' @keywords internal +#' @noRd +.assignSpectronautIsotopeLabelType = function(spec_input, heavyLabels) { + IsotopeLabelType = PeptideSequence = StrippedSequence = NULL + if (is.null(heavyLabels)) { + return(spec_input) + } + + bare_amino_acids = sub("\\[.*\\]", "", heavyLabels) + bare_amino_acids_pattern = paste0(bare_amino_acids, collapse = "|") + heavy_pattern = paste0(heavyLabels, collapse = "|") + heavy_brackets_escaped_pattern = paste( + gsub("([\\[\\]])", "\\\\\\1", heavy_pattern, perl = TRUE), + 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, 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 } diff --git a/R/converters_SpectronauttoMSstatsFormat.R b/R/converters_SpectronauttoMSstatsFormat.R index bf53f1cc..42f14987 100644 --- a/R/converters_SpectronauttoMSstatsFormat.R +++ b/R/converters_SpectronauttoMSstatsFormat.R @@ -1,9 +1,28 @@ #' 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). 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"}. +#' @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"}. +#' 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. @@ -33,8 +52,10 @@ #' head(spectronaut_imported) #' SpectronauttoMSstatsFormat = function( - input, annotation = NULL, - intensity = c('PeakArea', 'NormalizedPeakArea', 'MS1Quantity'), + input, annotation = NULL, + intensity = 'PeakArea', + peptideSequenceColumn = "EG.ModifiedSequence", + heavyLabels = NULL, excludedFromQuantificationFilter = TRUE, filter_with_Qvalue = FALSE, qvalue_cutoff = 0.01, useUniquePeptide = TRUE, removeFewMeasurements=TRUE, @@ -47,10 +68,11 @@ SpectronauttoMSstatsFormat = function( use_log_file = TRUE, append = FALSE, verbose = TRUE, log_file_path = NULL, ... ) { + 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 +106,10 @@ SpectronauttoMSstatsFormat = function( "MSstats", "Spectronaut", ...) input = MSstatsConvert::MSstatsClean(input, intensity = intensity, - calculateAnomalyScores, - anomalyModelFeatures) + calculateAnomalyScores, + anomalyModelFeatures, + peptideSequenceColumn = peptideSequenceColumn, + heavyLabels = heavyLabels) annotation = MSstatsConvert::MSstatsMakeAnnotation(input, annotation) pq_filter = list(score_column = "PGQvalue", @@ -113,20 +137,24 @@ SpectronauttoMSstatsFormat = function( drop_column = TRUE ) - feature_columns = c("PeptideSequence", "PrecursorCharge", + feature_columns = c("PeptideSequence", "PrecursorCharge", "FragmentIon", "ProductCharge") + + fill_isotope_label_type = if (is.null(heavyLabels)) + 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_label_type, anomaly_metrics = anomalyModelFeatures) input[, Intensity := ifelse(Intensity == 0, NA, Intensity)] diff --git a/R/utils_balanced_design.R b/R/utils_balanced_design.R index 89f8b971..efea4f0b 100644 --- a/R/utils_balanced_design.R +++ b/R/utils_balanced_design.R @@ -94,19 +94,35 @@ 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]]) 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]) - )) + 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]][group_filter]) + )) + } + if (length(na_label_features) > 0) { + parts[[length(parts) + 1]] = 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(parts) by_group[[group_id]]$group = group } result = data.table::rbindlist(by_group) 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..c7e34886 --- /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,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/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)) + diff --git a/inst/tinytest/test_clean_Spectronaut.R b/inst/tinytest/test_clean_Spectronaut.R index 47d7b429..be05e5fd 100644 --- a/inst/tinytest/test_clean_Spectronaut.R +++ b/inst/tinytest/test_clean_Spectronaut.R @@ -5,12 +5,48 @@ 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)) -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") + +# 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) diff --git a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R index 09107563..155f47eb 100644 --- a/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R +++ b/inst/tinytest/test_converters_SpectronauttoMSstatsFormat.R @@ -16,31 +16,38 @@ 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", 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) ) 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) ) 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) +) + +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" @@ -373,3 +380,50 @@ expect_error(SpectronauttoMSstatsFormat( n_trees = 100, max_depth = "auto" )) + + +# --- 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) + +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 = subset(output_heavy, IsotopeLabelType == "H") +expect_true(all(grepl("K", heavy_rows$PeptideSequence, fixed = TRUE))) +light_rows = subset(output_heavy, IsotopeLabelType == "L") +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( + boxcar_raw, + peptideSequenceColumn = "FG.LabeledSequence", + intensity = "FG.MS1Quantity", + heavyLabel = c("L[Leu6]"), + use_log_file = FALSE +) +expect_false("H" %in% unique(output_leu$IsotopeLabelType)) 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..8c9525d0 100644 --- a/man/SpectronauttoMSstatsFormat.Rd +++ b/man/SpectronauttoMSstatsFormat.Rd @@ -7,7 +7,9 @@ SpectronauttoMSstatsFormat( input, annotation = NULL, - intensity = c("PeakArea", "NormalizedPeakArea", "MS1Quantity"), + intensity = "PeakArea", + 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}