diff --git a/mzLib/Proteomics/Proteomics.csproj b/mzLib/Proteomics/Proteomics.csproj index 5b87fbed8..2e5cd0b01 100644 --- a/mzLib/Proteomics/Proteomics.csproj +++ b/mzLib/Proteomics/Proteomics.csproj @@ -9,6 +9,11 @@ full true + + + + + @@ -21,6 +26,9 @@ Always + + Always + diff --git a/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/Chronologer.cs b/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/Chronologer.cs new file mode 100644 index 000000000..5c19d98a4 --- /dev/null +++ b/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/Chronologer.cs @@ -0,0 +1,150 @@ +using System; +using System.IO; +using TorchSharp; +using TorchSharp.Modules; + +namespace Proteomics.RetentionTimePrediction.ChronologerModel +{ + /// + /// Chronologer is a deep learning model for highly accurate prediction of peptide C18 retention times (reported in % ACN). + /// Chronologer was trained on a new large harmonized database of > 2.6 million retention time observations + /// (2.25M unique peptides) constructed from 11 community datasets + /// and natively supports prediction of 17 different modification types. + /// With only a few observations of a new modification type (> 10 peptides), + /// Chronologer can be easily re-trained to predict up to 10 user supplied modifications. + /// + /// Damien Beau Wilburn, Ariana E. Shannon, Vic Spicer, Alicia L. Richards, Darien Yeung, Danielle L. Swaney, Oleg V. Krokhin, Brian C. Searle + /// bioRxiv 2023.05.30.542978; doi: https://doi.org/10.1101/2023.05.30.542978 + /// + /// https://github.com/searlelab/chronologer + /// + /// Licensed under Apache License 2.0 + /// + /// + public class Chronologer : torch.nn.Module + { + public Chronologer() : this(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, + "RetentionTimePrediction", + "Chronologer_20220601193755_TorchSharp.dat")) + { } + + /// + /// Initializes a new instance of the Chronologer model class with pre-trained weights from the paper + /// Deep learning from harmonized peptide libraries enables retention time prediction of diverse post + /// translational modifications paper (https://github.com/searlelab/chronologer). + /// Eval mode is set to true and training mode is set to false by default. + /// + /// Please use .Predict() for using the model, not .forward(). + /// + /// + /// + public Chronologer(string weightsPath, bool evalMode = true) : base(nameof(Chronologer)) + { + RegisterComponents(); + + LoadWeights(weightsPath);//loads weights from the file + + if (evalMode) + { + eval(); + train(false); + } + } + + /// + /// Do not use for inferring. Use .Predict() instead. + /// + /// + /// + public override torch.Tensor forward(torch.Tensor x) + { + var input = seq_embed.forward(x).transpose(1, -1); + + var residual = input.clone(); + input = conv_layer_1.forward(input); //renet_block + input = norm_layer_1.forward(input); + input = relu.forward(input); + input = conv_layer_2.forward(input); + input = norm_layer_2.forward(input); + input = relu.forward(input); + input = term_block.forward(input); + input = residual + input; + input = relu.forward(input); + + residual = input.clone(); + input = conv_layer_4.forward(input);//renet_block + input = norm_layer_4.forward(input); + input = relu.forward(input); + input = conv_layer_5.forward(input); + input = norm_layer_5.forward(input); + input = relu.forward(input); + input = term_block.forward(input); + input = residual + input; + input = relu.forward(input); + + residual = input.clone(); + input = conv_layer_7.forward(input);//renet_block + input = norm_layer_7.forward(input); + input = term_block.forward(input); + input = relu.forward(input); + input = conv_layer_8.forward(input); + input = norm_layer_8.forward(input); + input = relu.forward(input); + input = term_block.forward(input); + input = residual + input; + input = relu.forward(input); + + input = dropout.forward(input); + input = flatten.forward(input); + input = output.forward(input); + + return input; + } + + /// + /// Loads pre-trained weights from the file Chronologer_20220601193755_TorchSharp.dat. + /// + /// + private void LoadWeights(string weightsPath) + { + //load weights from the file + load(weightsPath, true); + } + + /// + /// Predicts the retention time of the input peptide sequence. The input must be a torch.Tensor of shape (1, 52). + /// + /// + /// + public torch.Tensor Predict(torch.Tensor input) + { + return call(input); + } + + //All Modules (shortcut modules are for loading the weights only) + private Embedding seq_embed = torch.nn.Embedding(55, 64, 0); + private torch.nn.Module conv_layer_1 = torch.nn.Conv1d(64, 64, 1, Padding.Same, dilation: 1); + private torch.nn.Module conv_layer_2 = torch.nn.Conv1d(64, 64, 7, Padding.Same, dilation: 1); + private torch.nn.Module conv_layer_3 = torch.nn.Conv1d(64, 64, 1, Padding.Same, dilation: 1); //shortcut + private torch.nn.Module conv_layer_4 = torch.nn.Conv1d(64, 64, 1, Padding.Same, dilation: 2); + private torch.nn.Module conv_layer_5 = torch.nn.Conv1d(64, 64, 7, Padding.Same, dilation: 2); + private torch.nn.Module conv_layer_6 = torch.nn.Conv1d(64, 64, 1, Padding.Same, dilation: 2); //shortcut + private torch.nn.Module conv_layer_7 = torch.nn.Conv1d(64, 64, 1, Padding.Same, dilation: 3); + private torch.nn.Module conv_layer_8 = torch.nn.Conv1d(64, 64, 7, Padding.Same, dilation: 3); + private torch.nn.Module conv_layer_9 = torch.nn.Conv1d(64, 64, 1, Padding.Same, dilation: 3); //shortcut + private torch.nn.Module norm_layer_1 = torch.nn.BatchNorm1d(64); + private torch.nn.Module norm_layer_2 = torch.nn.BatchNorm1d(64); + private torch.nn.Module norm_layer_3 = torch.nn.BatchNorm1d(64); //shortcut + private torch.nn.Module norm_layer_4 = torch.nn.BatchNorm1d(64); + private torch.nn.Module norm_layer_5 = torch.nn.BatchNorm1d(64); + private torch.nn.Module norm_layer_6 = torch.nn.BatchNorm1d(64); //shortcut + private torch.nn.Module norm_layer_7 = torch.nn.BatchNorm1d(64); + private torch.nn.Module norm_layer_8 = torch.nn.BatchNorm1d(64); + private torch.nn.Module norm_layer_9 = torch.nn.BatchNorm1d(64); + private torch.nn.Module term_block = torch.nn.Identity(); + private torch.nn.Module relu = torch.nn.ReLU(true); + private torch.nn.Module dropout = torch.nn.Dropout(0.01); + private torch.nn.Module flatten = torch.nn.Flatten(1); + private torch.nn.Module output = torch.nn.Linear(52 * 64, 1); + } +} diff --git a/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/ChronologerEstimator.cs b/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/ChronologerEstimator.cs new file mode 100644 index 000000000..21500433a --- /dev/null +++ b/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/ChronologerEstimator.cs @@ -0,0 +1,350 @@ +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Reflection.Metadata.Ecma335; +using System.Threading.Tasks; +using TorchSharp; +using TorchSharp.Modules; + +namespace Proteomics.RetentionTimePrediction.Chronologer.Chronologer +{ + public static class ChronologerEstimator + { + private static ChronologerModel.Chronologer ChronologerModel = new ChronologerModel.Chronologer(); + + /// + /// Uses the Chronologer model to predict C18 retention times (reported in % ACN). + /// Only modifications present in the Chronologer dictionary are supported. + /// Returns null if the sequence is not valid. + /// + /// "Carbamidomethyl on C" + /// "Oxidation on M" + /// "Glu to PyroGlu" + /// "Phosphorylation on S" + /// "Phosphorylation on T" + /// "Phosphorylation on Y" + /// "Accetylation on K" + /// "Succinylation on K" + /// "Ubiquitination on K" + /// "Methylation on K" + /// "Dimethylation on K" + /// "Trimethylation on K" + /// "Methylation on R" + /// "Dimethylation on R" + /// + /// + /// + /// + /// + public static double? PredictRetentionTime(string baseSequence, string fullSequence) + { + var tensor = Tensorize(baseSequence, fullSequence); + if (tensor is null) + return null; + + var prediction = ChronologerModel.Predict(tensor); + return prediction[0].ToDouble(); + } + + public static float[] PredictRetentionTime(string[] baseSequences, string[] fullSequences, bool gpu) + { + // TODO try catch here + torch.InitializeDeviceType(DeviceType.CUDA); + // if cuda is available, then use it bro + var device = torch.cuda_is_available() + ? new torch.Device(DeviceType.CUDA) + : new torch.Device(DeviceType.CPU); + + ChronologerModel.to(device); + + List<(Task<(torch.Tensor, bool)>, bool)> tasksRunning = new(); + + if (baseSequences.Length != fullSequences.Length) + return null; // mayber throw exception here? + + //vstack tensors and then batch predict to avoid running out of vRAM, I think system RAM transfer has big latency so keep em small + + float[] predictions = new float[baseSequences.Length]; + + if (gpu) + { + // tensorize all + torch.Tensor[] tensorsArray = new torch.Tensor[baseSequences.Length]; + bool[] compatibleTracker = new bool[baseSequences.Length]; + + Parallel.For(0, baseSequences.Length, (i, state) => + { + var baseSeq = baseSequences[i]; + var fullSeq = fullSequences[i]; + + var (tensor, compatible) = Tensorize(baseSeq, fullSeq, out bool chronologerCompatible); + if (compatible) + { + tensorsArray[i] = tensor; + compatibleTracker[i] = compatible; + } + else + { + tensorsArray[i] = torch.zeros(1, 52, torch.ScalarType.Int64); + compatibleTracker[i] = compatible; + } + }); + // vstack and split + var stackedTensors = torch.vstack(tensorsArray); + + float[] preds = new float[stackedTensors.size(0)]; + + // make batches + using var dataset = torch.utils.data.TensorDataset(stackedTensors); + using var dataLoader = torch.utils.data.DataLoader(dataset, 2048); + + var predictionHolder = new List(); + foreach (var batch in dataLoader) + { + var output = ChronologerModel.Predict(torch.vstack(batch).to(device)); + predictionHolder.AddRange(output.to(DeviceType.CPU).data()); + output.Dispose(); + } + + Parallel.For(0, preds.Length, outputIndex => + { + preds[outputIndex] = predictionHolder[outputIndex]; + }); + + //change to -1 if same index in compatibleTracker is false, else leave as is + //predictions = preds.SelectMany(x => x).ToArray(); + // return vstacked tensors as a matrix => float?[] + + for (var predictionsIndex = 0; predictionsIndex < predictions.Length; predictionsIndex++) + { + if (compatibleTracker[predictionsIndex]) + { + predictions[predictionsIndex] = predictionHolder[predictionsIndex]; + continue; + } + + predictions[predictionsIndex] = -1; + } + } + else + { + Parallel.For(0, baseSequences.Length, (i, state) => + { + var baseSeq = baseSequences[i]; + var fullSeq = fullSequences[i]; + + var (tensor, compatible) = Tensorize(baseSeq, fullSeq, out bool chronologerCompatible); + if (compatible) + { + var chronologerPrediction = ChronologerModel.Predict(tensor).data().ToArray()[0]; + predictions[i] = chronologerPrediction; + } + else + predictions[i] = -1; + }); + } + + return predictions; + } + /// + /// Takes the base sequence and the full peptide sequence and returns a tensor for the Chronologer model. + /// The base sequence is the sequence without modifications and the full peptide sequence is the sequence with modifications. + /// The model is intended to be used with sequences of length 50 or less, and only supports modifications present in the Chronologer dictionary. + /// Sequences not supported by chronologer will return null. + /// + /// + /// + /// + private static (torch.Tensor, bool) Tensorize(string baseSequence, string fullSequence, out bool chronologerCompatible) + { + // Chronologer does not support metals + if (fullSequence.Contains("Metal") || baseSequence.Contains("U") || baseSequence.Length > 50) + { + chronologerCompatible = false; + return (torch.zeros(1, 52, torch.ScalarType.Int64), chronologerCompatible); + } + + var fullSeq = fullSequence.Split(new[] { '[', ']' }) + .Where(x => !x.Equals("")).ToArray(); + + + //section to remove type of mod from the sequence + //e.g. Common Fixed:Carbamidomethyl and only stay with the target aa after the mod + for (int i = 0; i < fullSeq.Length; i++) + { + if (fullSeq[i].Contains(" ")) + { + var tempSeq = fullSeq[i].Split(':'); + fullSeq[i] = tempSeq[1]; + } + } + + if (baseSequence.Length <= 50) //Chronologer only takes sequences of length 50 or less + { + var tensor = torch.zeros(1, 52, torch.ScalarType.Int64); + + var tensorCounter = 1; //skips the first element which is the C-terminus in the tensor + char modID = ' '; //takes the target aa from inside the loop to hold it for the next loop + + bool nTerminalMod = fullSequence[0] == '['; // true if the first loop is a mod + + foreach (var subString in fullSeq) + { + //if mod, enter + if (nTerminalMod) + { + if (subString.Contains("Acetyl")) + tensor[0][0] = 39; + else + { + tensor[0][0] = 38; + } + nTerminalMod = false; //next iteration is not a mod + continue; + } + + if (!subString.Contains(" ")) + { + //without mods + for (int i = 0; i < subString.Length; i++) + { + tensor[0][tensorCounter] = ChronologerDictionary[(subString[i], "")]; + tensorCounter++; + } + + //save target aa for next loop + modID = subString[subString.Length - 1]; + } + + nTerminalMod = true; + } + + tensor[0][tensorCounter] = 44; //C-terminus + + chronologerCompatible = true; + return (tensor, chronologerCompatible); + } + + chronologerCompatible = false; + return (torch.zeros(1, 52, torch.ScalarType.Int64), chronologerCompatible); + + } + + private static torch.Tensor Tensorize(string baseSequence, string fullSequence) + { + // Chronologer does not support metals + if (fullSequence.Contains("Metal") || baseSequence.Contains("U")) + { + return null; + } + + var fullSeq = fullSequence.Split(new[] { '[', ']' }) + .Where(x => !x.Equals("")).ToArray(); + + + //section to remove type of mod from the sequence + //e.g. Common Fixed:Carbamidomethyl and only stay with the target aa after the mod + for (int i = 0; i < fullSeq.Length; i++) + { + if (fullSeq[i].Contains(" ")) + { + var tempSeq = fullSeq[i].Split(':'); + fullSeq[i] = tempSeq[1]; + } + } + + if (baseSequence.Length <= 50) //Chronologer only takes sequences of length 50 or less + { + var tensor = torch.zeros(1, 52, torch.ScalarType.Int64); + + var tensorCounter = 1; //skips the first element which is the C-terminus in the tensor + char modID = ' '; //takes the target aa from inside the loop to hold it for the next loop + + bool nTerminalMod = fullSequence[0] == '['; // true if the first loop is a mod + + foreach (var subString in fullSeq) + { + //if mod, enter + if (nTerminalMod) + { + if (subString.Contains("Acetyl")) + tensor[0][0] = 39; + else + { + tensor[0][0] = 38; + } + nTerminalMod = false; //next iteration is not a mod + continue; + } + + if (!subString.Contains(" ")) + { + //without mods + for (int i = 0; i < subString.Length; i++) + { + tensor[0][tensorCounter] = ChronologerDictionary[(subString[i], "")]; + tensorCounter++; + } + + //save target aa for next loop + modID = subString[subString.Length - 1]; + } + + nTerminalMod = true; + } + + tensor[0][tensorCounter] = 44; //C-terminus + + return tensor; + } + + return torch.zeros(1, 52, torch.ScalarType.Int64); + + } + + private static readonly Dictionary<(char, string), int> ChronologerDictionary = new() + { + { ('A', ""), 1 }, //'Alanine + { ('C', ""), 2 }, //'Cysteine + { ('D', ""), 3 }, //'Aspartate + { ('E', ""), 4 }, //'Glutamate + { ('F', ""), 5 }, //'Phenylalanine + { ('G', ""), 6 }, //'Glycine + { ('H', ""), 7 }, //'Histidine + { ('I', ""), 8 }, //'Isoleucine + { ('K', ""), 9 }, //'Lysine + { ('L', ""), 10 }, //'Leucine + { ('M', ""), 11 }, //'Methionine + { ('N', ""), 12 }, //'Asparagine + { ('P', ""), 13 }, //'Proline + { ('Q', ""), 14 }, //'Glutamine + { ('R', ""), 15 }, //'Argenine + { ('S', ""), 16 }, //'Serine + { ('T', ""), 17 }, //'Threonine + { ('V', ""), 18 }, //'Valine + { ('W', ""), 19 }, //'Tryptophane + { ('Y', ""), 20 }, //'Tyrosine + { ('C', "Carbamidomethyl on C"), 21 }, //'Carbamidomethyl + { ('M', "Oxidation on M"), 22 }, //'Oxidized + { ('E', "Glu to PyroGlu"), 24 }, //'Pyroglutamate + { ('S', "Phosphorylation on S"), 25 }, //'Phosphoserine + { ('T', "Phosphorylation on T"), 26 }, //'Phosphothreonine + { ('Y', "Phosphorylation on Y"), 27 }, //'Phosphotyrosine + { ('K', "Accetylation on K"), 28 }, //'Acetylated + { ('K', "Succinylation on K"), 29 }, //'Succinylated + { ('K', "Ubiquitination on K"), 30 }, //'Ubiquitinated + { ('K', "Methylation on K"), 31 }, //'Monomethyl + { ('K', "Dimethylation on K"), 32 }, //'Dimethyl + { ('K', "Trimethylation on K"), 33 }, //'Trimethyl + { ('R', "Methylation on R"), 34 }, //'Monomethyl + { ('R', "Dimethylation on R"), 35 }, //'Dimethyl + {('-', "Free N-terminal"), 38}, + {('^', "N-acetyl"), 39}, + {('(', "Pyro-carbamidomethyl on C"), 40}, //S-carbamidomethylcysteine + {(')', "pyroglutamate"), 41}, + {('&', "N-terminal TMT0"), 42}, + {('&', "N-terminal TMT10"), 43}, + {('_', "Free C-terminal"), 44}, + }; + } +} diff --git a/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/Chronologer_20220601193755_TorchSharp.dat b/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/Chronologer_20220601193755_TorchSharp.dat new file mode 100644 index 000000000..6c3f699a3 Binary files /dev/null and b/mzLib/Proteomics/RetentionTimePrediction/ChronologerModel/Chronologer_20220601193755_TorchSharp.dat differ diff --git a/mzLib/Test/DataFiles/ChronologerTest.tsv b/mzLib/Test/DataFiles/ChronologerTest.tsv new file mode 100644 index 000000000..0798388d1 --- /dev/null +++ b/mzLib/Test/DataFiles/ChronologerTest.tsv @@ -0,0 +1,61 @@ +Scan Retention Time PeptideModSeq Length CodedPeptideSeq PeptideLength Pred_HI tensor +108.83599 WEVPLPK 7 #NAME? 7 13.960678 "38,19,4,18,13,10,13,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +93.6172 NDISFWK 7 #NAME? 7 12.785007 "38,12,3,8,16,5,19,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +37.78191 YHEEFEK 7 #NAME? 7 3.443286 "38,20,7,4,4,5,4,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +67.09792 PVWYSPK 7 #NAME? 7 8.990113 "38,13,18,19,20,16,13,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +43.19482 LRDDFEK 7 #NAME? 7 3.831384 "38,10,15,3,3,5,4,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +86.55146 ASEETLLGISK 11 #NAME? 11 11.326381 "38,1,16,4,4,17,10,10,6,8,16,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +125.32337 NLDFGIDMDSR 11 #NAME? 11 14.913206 "38,12,10,3,5,6,8,3,11,3,16,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +149.42956 GVTYLFPIQVK 11 #NAME? 11 18.00627 "38,6,18,17,20,10,5,13,8,14,18,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +47.95872 YEEEERPNEIR 11 #NAME? 11 4.206641 "38,20,4,4,4,4,15,13,12,4,8,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +150.91338 GELALKDARNK 11 #NAME? 11 3.3232927 "38,6,4,10,1,10,9,3,1,15,12,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +42.89128 KMDETDASSAVK 12 #NAME? 12 3.176295 "38,9,11,3,4,17,3,1,16,16,1,18,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +107.05042 PGDLHVVLDMAK 12 #NAME? 12 13.099824 "38,13,6,3,10,7,18,18,10,3,11,1,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +38.40993 TGHYTLIHDHSK 12 #NAME? 12 2.9045057 "38,17,6,7,20,17,10,8,7,3,7,16,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +25.77148 KKEEEATEWQHK 12 #NAME? 12 1.8203698 "38,9,9,4,4,4,1,17,4,19,14,7,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +88.2166 HTAEEYAALLTK 12 #NAME? 12 10.685622 "38,7,17,1,4,4,20,1,1,10,10,17,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +110.53304 LSTHELTSLLEK 12 #NAME? 12 13.683952 "38,10,16,17,7,4,10,17,16,10,10,4,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +73.50859 APLYDLAAHEDK 12 #NAME? 12 9.053494 "38,1,13,10,20,3,10,1,1,7,4,3,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +182.34314 AVFDNLIQLEHLNIVK 16 #NAME? 16 19.791998 "38,1,18,5,3,12,10,8,14,10,4,7,10,12,8,18,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +180.02174 IVSLEPAYPPVFYLNK 16 #NAME? 16 19.652092 "38,8,18,16,10,4,13,1,20,13,13,18,5,20,10,12,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +137.10346 VHGLALQISENLFSNK 16 #NAME? 16 16.790295 "38,18,7,6,10,1,10,14,8,16,4,12,10,5,16,12,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +71.08137 ELFQTPGTDKPTTDEK 16 #NAME? 16 8.055657 "38,4,10,5,14,17,13,6,17,3,9,13,17,17,3,4,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +153.09166 YFLQGMGYIPSASMTR 16 #NAME? 16 17.569954 "38,20,5,10,14,6,11,6,20,8,13,16,1,16,11,17,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +125.80879 PKPGDGEFVEVISLPK 16 #NAME? 16 15.119785 "38,13,9,13,6,3,6,4,5,18,4,18,8,16,10,13,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +158.44433 PVALALQQALGQELAR 16 #NAME? 16 18.670044 "38,13,18,1,10,1,10,14,14,1,10,6,14,4,10,1,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +175.20235 IITITGTQDQIQNAQYLLQNSVK 23 #NAME? 23 18.985907 "38,8,8,17,8,17,6,17,14,3,14,8,14,12,1,14,20,10,10,14,12,16,18,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +142.14322 EQPEKEPELQQYVPQLQNNTILR 23 #NAME? 23 15.552199 "38,4,14,13,4,9,4,13,4,10,14,14,20,18,13,14,10,14,12,12,17,8,10,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +137.70484 TKPVTGNLRPEEALQALTIYEGK 23 #NAME? 23 15.73361 "38,17,9,13,18,17,6,12,10,15,13,4,4,1,10,14,1,10,17,8,20,4,6,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +164.13882 TQIAPGSQTVLGIGPGPADLIDK 23 #NAME? 23 17.892689 "38,17,14,8,1,13,6,16,14,17,18,10,6,8,6,13,6,13,1,3,10,8,3,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +166.74247 NVFIIGATNRPDIIDPAILRPGR 23 #NAME? 23 17.285833 "38,12,18,5,8,8,6,1,17,12,15,13,3,8,8,3,13,1,8,10,15,13,6,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +109.69239 QTTSNLGHLNKPSIQALIHGLNR 23 #NAME? 23 13.654015 "38,14,17,17,16,12,10,6,7,10,12,9,13,16,8,14,1,10,8,7,6,10,12,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +137.41181 DALPEYSTFDVNMKPVVQEPNQK 23 #NAME? 23 14.910251 "38,3,1,10,13,4,20,16,17,5,3,18,12,11,9,13,18,18,14,4,13,12,14,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +145.00728 VTDFGDKVEDPTFLNQLQSGVNR 23 #NAME? 23 15.928329 "38,18,17,3,5,6,3,9,18,4,3,13,17,5,10,12,14,10,14,16,6,18,12,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +173.17504 SPASIEVVKPMEAASAILSQADAR 24 #NAME? 24 19.053755 "38,16,13,1,16,8,4,18,18,9,13,11,4,1,1,16,1,8,10,16,14,1,3,1,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +155.55159 LHGSVGGAQNLSALGALVSLSNAR 24 #NAME? 24 18.21119 "38,10,7,6,16,18,6,6,1,14,12,10,16,1,10,6,1,10,18,16,10,16,12,1,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +176.86138 GHNGWVTQIATTPQFPDMILSASR 24 #NAME? 24 19.318283 "38,6,7,12,6,19,18,17,14,8,1,17,17,13,14,5,13,3,11,8,10,16,1,16,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +173.66681 GTAFVTLLNGEQAEAAINAFHQSR 24 #NAME? 24 19.24739 "38,6,17,1,5,18,17,10,10,12,6,4,14,1,4,1,1,8,12,1,5,7,14,16,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +173.98302 EETVLATVQALQTASHLSQQADLR 24 #NAME? 24 19.776756 "38,4,4,17,18,10,1,17,18,14,1,10,14,17,1,16,7,10,16,14,14,1,3,10,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +176.74885 VEGSFPVTMLPGDGVGPELMHAVK 24 #NAME? 24 18.35488 "38,18,4,6,16,5,13,18,17,11,10,13,6,3,6,18,6,13,4,10,11,7,1,18,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +115.95717 GGPGSAVSPYPTFNPSSDVAALHK 24 #NAME? 24 13.369981 "38,6,6,13,6,16,1,18,16,13,20,13,17,5,12,13,16,16,3,18,1,1,10,7,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +182.76703 IFDANTKPNLNLQVLSNPEFLAEGTAIK 28 #NAME? 28 19.720667 "38,8,5,3,1,12,17,9,13,12,10,12,10,14,18,10,16,12,13,4,5,10,1,4,6,17,1,8,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +159.48667 GGKPGLTIQAPQLEVSVPSANIEGLEGK 28 #NAME? 28 17.118069 "38,6,6,9,13,6,10,17,8,14,1,13,14,10,4,18,16,18,13,16,1,12,8,4,6,10,4,6,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +167.25379 TATSLAEGLSLVVSPDSIHSVAPENEGR 28 #NAME? 28 17.779745 "38,17,1,17,16,10,1,4,6,10,16,10,18,18,16,13,3,16,8,7,16,18,1,13,4,12,4,6,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +188.12658 ASFITPVPGGVGPMTVAMLMQSTVESAK 28 #NAME? 28 24.750246 "38,1,16,5,8,17,13,18,13,6,6,18,6,13,11,17,18,1,11,10,11,14,16,17,18,4,16,1,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +170.65255 LNDHFPLVVWQTGSGTQTNMNVNEVISNR 29 #NAME? 29 18.282558 "38,10,12,3,7,5,13,10,18,18,19,14,17,6,16,6,17,14,17,12,11,12,18,12,4,18,8,16,12,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +48.45603 NYQQNYQNSESGEKNEGSESAPEGQAQQR 29 #NAME? 29 3.7175636 "38,12,20,14,14,12,20,14,12,16,4,16,6,4,9,12,4,6,16,4,16,1,13,4,6,14,1,14,14,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +186.62032 VGSAADIPINISETDLSLLTATVVPPSGR 29 #NAME? 29 23.47134 "38,18,6,16,1,1,3,8,13,8,12,8,16,4,17,3,10,16,10,10,17,1,17,18,18,13,13,16,6,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +154.89077 MITEGGVSINHQQVTNPESVLIVGQHILK 29 #NAME? 29 16.894493 "38,11,8,17,4,6,6,18,16,8,12,7,14,14,18,17,12,13,4,16,18,10,8,18,6,14,7,8,10,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +187.34935 TVPPAVTGITFLSGGQSEEEASINLNAINK 30 #NAME? 30 19.722681 "38,17,18,13,13,1,18,17,6,8,17,5,10,16,6,6,14,16,4,4,4,1,16,8,12,10,12,1,8,12,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +176.23769 HIADLAGNSEVILPVPAFNVINGGSHAGNK 30 #NAME? 30 18.094807 "38,7,8,1,3,10,1,6,12,16,4,18,8,10,13,18,13,1,5,12,18,8,12,6,6,16,7,1,6,12,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +134.15584 SIFGEDALANVSIEKPIHQGPDAAVTGHIR 30 #NAME? 30 14.156002 "38,16,8,5,6,4,3,1,10,1,12,18,16,8,4,9,13,8,7,14,6,13,3,1,1,18,17,6,7,8,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +155.24173 GIVVTAYSPLGSPDRPWAKPEDPSLLEDPR 30 #NAME? 30 15.98456 "38,6,8,18,18,17,1,20,16,13,10,6,16,13,3,15,13,19,1,9,13,4,3,13,16,10,10,4,3,13,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +166.86611 TTGIVMDSGDGVTHTVPIYEGYALPHAILR 30 #NAME? 30 17.309807 "38,17,17,6,8,18,11,3,16,6,3,6,18,17,7,17,18,13,8,20,4,6,20,1,10,13,7,1,8,10,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +146.32255 LNSVQSSERPLFLVHPIEGSTTVFHSLASR 30 #NAME? 30 16.193262 "38,10,12,16,18,14,16,16,4,15,13,10,5,10,18,7,13,8,4,6,16,17,17,18,5,7,16,10,1,16,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +168.21397 KYTLPPGVDPTQVSSSLSPEGTLTVEAPMPK 31 #NAME? 31 17.313858 "38,9,20,17,10,13,13,6,18,3,13,17,14,18,16,16,16,10,16,13,4,6,17,10,17,18,4,1,13,11,13,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +155.46676 GVNIGGAGSYIYEKPLAEGPQVTGPIEVPAAR 32 #NAME? 32 16.497305 "38,6,18,12,8,6,6,1,6,16,20,8,20,4,9,13,10,1,4,6,13,14,18,17,6,13,8,4,18,13,1,1,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +168.14419 KAPGFGGFGSSAVSGGSTAAMITETIIETDKPK 33 #NAME? 33 19.21968 "38,9,1,13,6,5,6,6,5,6,16,16,1,18,16,6,6,16,17,1,1,11,8,17,4,17,8,8,4,17,3,9,13,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +105.34531 LASVPAGGAVAVSAAPGSAAPAAGSAPAAAEEK 33 #NAME? 33 11.359548 "38,10,1,16,18,13,1,6,6,1,18,1,18,16,1,1,13,6,16,1,1,13,1,1,6,16,1,13,1,1,1,4,4,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +165.35605 TPITQGTGVNFPIGEIPSQPYYHDMNSGVNLQR 33 #NAME? 33 17.30559 "38,17,13,8,17,14,6,17,6,18,12,5,13,8,6,4,8,13,16,14,13,20,20,7,3,11,12,16,6,18,12,10,14,15,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +40.22757 TDNAGDQHGGGGGGGGGAGAAGGGGGGENYDDPHK 35 #NAME? 35 2.4377463 "38,17,3,12,1,6,3,14,7,6,6,6,6,6,6,6,6,6,1,6,1,1,6,6,6,6,6,6,4,12,20,3,3,13,7,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0" +42.99374 LKTDNAGDQHGGGGGGGGGAGAAGGGGGGENYDDPHK 37 #NAME? 37 2.8192496 "38,10,9,17,3,12,1,6,3,14,7,6,6,6,6,6,6,6,6,6,1,6,1,1,6,6,6,6,6,6,4,12,20,3,3,13,7,9,44,0,0,0,0,0,0,0,0,0,0,0,0,0" diff --git a/mzLib/Test/Test.csproj b/mzLib/Test/Test.csproj index 29a7964d4..d2baf75da 100644 --- a/mzLib/Test/Test.csproj +++ b/mzLib/Test/Test.csproj @@ -13,11 +13,13 @@ + + @@ -285,6 +287,9 @@ Always + + PreserveNewest + PreserveNewest diff --git a/mzLib/Test/TestRetentionTimePrediction.cs b/mzLib/Test/TestRetentionTimePrediction.cs index fb197279d..48483b66c 100644 --- a/mzLib/Test/TestRetentionTimePrediction.cs +++ b/mzLib/Test/TestRetentionTimePrediction.cs @@ -1,9 +1,18 @@ -using NUnit.Framework; +using CsvHelper; +using CsvHelper.Configuration; +using CsvHelper.Configuration.Attributes; +using CsvHelper.TypeConversion; +using NUnit.Framework; using Proteomics; using Proteomics.ProteolyticDigestion; using Proteomics.RetentionTimePrediction; using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; +using Proteomics.RetentionTimePrediction.ChronologerModel; +using TorchSharp; using Stopwatch = System.Diagnostics.Stopwatch; namespace Test @@ -56,543 +65,543 @@ public TestRetentionTimePrediction() //original peptide values were not reproduced; values found at implementation were used below _peptides300A = new object[,] { - {"LVEYR", 10.69}, - {"EVQPGR", 3.92}, - {"NQYLR", 10.39}, - {"HREER", 1.95}, - {"YQYQR", 5.68}, - {"NNEVQR", 3.77}, - {"NPFLFK", 27.33}, - {"EDPEER", 2.79}, - {"YETIEK", 8.39}, - {"NEQQER", 0.99}, - {"SSESQER", 1.34}, - {"EGEEEER", 2.06}, - {"EQIEELK", 14.34}, - {"NSYNLER", 11.59}, - {"QEDEEEK", 0.85}, - {"RNPFLFK", 28.86}, - {"REDPEER", 3.49}, - {"FEAFDLAK", 29.13}, - {"GNLELLGLK", 32.08}, - {"QEGEKEEK", 0.88}, - {"LFEITPEK", 24.2}, - {"VLLEEQEK", 17.1}, - {"EQIEELKK", 13.61}, - {"EKEDEEEK", 1.2}, - {"SHKPEYSNK", 6.08}, - {"LFEITPEKK", 22.79}, - {"EEDEEEGQR", 1.89}, - {"AIVVLLVNEGK", 32.71}, - {"QEDEEEKQK", 0.66}, - {"NILEASYNTR", 20.09}, - {"AILTVLSPNDR", 29.18}, - {"QQGEETDAIVK", 12.18}, - {"VLLEEQEKDR", 17.24}, - {"HGEWRPSYEK", 16.5}, - {"LVDLVIPVNGPGK", 31.14}, - {"RQQGEETDAIVK", 13.14}, - {"QSHFANAEPEQK", 11.27}, - {"SDLFENLQNYR", 30.44}, - {"SLPSEFEPINLR", 33.12}, - {"RHGEWRPSYEK", 16.4}, - {"ELTFPGSVQEINR", 28.46}, - {"KSLPSEFEPINLR", 32.53}, - {"RSDLFENLQNYR", 29.38}, - {"EEDEEQVDEEWR", 20.02}, - {"WEREEDEEQVDEEWR", 27.02}, - {"NFLSGSDDNVISQIENPVK", 34.63}, - {"LPAGTTSYLVNQDDEEDLR", 31.49}, - {"HGEWRPSYEKQEDEEEK", 17.96}, - {"HGEWRPSYEKEEDEEEGQR", 19.54}, - {"AKPHTIFLPQHIDADLILVVLSGK", 51.49}, - {"LPAGTTSYLVNQDDEEDLRLVDLVIPVNGPGK", 48.93}, - {"LSPGDVVIIPAGHPVAITASSNLNLLGFGINAENNER", 48.29}, - {"FDQR", 4.38}, - {"LLEYK", 14.65}, - {"ILENQK", 7.41}, - {"QVQNYK", 4.12}, - {"NSFNLER", 17.38}, - {"DSFNLER", 17.4}, - {"DDNEELR", 7.78}, - {"GQIEELSK", 14.38}, - {"VLLEEHEK", 16.5}, - {"FFEITPEK", 26.34}, - {"GDFELVGQR", 22.76}, - {"NENQQEQR", 0.39}, - {"GPIYSNEFGK", 21.85}, - {"AIVIVTVNEGK", 25.07}, - {"SDPQNPFIFK", 27.71}, - {"IFENLQNYR", 24.28}, - {"AILTVLKPDDR", 28.26}, - {"LPAGTIAYLVNR", 29.86}, - {"QQSQEENVIVK", 14.4}, - {"SVSSESEPFNLR", 23.84}, - {"SRGPIYSNEFGK", 21.2}, - {"EGSLLLPHYNSR", 26.13}, - {"QSHFADAQPQQR", 11.06}, - {"ELAFPGSAQEVDR", 24.71}, - {"RQQSQEENVIVK", 15.42}, - {"KSVSSESEPFNLR", 23.77}, - {"FQTLFENENGHIR", 28.5}, - {"VLLEEHEKETQHR", 16.28}, - {"NILEASFNTDYEEIEK", 35.62}, - {"KEDDEEEEQGEEEINK", 11.09}, - {"NPQLQDLDIFVNSVEIK", 42.27}, - {"ASSNLDLLGFGINAENNQR", 37.00}, - {"AILTVLKPDDRNSFNLER", 37.94}, - {"NFLAGDEDNVISQVQRPVK", 33.85}, - {"SKPHTIFLPQHTDADYILVVLSGK", 45.74}, - {"FFEITPEKNPQLQDLDIFVNSVEIK", 51.59}, - {"QVQLYR", 12.93}, - {"NPIYSNK", 9.96}, - {"DDNEDLR", 7.55}, - {"EQIEELSK", 14.5}, - {"SRNPIYSNK", 10.29}, - {"AIVIVTVTEGK", 26.18}, - {"SDQENPFIFK", 26.95}, - {"LPAGTIAYLANR", 27.05}, - {"SVSSESGPFNLR", 22.76}, - {"QEINEENVIVK", 21.36}, - {"EGSLLLPNYNSR", 26.4}, - {"QSYFANAQPLQR", 23.73}, - {"ELAFPGSSHEVDR", 22.94}, - {"RQEINEENVIVK", 22.8}, - {"FQTLYENENGHIR", 24.55}, - {"VLLEQQEQEPQHR", 19.09}, - {"NILEAAFNTNYEEIEK", 37.13}, - {"NQQLQDLDIFVNSVDIK", 41.34}, - {"LPAGTIAYLANRDDNEDLR", 33.2}, - {"NFLAGEEDNVISQVERPVK", 34.14}, - {"SKPHTLFLPQYTDADFILVVLSGK", 52.8}, - {"VLDLAIPVNKPGQLQSFLLSGTQNQPSLLSGFSK", 51.34}, - {"LSPGDVFVIPAGHPVAINASSDLNLIGFGINAENNER", 48.61}, - {"SFLPSK", 17.38}, - {"EGLTFR", 17.83}, - {"TILFLK", 30.69}, - {"NLFEGGIK", 24.01}, - {"DKPWWPK", 24.74}, - {"DENFGHLK", 15.61}, - {"FTPPHVIR", 23.05}, - {"DSSSPYGLR", 14.92}, - {"SSDFLAYGIK", 28.65}, - {"NNDPSLYHR", 14.24}, - {"QLSVVHPINK", 21.28}, - {"ENPHWTSDSK", 10.92}, - {"NDSELQHWWK", 27.18}, - {"SYLPSETPSPLVK", 28.38}, - {"EIFRTDGEQVLK", 26.5}, - {"SNLDPAEYGDHTSK", 14.78}, - {"SLTLEDVPNHGTIR", 26.63}, - {"LPLDVISTLSPLPVVK", 44.43}, - {"DPNSEKPATETYVPR", 16.41}, - {"VGPVQLPYTLLHPSSK", 33.89}, - {"FQTLIDLSVIEILSR", 56.36}, - {"YWVFTDQALPNDLIK", 40.64}, - {"KDPNSEKPATETYVPR", 15.78}, - {"LFILDYHDTFIPFLR", 53.07}, - {"VILPADEGVESTIWLLAK", 44.06}, - {"SLSDR", 4.42}, - {"ATLQR", 5.84}, - {"YRDR", 2.75}, - {"HIVDR", 8.12}, - {"FLVPAR", 20.89}, - {"SNNPFK", 9.3}, - {"FSYVAFK", 25.59}, - {"LDALEPDNR", 18.08}, - {"LSAEHGSLHK", 10.95}, - {"GEEEEEDKK", 1.31}, - {"GGLSIISPPEK", 24.34}, - {"QEEDEDEEK", 1.39}, - {"TVTSLDLPVLR", 31.92}, - {"ALTVPQNYAVAAK", 22.3}, - {"QEEEEDEDEER", 4.3}, - {"QEEDEDEEKQPR", 3.67}, - {"EQPQQNECQLER", 10.01}, - {"QEQENEGNNIFSGFK", 24.49}, - {"IESEGGLIETWNPNNK", 30.54}, - {"QEEEEDEDEERQPR", 5.81}, - {"LNIGPSSSPDIYNPEAGR", 26.82}, - {"LAGTSSVINNLPLDVVAATFNLQR", 44.9}, - {"FYLAGNHEQEFLQYQHQQGGK", 32.37}, - {"RFYLAGNHEQEFLQYQHQQGGK", 32.44}, - {"IEKEDVR", 7.69}, - {"VDEVFER", 18.12}, - {"GIIGLVAEDR", 28.64}, - {"QYDEEDKR", 3.82}, - {"EVAFDIAAEK", 27.09}, - {"SLWPFGGPFK", 35.79}, - {"FNLEEGDIMR", 28.00}, - {"GELETVLDEQK", 23.2}, - {"KSLWPFGGPFK", 35.46}, - {"KPESVLNTFSSK", 23.26}, - {"KSSISYHNINAK", 15.73}, - {"FGSLFEVGPSQEK", 29.86}, - {"NIENYGLAVLEIK", 35.3}, - {"EEFFFPYDNEER", 32.62}, - {"SPFNIFSNNPAFSNK", 32.81}, - {"KEEFFFPYDNEER", 32.72}, - {"EVAFDIAAEKVDEVFER", 44.39}, - {"ANAFLSPHHYDSEAILFNIK", 42.2}, - {"LYIAAFHMPPSSGSAPVNLEPFFESAGR", 44.37}, - {"EHEEEEEQEQEEDENPYVFEDNDFETK", 29.16}, - {"HKEHEEEEEQEQEEDENPYVFEDNDFETK", 26.5}, - {"QHEPR", 2.44}, - {"SPQDER", 1.8}, - {"RQQQQR", 1.77}, - {"IVNSEGNK", 5.04}, - {"HSQVAQIK", 10.92}, - {"LRSPQDER", 6.02}, - {"GDLYNSGAGR", 12.19}, - {"LSAEYVLLYR", 32.5}, - {"AAVSHVNQVFR", 23.14}, - {"ATPGEVLANAFGLR", 33.49}, - {"ISTVNSLTLPILR", 37.05}, - {"KEEEEEEQEQR", 4.03}, - {"HSEKEEEDEDEPR", 5.94}, - {"KEDEDEDEEEEEER", 6.39}, - {"GVLGLAVPGCPETYEEPR", 33.41}, - {"VFYLGGNPEIEFPETQQK", 37.06}, - {"VESEAGLTETWNPNHPELK", 31.39}, - {"VEDGLHIISPELQEEEEQSHSQR", 28.77}, - {"TIDPNGLHLPSYSPSPQLIFIIQGK", 45.07}, - {"GGQQQEEESEEQNEGNSVLSGFNVEFLAHSLNTK", 37.57}, - {"RGGQQQEEESEEQNEGNSVLSGFNVEFLAHSLNTK", 36.99}, - {"ALEAFK", 16.38}, - {"TFLWGR", 26.93}, - {"NEPWWPK", 25.98}, - {"LLYPHYR", 22.29}, - {"SDYVYLPR", 25.01}, - {"EEELNNLR", 15.37}, - {"GSAEFEELVK", 26.15}, - {"SSDFLTYGLK", 29.89}, - {"ELVEVGHGDKK", 14.09}, - {"DNPNWTSDKR", 11.67}, - {"HASDELYLGER", 21.11}, - {"LPTNILSQISPLPVLK", 43.3}, - {"NWVFTEQALPADLIK", 40.97}, - {"FQTLIDLSVIEILSR", 56.36}, - {"EHLEPNLEGLTVEEAIQNK", 36.57}, - {"ATFLEGIISSLPTLGAGQSAFK", 52.05}, - {"IFFANQTYLPSETPAPLVHYR", 43.17}, - {"IYDYDVYNDLGNPDSGENHARPVLGGSETYPYPR", 36.67}, - {"SQIVR", 8.97}, - {"VEGGLR", 8.67}, - {"SEFDR", 7.5}, - {"HSYPVGR", 10.87}, - {"EQSHSHSHR", -0.82}, - {"TANSLTLPVLR", 29.66}, - {"AAVSHVQQVLR", 23.22}, - {"ENIADAAGADLYNPR", 27.31}, - {"EEEEEEEEDEEKQR", 5.84}, - {"IRENIADAAGADLYNPR", 28.95}, - {"VESEAGLTETWNPNNPELK", 31.91}, - {"VFYLGGNPETEFPETQEEQQGR", 32.3}, - {"TIDPNGLHLPSFSPSPQLIFIIQGK", 48.01}, - {"GQLVVVPQNFVVAEQAGEEEGLEYVVFK", 48.85}, - {"KGQLVVVPQNFVVAEQAGEEEGLEYVVFK", 47.37}, - {"LLENQK", 8.32}, - {"QIEELSK", 12.03}, - {"NQVQSYK", 6.05}, - {"FFEITPK", 25.11}, - {"NENQQGLR", 6.3}, - {"KQIEELSK", 13.2}, - {"ILLEEHEK", 18.62}, - {"EEDDEEEEQR", 4.04}, - {"DLTFPGSAQEVDR", 24.13}, - {"QSYFANAQPQQR", 15.52}, - {"ILLEEHEKETHHR", 17.28}, - {"NFLAGEEDNVISQIQK", 32.48}, - {"LTPGDVFVIPAGHPVAVR", 37.28}, - {"EEDDEEEEQREEETK", 5.89}, - {"ASSNLNLLGFGINAENNQR", 35.42}, - {"NPQLQDLDIFVNYVEIK", 46.41}, - {"KNPQLQDLDIFVNYVEIK", 45.53}, - {"NENQQGLREEDDEEEEQR", 10.37}, - {"GDQYAR", 3.5}, - {"GDYYAR", 7.6}, - {"EVYLFK", 24.15}, - {"GKEVYLFK", 25.17}, - {"VLYGPTPVR", 23.15}, - {"TGYINAAFR", 23.93}, - {"TNEVYFFK", 28.18}, - {"TLDYWPSLR", 32.85}, - {"KTLDYWPSLR", 32.13}, - {"VLYGPTPVRDGFK", 27.02}, - {"YVLLDYAPGTSNDK", 31.2}, - {"SSQNNEAYLFINDK", 26.36}, - {"NTIFESGTDAAFASHK", 26.97}, + { "LVEYR", 10.69 }, + { "EVQPGR", 3.92 }, + { "NQYLR", 10.39 }, + { "HREER", 1.95 }, + { "YQYQR", 5.68 }, + { "NNEVQR", 3.77 }, + { "NPFLFK", 27.33 }, + { "EDPEER", 2.79 }, + { "YETIEK", 8.39 }, + { "NEQQER", 0.99 }, + { "SSESQER", 1.34 }, + { "EGEEEER", 2.06 }, + { "EQIEELK", 14.34 }, + { "NSYNLER", 11.59 }, + { "QEDEEEK", 0.85 }, + { "RNPFLFK", 28.86 }, + { "REDPEER", 3.49 }, + { "FEAFDLAK", 29.13 }, + { "GNLELLGLK", 32.08 }, + { "QEGEKEEK", 0.88 }, + { "LFEITPEK", 24.2 }, + { "VLLEEQEK", 17.1 }, + { "EQIEELKK", 13.61 }, + { "EKEDEEEK", 1.2 }, + { "SHKPEYSNK", 6.08 }, + { "LFEITPEKK", 22.79 }, + { "EEDEEEGQR", 1.89 }, + { "AIVVLLVNEGK", 32.71 }, + { "QEDEEEKQK", 0.66 }, + { "NILEASYNTR", 20.09 }, + { "AILTVLSPNDR", 29.18 }, + { "QQGEETDAIVK", 12.18 }, + { "VLLEEQEKDR", 17.24 }, + { "HGEWRPSYEK", 16.5 }, + { "LVDLVIPVNGPGK", 31.14 }, + { "RQQGEETDAIVK", 13.14 }, + { "QSHFANAEPEQK", 11.27 }, + { "SDLFENLQNYR", 30.44 }, + { "SLPSEFEPINLR", 33.12 }, + { "RHGEWRPSYEK", 16.4 }, + { "ELTFPGSVQEINR", 28.46 }, + { "KSLPSEFEPINLR", 32.53 }, + { "RSDLFENLQNYR", 29.38 }, + { "EEDEEQVDEEWR", 20.02 }, + { "WEREEDEEQVDEEWR", 27.02 }, + { "NFLSGSDDNVISQIENPVK", 34.63 }, + { "LPAGTTSYLVNQDDEEDLR", 31.49 }, + { "HGEWRPSYEKQEDEEEK", 17.96 }, + { "HGEWRPSYEKEEDEEEGQR", 19.54 }, + { "AKPHTIFLPQHIDADLILVVLSGK", 51.49 }, + { "LPAGTTSYLVNQDDEEDLRLVDLVIPVNGPGK", 48.93 }, + { "LSPGDVVIIPAGHPVAITASSNLNLLGFGINAENNER", 48.29 }, + { "FDQR", 4.38 }, + { "LLEYK", 14.65 }, + { "ILENQK", 7.41 }, + { "QVQNYK", 4.12 }, + { "NSFNLER", 17.38 }, + { "DSFNLER", 17.4 }, + { "DDNEELR", 7.78 }, + { "GQIEELSK", 14.38 }, + { "VLLEEHEK", 16.5 }, + { "FFEITPEK", 26.34 }, + { "GDFELVGQR", 22.76 }, + { "NENQQEQR", 0.39 }, + { "GPIYSNEFGK", 21.85 }, + { "AIVIVTVNEGK", 25.07 }, + { "SDPQNPFIFK", 27.71 }, + { "IFENLQNYR", 24.28 }, + { "AILTVLKPDDR", 28.26 }, + { "LPAGTIAYLVNR", 29.86 }, + { "QQSQEENVIVK", 14.4 }, + { "SVSSESEPFNLR", 23.84 }, + { "SRGPIYSNEFGK", 21.2 }, + { "EGSLLLPHYNSR", 26.13 }, + { "QSHFADAQPQQR", 11.06 }, + { "ELAFPGSAQEVDR", 24.71 }, + { "RQQSQEENVIVK", 15.42 }, + { "KSVSSESEPFNLR", 23.77 }, + { "FQTLFENENGHIR", 28.5 }, + { "VLLEEHEKETQHR", 16.28 }, + { "NILEASFNTDYEEIEK", 35.62 }, + { "KEDDEEEEQGEEEINK", 11.09 }, + { "NPQLQDLDIFVNSVEIK", 42.27 }, + { "ASSNLDLLGFGINAENNQR", 37.00 }, + { "AILTVLKPDDRNSFNLER", 37.94 }, + { "NFLAGDEDNVISQVQRPVK", 33.85 }, + { "SKPHTIFLPQHTDADYILVVLSGK", 45.74 }, + { "FFEITPEKNPQLQDLDIFVNSVEIK", 51.59 }, + { "QVQLYR", 12.93 }, + { "NPIYSNK", 9.96 }, + { "DDNEDLR", 7.55 }, + { "EQIEELSK", 14.5 }, + { "SRNPIYSNK", 10.29 }, + { "AIVIVTVTEGK", 26.18 }, + { "SDQENPFIFK", 26.95 }, + { "LPAGTIAYLANR", 27.05 }, + { "SVSSESGPFNLR", 22.76 }, + { "QEINEENVIVK", 21.36 }, + { "EGSLLLPNYNSR", 26.4 }, + { "QSYFANAQPLQR", 23.73 }, + { "ELAFPGSSHEVDR", 22.94 }, + { "RQEINEENVIVK", 22.8 }, + { "FQTLYENENGHIR", 24.55 }, + { "VLLEQQEQEPQHR", 19.09 }, + { "NILEAAFNTNYEEIEK", 37.13 }, + { "NQQLQDLDIFVNSVDIK", 41.34 }, + { "LPAGTIAYLANRDDNEDLR", 33.2 }, + { "NFLAGEEDNVISQVERPVK", 34.14 }, + { "SKPHTLFLPQYTDADFILVVLSGK", 52.8 }, + { "VLDLAIPVNKPGQLQSFLLSGTQNQPSLLSGFSK", 51.34 }, + { "LSPGDVFVIPAGHPVAINASSDLNLIGFGINAENNER", 48.61 }, + { "SFLPSK", 17.38 }, + { "EGLTFR", 17.83 }, + { "TILFLK", 30.69 }, + { "NLFEGGIK", 24.01 }, + { "DKPWWPK", 24.74 }, + { "DENFGHLK", 15.61 }, + { "FTPPHVIR", 23.05 }, + { "DSSSPYGLR", 14.92 }, + { "SSDFLAYGIK", 28.65 }, + { "NNDPSLYHR", 14.24 }, + { "QLSVVHPINK", 21.28 }, + { "ENPHWTSDSK", 10.92 }, + { "NDSELQHWWK", 27.18 }, + { "SYLPSETPSPLVK", 28.38 }, + { "EIFRTDGEQVLK", 26.5 }, + { "SNLDPAEYGDHTSK", 14.78 }, + { "SLTLEDVPNHGTIR", 26.63 }, + { "LPLDVISTLSPLPVVK", 44.43 }, + { "DPNSEKPATETYVPR", 16.41 }, + { "VGPVQLPYTLLHPSSK", 33.89 }, + { "FQTLIDLSVIEILSR", 56.36 }, + { "YWVFTDQALPNDLIK", 40.64 }, + { "KDPNSEKPATETYVPR", 15.78 }, + { "LFILDYHDTFIPFLR", 53.07 }, + { "VILPADEGVESTIWLLAK", 44.06 }, + { "SLSDR", 4.42 }, + { "ATLQR", 5.84 }, + { "YRDR", 2.75 }, + { "HIVDR", 8.12 }, + { "FLVPAR", 20.89 }, + { "SNNPFK", 9.3 }, + { "FSYVAFK", 25.59 }, + { "LDALEPDNR", 18.08 }, + { "LSAEHGSLHK", 10.95 }, + { "GEEEEEDKK", 1.31 }, + { "GGLSIISPPEK", 24.34 }, + { "QEEDEDEEK", 1.39 }, + { "TVTSLDLPVLR", 31.92 }, + { "ALTVPQNYAVAAK", 22.3 }, + { "QEEEEDEDEER", 4.3 }, + { "QEEDEDEEKQPR", 3.67 }, + { "EQPQQNECQLER", 10.01 }, + { "QEQENEGNNIFSGFK", 24.49 }, + { "IESEGGLIETWNPNNK", 30.54 }, + { "QEEEEDEDEERQPR", 5.81 }, + { "LNIGPSSSPDIYNPEAGR", 26.82 }, + { "LAGTSSVINNLPLDVVAATFNLQR", 44.9 }, + { "FYLAGNHEQEFLQYQHQQGGK", 32.37 }, + { "RFYLAGNHEQEFLQYQHQQGGK", 32.44 }, + { "IEKEDVR", 7.69 }, + { "VDEVFER", 18.12 }, + { "GIIGLVAEDR", 28.64 }, + { "QYDEEDKR", 3.82 }, + { "EVAFDIAAEK", 27.09 }, + { "SLWPFGGPFK", 35.79 }, + { "FNLEEGDIMR", 28.00 }, + { "GELETVLDEQK", 23.2 }, + { "KSLWPFGGPFK", 35.46 }, + { "KPESVLNTFSSK", 23.26 }, + { "KSSISYHNINAK", 15.73 }, + { "FGSLFEVGPSQEK", 29.86 }, + { "NIENYGLAVLEIK", 35.3 }, + { "EEFFFPYDNEER", 32.62 }, + { "SPFNIFSNNPAFSNK", 32.81 }, + { "KEEFFFPYDNEER", 32.72 }, + { "EVAFDIAAEKVDEVFER", 44.39 }, + { "ANAFLSPHHYDSEAILFNIK", 42.2 }, + { "LYIAAFHMPPSSGSAPVNLEPFFESAGR", 44.37 }, + { "EHEEEEEQEQEEDENPYVFEDNDFETK", 29.16 }, + { "HKEHEEEEEQEQEEDENPYVFEDNDFETK", 26.5 }, + { "QHEPR", 2.44 }, + { "SPQDER", 1.8 }, + { "RQQQQR", 1.77 }, + { "IVNSEGNK", 5.04 }, + { "HSQVAQIK", 10.92 }, + { "LRSPQDER", 6.02 }, + { "GDLYNSGAGR", 12.19 }, + { "LSAEYVLLYR", 32.5 }, + { "AAVSHVNQVFR", 23.14 }, + { "ATPGEVLANAFGLR", 33.49 }, + { "ISTVNSLTLPILR", 37.05 }, + { "KEEEEEEQEQR", 4.03 }, + { "HSEKEEEDEDEPR", 5.94 }, + { "KEDEDEDEEEEEER", 6.39 }, + { "GVLGLAVPGCPETYEEPR", 33.41 }, + { "VFYLGGNPEIEFPETQQK", 37.06 }, + { "VESEAGLTETWNPNHPELK", 31.39 }, + { "VEDGLHIISPELQEEEEQSHSQR", 28.77 }, + { "TIDPNGLHLPSYSPSPQLIFIIQGK", 45.07 }, + { "GGQQQEEESEEQNEGNSVLSGFNVEFLAHSLNTK", 37.57 }, + { "RGGQQQEEESEEQNEGNSVLSGFNVEFLAHSLNTK", 36.99 }, + { "ALEAFK", 16.38 }, + { "TFLWGR", 26.93 }, + { "NEPWWPK", 25.98 }, + { "LLYPHYR", 22.29 }, + { "SDYVYLPR", 25.01 }, + { "EEELNNLR", 15.37 }, + { "GSAEFEELVK", 26.15 }, + { "SSDFLTYGLK", 29.89 }, + { "ELVEVGHGDKK", 14.09 }, + { "DNPNWTSDKR", 11.67 }, + { "HASDELYLGER", 21.11 }, + { "LPTNILSQISPLPVLK", 43.3 }, + { "NWVFTEQALPADLIK", 40.97 }, + { "FQTLIDLSVIEILSR", 56.36 }, + { "EHLEPNLEGLTVEEAIQNK", 36.57 }, + { "ATFLEGIISSLPTLGAGQSAFK", 52.05 }, + { "IFFANQTYLPSETPAPLVHYR", 43.17 }, + { "IYDYDVYNDLGNPDSGENHARPVLGGSETYPYPR", 36.67 }, + { "SQIVR", 8.97 }, + { "VEGGLR", 8.67 }, + { "SEFDR", 7.5 }, + { "HSYPVGR", 10.87 }, + { "EQSHSHSHR", -0.82 }, + { "TANSLTLPVLR", 29.66 }, + { "AAVSHVQQVLR", 23.22 }, + { "ENIADAAGADLYNPR", 27.31 }, + { "EEEEEEEEDEEKQR", 5.84 }, + { "IRENIADAAGADLYNPR", 28.95 }, + { "VESEAGLTETWNPNNPELK", 31.91 }, + { "VFYLGGNPETEFPETQEEQQGR", 32.3 }, + { "TIDPNGLHLPSFSPSPQLIFIIQGK", 48.01 }, + { "GQLVVVPQNFVVAEQAGEEEGLEYVVFK", 48.85 }, + { "KGQLVVVPQNFVVAEQAGEEEGLEYVVFK", 47.37 }, + { "LLENQK", 8.32 }, + { "QIEELSK", 12.03 }, + { "NQVQSYK", 6.05 }, + { "FFEITPK", 25.11 }, + { "NENQQGLR", 6.3 }, + { "KQIEELSK", 13.2 }, + { "ILLEEHEK", 18.62 }, + { "EEDDEEEEQR", 4.04 }, + { "DLTFPGSAQEVDR", 24.13 }, + { "QSYFANAQPQQR", 15.52 }, + { "ILLEEHEKETHHR", 17.28 }, + { "NFLAGEEDNVISQIQK", 32.48 }, + { "LTPGDVFVIPAGHPVAVR", 37.28 }, + { "EEDDEEEEQREEETK", 5.89 }, + { "ASSNLNLLGFGINAENNQR", 35.42 }, + { "NPQLQDLDIFVNYVEIK", 46.41 }, + { "KNPQLQDLDIFVNYVEIK", 45.53 }, + { "NENQQGLREEDDEEEEQR", 10.37 }, + { "GDQYAR", 3.5 }, + { "GDYYAR", 7.6 }, + { "EVYLFK", 24.15 }, + { "GKEVYLFK", 25.17 }, + { "VLYGPTPVR", 23.15 }, + { "TGYINAAFR", 23.93 }, + { "TNEVYFFK", 28.18 }, + { "TLDYWPSLR", 32.85 }, + { "KTLDYWPSLR", 32.13 }, + { "VLYGPTPVRDGFK", 27.02 }, + { "YVLLDYAPGTSNDK", 31.2 }, + { "SSQNNEAYLFINDK", 26.36 }, + { "NTIFESGTDAAFASHK", 26.97 }, }; //original peptide values were not reproduced; values found at implementation were used below _peptides100A = new object[,] { - {"RQQQQR", 1.51}, - {"HSQVAQIK", 7.52}, - {"GDLYNSGAGR", 13.29}, - {"LSAEYVLLYR", 33.42}, - {"AAVSHVNQVFR", 22.00}, - {"ISTVNSLTLPILR", 36.62}, - {"KEEEEEEQEQR", 3.21}, - {"HSEKEEEDEDEPR", 3.62}, - {"ESHGQGEEEEELEK", 9.77}, - {"KEDEDEDEEEEEER", 5.68}, - {"VFYLGGNPEIEFPETQQK", 36.98}, - {"VESEAGLTETWNPNHPELK", 29.89}, - {"NGIYAPHWNINANSLLYVIR", 47.09}, - {"VEDGLHIISPELQEEEEQSHSQR", 26.16}, - {"TIDPNGLHLPSYSPSPQLIFIIQGK", 44.28}, - {"GGQQQEEESEEQNEGNSVLSGFNVEFLAHSLNTK", 36.85}, - {"SQIVR", 8.26}, - {"VEGGLR", 8.49}, - {"SEFDR", 8.04}, - {"HSYPVGR", 8.69}, - {"LSAEYVR", 14.85}, - {"QQQGDSHQK", -0.52}, - {"EQSHSHSHR", -1.04}, - {"AAVSHVQQVLR", 20.59}, - {"IVNFQGDAVFDNK", 28.05}, - {"EEEEEEEEDEEK", 6.56}, - {"ENIADAAGADLYNPR", 26.97}, - {"IRENIADAAGADLYNPR", 28.75}, - {"LNQCQLDNINALEPDHR", 28.48}, - {"VESEAGLTETWNPNNPELK", 31.4}, - {"VFYLGGNPETEFPETQEEQQGR", 32.48}, - {"TIDPNGLHLPSFSPSPQLIFIIQGK", 47.36}, - {"GQLVVVPQNFVVAEQAGEEEGLEYVVFK", 48.62}, - {"KGQLVVVPQNFVVAEQAGEEEGLEYVVFK", 46.53}, - {"ATLQR", 5.55}, - {"HIVDR", 6.17}, - {"FLVPAR", 20.14}, - {"SNNPFK", 9.39}, - {"FSYVAFK", 25.54}, - {"LDALEPDNR", 16.17}, - {"LSAEHGSLHK", 9.1}, - {"GGLSIISPPEK", 23.81}, - {"TVTSLDLPVLR", 31.9}, - {"ALTVPQNYAVAAK", 20.94}, - {"QEEEEDEDEER", 4.63}, - {"QEEDEDEEKQPR", 2.15}, - {"EQPQQNECQLER", 9.31}, - {"QEQENEGNNIFSGFK", 25.5}, - {"IESEGGLIETWNPNNK", 30.52}, - {"LNIGPSSSPDIYNPEAGR", 26.95}, - {"FYLAGNHEQEFLQYQHQQGGK", 31.12}, - {"RFYLAGNHEQEFLQYQHQQGGK", 31.15}, - {"TFLWGR", 27.87}, - {"DEAFGHLK", 17.11}, - {"NEPWWPK", 27.89}, - {"LLYPHYR", 22.39}, - {"SDYVYLPR", 24.23}, - {"EEELNNLR", 16.27}, - {"DNPNWTSDK", 12.87}, - {"ELVEVGHGDK", 12.46}, - {"KNEPWWPK", 26.5}, - {"GSAEFEELVK", 26.45}, - {"SSDFLTYGLK", 31.14}, - {"DNPNWTSDKR", 12.47}, - {"HASDELYLGER", 20.74}, - {"QDSELQAWWK", 31.32}, - {"LDSQIYGDHTSK", 12.76}, - {"LPTNILSQISPLPVLK", 42.46}, - {"NWVFTEQALPADLIK", 40.85}, - {"TWVQDYVSLYYTSDEK", 40.68}, - {"EHLEPNLEGLTVEEAIQNK", 35.5}, - {"ATFLEGIISSLPTLGAGQSAFK", 52.44}, - {"LVVEDYPYAVDGLEIWAIIK", 56.81}, - {"IFFANQTYLPSETPAPLVHYR", 42.73}, - {"LLEYK", 15.04}, - {"ILENQK", 6.86}, - {"QVQNYK", 4.56}, - {"NSFNLER", 17.52}, - {"DDNEELR", 7.78}, - {"GQIEELSK", 13.32}, - {"VLLEEHEK", 15.51}, - {"FFEITPEK", 26.44}, - {"GDFELVGQR", 21.8}, - {"NENQQEQR", 0.98}, - {"GPIYSNEFGK", 22.5}, - {"AIVIVTVNEGK", 23.63}, - {"SDPQNPFIFK", 28.93}, - {"IFENLQNYR", 25.32}, - {"AILTVLKPDDR", 26.48}, - {"LPAGTIAYLVNR", 29.64}, - {"QQSQEENVIVK", 13.52}, - {"SVSSESEPFNLR", 24.63}, - {"EGSLLLPHYNSR", 26.35}, - {"QSHFADAQPQQR", 10.22}, - {"ELAFPGSAQEVDR", 24.87}, - {"RQQSQEENVIVK", 12.27}, - {"KSVSSESEPFNLR", 23.17}, - {"VLLEEHEKETQHR", 12.63}, - {"EDDEEEEQGEEEINK", 12.29}, - {"NILEASFNTDYEEIEK", 36.78}, - {"KEDDEEEEQGEEEINK", 9.68}, - {"NPQLQDLDIFVNSVEIK", 41.82}, - {"ASSNLDLLGFGINAENNQR", 37.07}, - {"AILTVLKPDDRNSFNLER", 36.08}, - {"NFLAGDEDNVISQVQRPVK", 32.62}, - {"SKPHTIFLPQHTDADYILVVLSGK", 44.02}, - {"FFEITPEKNPQLQDLDIFVNSVEIK", 50.09}, - {"ATLTVLK", 19.31}, - {"QVQLYR", 13.55}, - {"NPIYSNK", 10.76}, - {"DDNEDLR", 7.65}, - {"EQIEELSK", 13.66}, - {"SRNPIYSNK", 9.94}, - {"AIVIVTVTEGK", 24.8}, - {"SDQENPFIFK", 28.48}, - {"LPAGTIAYLANR", 27.04}, - {"SVSSESGPFNLR", 23.5}, - {"QEINEENVIVK", 20.6}, - {"EGSLLLPNYNSR", 26.9}, - {"KSVSSESGPFNLR", 22.18}, - {"QSYFANAQPLQR", 24.51}, - {"ELAFPGSSHEVDR", 22.14}, - {"RQEINEENVIVK", 20.66}, - {"VLLEQQEQEPQHR", 17.45}, - {"NILEAAFNTNYEEIEK", 38.16}, - {"NQQLQDLDIFVNSVDIK", 41.05}, - {"NFLAGEEDNVISQVERPVK", 33.19}, - {"SKPHTLFLPQYTDADFILVVLSGK", 52.32}, - {"VLDLAIPVNKPGQLQSFLLSGTQNQPSLLSGFSK", 50.47}, - {"LSPGDVFVIPAGHPVAINASSDLNLIGFGINAENNER", 47.78}, - {"ETHHR", 1.61}, - {"LLENQK", 7.77}, - {"SEPFNLK", 19.08}, - {"QIEELSK", 12.13}, - {"FFEITPK", 25.15}, - {"NENQQGLR", 6.76}, - {"KQIEELSK", 11.93}, - {"ILLEEHEK", 17.73}, - {"EEDDEEEEQR", 4.18}, - {"DLTFPGSAQEVDR", 24.64}, - {"QSYFANAQPQQR", 16.28}, - {"LTPGDVFVIPAGHPVAVR", 35.56}, - {"EEDDEEEEQREEETK", 4.69}, - {"ASSNLNLLGFGINAENNQR", 35.43}, - {"NPQLQDLDIFVNYVEIK", 46.24}, - {"KNPQLQDLDIFVNYVEIK", 44.2}, - {"NENQQGLREEDDEEEEQR", 10.16}, - {"IILGPK", 17.14}, - {"GDQYAR", 3.71}, - {"GDYYAR", 8.66}, - {"EVYLFK", 24.63}, - {"GKEVYLFK", 24.92}, - {"VLYGPTPVR", 22.32}, - {"TGYINAAFR", 23.93}, - {"TNEVYFFK", 28.54}, - {"TLDYWPSLR", 32.73}, - {"KTLDYWPSLR", 32.47}, - {"VLYGPTPVRDGFK", 26.17}, - {"SSQNNEAYLFINDK", 27.06}, - {"NTIFESGTDAAFASHK", 28.26}, - {"IADMFPFFEGTVFENGIDAAYR", 53.44}, - {"VLILNK", 20.07}, - {"KEEHGR", 1.34}, - {"VDEVFER", 17.16}, - {"GIIGLVAEDR", 28.31}, - {"QYDEEDKR", 4.74}, - {"EVAFDIAAEK", 27.31}, - {"SLWPFGGPFK", 35.73}, - {"SSISYHNINAK", 15.96}, - {"GELETVLDEQK", 22.83}, - {"KSLWPFGGPFK", 36.4}, - {"KPESVLNTFSSK", 22.46}, - {"KSSISYHNINAK", 12.87}, - {"FGSLFEVGPSQEK", 29.91}, - {"NIENYGLAVLEIK", 35.07}, - {"GSMSTIHYNTNANK", 13.54}, - {"SPFNIFSNNPAFSNK", 33.56}, - {"KEEFFFPYDNEER", 32.62}, - {"ANAFLSPHHYDSEAILFNIK", 40.41}, - {"LYIAAFHMPPSSGSAPVNLEPFFESAGR", 44.56}, - {"EHEEEEEQEQEEDENPYVFEDNDFETK", 29.35}, - {"HKEHEEEEEQEQEEDENPYVFEDNDFETK", 25.79}, - {"TILFLK", 29.49}, - {"IFFANK", 21.36}, - {"NLFEGGIK", 23.81}, - {"DKPWWPK", 26.4}, - {"DENFGHLK", 15.92}, - {"FTPPHVIR", 21.02}, - {"SSDFLAYGIK", 28.9}, - {"NNDPSLYHR", 14.69}, - {"QLSVVHPINK", 19.79}, - {"ENPHWTSDSK", 10.31}, - {"HASDEVYLGQR", 16.48}, - {"NYMQVEFFLK", 38.88}, - {"NDSELQHWWK", 28.39}, - {"SYLPSETPSPLVK", 28.32}, - {"SNLDPAEYGDHTSK", 13.92}, - {"SLTLEDVPNHGTIR", 25.42}, - {"LPLDVISTLSPLPVVK", 43.49}, - {"DPNSEKPATETYVPR", 14.2}, - {"VGPVQLPYTLLHPSSK", 33.2}, - {"FQTLIDLSVIEILSR", 56.59}, - {"YWVFTDQALPNDLIK", 40.25}, - {"KDPNSEKPATETYVPR", 12.71}, - {"LFILDYHDTFIPFLR", 53.44}, - {"VILPADEGVESTIWLLAK", 43.72}, - {"TWVQDYVSLYYATDNDIK", 43.23}, - {"LAGTSSVINNLPLDVVAATFNLQR", 44.62}, - {"SSNNQLDQMPR", 13.76}, - {"LLIEDYPYAVDGLEIWTAIK", 60.37}, - {"ATPAEVLANAFGLR", 35.25}, - {"ATPGEVLANAFGLR", 33.21}, - {"LVEYR", 10.95}, - {"NQYLR", 10.55}, - {"HREER", 1.79}, - {"YQYQR", 6.35}, - {"NNEVQR", 3.67}, - {"NPFLFK", 28.14}, - {"YETIEK", 9.24}, - {"NEQQER", 1.45}, - {"SSESQER", 1.42}, - {"EGEEEER", 2.81}, - {"EQIEELK", 13.84}, - {"NSYNLER", 12.12}, - {"QEDEEEK", 1.89}, - {"RNPFLFK", 28.6}, - {"REDPEER", 3.91}, - {"FEAFDLAK", 29.75}, - {"GNLELLGLK", 30.94}, - {"QEGEKEEK", 0.99}, - {"LFEITPEK", 23.49}, - {"VLLEEQEK", 16.41}, - {"EQIEELKK", 11.68}, - {"SHKPEYSNK", 4.59}, - {"AIVVLLVNEGK", 31.28}, - {"NILEASYNTR", 21.03}, - {"AILTVLSPNDR", 28.31}, - {"QQGEETDAIVK", 11.83}, - {"VLLEEQEKDR", 15.36}, - {"HGEWRPSYEK", 15.26}, - {"RQQGEETDAIVK", 10.42}, - {"QSHFANAEPEQK", 10.35}, - {"SDLFENLQNYR", 32.1}, - {"SLPSEFEPINLR", 33.7}, - {"RHGEWRPSYEK", 13.76}, - {"ELTFPGSVQEINR", 28.46}, - {"KSLPSEFEPINLR", 32.00}, - {"RSDLFENLQNYR", 29.06}, - {"EEDEEQVDEEWR", 20.46}, - {"WEREEDEEQVDEEWR", 26.97}, - {"NFLSGSDDNVISQIENPVK", 34.52}, - {"LPAGTTSYLVNQDDEEDLR", 31.39}, - {"HGEWRPSYEKEEDEEEGQR", 17.62}, - {"AKPHTIFLPQHIDADLILVVLSGK", 49.06}, - {"LSPGDVVIIPAGHPVAITASSNLNLLGFGINAENNER", 47.19}, + { "RQQQQR", 1.51 }, + { "HSQVAQIK", 7.52 }, + { "GDLYNSGAGR", 13.29 }, + { "LSAEYVLLYR", 33.42 }, + { "AAVSHVNQVFR", 22.00 }, + { "ISTVNSLTLPILR", 36.62 }, + { "KEEEEEEQEQR", 3.21 }, + { "HSEKEEEDEDEPR", 3.62 }, + { "ESHGQGEEEEELEK", 9.77 }, + { "KEDEDEDEEEEEER", 5.68 }, + { "VFYLGGNPEIEFPETQQK", 36.98 }, + { "VESEAGLTETWNPNHPELK", 29.89 }, + { "NGIYAPHWNINANSLLYVIR", 47.09 }, + { "VEDGLHIISPELQEEEEQSHSQR", 26.16 }, + { "TIDPNGLHLPSYSPSPQLIFIIQGK", 44.28 }, + { "GGQQQEEESEEQNEGNSVLSGFNVEFLAHSLNTK", 36.85 }, + { "SQIVR", 8.26 }, + { "VEGGLR", 8.49 }, + { "SEFDR", 8.04 }, + { "HSYPVGR", 8.69 }, + { "LSAEYVR", 14.85 }, + { "QQQGDSHQK", -0.52 }, + { "EQSHSHSHR", -1.04 }, + { "AAVSHVQQVLR", 20.59 }, + { "IVNFQGDAVFDNK", 28.05 }, + { "EEEEEEEEDEEK", 6.56 }, + { "ENIADAAGADLYNPR", 26.97 }, + { "IRENIADAAGADLYNPR", 28.75 }, + { "LNQCQLDNINALEPDHR", 28.48 }, + { "VESEAGLTETWNPNNPELK", 31.4 }, + { "VFYLGGNPETEFPETQEEQQGR", 32.48 }, + { "TIDPNGLHLPSFSPSPQLIFIIQGK", 47.36 }, + { "GQLVVVPQNFVVAEQAGEEEGLEYVVFK", 48.62 }, + { "KGQLVVVPQNFVVAEQAGEEEGLEYVVFK", 46.53 }, + { "ATLQR", 5.55 }, + { "HIVDR", 6.17 }, + { "FLVPAR", 20.14 }, + { "SNNPFK", 9.39 }, + { "FSYVAFK", 25.54 }, + { "LDALEPDNR", 16.17 }, + { "LSAEHGSLHK", 9.1 }, + { "GGLSIISPPEK", 23.81 }, + { "TVTSLDLPVLR", 31.9 }, + { "ALTVPQNYAVAAK", 20.94 }, + { "QEEEEDEDEER", 4.63 }, + { "QEEDEDEEKQPR", 2.15 }, + { "EQPQQNECQLER", 9.31 }, + { "QEQENEGNNIFSGFK", 25.5 }, + { "IESEGGLIETWNPNNK", 30.52 }, + { "LNIGPSSSPDIYNPEAGR", 26.95 }, + { "FYLAGNHEQEFLQYQHQQGGK", 31.12 }, + { "RFYLAGNHEQEFLQYQHQQGGK", 31.15 }, + { "TFLWGR", 27.87 }, + { "DEAFGHLK", 17.11 }, + { "NEPWWPK", 27.89 }, + { "LLYPHYR", 22.39 }, + { "SDYVYLPR", 24.23 }, + { "EEELNNLR", 16.27 }, + { "DNPNWTSDK", 12.87 }, + { "ELVEVGHGDK", 12.46 }, + { "KNEPWWPK", 26.5 }, + { "GSAEFEELVK", 26.45 }, + { "SSDFLTYGLK", 31.14 }, + { "DNPNWTSDKR", 12.47 }, + { "HASDELYLGER", 20.74 }, + { "QDSELQAWWK", 31.32 }, + { "LDSQIYGDHTSK", 12.76 }, + { "LPTNILSQISPLPVLK", 42.46 }, + { "NWVFTEQALPADLIK", 40.85 }, + { "TWVQDYVSLYYTSDEK", 40.68 }, + { "EHLEPNLEGLTVEEAIQNK", 35.5 }, + { "ATFLEGIISSLPTLGAGQSAFK", 52.44 }, + { "LVVEDYPYAVDGLEIWAIIK", 56.81 }, + { "IFFANQTYLPSETPAPLVHYR", 42.73 }, + { "LLEYK", 15.04 }, + { "ILENQK", 6.86 }, + { "QVQNYK", 4.56 }, + { "NSFNLER", 17.52 }, + { "DDNEELR", 7.78 }, + { "GQIEELSK", 13.32 }, + { "VLLEEHEK", 15.51 }, + { "FFEITPEK", 26.44 }, + { "GDFELVGQR", 21.8 }, + { "NENQQEQR", 0.98 }, + { "GPIYSNEFGK", 22.5 }, + { "AIVIVTVNEGK", 23.63 }, + { "SDPQNPFIFK", 28.93 }, + { "IFENLQNYR", 25.32 }, + { "AILTVLKPDDR", 26.48 }, + { "LPAGTIAYLVNR", 29.64 }, + { "QQSQEENVIVK", 13.52 }, + { "SVSSESEPFNLR", 24.63 }, + { "EGSLLLPHYNSR", 26.35 }, + { "QSHFADAQPQQR", 10.22 }, + { "ELAFPGSAQEVDR", 24.87 }, + { "RQQSQEENVIVK", 12.27 }, + { "KSVSSESEPFNLR", 23.17 }, + { "VLLEEHEKETQHR", 12.63 }, + { "EDDEEEEQGEEEINK", 12.29 }, + { "NILEASFNTDYEEIEK", 36.78 }, + { "KEDDEEEEQGEEEINK", 9.68 }, + { "NPQLQDLDIFVNSVEIK", 41.82 }, + { "ASSNLDLLGFGINAENNQR", 37.07 }, + { "AILTVLKPDDRNSFNLER", 36.08 }, + { "NFLAGDEDNVISQVQRPVK", 32.62 }, + { "SKPHTIFLPQHTDADYILVVLSGK", 44.02 }, + { "FFEITPEKNPQLQDLDIFVNSVEIK", 50.09 }, + { "ATLTVLK", 19.31 }, + { "QVQLYR", 13.55 }, + { "NPIYSNK", 10.76 }, + { "DDNEDLR", 7.65 }, + { "EQIEELSK", 13.66 }, + { "SRNPIYSNK", 9.94 }, + { "AIVIVTVTEGK", 24.8 }, + { "SDQENPFIFK", 28.48 }, + { "LPAGTIAYLANR", 27.04 }, + { "SVSSESGPFNLR", 23.5 }, + { "QEINEENVIVK", 20.6 }, + { "EGSLLLPNYNSR", 26.9 }, + { "KSVSSESGPFNLR", 22.18 }, + { "QSYFANAQPLQR", 24.51 }, + { "ELAFPGSSHEVDR", 22.14 }, + { "RQEINEENVIVK", 20.66 }, + { "VLLEQQEQEPQHR", 17.45 }, + { "NILEAAFNTNYEEIEK", 38.16 }, + { "NQQLQDLDIFVNSVDIK", 41.05 }, + { "NFLAGEEDNVISQVERPVK", 33.19 }, + { "SKPHTLFLPQYTDADFILVVLSGK", 52.32 }, + { "VLDLAIPVNKPGQLQSFLLSGTQNQPSLLSGFSK", 50.47 }, + { "LSPGDVFVIPAGHPVAINASSDLNLIGFGINAENNER", 47.78 }, + { "ETHHR", 1.61 }, + { "LLENQK", 7.77 }, + { "SEPFNLK", 19.08 }, + { "QIEELSK", 12.13 }, + { "FFEITPK", 25.15 }, + { "NENQQGLR", 6.76 }, + { "KQIEELSK", 11.93 }, + { "ILLEEHEK", 17.73 }, + { "EEDDEEEEQR", 4.18 }, + { "DLTFPGSAQEVDR", 24.64 }, + { "QSYFANAQPQQR", 16.28 }, + { "LTPGDVFVIPAGHPVAVR", 35.56 }, + { "EEDDEEEEQREEETK", 4.69 }, + { "ASSNLNLLGFGINAENNQR", 35.43 }, + { "NPQLQDLDIFVNYVEIK", 46.24 }, + { "KNPQLQDLDIFVNYVEIK", 44.2 }, + { "NENQQGLREEDDEEEEQR", 10.16 }, + { "IILGPK", 17.14 }, + { "GDQYAR", 3.71 }, + { "GDYYAR", 8.66 }, + { "EVYLFK", 24.63 }, + { "GKEVYLFK", 24.92 }, + { "VLYGPTPVR", 22.32 }, + { "TGYINAAFR", 23.93 }, + { "TNEVYFFK", 28.54 }, + { "TLDYWPSLR", 32.73 }, + { "KTLDYWPSLR", 32.47 }, + { "VLYGPTPVRDGFK", 26.17 }, + { "SSQNNEAYLFINDK", 27.06 }, + { "NTIFESGTDAAFASHK", 28.26 }, + { "IADMFPFFEGTVFENGIDAAYR", 53.44 }, + { "VLILNK", 20.07 }, + { "KEEHGR", 1.34 }, + { "VDEVFER", 17.16 }, + { "GIIGLVAEDR", 28.31 }, + { "QYDEEDKR", 4.74 }, + { "EVAFDIAAEK", 27.31 }, + { "SLWPFGGPFK", 35.73 }, + { "SSISYHNINAK", 15.96 }, + { "GELETVLDEQK", 22.83 }, + { "KSLWPFGGPFK", 36.4 }, + { "KPESVLNTFSSK", 22.46 }, + { "KSSISYHNINAK", 12.87 }, + { "FGSLFEVGPSQEK", 29.91 }, + { "NIENYGLAVLEIK", 35.07 }, + { "GSMSTIHYNTNANK", 13.54 }, + { "SPFNIFSNNPAFSNK", 33.56 }, + { "KEEFFFPYDNEER", 32.62 }, + { "ANAFLSPHHYDSEAILFNIK", 40.41 }, + { "LYIAAFHMPPSSGSAPVNLEPFFESAGR", 44.56 }, + { "EHEEEEEQEQEEDENPYVFEDNDFETK", 29.35 }, + { "HKEHEEEEEQEQEEDENPYVFEDNDFETK", 25.79 }, + { "TILFLK", 29.49 }, + { "IFFANK", 21.36 }, + { "NLFEGGIK", 23.81 }, + { "DKPWWPK", 26.4 }, + { "DENFGHLK", 15.92 }, + { "FTPPHVIR", 21.02 }, + { "SSDFLAYGIK", 28.9 }, + { "NNDPSLYHR", 14.69 }, + { "QLSVVHPINK", 19.79 }, + { "ENPHWTSDSK", 10.31 }, + { "HASDEVYLGQR", 16.48 }, + { "NYMQVEFFLK", 38.88 }, + { "NDSELQHWWK", 28.39 }, + { "SYLPSETPSPLVK", 28.32 }, + { "SNLDPAEYGDHTSK", 13.92 }, + { "SLTLEDVPNHGTIR", 25.42 }, + { "LPLDVISTLSPLPVVK", 43.49 }, + { "DPNSEKPATETYVPR", 14.2 }, + { "VGPVQLPYTLLHPSSK", 33.2 }, + { "FQTLIDLSVIEILSR", 56.59 }, + { "YWVFTDQALPNDLIK", 40.25 }, + { "KDPNSEKPATETYVPR", 12.71 }, + { "LFILDYHDTFIPFLR", 53.44 }, + { "VILPADEGVESTIWLLAK", 43.72 }, + { "TWVQDYVSLYYATDNDIK", 43.23 }, + { "LAGTSSVINNLPLDVVAATFNLQR", 44.62 }, + { "SSNNQLDQMPR", 13.76 }, + { "LLIEDYPYAVDGLEIWTAIK", 60.37 }, + { "ATPAEVLANAFGLR", 35.25 }, + { "ATPGEVLANAFGLR", 33.21 }, + { "LVEYR", 10.95 }, + { "NQYLR", 10.55 }, + { "HREER", 1.79 }, + { "YQYQR", 6.35 }, + { "NNEVQR", 3.67 }, + { "NPFLFK", 28.14 }, + { "YETIEK", 9.24 }, + { "NEQQER", 1.45 }, + { "SSESQER", 1.42 }, + { "EGEEEER", 2.81 }, + { "EQIEELK", 13.84 }, + { "NSYNLER", 12.12 }, + { "QEDEEEK", 1.89 }, + { "RNPFLFK", 28.6 }, + { "REDPEER", 3.91 }, + { "FEAFDLAK", 29.75 }, + { "GNLELLGLK", 30.94 }, + { "QEGEKEEK", 0.99 }, + { "LFEITPEK", 23.49 }, + { "VLLEEQEK", 16.41 }, + { "EQIEELKK", 11.68 }, + { "SHKPEYSNK", 4.59 }, + { "AIVVLLVNEGK", 31.28 }, + { "NILEASYNTR", 21.03 }, + { "AILTVLSPNDR", 28.31 }, + { "QQGEETDAIVK", 11.83 }, + { "VLLEEQEKDR", 15.36 }, + { "HGEWRPSYEK", 15.26 }, + { "RQQGEETDAIVK", 10.42 }, + { "QSHFANAEPEQK", 10.35 }, + { "SDLFENLQNYR", 32.1 }, + { "SLPSEFEPINLR", 33.7 }, + { "RHGEWRPSYEK", 13.76 }, + { "ELTFPGSVQEINR", 28.46 }, + { "KSLPSEFEPINLR", 32.00 }, + { "RSDLFENLQNYR", 29.06 }, + { "EEDEEQVDEEWR", 20.46 }, + { "WEREEDEEQVDEEWR", 26.97 }, + { "NFLSGSDDNVISQIENPVK", 34.52 }, + { "LPAGTTSYLVNQDDEEDLR", 31.39 }, + { "HGEWRPSYEKEEDEEEGQR", 17.62 }, + { "AKPHTIFLPQHIDADLILVVLSGK", 49.06 }, + { "LSPGDVVIIPAGHPVAITASSNLNLLGFGINAENNER", 47.19 }, }; _peptidesCZE = new object[,] { - {"DDDRDD", 13.69}, - {"EEEKEE", 15.42}, - {"NNNHNN", 17.15}, - {"QQQGQQ", 10.88}, - {"KKKKKK", 33.92}, - {"EDNHKRQM", 21.86}, - {"QNEHKRDE", 22.20} + { "DDDRDD", 13.69 }, + { "EEEKEE", 15.42 }, + { "NNNHNN", 17.15 }, + { "QQQGQQ", 10.88 }, + { "KKKKKK", 33.92 }, + { "EDNHKRQM", 21.86 }, + { "QNEHKRDE", 22.20 } }; } @@ -608,7 +617,8 @@ public static void Setuppp() [TearDown] public static void TearDown() { - Console.WriteLine($"Analysis time: {Stopwatch.Elapsed.Hours}h {Stopwatch.Elapsed.Minutes}m {Stopwatch.Elapsed.Seconds}s"); + Console.WriteLine( + $"Analysis time: {Stopwatch.Elapsed.Hours}h {Stopwatch.Elapsed.Minutes}m {Stopwatch.Elapsed.Seconds}s"); } /// @@ -621,7 +631,8 @@ public void SSRCalc3_300A_Test() for (int i = 0; i < _peptides300A.GetLength(0); i++) { - var peptide = new PeptideWithSetModifications((string)_peptides300A[i, 0], new Dictionary()); + var peptide = new PeptideWithSetModifications((string)_peptides300A[i, 0], + new Dictionary()); double expected = (double)_peptides300A[i, 1]; double actual = calc.ScoreSequence(peptide); @@ -652,7 +663,8 @@ public void SSRCalc3_100A_Test() for (int i = 0; i < _peptides100A.GetLength(0); i++) { - var peptide = new PeptideWithSetModifications((string)_peptides100A[i, 0], new Dictionary()); + var peptide = new PeptideWithSetModifications((string)_peptides100A[i, 0], + new Dictionary()); object obj = _peptides100A[i, 1]; double expected = (double)_peptides100A[i, 1]; double actual = calc.ScoreSequence(peptide); @@ -689,7 +701,8 @@ public void CZE_RetentionTime_Test() for (int i = 0; i < _peptidesCZE.GetLength(0); i++) { - var peptide = new PeptideWithSetModifications((string)_peptidesCZE[i, 0], new Dictionary()); + var peptide = new PeptideWithSetModifications((string)_peptidesCZE[i, 0], + new Dictionary()); object obj = _peptidesCZE[i, 1]; double expected = (double)_peptidesCZE[i, 1]; double actual = CZE.PredictedElectrophoreticMobility(peptide.BaseSequence, peptide.MonoisotopicMass); @@ -709,5 +722,115 @@ public void CZE_RetentionTime_Test() } } } + + //Chronologer Tests + [Test] + public void TestChronologerConstructorAndPredictions() + { + var model = new Chronologer(); + + var data = Mapper.Read(Path.Combine(Directory.GetCurrentDirectory(), + "DataFiles", "ChronologerTest.tsv")); + + foreach (var datum in data) + { + var prediction = model.Predict(datum.tensor); + + var hiFromFile = datum.Pred_HI; + + Assert.AreEqual(Math.Round(prediction.item(), 3), + Math.Round(float.Parse(hiFromFile), 3)); + } + } + + internal class Mapper + { + internal static CsvConfiguration MapperConfig => new CsvConfiguration(CultureInfo.InvariantCulture) + { + HasHeaderRecord = true, + Delimiter = "\t", + HeaderValidated = null, + }; + + [Name("Scan Retention Time")] public string ScanRetentionTime { get; set; } + public string PeptideModSeq { get; set; } + public string Length { get; set; } + public string CodedPeptideSeq { get; set; } + public string PeptideLength { get; set; } + public string Pred_HI { get; set; } + + [TypeConverter(typeof(TensorConverter))] + public torch.Tensor tensor { get; set; } + + internal static void Write(IEnumerable toWrite, string filepath) + { + using var csv = new CsvWriter(new StreamWriter(filepath), MapperConfig); + csv.WriteHeader(); + csv.NextRecord(); + csv.WriteRecords(toWrite); + csv.Dispose(); + } + + internal static List Read(string path) + { + return new CsvReader(new StreamReader(path), MapperConfig).GetRecords().ToList(); + } + + internal class TensorConverter : DefaultTypeConverter + { + public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData) + { + var tensor = torch.zeros(1, 52, torch.ScalarType.Int64); + text = text.Replace("\n", "").Replace(")", ""); + var values = text.Split(',').Select(x => int.Parse(x)).ToArray(); + tensor[0] = values; + return tensor; + } + + public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData) + { + var tensor = value as torch.Tensor ?? throw new ArgumentException("Value is not a tensor"); + var temp2 = tensor.ToString(TensorStringStyle.Julia); + temp2 = temp2.TrimStart().TrimEnd().Replace("\n", "").Replace(")", "").Replace("\r", "") + .Replace("[[", "").Replace("]]", ""); + var temp3 = tensor.data().ToArray(); + return string.Join(',', temp3); + } + } + + //[Test] + //public void CompareNoMods() + //{ + // var data = Mapper.Read(@"F:\Research\Data\Hela\predictedExample - Copy2.tsv"); + + // var model = new nnModules.RawChronologer(); + // model.load(@"C:\Users\Edwin\Documents\GitHub\RT-DP\model_weights_Chronologer_new_module_names.dat"); + // model.eval(); + // model.train(false); + + // var chronologerPredictions = new List(); + // var ssRCalcPredictions = new List(); + // var realRT = new List(); + + // foreach (var datum in data) + // { + // //chronologer + // var prediction = model.call(datum.tensor); + // chronologerPredictions.Add(prediction.data().ToArray()[0]); + + // //ssrcalc + // SSRCalc3 ssrCalc3 = new SSRCalc3("SSRCalc 3.0 (300A)", SSRCalc3.Column.A300); + + // var peptide = + // new PeptideWithSetModifications(datum.PeptideModSeq, new Dictionary()); + // var ssrcalcOutput = ssrCalc3.ScoreSequence(peptide); + // ssRCalcPredictions.Add(ssrcalcOutput); + + // //Read RT + // realRT.Add(double.Parse(datum.ScanRetentionTime)); + + // } + //} + } } } \ No newline at end of file