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