diff --git a/protzilla/constants/ms_constants.py b/protzilla/constants/ms_constants.py
new file mode 100644
index 00000000..a84f381c
--- /dev/null
+++ b/protzilla/constants/ms_constants.py
@@ -0,0 +1,26 @@
+"""This file contains the constants that are re-used many times across PROTzilla, to avoid repetition and to streamline
+refactoring-."""
+from enum import StrEnum
+
+
+class FragmentationType(StrEnum):
+ """The different types of mass spectrometry fragmentation that are supported."""
+
+ HCD = "HCD"
+ CID = "CID"
+
+
+class DataKeys(StrEnum):
+ """Commonly used column names and keys in the dataframes."""
+
+ PEPTIDE_SEQUENCE = "peptide_sequences"
+ PRECURSOR_CHARGE = "precursor_charges"
+ PRECURSOR_MZ = "precursor_m/z"
+ MZ = "m/z"
+ COLLISION_ENERGY = "collision_energies"
+ FRAGMENTATION_TYPE = "fragmentation_types"
+ # These are used for the peaks
+ INTENSITY = "intensity"
+ FRAGMENT_TYPE = "fragment_type"
+ FRAGMENT_CHARGE = "fragment_charge"
+ INSTRUMENT_TYPE = "instrument_types"
diff --git a/protzilla/constants/paths.py b/protzilla/constants/paths.py
index 6802d503..2a5c7ac1 100644
--- a/protzilla/constants/paths.py
+++ b/protzilla/constants/paths.py
@@ -8,3 +8,4 @@
UI_PATH = Path(PROJECT_PATH, "ui")
UPLOAD_PATH = UI_PATH / "uploads"
TEST_DATA_PATH = Path(PROJECT_PATH, "tests/test_data")
+PEPTIDE_TEST_DATA_PATH = Path(TEST_DATA_PATH, "peptides")
diff --git a/protzilla/data_analysis/predict_spectra.py b/protzilla/data_analysis/predict_spectra.py
new file mode 100644
index 00000000..54914091
--- /dev/null
+++ b/protzilla/data_analysis/predict_spectra.py
@@ -0,0 +1,319 @@
+import logging
+from functools import partial
+from multiprocessing import Pool, cpu_count
+from typing import Optional
+
+import pandas as pd
+import plotly.express as px
+import plotly.graph_objs as go
+
+from protzilla.constants.colors import PROTZILLA_DISCRETE_COLOR_OUTLIER_SEQUENCE
+from protzilla.constants.ms_constants import DataKeys, FragmentationType
+from protzilla.data_analysis.spectrum_prediction.spectrum import (
+ SpectrumExporter,
+ SpectrumPredictorFactory,
+)
+from protzilla.data_analysis.spectrum_prediction.spectrum_prediction_utils import (
+ GenericTextSeparator,
+ OutputFormats,
+ PredictionModels,
+)
+
+
+def predict(
+ model_name: PredictionModels,
+ peptide_df: pd.DataFrame,
+ output_format: OutputFormats,
+ collision_energy: Optional[float],
+ fragmentation_type: Optional[FragmentationType],
+ column_seperator: Optional[GenericTextSeparator],
+ output_dir: Optional[str] = None,
+ file_name: Optional[str] = "predicted_spectra",
+):
+ """
+ Predicts the spectra for the given peptides using the specified model.
+ :param model_name: the model to use
+ :param peptide_df: the result of the evidence import, containing the peptide sequences, charges and m/z values
+ :param output_format: output format of the spectral predictions
+ :param collision_energy: the collision energy for which to predict the spectra
+ :param fragmentation_type: the type of ms fragmentation for which to predict the spectra
+ :param column_seperator: the column separator to use in case the output format is generic text
+ :param output_dir: the directory to save the output to, this will just be shown to the user in the return message so he knows where to find the output
+ :return: a dictionary containing the output file, metadata and peaks dataframes of the predicted spectra and a message
+ """
+ if file_name is None or file_name == "":
+ raise ValueError("The file name must not be empty.")
+ peptide_df = peptide_df.rename(
+ columns={
+ "Sequence": DataKeys.PEPTIDE_SEQUENCE,
+ "Charge": DataKeys.PRECURSOR_CHARGE,
+ "m/z": DataKeys.PRECURSOR_MZ,
+ },
+ errors="ignore", # as the evidence import already renames some columns to the DataKeys, this is necessary
+ )
+ prediction_df = (
+ peptide_df[
+ [
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.PRECURSOR_MZ,
+ ]
+ ]
+ .drop_duplicates()
+ .copy()
+ )
+ predictor = SpectrumPredictorFactory.create_predictor(model_name)
+ if DataKeys.COLLISION_ENERGY in predictor.required_keys:
+ assert collision_energy is not None, "Collision energy is required."
+ prediction_df[DataKeys.COLLISION_ENERGY] = collision_energy
+ if DataKeys.FRAGMENTATION_TYPE in predictor.required_keys:
+ assert fragmentation_type is not None, "Fragmentation type is required."
+ prediction_df[DataKeys.FRAGMENTATION_TYPE] = fragmentation_type
+ predictor.load_prediction_df(prediction_df)
+ predicted_spectra = predictor.predict()
+ if output_format == OutputFormats.CSV_TSV:
+ output = SpectrumExporter.export_to_generic_text(
+ predicted_spectra, file_name, column_seperator
+ )
+ elif output_format == OutputFormats.MSP:
+ output = SpectrumExporter.export_to_msp(predicted_spectra, file_name)
+ elif output_format == OutputFormats.MGF:
+ output = SpectrumExporter.export_to_mgf(predicted_spectra, file_name)
+
+ metadata_dfs = []
+ peaks_dfs = []
+ for spectrum in predicted_spectra:
+ metadata_df, peaks_df = spectrum.to_mergeable_df()
+ metadata_dfs.append(metadata_df)
+ peaks_dfs.append(peaks_df)
+
+ combined_metadata_df = pd.concat(metadata_dfs)
+ combined_peaks_df = pd.concat(peaks_dfs)
+
+ return {
+ "predicted_spectra": output,
+ "predicted_spectra_metadata": combined_metadata_df,
+ "predicted_spectra_peaks": combined_peaks_df,
+ "messages": [
+ {
+ "level": logging.INFO,
+ "msg": f"Successfully predicted {len(predicted_spectra)} spectra.\nThe output can be found at {output_dir / output.filename if output_dir else 'the dataframe folder of the run'}",
+ }
+ ],
+ }
+
+
+def plot_spectrum(
+ metadata_df: pd.DataFrame,
+ peaks_df: pd.DataFrame,
+ peptide_sequences: str,
+ precursor_charges: int,
+ annotation_threshold: float,
+):
+ """
+ Plots the spectrum for the given peptide and charge.
+ The metadata and peaks dataframes can be joined via the index, a unique identifier for each spectrum.
+ :param metadata_df: the dataframe containing the metadata of the spectra, like sequence, charge, etc.
+ :param peaks_df: the dataframe containing the peaks of the spectra
+ :param peptide_sequences: the peptide sequence for which to plot the spectrum
+ :param precursor_charges: the charge of the precursor ion for which to plot the spectrum
+ :param annotation_threshold: the threshold for the intensity of the peaks to be annotated
+ :return: a dictionary containing the plot and a message
+ """
+ assert 0 <= annotation_threshold and annotation_threshold <= 1
+
+ # Get the unique_id for the specified peptide and charge
+ unique_id = metadata_df[
+ (metadata_df[DataKeys.PEPTIDE_SEQUENCE] == peptide_sequences)
+ & (metadata_df[DataKeys.PRECURSOR_CHARGE] == precursor_charges)
+ ].index
+
+ assert (
+ len(unique_id) == 1
+ ), f"Expected exactly one unique_id, but got {len(unique_id)}: {unique_id}"
+
+ # Filter the peaks_df for the specific spectrum
+ spectrum = peaks_df.loc[unique_id]
+
+ plot_df = spectrum[
+ [
+ DataKeys.MZ,
+ DataKeys.INTENSITY,
+ DataKeys.FRAGMENT_TYPE,
+ DataKeys.FRAGMENT_CHARGE,
+ ]
+ ]
+ plot_df["fragment_ion"] = plot_df[DataKeys.FRAGMENT_TYPE].str[0]
+
+ ion_color = PROTZILLA_DISCRETE_COLOR_OUTLIER_SEQUENCE
+ ion_types = plot_df[DataKeys.FRAGMENT_TYPE].str[0].unique()
+ if len(ion_types) != 2:
+ raise ValueError(
+ f"Expected exactly two fragment types, but got {len(ion_types)}: {ion_types}"
+ )
+
+ # Plotting the peaks
+ fig = px.bar(
+ plot_df,
+ x=DataKeys.MZ,
+ y=DataKeys.INTENSITY,
+ hover_data=[DataKeys.FRAGMENT_TYPE, DataKeys.FRAGMENT_CHARGE],
+ color="fragment_ion",
+ color_discrete_map={ion_types[0]: ion_color[0], ion_types[1]: ion_color[1]},
+ title=f"{peptide_sequences} ({precursor_charges}+)",
+ )
+
+ # Updating the layout
+ fig.update_layout(
+ yaxis=dict(
+ title="Relative intensity",
+ range=[0, 1.2],
+ tickvals=[0, 0.5, 1],
+ ticktext=["0.0", "0.5", "1.0"],
+ ticks="outside",
+ showline=True,
+ linewidth=1,
+ linecolor="grey",
+ ),
+ xaxis=dict(
+ title="m/z",
+ tickmode="linear",
+ ticks="outside",
+ tick0=0,
+ ticklabelstep=2,
+ tickangle=-45,
+ dtick=50,
+ showline=True,
+ linewidth=1,
+ linecolor="grey",
+ ),
+ )
+ fig.update_traces(width=8.0)
+
+ # Adding the annotations
+ for _, row in plot_df.iterrows():
+ if row[DataKeys.INTENSITY] < annotation_threshold:
+ continue
+ fig.add_annotation(
+ x=row[DataKeys.MZ],
+ y=row[DataKeys.INTENSITY],
+ font=dict(
+ color=ion_color[0]
+ if ion_types[0] in row[DataKeys.FRAGMENT_TYPE]
+ else ion_color[1]
+ ),
+ text=f"{row[DataKeys.FRAGMENT_TYPE]} ({row[DataKeys.FRAGMENT_CHARGE]}+)",
+ showarrow=False,
+ yshift=30,
+ textangle=-90,
+ )
+
+ # Updating the color legend to say e.g. "y" and "b" instead of the color codes
+ fig.for_each_trace(
+ lambda trace: trace.update(
+ name=trace.name.replace(ion_color[0], f"{ion_types[0]}-ion").replace(
+ ion_color[1], f"{ion_color[1]}-ion"
+ )
+ )
+ )
+ # Replace title of legend with "Fragment type"
+ fig.update_layout(legend_title_text="Fragment type")
+ to_be_returned = dict(
+ plots=[fig],
+ messages=[
+ {
+ "level": logging.INFO,
+ "msg": f"Successfully plotted the spectrum for {peptide_sequences} ({precursor_charges}+). Tip: You can zoom in by selecting an area on the plot.",
+ }
+ ],
+ )
+ to_be_returned[f"spectrum_{peptide_sequences}_{precursor_charges}"] = plot_df
+ return to_be_returned
+
+
+# leftover from an old bachelor thesis. might be interesting if the in the future, experimental spectra
+# are compared with predicted spectra for validation
+def advanced_cosine_similarity(
+ experimental_peaks_df: pd.DataFrame,
+ predicted_peaks_df: pd.DataFrame,
+ mz_tolerance: float,
+) -> float:
+ """
+ Calculate the cosine similarity between two spectra.
+ :param experimental_peaks_df:
+ :param predicted_peaks_df:
+ :param mz_tolerance:
+ :return:
+ """
+ original_experimental_peaks_df = experimental_peaks_df.copy()
+ original_predicted_peaks_df = predicted_peaks_df.copy()
+ original_experimental_peaks_df[DataKeys.INTENSITY] = (
+ original_experimental_peaks_df[DataKeys.INTENSITY]
+ / original_experimental_peaks_df[DataKeys.INTENSITY].max()
+ )
+ experimental_peaks_df[DataKeys.INTENSITY] = (
+ experimental_peaks_df[DataKeys.INTENSITY]
+ / experimental_peaks_df[DataKeys.INTENSITY].max()
+ )
+ matches = []
+ unmatched_experimental_peaks = []
+ unmatched_theoretical_peaks = []
+ for mz_a, int_a in predicted_peaks_df[[DataKeys.MZ, DataKeys.INTENSITY]].values:
+ candidates = experimental_peaks_df[
+ (experimental_peaks_df[DataKeys.MZ] >= mz_a - mz_tolerance)
+ & (experimental_peaks_df[DataKeys.MZ] <= mz_a + mz_tolerance)
+ ]
+ if candidates.empty:
+ unmatched_theoretical_peaks.append((mz_a, int_a))
+ continue
+
+ index = candidates[DataKeys.INTENSITY].idxmax()
+ mz_b, int_b = experimental_peaks_df.loc[
+ index, [DataKeys.MZ, DataKeys.INTENSITY]
+ ]
+ experimental_peaks_df = experimental_peaks_df.drop(index)
+ matches.append(((mz_a, int_a), (mz_b, int_b)))
+
+ for mz_b, int_b in experimental_peaks_df[[DataKeys.MZ, DataKeys.INTENSITY]].values:
+ unmatched_experimental_peaks.append((mz_b, int_b))
+ if not matches:
+ return 0.0
+ # Calculate the cosine similarity
+ squared_sum_exp_intensities = sum(
+ [
+ intensity**2
+ for mz, intensity in original_experimental_peaks_df[
+ [DataKeys.MZ, DataKeys.INTENSITY]
+ ].values
+ ]
+ )
+ squared_sum_pred_intensities = sum(
+ [
+ intensity**2
+ for mz, intensity in original_predicted_peaks_df[
+ [DataKeys.MZ, DataKeys.INTENSITY]
+ ].values
+ ]
+ )
+ squared_sum_unmatched_exp_intensities = sum(
+ [intensity**2 for mz, intensity in unmatched_experimental_peaks]
+ )
+ squared_sum_unmatched_pred_intensities = sum(
+ [intensity**2 for mz, intensity in unmatched_theoretical_peaks]
+ )
+ numerator_a = sum([int_a * int_b for (mz_a, int_a), (mz_b, int_b) in matches])
+ demoninator_a = (squared_sum_exp_intensities**0.5) * (
+ squared_sum_pred_intensities**0.5
+ )
+ term_a = numerator_a / demoninator_a
+
+ numerator_b = (
+ squared_sum_unmatched_exp_intensities * squared_sum_unmatched_pred_intensities
+ )
+ denominator_b = squared_sum_exp_intensities * squared_sum_pred_intensities
+ term_b = numerator_b / denominator_b
+ similarity = term_a - term_b
+ if similarity > 1 or similarity < -1:
+ raise ValueError(f"Invalid cosine similarity: {similarity}")
+ return similarity
+
diff --git a/protzilla/data_analysis/spectrum_prediction/__init__.py b/protzilla/data_analysis/spectrum_prediction/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/protzilla/data_analysis/spectrum_prediction/spectrum.py b/protzilla/data_analysis/spectrum_prediction/spectrum.py
new file mode 100644
index 00000000..044edcd1
--- /dev/null
+++ b/protzilla/data_analysis/spectrum_prediction/spectrum.py
@@ -0,0 +1,584 @@
+import asyncio
+import concurrent.futures
+import hashlib
+import json
+import multiprocessing
+import re
+from typing import Dict, List, Optional
+
+import aiohttp
+import numpy as np
+import pandas as pd
+from tqdm import tqdm
+
+from protzilla.constants.ms_constants import DataKeys
+from protzilla.constants.protzilla_logging import logger
+from protzilla.data_analysis.spectrum_prediction.spectrum_prediction_utils import (
+ CSV_COLUMNS,
+ GenericTextKeys,
+ OutputKeys,
+ PredictionModelMetadata,
+ calculate_peptide_mass,
+)
+from protzilla.disk_operator import FileOutput
+
+
+class Spectrum:
+ def __init__(
+ self,
+ peptide_sequence: str,
+ charge: int,
+ peptide_mz: float,
+ mz_values: np.array,
+ intensity_values: np.array,
+ metadata: Optional[dict] = None,
+ annotations: Optional[dict] = None,
+ sanitize: bool = True,
+ ):
+ """
+ Create a new Spectrum object.
+ :param peptide_sequence: the peptide sequence of the precursor peptide of the spectrum
+ :param charge: the charge of the peptide precursor
+ :param metadata: dictionary containing spectrum metadata, e.g. collision energy, fragmentation type
+ :param annotations: a dictionary containing additional peak annotations
+ :param sanitize: if True, the spectrum will be sanitized by removing duplicates and negative intensities
+ """
+ self.peptide_sequence = peptide_sequence
+ self.peptide_mz = peptide_mz
+ self.precursor_charge = charge
+ self.metadata = metadata if metadata else {}
+ self._initialize_metadata()
+ self.unique_id = self._generate_hash()
+
+ self.spectrum = pd.DataFrame(
+ zip(mz_values, intensity_values),
+ columns=[DataKeys.MZ, DataKeys.INTENSITY],
+ )
+ if annotations:
+ for key, value in annotations.items():
+ self.spectrum[key] = value
+
+ if sanitize:
+ self._sanitize_spectrum()
+
+ def __str__(self):
+ return f"{self.peptide_sequence}: {self.precursor_charge}, {self.spectrum.shape[0]} peaks"
+
+ def _sanitize_spectrum(self):
+ """Remove duplicates and invalid / dropped peaks from the spectrum.
+ Negative intensities are removed."""
+ self.spectrum = self.spectrum.drop_duplicates(subset=DataKeys.MZ)
+ self.spectrum = self.spectrum[self.spectrum[DataKeys.INTENSITY] > 0]
+
+ def _generate_hash(self) -> str:
+ """Generate a unique hash based on all metadata of the spectrum."""
+ metadata_str = "".join(f"{k}={v}" for k, v in sorted(self.metadata.items()))
+ return hashlib.md5(metadata_str.encode()).hexdigest()
+
+ def _initialize_metadata(self):
+ self.metadata.setdefault(DataKeys.PEPTIDE_SEQUENCE, self.peptide_sequence)
+ self.metadata.setdefault(DataKeys.PRECURSOR_CHARGE, self.precursor_charge)
+ self.metadata.setdefault(DataKeys.PRECURSOR_MZ, self.peptide_mz)
+ # self.metadata.setdefault(DATA_KEYS.COLLISION_ENERGY, None) # TODO delete if not necessary
+ # self.metadata.setdefault(DATA_KEYS.FRAGMENTATION_TYPE, None)
+
+ def __str__(self):
+ return f"{self.peptide_sequence}: {self.charge}, {self.spectrum.shape[0]} peaks"
+
+ def _sanitize_spectrum(self):
+ self.spectrum = self.spectrum.drop_duplicates(subset=DataKeys.MZ)
+ self.spectrum = self.spectrum[self.spectrum[DataKeys.INTENSITY] > 0]
+
+ def to_mergeable_df(self):
+ """Convert the spectrum to two DataFrames: one for metadata and one for spectrum peaks."""
+ # Create the spectrum peaks DataFrame
+ peaks_df = self.spectrum.copy()
+ peaks_df["unique_id"] = self.unique_id
+
+ # Ensure 'm/z' and 'intensity' are the first columns after 'unique_id'
+ column_order = ["unique_id", DataKeys.MZ, DataKeys.INTENSITY]
+ annotation_columns = [
+ col for col in peaks_df.columns if col not in column_order
+ ]
+ column_order.extend(annotation_columns)
+ peaks_df = peaks_df[column_order]
+
+ # Create the metadata DataFrame
+ metadata_df = pd.DataFrame(
+ {
+ "unique_id": [self.unique_id],
+ **{k: [v] for k, v in self.metadata.items()},
+ }
+ )
+ # set index to unique_id as to hide it in the output and not confuse biologists
+ metadata_df.set_index("unique_id", inplace=True)
+ peaks_df.set_index("unique_id", inplace=True)
+ return metadata_df, peaks_df
+
+ @property
+ def peptide_mass(self):
+ return calculate_peptide_mass(self.peptide_mz, self.precursor_charge)
+
+
+class SpectrumPredictor:
+ def __init__(self, prediction_df: Optional[pd.DataFrame]):
+ if prediction_df is not None:
+ self.load_prediction_df(prediction_df)
+
+ def predict(self):
+ raise NotImplementedError(
+ "This method should be implemented in the child class"
+ )
+
+ def preprocess(self):
+ raise NotImplementedError(
+ "This method should be implemented in the child class"
+ )
+
+ def verify_dataframe(self, prediction_df: Optional[pd.DataFrame] = None):
+ raise NotImplementedError(
+ "This method should be implemented in the child class"
+ )
+
+ def load_prediction_df(self, prediction_df: pd.DataFrame):
+ self.prediction_df = prediction_df
+ self.preprocess()
+ self.verify_dataframe()
+
+
+class KoinaModel(SpectrumPredictor):
+ ptm_regex = re.compile(r"[\[\(]")
+ FRAGMENT_ANNOTATION_PATTERN = re.compile(r"([a-zA-Z]\d+)\+(\d+)")
+
+ def __init__(
+ self,
+ required_keys: list[str],
+ url: str,
+ prediction_df: Optional[pd.DataFrame] = None,
+ **kwargs,
+ ):
+ super().__init__(prediction_df)
+ self.required_keys = required_keys
+ self.KOINA_URL = url
+ self.preprocess_args = kwargs.get("preprocess_args", {})
+
+ def load_prediction_df(self, prediction_df: pd.DataFrame):
+ self.prediction_df = prediction_df
+ self.preprocess()
+ self.verify_dataframe()
+ return self.prediction_df
+
+ def verify_dataframe(self, prediction_df: Optional[pd.DataFrame] = None):
+ if prediction_df is None:
+ prediction_df = self.prediction_df
+ for key in self.required_keys:
+ if key not in prediction_df.columns:
+ raise ValueError(f"Required key '{key}' not found in input DataFrame.")
+
+ def preprocess(self):
+ self.prediction_df = (
+ self.prediction_df[self.required_keys + [DataKeys.PRECURSOR_MZ]]
+ .drop_duplicates(
+ subset=[DataKeys.PEPTIDE_SEQUENCE, DataKeys.PRECURSOR_CHARGE]
+ )
+ .reset_index(drop=True)
+ )
+
+ self.prediction_df = self.prediction_df[
+ self.prediction_df[DataKeys.PRECURSOR_CHARGE]
+ <= self.preprocess_args.get("max_charge", 5)
+ ]
+ if self.preprocess_args.get("filter_ptms", True):
+ self.filter_ptms()
+
+ if self.preprocess_args.get("replace_J_with_L", False):
+ self.prediction_df[DataKeys.PEPTIDE_SEQUENCE] = self.prediction_df[
+ DataKeys.PEPTIDE_SEQUENCE
+ ].str.replace("J", "L")
+
+ def filter_ptms(self):
+ self.prediction_df = self.prediction_df[
+ ~self.prediction_df[DataKeys.PEPTIDE_SEQUENCE].str.contains(
+ self.ptm_regex, regex=True
+ )
+ ]
+
+ def predict(self):
+ predicted_spectra = []
+ slice_indices = self.slice_dataframe()
+ formatted_data = self.format_dataframes(slice_indices)
+ response_data = asyncio.run(self.make_request(formatted_data, slice_indices))
+
+ num_processes = min(multiprocessing.cpu_count() // 2, len(response_data))
+
+ with concurrent.futures.ProcessPoolExecutor(
+ max_workers=num_processes
+ ) as executor:
+ futures = []
+ for response, indices in response_data:
+ future = executor.submit(
+ self.process_response_batch,
+ self.prediction_df.loc[indices],
+ response,
+ )
+ futures.append(future)
+
+ for future in tqdm(
+ concurrent.futures.as_completed(futures),
+ total=len(futures),
+ desc="Processing predictions",
+ ):
+ predicted_spectra.extend(future.result())
+
+ return predicted_spectra
+
+ def format_dataframes(self, slice_indices):
+ """Format a list of slices of the prediction DataFrame for the request."""
+ return [
+ self.format_for_request(self.prediction_df.loc[slice])
+ for slice in slice_indices
+ ]
+
+ def slice_dataframe(self, chunk_size: int = 1000):
+ """Slice the prediction DataFrame into chunks of size chunk_size."""
+ return [
+ self.prediction_df[i : i + chunk_size].index
+ for i in range(0, len(self.prediction_df), chunk_size)
+ ]
+
+ def format_for_request(self, to_predict: pd.DataFrame) -> dict:
+ """Format the DataFrame for the request to the Koina API. Returns the formatted data as a JSON string."""
+ inputs = []
+ if DataKeys.PEPTIDE_SEQUENCE in to_predict.columns:
+ inputs.append(
+ {
+ "name": str(DataKeys.PEPTIDE_SEQUENCE),
+ "shape": [len(to_predict), 1],
+ "datatype": "BYTES",
+ "data": to_predict[DataKeys.PEPTIDE_SEQUENCE].to_list(),
+ }
+ )
+ if DataKeys.PRECURSOR_CHARGE in to_predict.columns:
+ inputs.append(
+ {
+ "name": str(DataKeys.PRECURSOR_CHARGE),
+ "shape": [len(to_predict), 1],
+ "datatype": "INT32",
+ "data": to_predict[DataKeys.PRECURSOR_CHARGE].to_list(),
+ }
+ )
+ if DataKeys.COLLISION_ENERGY in to_predict.columns:
+ inputs.append(
+ {
+ "name": str(DataKeys.COLLISION_ENERGY),
+ "shape": [len(to_predict), 1],
+ "datatype": "FP32",
+ "data": to_predict[DataKeys.COLLISION_ENERGY].to_list(),
+ }
+ )
+ if DataKeys.FRAGMENTATION_TYPE in to_predict.columns:
+ inputs.append(
+ {
+ "name": str(DataKeys.FRAGMENTATION_TYPE),
+ "shape": [len(to_predict), 1],
+ "datatype": "BYTES",
+ "data": to_predict[DataKeys.FRAGMENTATION_TYPE].to_list(),
+ }
+ )
+
+ if DataKeys.INSTRUMENT_TYPE in to_predict.columns:
+ inputs.append(
+ {
+ "name": str(DataKeys.INSTRUMENT_TYPE),
+ "shape": [len(to_predict), 1],
+ "datatype": "BYTES",
+ "data": to_predict[DataKeys.INSTRUMENT_TYPE].to_list(),
+ }
+ )
+ return {"id": "0", "inputs": inputs}
+
+ async def make_request(
+ self, formatted_data: list[dict], slice_indices: list
+ ) -> list[dict]:
+ """Asynchronously make a POST request to the Koina API. Returns the response data as a list of dictionaries.
+ In the case of an error, we will recursively divide and conquer the data until we get a successful response.
+ """
+ async with aiohttp.ClientSession() as session:
+ tasks = []
+ for data, indices in zip(formatted_data, slice_indices):
+ tasks.append(
+ (session.post(self.KOINA_URL, data=json.dumps(data)), indices)
+ )
+ logger.info(
+ f"Requesting {len(indices)} spectra {indices[0]}-{indices[-1]}..."
+ )
+ responses = []
+ for task, indices in tasks:
+ response = await task
+ if response.status != 200:
+ if len(indices) > 1:
+ mid = len(indices) // 2
+ a, b = indices[:mid], indices[mid:]
+ logger.warning(
+ f"Error response received for {indices[0]}-{indices[-1]}, splitting data: {a[0]}-{a[-1]} and {b[0]}-{b[-1]}..."
+ )
+ formatted_data = self.format_dataframes([a, b])
+ responses.extend(
+ await self.make_request(formatted_data, [a, b])
+ )
+ else:
+ logger.error(
+ f"Skipping peptide {self.prediction_df.loc[indices[0]][DataKeys.PEPTIDE_SEQUENCE]} with charge {self.prediction_df.loc[indices[0]][DataKeys.PRECURSOR_CHARGE]}."
+ )
+ logger.debug(f"Error in response: {await response.text()}")
+ else:
+ responses.append((await response.json(), indices))
+ return responses
+
+ @staticmethod
+ def process_response_batch(request: pd.DataFrame, response: dict) -> List[Spectrum]:
+ prepared_data = KoinaModel.prepare_data(response)
+ return [
+ KoinaModel.create_spectrum(row, prepared_data, i)
+ for i, (_, row) in enumerate(request.iterrows())
+ ]
+
+ @staticmethod
+ def prepare_data(response: dict) -> dict:
+ results = KoinaModel.extract_data_from_response(response)
+ fragment_charges, fragment_types = KoinaModel.extract_fragment_information(
+ results[OutputKeys.ANNOTATIONS]
+ )
+ results[OutputKeys.FRAGMENT_TYPE] = fragment_types
+ results[OutputKeys.FRAGMENT_CHARGE] = fragment_charges
+ return results
+
+ @staticmethod
+ def create_spectrum(
+ row: pd.Series, prepared_data: Dict[str, np.ndarray], index: int
+ ) -> Spectrum:
+ try:
+ peptide_sequence = row.get(DataKeys.PEPTIDE_SEQUENCE)
+ precursor_charge = row.get(DataKeys.PRECURSOR_CHARGE)
+ peptide_mz = row.get(DataKeys.PRECURSOR_MZ)
+ collision_energy = row.get(DataKeys.COLLISION_ENERGY)
+ fragmentation_type = row.get(DataKeys.FRAGMENTATION_TYPE)
+ mz_values = prepared_data.get(OutputKeys.MZ_VALUES)[index]
+ intensity_values = prepared_data.get(OutputKeys.INTENSITY_VALUES)[index]
+ peak_annotations = {
+ OutputKeys.FRAGMENT_TYPE: prepared_data.get(OutputKeys.FRAGMENT_TYPE)[
+ index
+ ],
+ OutputKeys.FRAGMENT_CHARGE: prepared_data.get(
+ OutputKeys.FRAGMENT_CHARGE
+ )[index],
+ }
+ metadata = {}
+ if collision_energy:
+ metadata[DataKeys.COLLISION_ENERGY] = collision_energy
+ if fragmentation_type:
+ metadata[DataKeys.FRAGMENTATION_TYPE] = fragmentation_type
+
+ return Spectrum(
+ peptide_sequence=peptide_sequence,
+ charge=precursor_charge,
+ peptide_mz=peptide_mz,
+ mz_values=mz_values,
+ intensity_values=intensity_values,
+ annotations=peak_annotations,
+ metadata=metadata,
+ )
+ except (KeyError, TypeError) as e:
+ raise ValueError(f"Error while creating spectrum: {e}")
+
+ @staticmethod
+ def extract_fragment_information(fragment_annotations: np.array):
+ def extract_annotation_information(annotation_str: str):
+ if match := KoinaModel.FRAGMENT_ANNOTATION_PATTERN.match(annotation_str):
+ return match.group(1), match.group(2)
+ return None, None
+
+ vectorized_annotation_extraction = np.vectorize(extract_annotation_information)
+ fragment_types, fragment_charges = vectorized_annotation_extraction(
+ fragment_annotations
+ )
+ # TODO find a way to make the None values always represented as ""
+ fragment_types, fragment_charges = fragment_types.astype(
+ str
+ ), fragment_charges.astype(str)
+ fragment_types[fragment_types == "None"] = ""
+ fragment_charges[fragment_charges == "None"] = ""
+ return fragment_charges, fragment_types
+
+ @staticmethod
+ def extract_data_from_response(response: dict):
+ results = {}
+ for output in response["outputs"]:
+ results[output["name"]] = np.reshape(output["data"], output["shape"])
+ return results
+
+
+class SpectrumPredictorFactory:
+ @staticmethod
+ def create_predictor(model_name: str) -> KoinaModel:
+ if model_name not in PredictionModelMetadata:
+ raise ValueError(f"Model '{model_name}' is not available.")
+ return KoinaModel(**PredictionModelMetadata[model_name])
+
+
+class SpectrumExporter:
+ msp_metadata_mapping = {
+ DataKeys.PRECURSOR_CHARGE: "Charge",
+ DataKeys.PRECURSOR_MZ: "Parent",
+ DataKeys.COLLISION_ENERGY: "Collision Energy",
+ }
+
+ @staticmethod
+ def export_to_msp(spectra: list[Spectrum], base_file_name: str):
+ lines = []
+ for spectrum in tqdm(
+ spectra, desc="Exporting spectra to .msp format", total=len(spectra)
+ ):
+ renamed_metadata = {
+ SpectrumExporter.msp_metadata_mapping.get(k): v
+ for k, v in spectrum.metadata.items()
+ if k in SpectrumExporter.msp_metadata_mapping
+ }
+ header = (
+ f"Name: {spectrum.peptide_sequence}\n"
+ f"Comment: {''.join([f'{k}={v} ' for k, v in renamed_metadata.items() if v])}\n"
+ f"Num Peaks: {len(spectrum.spectrum)}"
+ )
+ peaks = "".join(SpectrumExporter._format_peaks_for_msp(spectrum.spectrum))
+ lines.append(f"{header}\n{peaks}\n")
+
+ logger.info(
+ f"Exported {len(spectra)} spectra to MSP format, now combining them"
+ )
+ content = "\n".join(lines)
+ logger.info("Export finished!")
+ return FileOutput(base_file_name, "msp", content)
+
+ @staticmethod
+ def _format_peaks_for_msp(
+ spectrum_df: pd.DataFrame,
+ prefix='"',
+ seperator=" ",
+ suffix='"',
+ ):
+ peaks = [
+ f"{mz}\t{intensity}"
+ for mz, intensity in spectrum_df[[DataKeys.MZ, DataKeys.INTENSITY]].values
+ ]
+ annotations = [f"{prefix}" for _ in spectrum_df.values]
+ if len(spectrum_df.columns) <= 2:
+ pass
+ else:
+ for column in spectrum_df.columns[2:]:
+ if column == OutputKeys.FRAGMENT_CHARGE:
+ annotations = [
+ current_annotation_str[:-1] + f"^{fragment_charge}{seperator}"
+ for current_annotation_str, fragment_charge in zip(
+ annotations, spectrum_df[column]
+ )
+ ]
+ continue
+
+ annotations = [
+ current_annotation_str + str(annotation) + seperator
+ for current_annotation_str, annotation in zip(
+ annotations, spectrum_df[column]
+ )
+ ]
+ annotations = [
+ current_annotation_str[:-1] for current_annotation_str in annotations
+ ]
+ peaks = [
+ f"{peak}\t{annotation}{suffix}\n"
+ for peak, annotation in zip(peaks, annotations)
+ ]
+
+ return peaks
+
+ csv_fragment_pattern = re.compile(r"([yb])(\d+)")
+
+ @staticmethod
+ def export_to_generic_text(
+ spectra: list[Spectrum], base_file_name: str, seperator: str = ","
+ ):
+ """Converts to generic text, see
+ https://biognosys.com/content/uploads/2023/03/Spectronaut-17_UserManual.pdf
+ for reference
+ """
+ if seperator not in [",", ";", "\t"]:
+ raise ValueError(r"Invalid seperator, please use one of: ',' , ';' , '\t'")
+ if seperator == "\t":
+ file_extension = "tsv"
+ else:
+ file_extension = "csv"
+
+ output_df = pd.DataFrame()
+ spectrum_dfs = []
+ for spectrum in tqdm(spectra, desc="Preparing spectra for export"):
+ spectrum_df = spectrum.spectrum.copy()
+ spectrum_df[GenericTextKeys.PEPTIDE_MZ] = spectrum.peptide_mz
+ spectrum_df[GenericTextKeys.PEPTIDE_SEQUENCE] = spectrum.peptide_sequence
+ spectrum_df[GenericTextKeys.PRECURSOR_CHARGE] = spectrum.precursor_charge
+ spectrum_df[GenericTextKeys.FRAGMENT_NUMBER] = spectrum_df[
+ OutputKeys.FRAGMENT_TYPE
+ ].apply(lambda x: SpectrumExporter.csv_fragment_pattern.match(x).group(2))
+ spectrum_df[GenericTextKeys.FRAGMENT_TYPE] = spectrum_df[
+ OutputKeys.FRAGMENT_TYPE
+ ].apply(lambda x: SpectrumExporter.csv_fragment_pattern.match(x).group(1))
+ spectrum_df.rename(
+ columns={
+ DataKeys.MZ: GenericTextKeys.MZ,
+ DataKeys.INTENSITY: GenericTextKeys.INTENSITY,
+ DataKeys.FRAGMENT_CHARGE: GenericTextKeys.FRAGMENT_CHARGE,
+ },
+ inplace=True,
+ )
+
+ spectrum_df = spectrum_df[CSV_COLUMNS]
+ spectrum_dfs.append(spectrum_df)
+ output_df = (
+ pd.concat(spectrum_dfs, ignore_index=True)
+ if spectrum_dfs
+ else pd.DataFrame(columns=CSV_COLUMNS)
+ )
+ content = output_df.to_csv(sep=seperator, index=False)
+ return FileOutput(base_file_name, file_extension, content)
+
+ @staticmethod
+ def _format_peaks_for_mgf(spectrum_df: pd.DataFrame):
+ peaks = [
+ f"{mz}\t{intensity}"
+ for mz, intensity in spectrum_df[[DataKeys.MZ, DataKeys.INTENSITY]].values
+ ]
+ return peaks
+
+ @staticmethod
+ def export_to_mgf(spectra: list[Spectrum], base_file_name: str):
+ lines = []
+ for spectrum in tqdm(
+ spectra, desc="Exporting spectra to .mgf format", total=len(spectra)
+ ):
+ if spectrum.precursor_charge is None or spectrum.precursor_charge == 0:
+ raise ValueError(
+ f"Invalid precursor charge for spectrum {spectrum.peptide_sequence}, please provide a valid precursor charge."
+ )
+ header = (
+ f"BEGIN IONS\n"
+ f"TITLE={spectrum.peptide_sequence}\n"
+ f"PEPMASS={spectrum.peptide_mass}\n"
+ f"CHARGE={spectrum.precursor_charge}+\n"
+ )
+ peaks = "\n".join(SpectrumExporter._format_peaks_for_mgf(spectrum.spectrum))
+ lines.append(f"{header}\n{peaks}\n\nEND IONS\n")
+
+ logger.info(
+ f"Exported {len(spectra)} spectra to MGF format, now combining them"
+ )
+ content = "\n".join(lines)
+ logger.info("Export finished!")
+ return FileOutput(base_file_name, "mgf", content)
diff --git a/protzilla/data_analysis/spectrum_prediction/spectrum_prediction_utils.py b/protzilla/data_analysis/spectrum_prediction/spectrum_prediction_utils.py
new file mode 100644
index 00000000..220c2be4
--- /dev/null
+++ b/protzilla/data_analysis/spectrum_prediction/spectrum_prediction_utils.py
@@ -0,0 +1,140 @@
+from enum import StrEnum
+
+from protzilla.constants.ms_constants import DataKeys
+from ui.runs.forms.fill_helper import enclose_links_in_html
+
+
+def format_citation(model_name):
+ model_info = PredictionModelMetadata[model_name]
+ citation_string = (
+ f"{model_name}:
"
+ f'{enclose_links_in_html(model_info.get("citation", ""))}
'
+ f'{enclose_links_in_html(model_info.get("doi", ""))}
'
+ f'{enclose_links_in_html(model_info["github_url"]) if model_info.get("github_url") else ""}
'
+ )
+ return citation_string
+
+
+def calculate_peptide_mass(peptide_mz: float, charge: int) -> float:
+ proton_mass = 1.007276466812
+ return (peptide_mz * charge) - (proton_mass * charge)
+
+
+class GenericTextKeys(StrEnum):
+ """These are the column names that are used in the generic text format"""
+
+ PEPTIDE_SEQUENCE = "StrippedSequence"
+ PRECURSOR_CHARGE = "PrecursorCharge"
+ PEPTIDE_MZ = "PrecursorMz"
+ MZ = "FragmentMz"
+ INTENSITY = "RelativeFragmentIntensity"
+ FRAGMENT_TYPE = "FragmentType"
+ FRAGMENT_NUMBER = "FragmentNumber"
+ FRAGMENT_CHARGE = "FragmentCharge"
+
+
+class GenericTextSeparator(StrEnum):
+ """These are the column separators that are used in the generic text format"""
+
+ COMMA = ";"
+ SEMICOLON = ","
+ TAB = "\t"
+
+
+CSV_COLUMNS = [
+ GenericTextKeys.PEPTIDE_SEQUENCE,
+ GenericTextKeys.PEPTIDE_MZ,
+ GenericTextKeys.PRECURSOR_CHARGE,
+ GenericTextKeys.MZ,
+ GenericTextKeys.INTENSITY,
+ GenericTextKeys.FRAGMENT_TYPE,
+ GenericTextKeys.FRAGMENT_NUMBER,
+]
+
+
+class OutputKeys(StrEnum):
+ """These are the keys that are that are returned from the API"""
+
+ MZ_VALUES = "mz"
+ INTENSITY_VALUES = "intensities"
+ ANNOTATIONS = "annotation"
+ FRAGMENT_TYPE = "fragment_type"
+ FRAGMENT_CHARGE = "fragment_charge"
+
+
+class PredictionModels(StrEnum):
+ """The different spectrum prediction models that are supported."""
+
+ PROSITINTENSITYHCD = "PrositIntensityHCD"
+ PROSITINTENSITYCID = "PrositIntensityCID"
+ PROSITINTENSITYTIMSTOF = "PrositIntensityTimsTOF"
+ PROSITINTENSITYTMT = "PrositIntensityTMT"
+ UNISPEC = "UniSpec"
+
+
+PredictionModelMetadata = {
+ PredictionModels.PROSITINTENSITYHCD: {
+ "url": "https://koina.wilhelmlab.org/v2/models/Prosit_2020_intensity_HCD/infer",
+ "citation": "Wilhelm, M., Zolg, D.P., Graber, M. et al. Nat Commun 12, 3346 (2021).",
+ "doi": "https://doi.org/10.1038/s41467-021-23713-9",
+ "github_url": "https://github.com/kusterlab/prosit",
+ "required_keys": [
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.COLLISION_ENERGY,
+ ],
+ },
+ PredictionModels.PROSITINTENSITYCID: {
+ "url": "https://koina.wilhelmlab.org/v2/models/Prosit_2020_intensity_CID/infer",
+ "citation": "Wilhelm, M., Zolg, D.P., Graber, M. et al. Nat Commun 12, 3346 (2021).",
+ "doi": "https://doi.org/10.1038/s41467-021-23713-9",
+ "github_url": "https://github.com/kusterlab/prosit",
+ "required_keys": [
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ ],
+ }, # mean 0.306 median 0.382
+ PredictionModels.PROSITINTENSITYTIMSTOF: {
+ "url": "https://koina.wilhelmlab.org/v2/models/Prosit_2023_intensity_timsTOF/infer",
+ "citation": "C., Gabriel, W., Laukens, K. et al. Nat Commun 15, 3956 (2024).",
+ "doi": "https://doi.org/10.1038/s41467-024-48322-0",
+ "github_url": None,
+ "required_keys": [
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.COLLISION_ENERGY,
+ ],
+ },
+ PredictionModels.PROSITINTENSITYTMT: {
+ "url": "https://koina.wilhelmlab.org/v2/models/Prosit_2020_intensity_TMT/infer",
+ "citation": " Wassim Gabriel, Matthew The, Daniel P. Zolg, Florian P. Bayer, et al. Analytical Chemistry 2022 94 (20), 7181-7190.",
+ "doi": "https://doi.org/10.1021/acs.analchem.1c05435",
+ "github_url": "https://github.com/kusterlab/prosit",
+ "required_keys": [
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.COLLISION_ENERGY,
+ DataKeys.FRAGMENTATION_TYPE,
+ ],
+ "preprocess_args": {"filter_ptms": False},
+ },
+}
+formatted_citation_dict = {
+ model_name: format_citation(model_name) for model_name in PredictionModelMetadata
+}
+
+
+class OutputFormats(StrEnum):
+ """The different output formats for the spectrum predictions that are supported."""
+
+ CSV_TSV = "csv/tsv"
+ MSP = "msp"
+ MGF = "mgf"
+
+
+class OutputsPredictFunction(StrEnum):
+ """The dictionary keys of the outputs of the predict function."""
+
+ PREDICTED_SPECTRA = "predicted_spectra"
+ PREDICTED_SPECTRA_METADATA = "predicted_spectra_metadata"
+ PREDICTED_SPECTRA_PEAKS = "predicted_spectra_peaks"
diff --git a/protzilla/disk_operator.py b/protzilla/disk_operator.py
index ce7f07ad..474fb00a 100644
--- a/protzilla/disk_operator.py
+++ b/protzilla/disk_operator.py
@@ -21,6 +21,17 @@
DEBUG_MODE = False
+@dataclass
+class FileOutput:
+ base_file_name: str
+ file_extension: str
+ content: str
+
+ @property
+ def filename(self) -> str:
+ return f"{self.base_file_name}.{self.file_extension}"
+
+
class ErrorHandler:
def __enter__(self):
return self
@@ -58,12 +69,38 @@ def write(file_path: Path, data: dict):
yaml.dump(data, file)
+class FileOutputOperator:
+ @staticmethod
+ def write(file_path: Path, data: bytes):
+ with ErrorHandler():
+ if file_path.exists():
+ logger.warning(f"File {file_path} already exists, overwriting")
+ file_path.unlink()
+ with open(file_path, "w") as file:
+ file.write(data)
+
+ @staticmethod
+ def read(file_path: Path | str):
+ with ErrorHandler():
+ if isinstance(file_path, str):
+ file_path = Path(file_path)
+
+ with open(file_path, "r") as file:
+ logger.info(f"Reading file output from {file_path}")
+ content = file.read()
+ return FileOutput(
+ base_file_name=file_path.stem,
+ file_extension=file_path.suffix[1:],
+ content=content,
+ )
+
+
class DataFrameOperator:
@staticmethod
def read(file_path: Path):
with ErrorHandler():
logger.info(f"Reading dataframe from {file_path}")
- return pd.read_csv(file_path)
+ return pd.read_csv(file_path, index_col=0)
@staticmethod
def write(file_path: Path, dataframe: pd.DataFrame):
@@ -74,7 +111,7 @@ def write(file_path: Path, dataframe: pd.DataFrame):
)
return
logger.info(f"Writing dataframe to {file_path}")
- dataframe.to_csv(file_path, index=False)
+ dataframe.to_csv(file_path, index=True)
RUN_FILE = "run.yaml"
@@ -102,6 +139,7 @@ def __init__(self, run_name: str, workflow_name: str):
self.workflow_name = workflow_name
self.yaml_operator = YamlOperator()
self.dataframe_operator = DataFrameOperator()
+ self.outputfile_operator = FileOutputOperator()
def read_run(self, file: Path | None = None) -> StepManager:
with ErrorHandler():
@@ -156,6 +194,7 @@ def export_workflow(self, step_manager: StepManager, workflow_name: str) -> None
for input_key, input_value in inputs:
if not (
isinstance(input_value, pd.DataFrame)
+ or isinstance(input_value, FileOutput)
or utilities.check_is_path(input_value)
):
inputs_to_write[input_key] = input_value
@@ -175,10 +214,21 @@ def check_file_validity(self, file: Path, steps: StepManager) -> bool:
# have recently been (re)calculcated, therefore invalidating the existing file
if steps.current_step.instance_identifier in file.name:
return False
- return any(
- step.instance_identifier in file.name and step.finished
- for step in steps.all_steps
- )
+ for step in steps.all_steps:
+ if not step.finished:
+ continue
+ if step.instance_identifier in file.name:
+ return True
+ for output_key, output in step.output:
+ if isinstance(output, FileOutput) and output.filename in file.name:
+ return True
+ if (
+ isinstance(output, str)
+ and utilities.check_is_path(output)
+ and output in file.name
+ ):
+ return True
+ return False
def clean_dataframes_dir(self, steps: StepManager) -> None:
with ErrorHandler():
@@ -238,8 +288,14 @@ def _read_outputs(self, output: dict) -> Output:
with ErrorHandler():
step_output = {}
for key, value in output.items():
- if isinstance(value, str) and Path(value).exists():
+ if (
+ isinstance(value, str)
+ and Path(value).exists()
+ and Path(value).suffix == ".csv"
+ ):
step_output[key] = self.dataframe_operator.read(value)
+ elif isinstance(value, str) and Path(value).exists():
+ step_output[key] = self.outputfile_operator.read(value)
else:
step_output[key] = value
return Output(step_output)
@@ -252,6 +308,10 @@ def _write_output(self, instance_identifier: str, output: Output) -> dict:
file_path = self.dataframe_dir / f"{instance_identifier}_{key}.csv"
self.dataframe_operator.write(file_path, value)
output_data[key] = str(file_path)
+ elif isinstance(value, FileOutput):
+ file_path = self.dataframe_dir / f"{value.filename}"
+ self.outputfile_operator.write(file_path, value.content)
+ output_data[key] = str(file_path)
else:
output_data[key] = value
return output_data
diff --git a/protzilla/importing/peptide_import.py b/protzilla/importing/peptide_import.py
index e7842ccb..cf5a5498 100644
--- a/protzilla/importing/peptide_import.py
+++ b/protzilla/importing/peptide_import.py
@@ -3,6 +3,7 @@
import pandas as pd
+from protzilla.constants.ms_constants import DataKeys
from protzilla.importing.ms_data_import import clean_protein_groups
@@ -84,6 +85,7 @@ def evidence_import(file_path, intensity_name, map_to_uniprot) -> dict:
"LFQ intensity" if intensity_name == "iBAQ" else intensity_name
)
+ # TODO convert these magic strings to constants in a StrEnum ...
id_columns = [
"Experiment",
"Leading razor protein",
@@ -93,7 +95,9 @@ def evidence_import(file_path, intensity_name, map_to_uniprot) -> dict:
"Modified sequence",
"Missed cleavages",
"PEP",
+ "Charge",
"Raw file",
+ "m/z",
]
read = pd.read_csv(
@@ -106,8 +110,15 @@ def evidence_import(file_path, intensity_name, map_to_uniprot) -> dict:
df = read[id_columns]
- df = df.rename(columns={"Leading razor protein": "Protein ID"})
- df = df.rename(columns={"Experiment": "Sample"})
+ df = df.rename(
+ columns={
+ "Leading razor protein": "Protein ID",
+ "Experiment": "Sample",
+ "m/z": DataKeys.PRECURSOR_MZ,
+ "Charge": DataKeys.PRECURSOR_CHARGE,
+ }
+ )
+ df = df.rename(columns={})
df.dropna(subset=["Protein ID"], inplace=True)
df.sort_values(
diff --git a/protzilla/methods/data_analysis.py b/protzilla/methods/data_analysis.py
index 511629f5..c94ab808 100644
--- a/protzilla/methods/data_analysis.py
+++ b/protzilla/methods/data_analysis.py
@@ -1,5 +1,6 @@
import logging
+import protzilla.constants.ms_constants
from protzilla.data_analysis.classification import random_forest, svm
from protzilla.data_analysis.clustering import (
expectation_maximisation,
@@ -7,15 +8,17 @@
k_means,
)
from protzilla.data_analysis.differential_expression_anova import anova
-from protzilla.data_analysis.differential_expression_kruskal_wallis import kruskal_wallis_test_on_ptm_data, \
- kruskal_wallis_test_on_intensity_data
+from protzilla.data_analysis.differential_expression_kruskal_wallis import (
+ kruskal_wallis_test_on_intensity_data,
+ kruskal_wallis_test_on_ptm_data,
+)
from protzilla.data_analysis.differential_expression_linear_model import linear_model
from protzilla.data_analysis.differential_expression_mann_whitney import (
- mann_whitney_test_on_intensity_data, mann_whitney_test_on_ptm_data)
+ mann_whitney_test_on_intensity_data,
+ mann_whitney_test_on_ptm_data,
+)
from protzilla.data_analysis.differential_expression_t_test import t_test
from protzilla.data_analysis.dimension_reduction import t_sne, umap
-from protzilla.data_analysis.ptm_analysis import ptms_per_sample, \
- ptms_per_protein_and_sample, select_peptides_of_protein
from protzilla.data_analysis.model_evaluation import evaluate_classification_model
from protzilla.data_analysis.plots import (
clustergram_plot,
@@ -23,11 +26,15 @@
prot_quant_plot,
scatter_plot,
)
+from protzilla.data_analysis.predict_spectra import (
+ plot_spectrum,
+ predict,
+)
from protzilla.data_analysis.protein_graphs import peptides_to_isoform, variation_graph
from protzilla.data_analysis.ptm_analysis import (
- select_peptides_of_protein,
ptms_per_protein_and_sample,
ptms_per_sample,
+ select_peptides_of_protein,
)
from protzilla.data_analysis.ptm_quantification import flexiquant_lf
from protzilla.methods.data_preprocessing import TransformationLog
@@ -164,8 +171,10 @@ def plot(self, inputs):
class DifferentialExpressionMannWhitneyOnIntensity(DataAnalysisStep):
display_name = "Mann-Whitney Test"
operation = "differential_expression"
- method_description = ("A function to conduct a Mann-Whitney U test between groups defined in the clinical data."
- "The p-values are corrected for multiple testing.")
+ method_description = (
+ "A function to conduct a Mann-Whitney U test between groups defined in the clinical data."
+ "The p-values are corrected for multiple testing."
+ )
input_keys = [
"protein_df",
@@ -191,7 +200,9 @@ def method(self, inputs: dict) -> dict:
def insert_dataframes(self, steps: StepManager, inputs) -> dict:
if steps.get_step_output(Step, "protein_df", inputs["protein_df"]) is not None:
- inputs["protein_df"] = steps.get_step_output(Step, "protein_df", inputs["protein_df"])
+ inputs["protein_df"] = steps.get_step_output(
+ Step, "protein_df", inputs["protein_df"]
+ )
inputs["metadata_df"] = steps.metadata_df
inputs["log_base"] = steps.get_step_input(TransformationLog, "log_base")
return inputs
@@ -200,8 +211,10 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
class DifferentialExpressionMannWhitneyOnPTM(DataAnalysisStep):
display_name = "Mann-Whitney Test"
operation = "Peptide analysis"
- method_description = ("A function to conduct a Mann-Whitney U test between groups defined in the clinical data."
- "The p-values are corrected for multiple testing.")
+ method_description = (
+ "A function to conduct a Mann-Whitney U test between groups defined in the clinical data."
+ "The p-values are corrected for multiple testing."
+ )
input_keys = [
"ptm_df",
@@ -234,8 +247,10 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
class DifferentialExpressionKruskalWallisOnIntensity(DataAnalysisStep):
display_name = "Kruskal-Wallis Test"
operation = "differential_expression"
- method_description = ("A function to conduct a Kruskal-Wallis test between groups defined in the clinical data."
- "The p-values are corrected for multiple testing.")
+ method_description = (
+ "A function to conduct a Kruskal-Wallis test between groups defined in the clinical data."
+ "The p-values are corrected for multiple testing."
+ )
input_keys = [
"protein_df",
@@ -265,8 +280,10 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
class DifferentialExpressionKruskalWallisOnIntensity(DataAnalysisStep):
display_name = "Kruskal-Wallis Test"
operation = "differential_expression"
- method_description = ("A function to conduct a Kruskal-Wallis test between groups defined in the clinical data."
- "The p-values are corrected for multiple testing.")
+ method_description = (
+ "A function to conduct a Kruskal-Wallis test between groups defined in the clinical data."
+ "The p-values are corrected for multiple testing."
+ )
input_keys = [
"protein_df",
@@ -288,7 +305,9 @@ def method(self, inputs: dict) -> dict:
return kruskal_wallis_test_on_intensity_data(**inputs)
def insert_dataframes(self, steps: StepManager, inputs) -> dict:
- inputs["protein_df"] = steps.get_step_output(Step, "protein_df", inputs["protein_df"])
+ inputs["protein_df"] = steps.get_step_output(
+ Step, "protein_df", inputs["protein_df"]
+ )
inputs["metadata_df"] = steps.metadata_df
inputs["log_base"] = steps.get_step_input(TransformationLog, "log_base")
return inputs
@@ -297,8 +316,10 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
class DifferentialExpressionKruskalWallisOnPTM(DataAnalysisStep):
display_name = "Kruskal-Wallis Test"
operation = "Peptide analysis"
- method_description = ("A function to conduct a Kruskal-Wallis test between groups defined in the clinical data."
- "The p-values are corrected for multiple testing.")
+ method_description = (
+ "A function to conduct a Kruskal-Wallis test between groups defined in the clinical data."
+ "The p-values are corrected for multiple testing."
+ )
input_keys = [
"ptm_df",
@@ -327,9 +348,11 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
class PlotVolcano(PlotStep):
display_name = "Volcano Plot"
operation = "plot"
- method_description = ("Plots the results of a differential expression analysis in a volcano plot. The x-axis shows "
- "the log2 fold change and the y-axis shows the -log10 of the corrected p-values. The user "
- "can define a fold change threshold and an alpha level to highlight significant items.")
+ method_description = (
+ "Plots the results of a differential expression analysis in a volcano plot. The x-axis shows "
+ "the log2 fold change and the y-axis shows the -log10 of the corrected p-values. The user "
+ "can define a fold change threshold and an alpha level to highlight significant items."
+ )
input_keys = [
"p_values",
"fc_threshold",
@@ -841,26 +864,100 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
inputs["metadata_df"] = steps.metadata_df
if inputs["auto_select"]:
- significant_proteins = (
- steps.get_step_output(DataAnalysisStep, "significant_proteins_df", inputs["protein_list"]))
- index_of_most_significant_protein = significant_proteins['corrected_p_value'].idxmin()
- most_significant_protein = significant_proteins.loc[index_of_most_significant_protein]
+ significant_proteins = steps.get_step_output(
+ DataAnalysisStep, "significant_proteins_df", inputs["protein_list"]
+ )
+ index_of_most_significant_protein = significant_proteins[
+ "corrected_p_value"
+ ].idxmin()
+ most_significant_protein = significant_proteins.loc[
+ index_of_most_significant_protein
+ ]
inputs["protein_id"] = [most_significant_protein["Protein ID"]]
- self.messages.append({
- "level": logging.INFO,
- "msg":
- f"Selected the most significant Protein: {most_significant_protein['Protein ID']}, "
- f"from {inputs['protein_list']}"
- })
+ self.messages.append(
+ {
+ "level": logging.INFO,
+ "msg": f"Selected the most significant Protein: {most_significant_protein['Protein ID']}, "
+ f"from {inputs['protein_list']}",
+ }
+ )
+
+ return inputs
+
+
+# TODO convert to new frontend
+class PredictSpectrum(DataAnalysisStep):
+ display_name = "Predict spectra with various models"
+ operation = "spectrum_prediction"
+ method_description = "Predict the MS/MS spectra of a list of peptides using different models. The models are trained on experimental data and predict the intensity of the fragment ions"
+
+ input_keys = [
+ "peptide_df",
+ "model_name",
+ "output_format",
+ "collision_energy",
+ "fragmentation_type",
+ "column_seperator",
+ "output_dir",
+ "file_name",
+ ]
+ output_keys = [
+ "predicted_spectra",
+ "predicted_spectra_metadata",
+ "predicted_spectra_peaks",
+ ]
+
+ def method(self, inputs: dict) -> dict:
+ return predict(**inputs)
+
+ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
+ inputs["peptide_df"] = steps.get_step_output(Step, "peptide_df")
+ inputs["output_dir"] = steps.disk_operator.dataframe_dir.absolute()
+ return inputs
+
+
+# TODO convert to new frontend
+class PlotPredictedSpectrum(PlotStep):
+ display_name = "Predicted Spectrum Plot"
+ operation = "plot"
+ method_description = "Plot the predicted spectrum of a peptide"
+
+ input_keys = [
+ "metadata_df",
+ "peaks_df",
+ protzilla.constants.ms_constants.DataKeys.PEPTIDE_SEQUENCE,
+ protzilla.constants.ms_constants.DataKeys.PRECURSOR_CHARGE,
+ "annotation_threshold",
+ ]
+ output_keys = []
+
+ def method(self, inputs: dict) -> dict:
+ return plot_spectrum(**inputs)
+ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
+ inputs["metadata_df"] = steps.get_step_output(
+ Step,
+ "predicted_spectra_metadata",
+ instance_identifier=inputs["prediction_df_step_instance"],
+ )
+ inputs["peaks_df"] = steps.get_step_output(
+ Step,
+ "predicted_spectra_peaks",
+ instance_identifier=inputs["prediction_df_step_instance"],
+ )
+ inputs[protzilla.constants.ms_constants.DataKeys.PRECURSOR_CHARGE] = int(
+ inputs[protzilla.constants.ms_constants.DataKeys.PRECURSOR_CHARGE]
+ )
return inputs
class PTMsPerSample(DataAnalysisStep):
display_name = "PTMs per Sample"
operation = "Peptide analysis"
- method_description = ("Analyze the post-translational modifications (PTMs) of a single protein of interest. "
- "This function requires a peptide dataframe with PTM information.")
+ method_description = (
+ "Analyze the post-translational modifications (PTMs) of a single protein of interest. "
+ "This function requires a peptide dataframe with PTM information."
+ )
input_keys = [
"peptide_df",
@@ -882,8 +979,10 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
class PTMsProteinAndPerSample(DataAnalysisStep):
display_name = "PTMs per Sample and Protein"
operation = "Peptide analysis"
- method_description = ("Analyze the post-translational modifications (PTMs) of all Proteins. "
- "This function requires a peptide dataframe with PTM information.")
+ method_description = (
+ "Analyze the post-translational modifications (PTMs) of all Proteins. "
+ "This function requires a peptide dataframe with PTM information."
+ )
input_keys = [
"peptide_df",
@@ -899,4 +998,4 @@ def insert_dataframes(self, steps: StepManager, inputs) -> dict:
inputs["peptide_df"] = steps.get_step_output(
Step, "peptide_df", inputs["peptide_df"]
)
- return inputs
\ No newline at end of file
+ return inputs
diff --git a/protzilla/run.py b/protzilla/run.py
index 1f451e89..064f0361 100644
--- a/protzilla/run.py
+++ b/protzilla/run.py
@@ -5,6 +5,7 @@
import traceback
import protzilla.constants.paths as paths
+from protzilla.constants.protzilla_logging import logger
from protzilla.steps import Messages, Output, Plots, Step
from protzilla.utilities import format_trace
@@ -31,6 +32,9 @@ def __enter__(self):
def __exit__(self, exc_type, exc_value, tb):
if exc_type:
formatted_trace = format_trace(traceback.format_exception(exc_value))
+ logger.error(
+ f"An error occurred: {exc_value.__class__.__name__}: {exc_value}\n{formatted_trace}."
+ )
if (
hasattr(self.run, "current_step")
and self.run.current_step is not None
diff --git a/pytest.ini b/pytest.ini
index f77d9cad..b7f1801c 100644
--- a/pytest.ini
+++ b/pytest.ini
@@ -1,3 +1,5 @@
[pytest]
pythonpath = . ui/runs
-DJANGO_SETTINGS_MODULE = ui.main
\ No newline at end of file
+DJANGO_SETTINGS_MODULE = ui.main
+log_cli = true
+log_cli_level = INFO
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
index bc175e2a..7d2c94b6 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -36,3 +36,5 @@ beautifulsoup4==4.12.2
sphinx==7.2.6
sphinx-autoapi==3.0.0
openpyxl==3.1.2
+pyteomics==4.7.2
+aiohttp==3.9.5
diff --git a/tests/protzilla/data_analysis/test_spectrum_prediction.py b/tests/protzilla/data_analysis/test_spectrum_prediction.py
new file mode 100644
index 00000000..d4ca08c4
--- /dev/null
+++ b/tests/protzilla/data_analysis/test_spectrum_prediction.py
@@ -0,0 +1,665 @@
+from pathlib import Path
+
+import numpy as np
+import pandas as pd
+import pytest
+
+from protzilla.constants.ms_constants import DataKeys, FragmentationType
+from protzilla.constants.paths import PEPTIDE_TEST_DATA_PATH
+from protzilla.data_analysis.spectrum_prediction.spectrum import (
+ KoinaModel,
+ Spectrum,
+ SpectrumExporter,
+)
+from protzilla.data_analysis.spectrum_prediction.spectrum_prediction_utils import (
+ CSV_COLUMNS,
+ OutputFormats,
+ OutputKeys,
+ PredictionModelMetadata,
+ PredictionModels,
+)
+from protzilla.methods.data_analysis import PredictSpectrum
+from protzilla.methods.importing import EvidenceImport
+
+evidence_small = Path(PEPTIDE_TEST_DATA_PATH) / "evidence_100.txt"
+
+
+@pytest.fixture
+def spectrum_prediction_run(run_imported):
+ run = run_imported
+ run.step_add(EvidenceImport())
+ run.step_next()
+ run.step_calculate(
+ {
+ "file_path": str(evidence_small),
+ "intensity_name": "Intensity",
+ "map_to_uniprot": False,
+ }
+ )
+ assert (
+ "peptide_df" in run.current_outputs
+ and not run.current_outputs["peptide_df"].empty
+ )
+ run.step_add(PredictSpectrum())
+ run.step_next()
+ return run
+
+
+@pytest.fixture
+def prediction_df_complete():
+ return pd.DataFrame(
+ {
+ DataKeys.PEPTIDE_SEQUENCE: ["PEPTIDE1", "PEPTIDE2"],
+ DataKeys.PRECURSOR_CHARGE: [1, 2],
+ DataKeys.COLLISION_ENERGY: [30, 30],
+ DataKeys.PRECURSOR_MZ: [100, 200],
+ DataKeys.FRAGMENTATION_TYPE: [
+ FragmentationType.HCD,
+ FragmentationType.HCD,
+ ],
+ }
+ )
+
+
+@pytest.fixture
+def prediction_df_incomplete():
+ return pd.DataFrame(
+ {
+ DataKeys.PEPTIDE_SEQUENCE: ["PEPTIDE1", "PEPTIDE2"],
+ DataKeys.PRECURSOR_CHARGE: [1, 2],
+ DataKeys.PRECURSOR_MZ: [100, 200],
+ }
+ )
+
+
+@pytest.fixture
+def prediction_df_large():
+ return pd.DataFrame(
+ {
+ DataKeys.PEPTIDE_SEQUENCE: ["PEPTIDE" + str(i) for i in range(2000)],
+ DataKeys.PRECURSOR_CHARGE: [1 for _ in range(2000)],
+ DataKeys.PRECURSOR_MZ: [100 for _ in range(2000)],
+ DataKeys.COLLISION_ENERGY: [30 for _ in range(2000)],
+ DataKeys.FRAGMENTATION_TYPE: [FragmentationType.HCD for _ in range(2000)],
+ }
+ )
+
+
+@pytest.fixture
+def prediction_df_ptms():
+ return pd.DataFrame(
+ {
+ DataKeys.PEPTIDE_SEQUENCE: ["PEPTIDE1", "PEPTI[DE2", "PEPTI(DE3"],
+ DataKeys.PRECURSOR_CHARGE: [1, 2, 3],
+ DataKeys.PRECURSOR_MZ: [100, 200, 300],
+ DataKeys.COLLISION_ENERGY: [30, 30, 30],
+ DataKeys.FRAGMENTATION_TYPE: [
+ FragmentationType.HCD,
+ FragmentationType.HCD,
+ FragmentationType.HCD,
+ ],
+ }
+ )
+
+
+@pytest.fixture
+def prediction_df_high_charge():
+ return pd.DataFrame(
+ {
+ DataKeys.PEPTIDE_SEQUENCE: ["PEPTIDE1", "PEPTIDE2", "PEPTIDE3"],
+ DataKeys.PRECURSOR_CHARGE: [1, 5, 6],
+ DataKeys.PRECURSOR_MZ: [100, 200, 300],
+ DataKeys.COLLISION_ENERGY: [30, 30, 30],
+ DataKeys.FRAGMENTATION_TYPE: [
+ FragmentationType.HCD,
+ FragmentationType.HCD,
+ FragmentationType.HCD,
+ ],
+ }
+ )
+
+
+@pytest.fixture
+def spectrum_one():
+ return Spectrum(
+ "sequence1",
+ 1,
+ 1.0,
+ [100, 200],
+ [0.5, 0.7],
+ {"Charge": 1, "Parent": 1.0},
+ {DataKeys.FRAGMENT_TYPE: ["b1+1", "y1+2"]},
+ )
+
+
+@pytest.fixture
+def spectrum_two():
+ return Spectrum(
+ "sequence2",
+ 2,
+ 2.0,
+ [150, 250],
+ [0.6, 0.8],
+ {"Charge": 2, "Parent": 2.0},
+ {DataKeys.FRAGMENT_TYPE: ["b1+1", "y1+2"]},
+ )
+
+
+@pytest.fixture
+def spectrum_none_metadata():
+ return Spectrum(
+ "sequence1",
+ None,
+ None,
+ [100, 200],
+ [0.5, 0.7],
+ {"Charge": None},
+ {DataKeys.FRAGMENT_TYPE: ["b1+1", "y1+2"]},
+ )
+
+
+@pytest.fixture
+def expected_csv_header():
+ return ",".join(CSV_COLUMNS)
+
+
+@pytest.fixture
+def expected_tsv_header():
+ return "\t".join(CSV_COLUMNS)
+
+
+@pytest.mark.parametrize(
+ "model_name",
+ [
+ PredictionModels.PROSITINTENSITYHCD,
+ PredictionModels.PROSITINTENSITYCID,
+ PredictionModels.PROSITINTENSITYTIMSTOF,
+ ],
+)
+@pytest.mark.parametrize(
+ "output_format",
+ [
+ OutputFormats.CSV_TSV,
+ OutputFormats.MSP,
+ OutputFormats.MGF,
+ ],
+)
+@pytest.mark.parametrize("csv_separator", [",", ";", "\t"])
+@pytest.mark.parametrize(
+ "fragmentation_type", [FragmentationType.HCD, FragmentationType.CID]
+)
+def test_spectrum_prediction(
+ spectrum_prediction_run,
+ model_name,
+ output_format,
+ csv_separator,
+ fragmentation_type,
+):
+ run = spectrum_prediction_run
+
+ # Set up the parameters
+ params = {
+ "model_name": model_name,
+ "output_format": output_format,
+ "collision_energy": 30,
+ "fragmentation_type": fragmentation_type,
+ "column_seperator": csv_separator,
+ "file_name": "predicted_spectra",
+ }
+
+ # Adjust parameters based on model requirements
+ model_info = PredictionModelMetadata[model_name]
+ required_keys = model_info["required_keys"]
+
+ # Run the step calculation
+ run.step_calculate(params)
+
+ # Assert outputs
+ assert "predicted_spectra_metadata" in run.current_outputs
+ assert "predicted_spectra_peaks" in run.current_outputs
+
+ metadata_df = run.current_outputs["predicted_spectra_metadata"]
+ peaks_df = run.current_outputs["predicted_spectra_peaks"]
+
+ # Check metadata DataFrame
+ assert not metadata_df.empty
+ for key in required_keys:
+ assert key in metadata_df.columns
+ assert DataKeys.PRECURSOR_MZ in metadata_df.columns
+
+ # Check peaks DataFrame
+ assert not peaks_df.empty
+ assert DataKeys.MZ in peaks_df.columns
+ assert DataKeys.INTENSITY in peaks_df.columns
+ assert OutputKeys.FRAGMENT_TYPE in peaks_df.columns
+ assert OutputKeys.FRAGMENT_CHARGE in peaks_df.columns
+
+ # Check if the output file is generated
+ assert "predicted_spectra" in run.current_outputs
+ if output_format == OutputFormats.CSV_TSV:
+ file_output = run.current_outputs["predicted_spectra"]
+ assert file_output.file_extension in ["csv", "tsv"]
+ if csv_separator == "\t":
+ assert file_output.file_extension == "tsv"
+ else:
+ assert file_output.file_extension == "csv"
+
+ # Check CSV/TSV content
+ content = file_output.content
+ assert content.startswith(csv_separator.join(CSV_COLUMNS))
+ assert len(content.splitlines()) > 1 # At least header and one data row
+ elif output_format == OutputFormats.MSP:
+ file_output = run.current_outputs["predicted_spectra"]
+ assert file_output.file_extension == "msp"
+
+ # Check MSP content
+ content = file_output.content
+ assert "Name:" in content
+ assert "Num Peaks:" in content
+ elif output_format == OutputFormats.MGF:
+ file_output = run.current_outputs["predicted_spectra"]
+ assert file_output.file_extension == "mgf"
+
+ # Check MGF content
+ content = file_output.content
+ assert "BEGIN IONS" in content
+ assert "TITLE=" in content
+ assert "PEPMASS=" in content
+ assert "CHARGE=" in content
+ assert "END IONS" in content
+
+ # Check if any error messages were generated
+ assert not any(msg["level"] == "ERROR" for msg in run.current_messages)
+
+ # Check if the number of predicted spectra matches the number of input peptides
+ num_input_peptides = len(metadata_df)
+ num_predicted_spectra = len(set(peaks_df.index))
+ assert num_input_peptides == num_predicted_spectra
+
+ # Check if the fragmentation type is correctly applied (if applicable)
+ if DataKeys.FRAGMENTATION_TYPE in metadata_df.columns:
+ assert all(metadata_df[DataKeys.FRAGMENTATION_TYPE] == fragmentation_type)
+
+ # Check if the collision energy is correctly applied (if applicable)
+ if DataKeys.COLLISION_ENERGY in metadata_df.columns:
+ assert all(metadata_df[DataKeys.COLLISION_ENERGY] == params["collision_energy"])
+
+ # Check if the peaks are valid
+ assert all(peaks_df[DataKeys.MZ] > 0)
+ assert all(
+ (peaks_df[DataKeys.INTENSITY] >= 0) & (peaks_df[DataKeys.INTENSITY] <= 1)
+ )
+
+ # Check if fragment types are valid
+ valid_fragment_types = set(["a", "b", "c", "x", "y", "z"]) # Add more if needed
+
+ assert set(peaks_df[OutputKeys.FRAGMENT_TYPE].str[0]).issubset(valid_fragment_types)
+
+ # Check if fragment charges are valid
+ assert all(peaks_df[OutputKeys.FRAGMENT_CHARGE].astype(int) > 0)
+
+
+def test_preprocess_renames_columns_correctly(prediction_df_complete):
+ model = KoinaModel(
+ required_keys=[
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.FRAGMENTATION_TYPE,
+ DataKeys.COLLISION_ENERGY,
+ ],
+ url="",
+ )
+ model.prediction_df = prediction_df_complete
+ model.preprocess()
+ assert set(model.prediction_df.columns) == set(
+ model.required_keys + [DataKeys.PRECURSOR_MZ]
+ )
+
+
+def test_preprocess_removes_not_required_columns(prediction_df_complete):
+ model = KoinaModel(
+ required_keys=[
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.FRAGMENTATION_TYPE,
+ DataKeys.COLLISION_ENERGY,
+ ],
+ url="",
+ )
+ prediction_df_complete["ExtraColumn"] = 42
+ model.prediction_df = prediction_df_complete
+ model.preprocess()
+ assert "ExtraColumn" not in model.prediction_df.columns
+
+
+def test_preprocess_filters_out_high_charge_peptides(prediction_df_high_charge):
+ model = KoinaModel(
+ required_keys=[
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.FRAGMENTATION_TYPE,
+ DataKeys.COLLISION_ENERGY,
+ ],
+ url="",
+ )
+ model.prediction_df = prediction_df_high_charge
+ model.preprocess()
+ assert len(model.prediction_df) == 2
+
+
+def test_preprocess_filters_out_peptides_with_ptms(prediction_df_ptms):
+ model = KoinaModel(
+ required_keys=[
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ DataKeys.FRAGMENTATION_TYPE,
+ DataKeys.COLLISION_ENERGY,
+ ],
+ url="",
+ )
+ model.prediction_df = prediction_df_ptms
+ model.preprocess()
+ assert len(model.prediction_df) == 1
+
+
+def test_dataframe_verification_passes_with_required_keys(prediction_df_complete):
+ model = KoinaModel(
+ required_keys=[DataKeys.PEPTIDE_SEQUENCE, DataKeys.PRECURSOR_CHARGE], url=""
+ )
+ model.prediction_df = prediction_df_complete
+ model.preprocess()
+ model.verify_dataframe(prediction_df_complete)
+
+
+def test_dataframe_verification_raises_error_when_key_missing(prediction_df_complete):
+ model = KoinaModel(
+ required_keys=[
+ DataKeys.PEPTIDE_SEQUENCE,
+ DataKeys.PRECURSOR_CHARGE,
+ "MissingKey",
+ ],
+ url="",
+ )
+ with pytest.raises(ValueError):
+ model.verify_dataframe(prediction_df_complete)
+
+
+def test_slice_dataframe_returns_correct_slices(prediction_df_incomplete):
+ model = KoinaModel(
+ required_keys=[DataKeys.PEPTIDE_SEQUENCE, DataKeys.PRECURSOR_CHARGE], url=""
+ )
+ model.load_prediction_df(prediction_df_incomplete)
+ slices = model.slice_dataframe()
+ assert len(slices) == 1
+
+
+def test_slice_dataframe_returns_correct_slices_for_large_dataframe(
+ prediction_df_large,
+):
+ model = KoinaModel(
+ required_keys=[DataKeys.PEPTIDE_SEQUENCE, DataKeys.PRECURSOR_CHARGE], url=""
+ )
+ model.load_prediction_df(prediction_df_large)
+ slices = model.slice_dataframe()
+ assert len(slices) == 2
+ slices_small = model.slice_dataframe(200)
+ assert len(slices_small) == 10
+
+
+def test_format_dataframes_returns_correct_output(prediction_df_complete):
+ model = KoinaModel(
+ required_keys=[DataKeys.PEPTIDE_SEQUENCE, DataKeys.PRECURSOR_CHARGE], url=""
+ )
+ model.load_prediction_df(prediction_df_complete)
+ slices = model.slice_dataframe()
+ formatted_data = model.format_dataframes(slices)
+ assert len(formatted_data) == len(slices)
+
+
+def test_format_for_request(prediction_df_complete):
+ model = KoinaModel(
+ required_keys=[DataKeys.PEPTIDE_SEQUENCE, DataKeys.PRECURSOR_CHARGE], url=""
+ )
+ formatted_data = model.format_for_request(prediction_df_complete)
+ assert formatted_data is not None
+ assert "id" in formatted_data
+ assert "inputs" in formatted_data
+ for key in model.required_keys:
+ assert any(
+ key == input_data["name"] for input_data in formatted_data["inputs"]
+ ), f"Key {key} not found in formatted request"
+
+
+def test_load_prediction_df():
+ model = KoinaModel(
+ required_keys=[DataKeys.PEPTIDE_SEQUENCE, DataKeys.PRECURSOR_CHARGE], url=""
+ )
+ df = pd.DataFrame(
+ {
+ DataKeys.PRECURSOR_MZ: [100, 200],
+ DataKeys.PEPTIDE_SEQUENCE: ["PEPTIDE1", "PEPTIDE2"],
+ DataKeys.PRECURSOR_CHARGE: [1, 2],
+ }
+ )
+ model.load_prediction_df(df)
+ assert model.prediction_df is not None
+
+
+def test_extract_fragment_information_handles_valid_annotations():
+ fragment_annotations = np.array(["b1+1", "y1+2", "b2+1", "y2+2"])
+ fragment_charges, fragment_types = KoinaModel.extract_fragment_information(
+ fragment_annotations
+ )
+ expected_charges, expected_types = np.array(["1", "2", "1", "2"]), np.array(
+ ["b1", "y1", "b2", "y2"]
+ )
+ np.testing.assert_array_equal(fragment_charges, expected_charges)
+ np.testing.assert_array_equal(fragment_types, expected_types)
+
+
+def test_extract_fragment_information_handles_invalid_annotations():
+ fragment_annotations = np.array(["invalid1", "invalid2", "invalid3", "invalid4"])
+ fragment_charges, fragment_types = KoinaModel.extract_fragment_information(
+ fragment_annotations
+ )
+ expected_charges, expected_types = np.array(["", "", "", ""]), np.array(
+ ["", "", "", ""]
+ )
+ np.testing.assert_array_equal(fragment_charges, expected_charges)
+ np.testing.assert_array_equal(fragment_types, expected_types)
+
+
+def test_extract_fragment_information_handles_mixed_annotations():
+ fragment_annotations = np.array(["b1+1", "invalid1", "b2+1", "y2+2"])
+ fragment_charges, fragment_types = KoinaModel.extract_fragment_information(
+ fragment_annotations
+ )
+ expected_charges, expected_types = np.array(["1", "", "1", "2"]), np.array(
+ ["b1", "", "b2", "y2"]
+ )
+ np.testing.assert_array_equal(fragment_charges, expected_charges)
+ np.testing.assert_array_equal(fragment_types, expected_types)
+
+
+def test_create_spectrum_with_valid_data():
+ row = pd.Series(
+ {DataKeys.PEPTIDE_SEQUENCE: "PEPTIDE", DataKeys.PRECURSOR_CHARGE: 2}
+ )
+ prepared_data = {
+ OutputKeys.MZ_VALUES: np.array([[100, 200, 300]]),
+ OutputKeys.INTENSITY_VALUES: np.array([[0.1, 0.2, 0.3]]),
+ OutputKeys.FRAGMENT_TYPE: np.array([["b", "y", "b"]]),
+ OutputKeys.FRAGMENT_CHARGE: np.array([[1, 2, 1]]),
+ }
+ index = 0
+
+ spectrum = KoinaModel.create_spectrum(row, prepared_data, index)
+
+ assert isinstance(spectrum, Spectrum)
+ assert spectrum.peptide_sequence == "PEPTIDE"
+ assert spectrum.precursor_charge == 2
+ assert np.array_equal(
+ spectrum.spectrum[DataKeys.MZ].values,
+ prepared_data[OutputKeys.MZ_VALUES][index],
+ )
+ assert np.array_equal(
+ spectrum.spectrum[DataKeys.INTENSITY].values,
+ prepared_data[OutputKeys.INTENSITY_VALUES][index],
+ )
+ assert np.array_equal(
+ spectrum.spectrum[OutputKeys.FRAGMENT_TYPE],
+ prepared_data[OutputKeys.FRAGMENT_TYPE][index],
+ )
+ assert np.array_equal(
+ spectrum.spectrum[OutputKeys.FRAGMENT_CHARGE],
+ prepared_data[OutputKeys.FRAGMENT_CHARGE][index],
+ )
+
+
+def test_create_spectrum_with_missing_data():
+ row = pd.Series(
+ {
+ DataKeys.PEPTIDE_SEQUENCE: "PEPTIDE",
+ }
+ )
+ prepared_data = {
+ OutputKeys.MZ_VALUES: np.array([100, 200, 300]),
+ OutputKeys.INTENSITY_VALUES: np.array([0.1, 0.2, 0.3]),
+ }
+ index = 1
+
+ with pytest.raises(ValueError):
+ KoinaModel.create_spectrum(row, prepared_data, index)
+
+
+def test_peak_annotation_with_valid_data():
+ spectrum_df = pd.DataFrame(
+ {
+ DataKeys.MZ: [100, 200, 300],
+ DataKeys.INTENSITY: [0.1, 0.2, 0.3],
+ OutputKeys.FRAGMENT_TYPE: ["b", "y", "b"],
+ OutputKeys.FRAGMENT_CHARGE: [1, 2, 1],
+ }
+ )
+ result = SpectrumExporter._format_peaks_for_msp(spectrum_df)
+ expected = ['100.0\t0.1\t"b^1"\n', '200.0\t0.2\t"y^2"\n', '300.0\t0.3\t"b^1"\n']
+ assert result == expected
+
+
+def test_peak_annotation_with_empty_data():
+ spectrum_df = pd.DataFrame(
+ {
+ DataKeys.MZ: [],
+ DataKeys.INTENSITY: [],
+ }
+ )
+ result = SpectrumExporter._format_peaks_for_msp(spectrum_df)
+ assert result == []
+
+
+def test_peak_annotation_with_custom_prefix_suffix():
+ spectrum_df = pd.DataFrame(
+ {
+ DataKeys.MZ: [100, 200, 300],
+ DataKeys.INTENSITY: [0.1, 0.2, 0.3],
+ OutputKeys.FRAGMENT_TYPE: ["b", "y", "b"],
+ OutputKeys.FRAGMENT_CHARGE: [1, 2, 1],
+ }
+ )
+ result = SpectrumExporter._format_peaks_for_msp(spectrum_df, prefix="(", suffix=")")
+ expected = ["100.0\t0.1\t(b^1)\n", "200.0\t0.2\t(y^2)\n", "300.0\t0.3\t(b^1)\n"]
+ assert result == expected
+
+
+def test_export_to_msp_with_valid_spectra(spectrum_one, spectrum_two):
+ spectra = [spectrum_one, spectrum_two]
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_msp(spectra, base_file_name)
+ assert "Name: sequence1" in result.content
+ assert "Name: sequence2" in result.content
+ assert "Charge=1" in result.content
+ assert "Charge=2" in result.content
+ assert "Parent=1.0" in result.content
+ assert "Parent=2.0" in result.content
+
+
+def test_export_to_msp_with_empty_spectra():
+ spectra = []
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_msp(spectra, base_file_name)
+ assert result.content == ""
+
+
+def test_export_to_msp_with_none_metadata(spectrum_none_metadata):
+ spectra = [spectrum_none_metadata]
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_msp(spectra, base_file_name)
+ assert "Name: sequence1" in result.content
+ assert "Charge=" not in result.content
+ assert "Parent=" not in result.content
+
+
+def test_export_to_csv_with_valid_spectra(
+ spectrum_one, spectrum_two, expected_csv_header
+):
+ spectra = [spectrum_one, spectrum_two]
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_generic_text(spectra, base_file_name)
+ assert result.file_extension == "csv"
+ assert result.base_file_name == base_file_name
+ assert result.filename == "test_file.csv"
+ assert expected_csv_header in result.content
+ assert "sequence1,1.0,1,100,0.5,b,1" in result.content
+ assert "sequence2,2.0,2,150,0.6,b,1" in result.content
+
+
+def test_export_to_csv_with_empty_spectra(expected_csv_header):
+ spectra = []
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_generic_text(spectra, base_file_name)
+ assert result.filename == "test_file.csv"
+ assert expected_csv_header in result.content
+
+
+def test_export_to_csv_with_invalid_separator(spectrum_one):
+ spectra = [spectrum_one]
+ base_file_name = "test_file"
+ with pytest.raises(ValueError):
+ SpectrumExporter.export_to_generic_text(spectra, base_file_name, seperator="*")
+
+
+def test_export_to_csv_with_tab_separator(spectrum_one, expected_tsv_header):
+ spectra = [spectrum_one]
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_generic_text(
+ spectra, base_file_name, seperator="\t"
+ )
+ assert result.file_extension == "tsv"
+ assert expected_tsv_header in result.content
+ assert "sequence1\t1.0\t1\t" in result.content
+
+
+def test_export_to_mgf_with_valid_spectra(spectrum_one, spectrum_two):
+ spectra = [spectrum_one, spectrum_two]
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_mgf(spectra, base_file_name)
+ assert "BEGIN IONS" in result.content
+ assert "TITLE=sequence1" in result.content
+ assert "TITLE=sequence2" in result.content
+ assert "CHARGE=1+" in result.content
+ assert "CHARGE=2+" in result.content
+ assert "END IONS" in result.content
+
+
+def test_export_to_mgf_with_empty_spectra():
+ spectra = []
+ base_file_name = "test_file"
+ result = SpectrumExporter.export_to_mgf(spectra, base_file_name)
+ assert result.content == ""
+
+
+def test_export_to_mgf_with_none_metadata(spectrum_none_metadata):
+ spectra = [spectrum_none_metadata]
+ base_file_name = "test_file"
+ with pytest.raises(ValueError):
+ SpectrumExporter.export_to_mgf(spectra, base_file_name)
diff --git a/tests/protzilla/importing/test_peptide_import.py b/tests/protzilla/importing/test_peptide_import.py
index b526c5d7..371bbbce 100644
--- a/tests/protzilla/importing/test_peptide_import.py
+++ b/tests/protzilla/importing/test_peptide_import.py
@@ -4,6 +4,7 @@
import pandas as pd
import pytest
+from protzilla.constants.ms_constants import DataKeys
from protzilla.constants.paths import TEST_DATA_PATH
from protzilla.importing import peptide_import
@@ -174,7 +175,9 @@ def test_evidence_import(intensity_name):
)
pd.testing.assert_frame_equal(
- outputs["peptide_df"].drop(columns=["PEP"]),
+ outputs["peptide_df"].drop(
+ columns=["PEP", DataKeys.PRECURSOR_CHARGE, DataKeys.PRECURSOR_MZ]
+ ),
evidence_df(intensity_name).drop(columns=["PEP"]),
check_dtype=False,
)
diff --git a/tests/test_data/peptides/evidence-vsmall-invalid-peptides.txt b/tests/test_data/peptides/evidence-vsmall-invalid-peptides.txt
new file mode 100644
index 00000000..a04cfd46
--- /dev/null
+++ b/tests/test_data/peptides/evidence-vsmall-invalid-peptides.txt
@@ -0,0 +1,4 @@
+Sequence Length Modifications Modified sequence Acetyl (K) Probabilities GlyGly (K) Probabilities Oxidation (M) Probabilities Phospho (STY) Probabilities Acetyl (K) Score Diffs GlyGly (K) Score Diffs Oxidation (M) Score Diffs Phospho (STY) Score Diffs Acetyl (K) Acetyl (Protein N-term) GlyGly (K) Oxidation (M) Phospho (STY) Missed cleavages Proteins Leading proteins Leading razor protein Gene names Protein names Type Raw file Experiment MS/MS m/z Charge m/z Mass Uncalibrated - Calibrated m/z [ppm] Uncalibrated - Calibrated m/z [Da] Mass error [ppm] Mass error [Da] Uncalibrated mass error [ppm] Uncalibrated mass error [Da] Max intensity m/z 0 Retention time Retention length Calibrated retention time Calibrated retention time start Calibrated retention time finish Retention time calibration Match time difference Match m/z difference Match q-value Match score Number of data points Number of scans Number of isotopic peaks PIF Fraction of total spectrum Base peak fraction PEP MS/MS count MS/MS scan number Score Delta score Combinatorics Intensity Reverse Potential contaminant id Protein group IDs Peptide ID Mod. peptide ID MS/MS IDs Best MS/MS Acetyl (K) site IDs GlyGly (K) site IDs Oxidation (M) site IDs Phospho (STY) site IDs Taxonomy IDs
+AAAAAAALQAK 11 Unmodified _AAAAAAALQAK_ 0 0 0 0 0 0 P36578 P36578 P36578 RPL4 60S ribosomal protein L4 MULTI-SECPEP AD01_BA39-Cohort1_INSOLUBLE_02 AD01_C1_INSOLUBLE_02 478.218963623047 2 478.779816 955.545079 0.76017 0.00036395 -0.56584 -0.00027091 0.19433 9.3041E-05 478.779559835743 19.784 0.63164 32.073 31.777 32.409 12.289 93 40 3 0 0 0 0.052244 1 5843 54.157 31.138 1 1362600 1 1120 1 1 1 1 -1
+HELLOTHISISANINVALIDPEPTIDE 11 Unmodified _HELLOTHISISANINVALIDPEPTIDE_ 0 0 0 0 0 0 P36578 P36578 P36578 RPL4 60S ribosomal protein L4 MULTI-SECPEP AD06_BA39-Cohort1_INSOLUBLE_01 AD06_C1_INSOLUBLE_01 478.232604980469 2 478.779816 955.545079 0.88015 0.0004214 -0.51943 -0.00024869 0.36072 0.0001727 478.779886911335 19.656 0.28609 23.317 23.133 23.42 3.6613 34 23 2 0 0 0 0.015779 1 5995 67.277 45.989 1 5739600 2 1120 1 1 2 2 -1
+AMIINVALIDQUESTIONMARK 11 Unmodified _AMIINVALIDQUESTIONMARK_ 0 0 0 0 0 0 P36578 P36578 P36578 RPL4 60S ribosomal protein L4 MULTI-SECPEP AD01_BA39-Cohort1_INSOLUBLE_02 AD01_C1_INSOLUBLE_02 478.218963623047 2 478.779816 955.545079 0.76017 0.00036395 -0.56584 -0.00027091 0.19433 9.3041E-05 478.779559835743 19.784 0.63164 32.073 31.777 32.409 12.289 93 40 3 0 0 0 0.052244 1 5843 54.157 31.138 1 1362600 1 1120 1 1 1 1 -1
diff --git a/tests/test_data/peptides/evidence_100.txt b/tests/test_data/peptides/evidence_100.txt
new file mode 100644
index 00000000..e645c687
--- /dev/null
+++ b/tests/test_data/peptides/evidence_100.txt
@@ -0,0 +1,201 @@
+Sequence Length Modifications Modified sequence Acetyl (K) Probabilities GlyGly (K) Probabilities Oxidation (M) Probabilities Phospho (STY) Probabilities Acetyl (K) Score Diffs GlyGly (K) Score Diffs Oxidation (M) Score Diffs Phospho (STY) Score Diffs Acetyl (K) Acetyl (Protein N-term) GlyGly (K) Oxidation (M) Phospho (STY) Missed cleavages Proteins Leading proteins Leading razor protein Gene names Protein names Type Raw file Experiment MS/MS m/z Charge m/z Mass Uncalibrated - Calibrated m/z [ppm] Uncalibrated - Calibrated m/z [Da] Mass error [ppm] Mass error [Da] Uncalibrated mass error [ppm] Uncalibrated mass error [Da] Max intensity m/z 0 Retention time Retention length Calibrated retention time Calibrated retention time start Calibrated retention time finish Retention time calibration Match time difference Match m/z difference Match q-value Match score Number of data points Number of scans Number of isotopic peaks PIF Fraction of total spectrum Base peak fraction PEP MS/MS count MS/MS scan number Score Delta score Combinatorics Intensity Reverse Potential contaminant id Protein group IDs Peptide ID Mod. peptide ID MS/MS IDs Best MS/MS Acetyl (K) site IDs GlyGly (K) site IDs Oxidation (M) site IDs Phospho (STY) site IDs Taxonomy IDs
+LGFSEVELVQMVVDGVK 17 Oxidation (M) _LGFSEVELVQM(Oxidation (M))VVDGVK_ 0 0 0 1 0 0 P12277 P12277 P12277 CKB Creatine kinase B-type MULTI-MATCH AD42_BA39-Cohort2_INSOLUBLE_01 AD42_C2_INSOLUBLE_01 2 932.989877 1863.9652 9.4031 0.008773 7.1352 0.0066571 16.538 0.01543 933.49721273825 119.59 0.12927 117.8 117.69 117.82 -1.793 -0.25802 0.012193 NaN 83.314 6 4 2 NaN NaN NaN NaN 0 NaN NaN 0 14562000 1103803 745 16594 18588 1154 -1
+GQYISPFHDIPIYADKDVFHMVVEVPR 27 Unmodified _GQYISPFHDIPIYADKDVFHMVVEVPR_ 0 0 0 0 0 1 Q15181 Q15181 Q15181 PPA1 Inorganic pyrophosphatase MULTI-MATCH-MSMS AD32_BA39-Cohort2_INSOLUBLE_01 AD32_C2_INSOLUBLE_01 4 793.903571 3171.58518 1.6369 0.0012995 -0.80631 -0.00064013 0.83059 0.00065941 794.404164695914 123.78 0.43119 119.76 119.55 119.99 -4.0248 0.32835 0.00014141 NaN 170.64 148 34 6 NaN NaN NaN NaN 0 NaN NaN 0 20284000 689005 1805 10698 12018 -1
+AMLVFAEHR 9 Unmodified _AMLVFAEHR_ 0 0 0 0 0 0 P42785;P42785-2 P42785 P42785 PRCP Lysosomal Pro-X carboxypeptidase MULTI-MATCH AD37_BA39-Cohort2_INSOLUBLE_01 AD37_C2_INSOLUBLE_01 3 358.523538 1072.54878 0.91096 0.0003266 0.32124 0.00011517 1.2322 0.00044177 358.523287845364 47.68 0.52113 43.068 42.872 43.393 -4.6118 -0.30559 0.00028687 NaN 34.721 73 53 2 NaN NaN NaN NaN 0 NaN NaN 0 9389600 128486 1171 1877 2124 -1
+ATGIPDR 7 Unmodified _ATGIPDR_ 0 0 0 0 0 0 A0A0C4DH25;P01619 A0A0C4DH25;P01619 P01619 IGKV3D-20 Ig kappa chain V-III region B6 MULTI-MSMS AD07_BA39-Cohort2_INSOLUBLE_01 AD07_C2_INSOLUBLE_01 365.198608398438 2 365.198128 728.381703 0.77471 0.00028292 -0.36653 -0.00013386 0.40818 0.00014907 365.197970860418 13.647 0.6326 21.679 21.469 22.101 8.0324 74 43 2 0 0 0 0.022556 1 5892 84.244 37.442 1 135480000 180328 440;16 2589 2923 164260 164260 -1
+QASPNIVIALSGNK 14 Unmodified _QASPNIVIALSGNK_ 0 0 0 0 0 0 P20339-2;P20339 P20339-2 P20339-2 RAB5A Ras-related protein Rab-5A MULTI-MSMS AD32_BA39-Cohort2_INSOLUBLE_01 AD32_C2_INSOLUBLE_01 706.397766113281 2 706.398815 1410.78308 1.8223 0.0012873 -1.6146 -0.0011405 0.20774 0.00014674 706.397297210656 73.867 0.76277 69.412 69.072 69.835 -4.4554 115 75 2 0 0 0 0.017959 1 45935 56.225 41.023 1 11216000 1452469 878 21901 24954 1342683 1342683 -1
+KGGETSEMYLIQPDSSVKPYR 21 Acetyl (K) _K(Acetyl (K))GGETSEMYLIQPDSSVKPYR_ K(1)GGETSEMYLIQPDSSVKPYR K(61)GGETSEMYLIQPDSSVK(-61)PYR 1 0 0 0 0 2 P02675 P02675 P02675 FGB Fibrinogen beta chain;Fibrinopeptide B;Fibrinogen beta chain MULTI-MSMS AD17_BA39-Cohort2_INSOLUBLE_01 AD17_C2_INSOLUBLE_01 810.401916503906 3 809.733535 2426.17878 0.45577 0.00036905 -0.22563 -0.0001827 0.23013 0.00018635 810.068695550705 78.737 0.802 67.113 66.508 67.31 -11.625 92 32 4 0 0 0 0.0064913 1 32577 65.454 42.281 2 14331000 978323 473 14715 16501 906314 906314 16 -1
+GTTAVLTEK 9 Unmodified _GTTAVLTEK_ 0 0 0 0 0 0 Q99436 Q99436 Q99436 PSMB7 Proteasome subunit beta type-7 MULTI-MSMS AD34_BA39-Cohort1_INSOLUBLE_02 AD34_C1_INSOLUBLE_02 460.259094238281 2 460.258382 918.502212 0.0090672 4.1733E-06 0.29016 0.00013355 0.29923 0.00013772 460.258681503674 18.829 1.01 0.90985 0.56725 1.5772 -17.92 368 111 5 0 0 0 0.00054088 2 5224 113.71 82.417 1 212740000 706468 2317 10970 12312 651853;651854 651854 -1
+MGAPESGLAEYLFDK 15 Oxidation (M) _M(Oxidation (M))GAPESGLAEYLFDK_ M(1)GAPESGLAEYLFDK M(77)GAPESGLAEYLFDK 0 0 0 1 0 0 P02794 P02794 P02794 FTH1 Ferritin heavy chain;Ferritin heavy chain, N-terminally processed MULTI-MSMS CTR09_BA39-Cohort2_INSOLUBLE_01 CTR09_C2_INSOLUBLE_01 822.881713867188 2 822.384713 1642.75487 -1.6572 -0.0013628 -0.14336 -0.00011789 -1.8005 -0.0014807 822.384870466581 119.61 0.39682 114.86 114.63 115.03 -4.7454 45 12 5 0 0 0 0.00057155 1 38483 76.533 61.522 1 26522000 1301289 500 19586 22038 1205156 1205156 631 -1
+KLLGPLGMK 9 Unmodified _KLLGPLGMK_ 0 0 0 0 0 1 P35573;P35573-2;P35573-3 P35573 P35573 AGL Glycogen debranching enzyme;4-alpha-glucanotransferase;Amylo-alpha-1,6-glucosidase MULTI-MATCH AD27_BA39-Cohort1_INSOLUBLE_02 AD27_C1_INSOLUBLE_02 2 478.801706 955.588859 0.44887 0.00021492 -0.38631 -0.00018497 0.062552 2.995E-05 478.801377431999 58.501 0.7442 49.613 49.137 49.881 -8.8885 0.59479 -0.00026251 NaN 62.88 117 79 2 NaN NaN NaN NaN 0 NaN NaN 0 3492300 999787 1100 15022 16826 -1
+IALVITDGR 9 Unmodified _IALVITDGR_ 0 0 0 0 0 0 P12109 P12109 P12109 COL6A1 Collagen alpha-1(VI) chain MULTI-MSMS AD35_BA39-Cohort1_INSOLUBLE_01 AD35_C1_INSOLUBLE_01 479.290740966797 2 479.290017 956.565481 1.2946 0.0006205 -0.13471 -6.4564E-05 1.1599 0.00055594 479.289874759617 68.476 0.8797 53.7 53.208 54.088 -14.776 140 54 3 0 0 0 0.0081808 1 27931 73.248 33.706 1 51318000 791715 735 12213 13701 729793 729793 -1
+LEESVALR 8 Unmodified _LEESVALR_ 0 0 0 0 0 0 Q08209;Q08209-2;Q08209-3;Q08209-4 Q08209 Q08209 PPP3CA Serine/threonine-protein phosphatase 2B catalytic subunit alpha isoform MULTI-MATCH AD27_BA39-Cohort1_INSOLUBLE_01 AD27_C1_INSOLUBLE_01 2 458.758549 915.502546 -0.54013 -0.00024779 1.1575 0.000531 0.61735 0.00028321 458.759115923148 38.654 0.52255 28.416 28.073 28.595 -10.237 -0.0036757 0.00092527 NaN 127.84 58 32 2 NaN NaN NaN NaN 0 NaN NaN 0 8740700 1078911 1639 16191 18143 -1
+LADLLGK 7 Unmodified _LADLLGK_ 0 0 0 0 0 0 Q14204 Q14204 Q14204 DYNC1H1 Cytoplasmic dynein 1 heavy chain 1 MULTI-MSMS CTR42_BA39-Cohort1_INSOLUBLE_03 CTR42_C1_INSOLUBLE_03 365.227783203125 2 365.228897 728.44324 -1.8033 -0.00065861 -0.52383 -0.00019132 -2.3271 -0.00084993 365.228683371509 67.542 1.1171 54.307 53.751 54.868 -13.236 177 82 3 0 0 0 0.023125 2 28114 83.614 30.931 1 29193000 1037276 1754 15623 17507 956778;956779 956779 -1
+TIRPMDMETIEASVMK 16 2 Oxidation (M) _TIRPM(Oxidation (M))DMETIEASVM(Oxidation (M))K_ TIRPM(0.849)DM(0.151)ETIEASVM(1)K TIRPM(7.5)DM(-7.5)ETIEASVM(96)K 0 0 0 2 0 1 P11177;P11177-3;P11177-2 P11177 P11177 PDHB Pyruvate dehydrogenase E1 component subunit beta, mitochondrial MULTI-MSMS CTR12_BA39-Cohort2_INSOLUBLE_01 CTR12_C2_INSOLUBLE_01 628.97216796875 3 628.635228 1882.88386 3.1517 0.0019813 -0.69556 -0.00043725 2.4561 0.001544 628.969774309735 87.529 0.90266 83.785 83.351 84.253 -3.7432 117 33 5 0 0 0 1.8601E-05 1 34579 112.8 83.066 3 19379000 1747383 715 26822 30458 1609477 1609477 1091;1092;1093 -1
+AHVIGTPCSTQISSLK 16 Unmodified _AHVIGTPCSTQISSLK_ 0 0 0 0 0 0 P23515 P23515 P23515 OMG Oligodendrocyte-myelin glycoprotein MULTI-MATCH AD34_BA39-Cohort1_INSOLUBLE_01 AD34_C1_INSOLUBLE_01 3 571.638178 1711.8927 -1.8503 -0.0010577 -1.9685 -0.0011253 -3.8188 -0.002183 571.970863457268 56.015 0.56847 44.321 44.105 44.673 -11.693 -0.12711 -0.0017423 NaN 95.428 88 42 3 NaN NaN NaN NaN 0 NaN NaN 0 5719300 78816 943 1186 1333 -1
+SDGAPASDSKPGSSEAAPSSK 21 Unmodified _SDGAPASDSKPGSSEAAPSSK_ 0 0 0 0 0 1 P80723;P80723-2 P80723 P80723 BASP1 Brain acid soluble protein 1 MULTI-MSMS AD42_BA39-Cohort2_INSOLUBLE_01 AD42_C2_INSOLUBLE_01 644.963684082031 3 644.964224 1931.87084 -0.035482 -2.2884E-05 -0.021428 -1.382E-05 -0.056909 -3.6705E-05 644.96464055115 23.785 1.3592 22.068 21.528 22.888 -1.7176 390 82 8 0 0 0 3.0132E-05 3 8694 79.143 66.588 1 1072000000 1571883 1547 23955 27199 1449639;1449640;1449641 1449641 -1
+SSASFSTTAVSAR 13 Unmodified _SSASFSTTAVSAR_ 0 0 0 0 0 0 P61764;P61764-2 P61764;P61764-2 P61764 STXBP1 Syntaxin-binding protein 1 MULTI-MSMS AD24_BA39-Cohort1_INSOLUBLE_02 AD24_C1_INSOLUBLE_02 636.313720703125 2 636.314948 1270.61534 -1.7883 -0.001138 -0.63527 -0.00040423 -2.4236 -0.0015422 636.314616908393 42.379 1.1563 26.315 25.916 27.072 -16.064 211 93 4 0 0 0 0.00025511 2 14262 127.42 90.232 1 46551000 1662251 1434;1435 25486 28952 1526561;1526562 1526562 -1
+VLTGNLNVQAK 11 Unmodified _VLTGNLNVQAK_ 0 0 0 0 0 0 Q9UPP5-2;Q9UPP5 Q9UPP5-2 Q9UPP5-2 KIAA1107 Uncharacterized protein KIAA1107 MULTI-MATCH AD17_BA39-Cohort2_INSOLUBLE_01 AD17_C2_INSOLUBLE_01 2 578.837862 1155.66117 0.87116 0.00050426 0.40423 0.00023398 1.2754 0.00073824 578.838285880582 61.517 0.71918 49.906 49.543 50.262 -11.611 0.16106 0.00050538 NaN 74.486 28 17 2 NaN NaN NaN NaN 0 NaN NaN 0 2779300 1946117 2716 29676 33708 -1
+QFLQGQNFFLQEFGK 15 Unmodified _QFLQGQNFFLQEFGK_ 0 0 0 0 0 0 Q9NTJ4-2;Q9NTJ4;Q9NTJ4-4;Q9NTJ4-3 Q9NTJ4-2 Q9NTJ4-2 MAN2C1 Alpha-mannosidase 2C1 MULTI-MSMS CTR28_BA39-Cohort1_INSOLUBLE_01 CTR28_C1_INSOLUBLE_01 915.963012695313 2 915.962311 1829.91007 0.19881 0.0001821 0.79536 0.00072852 0.99417 0.00091062 916.464189800269 161.3 0.81406 158.37 157.92 158.73 -2.9312 247 70 4 0 0 0 2.0612E-35 3 72414 199.7 155.06 1 40648000 1466176 2535 22120 25200 1355681;1355682;1355683 1355682 -1
+IIPLLTDPK 9 Unmodified _IIPLLTDPK_ 0 0 0 0 0 0 P07099 P07099 P07099 EPHX1 Epoxide hydrolase 1 MULTI-MSMS AD08_BA39-Cohort2_INSOLUBLE_01 AD08_C2_INSOLUBLE_01 505.315185546875 2 505.318243 1008.62193 -5.6263 -0.0028431 -0.2938 -0.00014846 -5.9201 -0.0029915 505.31760579687 96.134 0.69299 84.175 83.794 84.487 -11.959 60 25 3 0 0 0 0.052356 1 40748 50.04 38.319 1 45911000 847219 582 13019 14596 782494 782494 -1
+LTYDEAVQACLNDGAQIAK 19 Unmodified _LTYDEAVQACLNDGAQIAK_ 0 0 0 0 0 0 P10915 P10915 P10915 HAPLN1 Hyaluronan and proteoglycan link protein 1 MULTI-MSMS CTR09_BA39-Cohort2_INSOLUBLE_01 CTR09_C2_INSOLUBLE_01 698.677185058594 3 698.67725 2093.00992 -0.23583 -0.00016477 0.43066 0.00030089 0.19483 0.00013613 699.011580953738 109.07 0.49624 103.38 103.09 103.58 -5.6943 61 33 2 0 0 0 0.0083154 1 34378 38.017 28.096 1 1521500 1247586 708 18842 21098 1153098 1153098 -1
+MIEEAGAIISTR 12 Unmodified _MIEEAGAIISTR_ 0 0 0 0 0 0 O00154-4;O00154-6;O00154-7;O00154;O00154-5;O00154-2;O00154-3 O00154-4 O00154-4 ACOT7 Cytosolic acyl coenzyme A thioester hydrolase MULTI-SECPEP AD35_BA39-Cohort1_INSOLUBLE_01 AD35_C1_INSOLUBLE_01 646.671936035156 2 645.839745 1289.66494 0.59968 0.0003873 0.9183 0.00059307 1.518 0.00098037 645.840244020917 70.867 2.6613 56.036 55.73 58.391 -14.831 266 163 2 0 0 0 0.0067709 1 30322 85.355 41.547 1 192950000 1306797 122 19665 22171 1209849 1209849 -1
+LQAQDAGIYECHTPSTDTR 19 Unmodified _LQAQDAGIYECHTPSTDTR_ 0 0 0 0 0 0 Q969P0;Q969P0-3 Q969P0 Q969P0 IGSF8 Immunoglobulin superfamily member 8 MULTI-MSMS CTR17_BA39-Cohort2_INSOLUBLE_01 CTR17_C2_INSOLUBLE_01 1089.51635742188 2 1089.00002 2175.9855 13.905 0.015143 2.7032 0.0029438 16.609 0.018087 1089.50341529492 59.354 0.16624 60.564 60.504 60.67 1.2099 10 6 2 0 0 0 1.3827E-05 1 25810 103.21 80.335 1 7767200 1198027 2229 18068 20240 1106848 1106848 -1
+VFTSSTISGGYAEYALAADHTVYK 24 Unmodified _VFTSSTISGGYAEYALAADHTVYK_ 0 0 0 0 0 0 Q08257;Q08257-3 Q08257 Q08257 CRYZ Quinone oxidoreductase MULTI-MSMS AD34_BA39-Cohort1_INSOLUBLE_01 AD34_C1_INSOLUBLE_01 851.420227050781 3 851.083221 2550.22783 0.63695 0.0005421 1.6047 0.0013658 2.2417 0.0019079 851.41913854571 104.03 0.34986 91.691 91.528 91.878 -12.336 49 21 3 0 0 0 3.8981E-08 1 45615 85.248 69.933 1 19664000 1882534 1641 28831 32756 1742162 1742162 -1
+LATNTSAPDLK 11 Unmodified _LATNTSAPDLK_ 0 0 0 0 0 0 P27816-6;P27816;P27816-2;P27816-4;P27816-5 P27816-6;P27816-5 P27816-6 MAP4 Microtubule-associated protein 4 MULTI-MSMS AD37_BA39-Cohort1_INSOLUBLE_01 AD37_C1_INSOLUBLE_01 565.804626464844 2 565.806228 1129.5979 -0.4737 -0.00026802 -1.5119 -0.00085543 -1.9856 -0.0011235 565.805799046461 29.803 0.75709 20.865 20.539 21.296 -8.9384 116 63 2 0 0 0 0.00051225 1 10088 111.46 80.152 1 18609000 1053932 1002;1004 15838 17745 972655 972655 -1
+EGIREETVSLR 11 Unmodified _EGIREETVSLR_ 0 0 0 0 0 1 P20618 P20618 P20618 PSMB1 Proteasome subunit beta type-1 MULTI-MSMS AD44_BA39-Cohort1_INSOLUBLE_04 AD44_C1_INSOLUBLE_04 644.846557617188 2 644.846416 1287.67828 0.304 0.00019604 0.052835 3.407E-05 0.35684 0.00023011 644.846400184016 26.291 0.6377 37.087 36.747 37.385 10.796 82 24 4 0 0 0 0.00091304 2 10404 121.9 58.334 1 88172000 386117 882 6108 6859 349052;349053 349053 -1
+GENLVSMTVEGPPPK 15 Oxidation (M) _GENLVSM(Oxidation (M))TVEGPPPK_ GENLVSM(1)TVEGPPPK GENLVSM(61)TVEGPPPK 0 0 0 1 0 0 P14678-2;P14678;P14678-3;P63162;P63162-2 P14678-2 P14678-2 SNRPB;SNRPN Small nuclear ribonucleoprotein-associated proteins B and B;Small nuclear ribonucleoprotein-associated protein N MSMS AD40_BA39-Cohort2_INSOLUBLE_01 AD40_C2_INSOLUBLE_01 785.902160644531 2 785.892706 1569.77086 NaN NaN NaN NaN NaN NaN NaN 72.22 1 67.614 67.114 68.114 -4.6052 0 0 0 0.0020428 1 28908 61.11 37.734 1 606308 796 9467 10619 556614 556614 1279 -1
+ASWTRPEK 8 Unmodified _ASWTRPEK_ 0 0 0 0 0 1 P13591;P13591-5;P13591-6 P13591 P13591 NCAM1 Neural cell adhesion molecule 1 MULTI-MSMS CTR28_BA39-Cohort1_INSOLUBLE_01 CTR28_C1_INSOLUBLE_01 325.506469726563 3 325.506653 973.498129 -1.6535 -0.00053823 -0.20145 -6.5572E-05 -1.855 -0.0006038 325.506588984661 13.001 0.45439 9.4679 9.2442 9.6986 -3.5329 38 21 2 0 0 0 0.006746 1 3862 70.256 34.818 1 61373000 173566 761 2497 2821 157669 157669 -1
+IEDYFPEFAR 10 Unmodified _IEDYFPEFAR_ 0 0 0 0 0 0 Q5JWF2-2;Q5JWF2;P63092-3;P63092-2;P63092;P63092-4 Q5JWF2-2 Q5JWF2-2 GNAS Guanine nucleotide-binding protein G(s) subunit alpha isoforms XLas;Guanine nucleotide-binding protein G(s) subunit alpha isoforms short MULTI-MATCH AD27_BA39-Cohort1_INSOLUBLE_02 AD27_C1_INSOLUBLE_02 2 643.806228 1285.5979 0.32426 0.00020876 0.13321 8.5763E-05 0.45747 0.00029452 644.307241428322 117.25 0.058388 99.828 99.784 99.842 -17.419 0.022763 0.00020548 NaN 66.692 8 6 2 NaN NaN NaN NaN 0 NaN NaN 0 806540 808813 1923 12477 13995 -1
+VMLGETNPADSKPGTIR 17 Oxidation (M) _VM(Oxidation (M))LGETNPADSKPGTIR_ 0 0 0 1 0 1 P15531;P15531-2;P22392-2;P22392;O60361 P15531;P22392-2;O60361 P22392-2 NME1;NME2;NME2P1 Nucleoside diphosphate kinase A;Nucleoside diphosphate kinase B;Putative nucleoside diphosphate kinase MULTI-MATCH AD30_BA39-Cohort2_INSOLUBLE_01 AD30_C2_INSOLUBLE_01 3 601.308609 1800.904 0.4776 0.00028718 0.073318 4.4087E-05 0.55091 0.00033127 601.30911281972 42.961 0.13559 37.796 37.755 37.891 -5.1649 -0.16112 0.0004987 NaN 104.44 29 17 2 NaN NaN NaN NaN 0 NaN NaN 0 8211300 1952831 917;811;253 29758 33814 295 -1
+QQAPPVR 7 Unmodified _QQAPPVR_ 0 0 0 0 0 0 Q16555;Q16555-2 Q16555;Q16555-2 Q16555 DPYSL2 Dihydropyrimidinase-related protein 2 MULTI-MATCH CTR14_BA39-Cohort2_INSOLUBLE_01 CTR14_C2_INSOLUBLE_01 2 398.22722 794.439886 -3.2555 -0.0012964 0.59764 0.000238 -2.6579 -0.0010584 398.227374687807 19.101 0.20924 18.149 18.107 18.316 -0.95228 0.060126 0.00062021 NaN 126.68 23 16 2 NaN NaN NaN NaN 0 NaN NaN 0 664970 1494397 1858;1859 22650 25789 -1
+ITFDDYIACCVK 12 Unmodified _ITFDDYIACCVK_ 0 0 0 0 0 0 P30626;P30626-2;P30626-3 P30626 P30626 SRI Sorcin MULTI-MATCH AD46_BA39-Cohort2_INSOLUBLE_01 AD46_C2_INSOLUBLE_01 2 766.85982 1531.70509 -1.5488 -0.0011878 -0.94611 -0.00072553 -2.495 -0.0019133 766.860042402539 108.28 0.55434 105.38 105.08 105.63 -2.9034 -0.08932 -9.1963E-05 NaN 97.915 45 18 3 NaN NaN NaN NaN 0 NaN NaN 0 12102000 917841 1054 13979 15681 -1
+SGHFEQAIK 9 Unmodified _SGHFEQAIK_ 0 0 0 0 0 0 Q01082;Q01082-2;Q01082-3 Q01082 Q01082 SPTBN1 Spectrin beta chain, non-erythrocytic 1 MULTI-MATCH AD24_BA39-Cohort1_INSOLUBLE_01 AD24_C1_INSOLUBLE_01 3 339.510174 1015.50869 -0.15234 -5.1719E-05 0.9125 0.0003098 0.76017 0.00025808 339.510579777965 17.819 0.64784 7.0714 6.7345 7.3823 -10.748 0.089584 0.00026518 NaN 109.02 114 55 3 NaN NaN NaN NaN 0 NaN NaN 0 4695700 1594003 1577 24371 27673 -1
+MVSGMYLGELVR 12 Unmodified _MVSGMYLGELVR_ 0 0 0 0 0 0 P19367-4;P19367-2;P19367;P19367-3 P19367-4 P19367-4 HK1 Hexokinase-1 MULTI-MATCH CTR29_BA39-Cohort1_INSOLUBLE_01 CTR29_C1_INSOLUBLE_01 2 677.846516 1353.67848 0.63059 0.00042744 4.1341 0.0028023 4.7647 0.0032297 677.849035983489 89.562 0.60527 103.32 103.2 103.81 13.754 -0.017106 0.00060389 NaN 58.37 80 51 3 NaN NaN NaN NaN 0 NaN NaN 0 4780900 1352912 865 20142 22954 -1
+FTASAGIQVVGDDLTVTNPK 20 Unmodified _FTASAGIQVVGDDLTVTNPK_ 0 0 0 0 0 0 P06733;P06733-2 P06733;P06733-2 P06733 ENO1 Alpha-enolase MSMS CTR29_BA39-Cohort1_INSOLUBLE_03 CTR29_C1_INSOLUBLE_03 678.353210449219 3 678.356505 2032.04769 NaN NaN NaN NaN NaN NaN NaN 118.72 1 134.62 134.12 135.12 15.902 0 0 0 0.05399 1 55547 25.207 7.4624 1 559758 569;570 8814 9898 512013 512013 -1
+AHQVVEDGYEFFAK 14 Unmodified _AHQVVEDGYEFFAK_ 0 0 0 0 0 0 P62140;P36873;P36873-2;P62136;P62136-2;P62136-3 P62140;P36873;P62136 P62140 PPP1CB;PPP1CC;PPP1CA Serine/threonine-protein phosphatase PP1-beta catalytic subunit;Serine/threonine-protein phosphatase PP1-gamma catalytic subunit;Serine/threonine-protein phosphatase PP1-alpha catalytic subunit MULTI-MATCH AD47_BA39-Cohort1_INSOLUBLE_01 AD47_C1_INSOLUBLE_01 3 547.263217 1638.76782 0.84517 0.00046253 0.3191 0.00017463 1.1643 0.00063717 547.263311663858 64.012 0.50847 78.279 77.921 78.43 14.267 -0.40482 0.00096027 NaN 91.441 28 19 2 NaN NaN NaN NaN 0 NaN NaN 0 1784800 77227 1447;1123;1446 1175 1320 -1
+EKENLSYDLVPLK 13 Unmodified _EKENLSYDLVPLK_ 0 0 0 0 0 1 Q92598-2;Q92598;Q92598-4;Q92598-3 Q92598-2 Q92598-2 HSPH1 Heat shock protein 105 kDa MULTI-MATCH AD38_BA39-Cohort1_INSOLUBLE_02 AD38_C1_INSOLUBLE_02 3 516.615368 1546.82427 0.53531 0.00027655 0.93528 0.00048318 1.4706 0.00075973 516.615836411887 51.825 0.73249 65.361 64.988 65.721 13.536 0.08253 4.4117E-05 NaN 40.751 62 27 3 NaN NaN NaN NaN 0 NaN NaN 0 4625000 407424 2188 6452 7249 -1
+SKESVPEFPLSPPK 14 Unmodified _SKESVPEFPLSPPK_ 0 0 0 0 0 1 P16949;P16949-2 P16949 P16949 STMN1 Stathmin MULTI-MSMS CTR41_BA39-Cohort1_INSOLUBLE_01 CTR41_C1_INSOLUBLE_01 771.913940429688 2 771.414131 1540.81371 -0.088739 -6.8455E-05 0.063469 4.8961E-05 -0.02527 -1.9494E-05 771.414459532365 95.638 0.60949 86.488 85.979 86.588 -9.1499 63 42 2 0 0 0 0.0093798 1 42172 75.819 49.881 1 7335800 1615725 835 24714 28060 1486297 1486297 -1
+ITQYLDAGGIPR 12 Unmodified _ITQYLDAGGIPR_ 0 0 0 0 0 0 Q9UQM7;Q9UQM7-2 Q9UQM7 Q9UQM7 CAMK2A Calcium/calmodulin-dependent protein kinase type II subunit alpha MULTI-MATCH AD46_BA39-Cohort1_INSOLUBLE_02 AD46_C1_INSOLUBLE_02 2 652.353877 1302.6932 -0.011981 -7.8157E-06 -7.2178 -0.0047085 -7.2297 -0.0047164 652.349354986974 67.204 0.15531 81.032 80.987 81.143 13.828 -0.059158 -0.0062165 NaN 211.64 16 11 2 NaN NaN NaN NaN 0 NaN NaN 0 5643300 924024 2727 14053 15762 -1
+YLGEEYVK 8 Unmodified _YLGEEYVK_ 0 0 0 0 0 0 P02787 P02787 P02787 TF Serotransferrin MULTI-MSMS CTR35_BA39-Cohort1_INSOLUBLE_01 CTR35_C1_INSOLUBLE_01 500.752044677734 2 500.752933 999.491313 0.49144 0.00024609 0.89811 0.00044973 1.3895 0.00069582 500.752508567793 52.105 1.7217 68.21 67.114 68.835 16.105 348 129 4 0 0 0 0.0038741 2 20318 100.45 63.43 1 85733000 2103686 496 31776 36070 1954817;1954818 1954818 -1
+VPAFLSAAEVEEHLR 15 Unmodified _VPAFLSAAEVEEHLR_ 0 0 0 0 0 0 Q14894 Q14894 Q14894 CRYM Ketimine reductase mu-crystallin MULTI-SECPEP AD01_BA39-Cohort1_INSOLUBLE_03 AD01_C1_INSOLUBLE_03 557.301147460938 3 556.6299 1666.86787 0.67601 0.00037628 0.27189 0.00015134 0.94789 0.00052762 556.62998155418 90.688 1.2564 106.07 105.44 106.69 15.387 86 47 2 0 0 0 0.0013175 1 36797 91.207 71.603 1 50081000 1965864 1779 29910 33991 1823662 1823662 -1
+MYGVLPWNAFPGK 13 Oxidation (M) _M(Oxidation (M))YGVLPWNAFPGK_ 0 0 0 1 0 0 P60201;P60201-2 P60201 P60201 PLP1 Myelin proteolipid protein MULTI-MATCH AD02_BA39-Cohort1_INSOLUBLE_01 AD02_C1_INSOLUBLE_01 2 748.373755 1494.73296 0.72485 0.00054246 -0.21551 -0.00016128 0.50934 0.00038118 748.373720017466 115.71 1.0004 114.84 114.27 115.27 -0.873 -0.088554 0.00036046 NaN 49.715 371 155 3 NaN NaN NaN NaN 0 NaN NaN 0 2356500 1357129 1389 20180 23013 2390 -1
+AGAGSATLSMAYAGAR 16 Unmodified _AGAGSATLSMAYAGAR_ 0 0 0 0 0 0 P40926;P40926-2 P40926 P40926 MDH2 Malate dehydrogenase, mitochondrial MULTI-MSMS CTR44_BA39-Cohort1_INSOLUBLE_01 CTR44_C1_INSOLUBLE_01 727.855285644531 2 727.856457 1453.69836 -0.83243 -0.00060589 -0.66423 -0.00048346 -1.4967 -0.0010894 727.856204543631 58.916 1.2691 63.671 63.154 64.423 4.7546 344 87 5 0 0 0 1.5743E-184 4 24398 296.14 237.16 1 409490000 61059 1153 911 1030 56322;56323;56324;56325 56323 -1
+YFLHQSHEEREHAEK 15 Unmodified _YFLHQSHEEREHAEK_ 0 0 0 0 0 1 P02794 P02794 P02794 FTH1 Ferritin heavy chain;Ferritin heavy chain, N-terminally processed MULTI-MATCH CTR35_BA39-Cohort1_INSOLUBLE_01 CTR35_C1_INSOLUBLE_01 4 485.731595 1938.89727 0.43066 0.00020919 1.0062 0.00048874 1.4369 0.00069793 485.732434356818 16.642 0.12424 32.53 32.427 32.551 15.888 0.12541 0.0013262 NaN 93.51 24 12 3 NaN NaN NaN NaN 0 NaN NaN 0 4614100 2084247 500 31483 35750 -1
+LSEGFSIHTR 10 Unmodified _LSEGFSIHTR_ 0 0 0 0 0 0 P20618 P20618 P20618 PSMB1 Proteasome subunit beta type-1 MULTI-MATCH AD02_BA39-Cohort1_INSOLUBLE_01 AD02_C1_INSOLUBLE_01 3 382.86825 1145.58292 0.012673 4.8522E-06 0.84045 0.00032178 0.85312 0.00032663 382.868052215762 51.668 0.25248 50.578 50.492 50.745 -1.0899 -0.084318 0.00096 NaN 94.309 62 38 2 NaN NaN NaN NaN 0 NaN NaN 0 275000 1217902 882 18396 20605 -1
+SMEIPGLR 8 Unmodified _SMEIPGLR_ 0 0 0 0 0 0 P24821;P24821-4 P24821 P24821 TNC Tenascin MULTI-MSMS AD37_BA39-Cohort2_INSOLUBLE_01 AD37_C2_INSOLUBLE_01 451.742004394531 2 451.741845 901.469137 0.95696 0.0004323 -0.68156 -0.00030789 0.2754 0.00012441 451.741902143615 60.383 1.0878 55.771 55.219 56.307 -4.6118 286 111 3 0 0 0 0.0033637 2 36961 102.71 33.799 1 63245000 1636119 958 25051 28441 1503310;1503311 1503311 -1
+LADLIERDR 9 Unmodified _LADLIERDR_ 0 0 0 0 0 1 P05091;P00352 P05091;P00352 P05091 ALDH2;ALDH1A1 Aldehyde dehydrogenase, mitochondrial;Retinal dehydrogenase 1 MULTI-MSMS AD24_BA39-Cohort1_INSOLUBLE_01 AD24_C1_INSOLUBLE_01 367.539581298828 3 367.540134 1099.59857 -1.5801 -0.00058074 0.29723 0.00010924 -1.2828 -0.0004715 367.5402604309 38.759 1.4181 28.664 28.161 29.579 -10.094 277 102 4 0 0 0 0.00011365 3 13691 140.75 78.754 1 52171000 1037165 540;400 15622 17506 956672;956673;956674 956673 -1
+VGAHAGEYGAEALER 15 Unmodified _VGAHAGEYGAEALER_ 0 0 0 0 0 0 P69905 P69905 P69905 HBA1 Hemoglobin subunit alpha MULTI-MATCH CTR04_BA39-Cohort1_INSOLUBLE_01 CTR04_C1_INSOLUBLE_01 3 510.58295 1528.72702 -0.2196 -0.00011213 0.39655 0.00020247 0.17695 9.0347E-05 510.582831138621 41.749 1.5963 60.581 59.709 61.305 18.832 0.14814 1.2562E-05 NaN 102.5 153 72 3 NaN NaN NaN NaN 0 NaN NaN 0 9566500 1886686 1533 28853 32781 -1
+IVIGMDVAASEFYR 14 Unmodified _IVIGMDVAASEFYR_ 0 0 0 0 0 0 P09104;P09104-2 P09104 P09104 ENO2 Gamma-enolase MULTI-MATCH AD36_BA39-Cohort1_INSOLUBLE_01 AD36_C1_INSOLUBLE_01 2 785.900334 1569.78611 3.2801 0.0025778 -1.5537 -0.001221 1.7264 0.0013568 785.89890879387 128.29 0.11329 111.37 111.29 111.4 -16.921 0.13702 -0.003367 NaN 100.72 23 15 2 NaN NaN NaN NaN 0 NaN NaN 0 10549000 932671 640 14143 15865 -1
+MGIVGPEFK 9 Unmodified _MGIVGPEFK_ 0 0 0 0 0 0 Q15149;Q15149-7;Q15149-9;Q15149-5;Q15149-6;Q15149-2;Q15149-3;Q15149-4;Q15149-8 Q15149;Q15149-3;Q15149-4;Q15149-8 Q15149-8 PLEC Plectin MULTI-MATCH-MSMS AD23_BA39-Cohort2_INSOLUBLE_01 AD23_C2_INSOLUBLE_01 2 489.259871 976.505189 0.92829 0.00045418 -1.2056 -0.00058983 -0.27727 -0.00013566 489.258918720666 59.592 0.46807 55.33 55.046 55.514 -4.2613 -0.064974 -7.881E-05 NaN 79.906 100 41 3 NaN NaN NaN NaN 0 NaN NaN 0 59479000 1303101 1800;1802;1803;1801 19607 22074 -1
+IVFEDGNINVNK 12 Unmodified _IVFEDGNINVNK_ 0 0 0 0 0 0 Q14194;Q14194-2 Q14194;Q14194-2 Q14194-2 CRMP1 Dihydropyrimidinase-related protein 1 MULTI-MATCH AD42_BA39-Cohort2_INSOLUBLE_01 AD42_C2_INSOLUBLE_01 2 681.356616 1360.69868 8.0595 0.0054914 -0.37151 -0.00025313 7.688 0.0052382 681.857937764306 82.416 0.48973 80.725 80.526 81.016 -1.6915 0.16545 -0.00038833 NaN 157.24 29 18 2 NaN NaN NaN NaN 0 NaN NaN 0 7395900 930108 1751;1750 14123 15842 -1
+GPQLFHMDPSGTFVQCDAR 19 Unmodified _GPQLFHMDPSGTFVQCDAR_ 0 0 0 0 0 0 P28066;P28066-2 P28066;P28066-2 P28066 PSMA5 Proteasome subunit alpha type-5 MULTI-SECPEP AD46_BA39-Cohort2_INSOLUBLE_01 AD46_C2_INSOLUBLE_01 726.4130859375 3 726.334941 2175.98299 -2.866 -0.0020817 0.44863 0.00032586 -2.4174 -0.0017558 726.669844834259 106.55 0.85363 103.68 103.17 104.03 -2.8638 123 29 6 0 0 0 0.0014247 1 45998 60.602 49.082 1 143910000 681298 1008;1009 10541 11844 628659 628659 -1
+FLPFSFEHIR 10 Unmodified _FLPFSFEHIR_ 0 0 0 0 0 0 Q93050-1;Q93050;Q93050-3 Q93050-1 Q93050-1 ATP6V0A1 V-type proton ATPase 116 kDa subunit a isoform 1 MULTI-MATCH CTR02_BA39-Cohort1_INSOLUBLE_01 CTR02_C1_INSOLUBLE_01 3 431.564391 1291.67134 -0.40068 -0.00017292 -0.98441 -0.00042484 -1.3851 -0.00059776 431.564088067123 60.314 0.74614 74.991 74.698 75.444 14.677 -0.066793 -0.00050088 NaN 150.08 59 46 2 NaN NaN NaN NaN 0 NaN NaN 0 19759000 523048 2223 8444 9479 -1
+SPLAQMEEERR 11 Unmodified _SPLAQMEEERR_ 0 0 0 0 0 1 Q16181;Q16181-2 Q16181;Q16181-2 Q16181 SEPT7 Septin-7 MULTI-MSMS CTR29_BA39-Cohort1_INSOLUBLE_03 CTR29_C1_INSOLUBLE_03 673.830200195313 2 673.330076 1344.6456 -0.41328 -0.00027827 -2.6676 -0.0017962 -3.0809 -0.0020744 673.330284529781 37.766 1.9665 54.714 53.625 55.591 16.948 188 94 3 0 0 0 2.6623E-20 1 14920 189.17 136.91 1 57340000 1645934 1850;1851 25225 28658 1511361 1511361 -1
+QMTEAIGPSTIR 12 Unmodified _QMTEAIGPSTIR_ 0 0 0 0 0 0 Q14764 Q14764 Q14764 MVP Major vault protein MULTI-MSMS CTR42_BA39-Cohort1_INSOLUBLE_01 CTR42_C1_INSOLUBLE_01 652.336303710938 2 652.337369 1302.66019 -0.53486 -0.00034891 -0.48245 -0.00031472 -1.0173 -0.00066363 652.337059051492 72.57 1.1165 54.649 53.934 55.051 -17.922 274 101 3 0 0 0 0.00095277 2 23678 103.26 77.331 1 21315000 1490588 1777 22575 25707 1377376;1377377 1377376 -1
+KAEGVALTNATGAVESTSQAGDR 23 Unmodified _KAEGVALTNATGAVESTSQAGDR_ 0 0 0 0 0 1 Q9BY11 Q9BY11 Q9BY11 PACSIN1 Protein kinase C and casein kinase substrate in neurons protein 1 MULTI-MSMS AD49_BA39-Cohort2_INSOLUBLE_01 AD49_C2_INSOLUBLE_01 1117.05810546875 2 1117.05639 2232.09822 2.9109 0.0032517 -0.44946 -0.00050207 2.4615 0.0027496 1117.55801461873 70.889 0.48368 68.389 68.193 68.677 -2.5007 45 20 4 0 0 0 3.2183E-22 1 28554 145.91 117.59 1 11699000 955780 2390 14380 16124 888620 888620 -1
+LGPNYLHIPVNCPYR 15 Unmodified _LGPNYLHIPVNCPYR_ 0 0 0 0 0 0 P04040 P04040 P04040 CAT Catalase MULTI-MSMS CTR04_BA39-Cohort1_INSOLUBLE_01 CTR04_C1_INSOLUBLE_01 609.650512695313 3 609.650529 1825.92976 0.23596 0.00014385 -0.69006 -0.0004207 -0.4541 -0.00027684 609.984569274434 75.909 1.2412 95.122 94.263 95.504 19.213 172 49 5 0 0 0 0.00012343 1 31560 92.039 71.948 1 32946000 1110700 505 16702 18704 1026655 1026655 -1
+EPQVYTLPPSR 11 Unmodified _EPQVYTLPPSR_ 0 0 0 0 0 0 P01860;P01857;P01859 P01860;P01857;P01859 P01857 IGHG3;IGHG1;IGHG2 Ig gamma-3 chain C region;Ig gamma-1 chain C region;Ig gamma-2 chain C region MSMS AD18_BA39-Cohort2_INSOLUBLE_01 AD18_C2_INSOLUBLE_01 643.839172363281 2 643.840602 1285.66665 NaN NaN NaN NaN NaN NaN NaN 67.384 1 54.573 54.073 55.073 -12.811 0 0 0 0.023327 1 26355 65.627 43.541 1 440762 456;458;457 7064 7959 396078 396078 -1
+FTQAGSEVSALLGR 14 Unmodified _FTQAGSEVSALLGR_ 0 0 0 0 0 0 P06576 P06576 P06576 ATP5B ATP synthase subunit beta, mitochondrial MULTI-MATCH AD43_BA39-Cohort1_INSOLUBLE_01 AD43_C1_INSOLUBLE_01 2 718.380623 1434.74669 0.39668 0.00028497 3.0153 0.0021661 3.4119 0.0024511 718.383062346551 86.786 2.6464 100.95 99.888 102.53 14.162 0.22274 0.0018148 NaN 189.57 210 98 3 NaN NaN NaN NaN 0 NaN NaN 0 10066000 566198 565 8862 9949 -1
+RQQVLDR 7 Unmodified _RQQVLDR_ 0 0 0 0 0 1 Q13813-2;Q13813;Q13813-3 Q13813-2;Q13813-3 Q13813-2 SPTAN1 Spectrin alpha chain, non-erythrocytic 1 MULTI-MATCH AD30_BA39-Cohort2_INSOLUBLE_01 AD30_C2_INSOLUBLE_01 3 305.510397 913.509363 -0.53014 -0.00016196 0.19904 6.0808E-05 -0.33111 -0.00010116 305.510338243574 11.112 0.091038 6.357 6.3297 6.4207 -4.7549 -0.26793 0.00020875 NaN 45.081 23 18 2 NaN NaN NaN NaN 0 NaN NaN 0 651510 1549871 1728;1729 23560 26769 -1
+TPSSDGTVEVR 11 Unmodified _TPSSDGTVEVR_ 0 0 0 0 0 0 Q96ID5 Q96ID5 Q96ID5 IGSF21 Immunoglobulin superfamily member 21 MULTI-MATCH CTR11_BA39-Cohort2_INSOLUBLE_01 CTR11_C2_INSOLUBLE_01 2 574.283117 1146.55168 -0.56475 -0.00032432 2.3776 0.0013654 1.8128 0.0010411 574.285669800356 34.753 0.67987 32.586 32.293 32.973 -2.1675 0.32475 0.0019081 NaN 94.309 112 43 4 NaN NaN NaN NaN 0 NaN NaN 0 20730000 1782392 2280 27401 31140 -1
+KLVEQLK 7 Unmodified _KLVEQLK_ 0 0 0 0 0 1 P59768 P59768 P59768 GNG2 Guanine nucleotide-binding protein G(I)/G(S)/G(O) subunit gamma-2 MULTI-MSMS CTR01_BA39-Cohort1_INSOLUBLE_01 CTR01_C1_INSOLUBLE_01 429.27490234375 2 429.276378 856.538203 -1.0461 -0.00044907 0.0021046 9.0343E-07 -1.044 -0.00044817 429.276208587729 18.907 0.91987 30.609 30.135 31.055 11.702 219 84 3 0 0 0 0.057671 1 5864 74.415 7.3804 1 21689000 1003421 1385 15071 16882 928688 928688 -1
+VLSSSEISVHWEHVLEK 17 Unmodified _VLSSSEISVHWEHVLEK_ 0 0 0 0 0 0 Q12860;Q12860-2 Q12860 Q12860 CNTN1 Contactin-1 MULTI-MATCH AD04_BA39-Cohort1_INSOLUBLE_01 AD04_C1_INSOLUBLE_01 4 495.511274 1978.01599 0.97628 0.00048376 -0.4738 -0.00023478 0.50247 0.00024898 495.761904045875 95.356 0.20755 96.258 96.212 96.419 0.90178 -0.028735 0.00022469 NaN 113.69 53 31 3 NaN NaN NaN NaN 0 NaN NaN 0 696480 1945274 1665 29660 33691 -1
+SNLDEDIIAEENIVSR 16 Unmodified _SNLDEDIIAEENIVSR_ 0 0 0 0 0 0 P01024 P01024 P01024 C3 Complement C3;Complement C3 beta chain;C3-beta-c;Complement C3 alpha chain;C3a anaphylatoxin;Acylation stimulating protein;Complement C3b alpha chain;Complement C3c alpha chain fragment 1;Complement C3dg fragment;Complement C3g fragment;Complement C3d fragment;Complement C3f fragment;Complement C3c alpha chain fragment 2 MULTI-MATCH AD03_BA39-Cohort2_INSOLUBLE_01 AD03_C2_INSOLUBLE_01 3 606.302289 1815.88504 1.4133 0.00085686 -1.7335 -0.001051 -0.32021 -0.00019414 606.635409308254 88.392 0.69378 98.204 98.027 98.721 9.8118 0.070407 -0.0013934 NaN 37.171 142 71 3 NaN NaN NaN NaN 0 NaN NaN 0 26789000 1640131 428 25127 28551 -1
+TVTNNLK 7 Unmodified _TVTNNLK_ 0 0 0 0 0 0 P09493;P09493-5;P09493-6 P09493;P09493-5;P09493-6 P09493-6 TPM1 Tropomyosin alpha-1 chain MULTI-MATCH AD16_BA39-Cohort2_INSOLUBLE_01 AD16_C2_INSOLUBLE_01 2 395.226885 788.439217 0.045016 1.7791E-05 5.2962 0.0020932 5.3412 0.002111 395.229443979457 33.738 0.059626 20.376 20.339 20.398 -13.362 0.26659 0.0027524 NaN 67.035 8 5 2 NaN NaN NaN NaN 0 NaN NaN 0 947380 1822687 654;653;652 27956 31770 -1
+TLFGLHLSQK 10 Unmodified _TLFGLHLSQK_ 0 0 0 0 0 0 P31939;P31939-2 P31939 P31939 ATIC Bifunctional purine biosynthesis protein PURH;Phosphoribosylaminoimidazolecarboxamide formyltransferase;IMP cyclohydrolase MULTI-MATCH CTR15_BA39-Cohort2_INSOLUBLE_01 CTR15_C2_INSOLUBLE_01 3 381.888874 1142.64479 -0.14355 -5.4819E-05 -0.86708 -0.00033113 -1.0106 -0.00038595 381.888618429384 95.209 0.78887 90.269 89.992 90.781 -4.9404 0.15194 6.2045E-05 NaN 30.55 69 31 4 NaN NaN NaN NaN 0 NaN NaN 0 25701000 1758629 1066 26980 30636 -1
+DFQWTDNTGLQFENWR 16 Unmodified _DFQWTDNTGLQFENWR_ 0 0 0 0 0 0 O14594 O14594 O14594 NCAN Neurocan core protein MULTI-MATCH-MSMS CTR10_BA39-Cohort2_INSOLUBLE_01 CTR10_C2_INSOLUBLE_01 3 686.309778 2055.9075 2.3659 0.0016237 0.33516 0.00023002 2.7011 0.0018538 686.643765387101 113.02 0.412 131.68 131.47 131.88 18.664 0.17764 0.00024154 NaN 131.24 102 42 3 NaN NaN NaN NaN 0 NaN NaN 0 5337700 248856 163 3872 4342 -1
+EPQVYTLPPSR 11 Unmodified _EPQVYTLPPSR_ 0 0 0 0 0 0 P01860;P01857;P01859 P01860;P01857;P01859 P01857 IGHG3;IGHG1;IGHG2 Ig gamma-3 chain C region;Ig gamma-1 chain C region;Ig gamma-2 chain C region MSMS AD22_BA39-Cohort1_INSOLUBLE_01 AD22_C1_INSOLUBLE_01 643.837524414063 2 643.840602 1285.66665 NaN NaN NaN NaN NaN NaN NaN 53.887 1 44.817 44.317 45.317 -9.0703 0 0 0 0.00086381 1 21275 110.53 85.396 1 440781 456;458;457 7064 7959 396124 396124 -1
+DDGSWEVIEGYR 12 Unmodified _DDGSWEVIEGYR_ 0 0 0 0 0 0 P00367;P49448 P00367;P49448 P00367 GLUD1;GLUD2 Glutamate dehydrogenase 1, mitochondrial;Glutamate dehydrogenase 2, mitochondrial MSMS AD35_BA39-Cohort1_INSOLUBLE_02 AD35_C1_INSOLUBLE_02 713.315856933594 2 713.317688 1424.62082 NaN NaN NaN NaN NaN NaN NaN 90.675 1 81.227 80.727 81.727 -9.4484 0 0 0 0.00088297 1 39949 101.65 80.274 1 239919 401;1244 3707 4154 216752 216752 -1
+GFEVVYMTEPIDEYCVQQLK 20 Unmodified _GFEVVYMTEPIDEYCVQQLK_ 0 0 0 0 0 0 P08238 P08238 P08238 HSP90AB1 Heat shock protein HSP 90-beta MULTI-MATCH AD44_BA39-Cohort1_INSOLUBLE_03 AD44_C1_INSOLUBLE_03 2 1231.58454 2461.15453 1.0931 0.0013462 -0.31586 -0.00038901 0.77724 0.00095724 1232.5872948596 88.551 0.35025 99.601 99.368 99.719 11.05 0.057011 -0.0001122 NaN 145.17 32 12 4 NaN NaN NaN NaN 0 NaN NaN 0 3320800 609648 621 9536 10699 -1
+VLHTYHDSR 9 Unmodified _VLHTYHDSR_ 0 0 0 0 0 0 Q14141-2;Q14141-4;Q14141;Q14141-3 Q14141-2 Q14141-2 SEPT6 Septin-6 MULTI-MATCH AD48_BA39-Cohort2_INSOLUBLE_01 AD48_C2_INSOLUBLE_01 3 376.524595 1126.55196 -0.70845 -0.00026675 1.9061 0.00071769 1.1976 0.00045094 376.525399492087 16.317 0.1736 15.716 15.587 15.761 -0.60088 -0.013397 0.0030426 NaN 35.511 16 10 2 NaN NaN NaN NaN 0 NaN NaN 0 3465600 1938116 1746 29505 33519 -1
+LLAQDQGQGAPLLEPAP 17 Unmodified _LLAQDQGQGAPLLEPAP_ 0 0 0 0 0 0 Q15102 Q15102 Q15102 PAFAH1B3 Platelet-activating factor acetylhydrolase IB subunit gamma MULTI-SECPEP CTR05_BA39-Cohort2_INSOLUBLE_01 CTR05_C2_INSOLUBLE_01 860.082214355469 2 859.459601 1716.90465 -0.93907 -0.00080709 0.94676 0.0008137 0.0076895 6.6088E-06 859.962671912862 106.09 0.32473 103.45 103.29 103.61 -2.6425 29 11 3 0 0 0 0.04912 1 45174 45.004 28.75 1 7927600 1146969 1796 17205 19265 1060713 1060713 -1
+DLIGVQNLLK 10 Unmodified _DLIGVQNLLK_ 0 0 0 0 0 0 Q13813-2;Q13813;Q13813-3 Q13813-2;Q13813-3 Q13813-2 SPTAN1 Spectrin alpha chain, non-erythrocytic 1 MULTI-MSMS CTR10_BA39-Cohort2_INSOLUBLE_01 CTR10_C2_INSOLUBLE_01 556.83740234375 2 556.837331 1111.66011 1.1004 0.00061276 -1.7882 -0.00099576 -0.68781 -0.000383 556.836771401767 98.625 0.74514 117.26 116.87 117.61 18.64 133 55 3 0 0 0 0.0026088 1 64043 94.302 52.193 1 17666000 285125 1728;1729 4430 4959 257323 257323 -1
+AATSRYTLNFEAAQK 15 Unmodified _AATSRYTLNFEAAQK_ 0 0 0 0 0 1 P13611;P13611-5;P13611-3;P13611-2;P13611-4 P13611 P13611 VCAN Versican core protein MULTI-MSMS CTR31_BA39-Cohort1_INSOLUBLE_01 CTR31_C1_INSOLUBLE_01 557.622192382813 3 557.621404 1669.84238 0.61392 0.00034234 0.41615 0.00023205 1.0301 0.00057439 557.621594260211 64.256 1.2347 79.475 78.981 80.216 15.219 140 77 3 0 0 0 0.0014387 2 26406 65.113 52.73 1 15427000 20887 763 283 323 20173;20174 20173 -1
+INYTEGR 7 Unmodified _INYTEGR_ 0 0 0 0 0 0 P06744;P06744-2 P06744 P06744 GPI Glucose-6-phosphate isomerase MULTI-MSMS CTR09_BA39-Cohort2_INSOLUBLE_01 CTR09_C2_INSOLUBLE_01 426.714019775391 2 426.714142 851.413731 0.25748 0.00010987 -0.2683 -0.00011449 -0.010823 -4.6185E-06 426.713953678424 28.851 0.63083 26.178 25.911 26.542 -2.673 203 64 4 0 0 0 0.012382 1 7036 100.74 56.211 1 9409500 889487 572 13523 15172 823304 823304 -1
+SPFSVAVSPSLDLSK 15 Unmodified _SPFSVAVSPSLDLSK_ 0 0 0 0 0 0 P21333-2;P21333 P21333-2 P21333-2 FLNA Filamin-A MULTI-MATCH CTR32_BA39-Cohort1_INSOLUBLE_01 CTR32_C1_INSOLUBLE_01 2 767.411588 1532.80862 0.83644 0.0006419 4.9815 0.0038229 5.818 0.0044648 767.415478334245 67.484 0.61328 82.974 82.769 83.383 15.489 0.27109 0.00039455 NaN 116.24 78 44 2 NaN NaN NaN NaN 0 NaN NaN 0 10365000 1644644 897 25202 28632 -1
+YFLHQSHEER 10 Unmodified _YFLHQSHEER_ 0 0 0 0 0 0 P02794 P02794 P02794 FTH1 Ferritin heavy chain;Ferritin heavy chain, N-terminally processed MULTI-MATCH CTR30_BA39-Cohort1_INSOLUBLE_02 CTR30_C1_INSOLUBLE_02 3 449.214309 1344.6211 0.020585 9.2469E-06 -0.68277 -0.00030671 -0.66218 -0.00029746 449.54930294912 23.862 0.13274 39.19 39.124 39.257 15.327 0.0016418 0.0012725 NaN 66.19 17 11 2 NaN NaN NaN NaN 0 NaN NaN 0 2103800 2083715 500 31482 35749 -1
+EAELKEAEKELHEK 14 Unmodified _EAELKEAEKELHEK_ 0 0 0 0 0 2 Q9NVA2;Q9NVA2-2;Q14141-2;Q14141-4;Q14141 Q9NVA2;Q14141-2 Q9NVA2 SEPT11;SEPT6 Septin-11;Septin-6 MULTI-MATCH AD46_BA39-Cohort1_INSOLUBLE_03 AD46_C1_INSOLUBLE_03 3 561.624703 1681.85228 -0.81674 -0.0004587 -1.1848 -0.00066542 -2.0016 -0.0011241 561.958755387824 50.167 0.068909 57.361 57.307 57.375 7.1941 0.25979 -0.0023753 NaN 54.95 5 4 2 NaN NaN NaN NaN 0 NaN NaN 0 1661800 349828 2547;1746 5438 6121 -1
+ILISLATGHR 10 Unmodified _ILISLATGHR_ 0 0 0 0 0 0 P08133;P08133-2 P08133 P08133 ANXA6 Annexin A6 MULTI-MSMS CTR40_BA39-Cohort1_INSOLUBLE_02 CTR40_C1_INSOLUBLE_02 540.829650878906 2 540.82984 1079.64513 1.7605 0.00095211 -0.57684 -0.00031197 1.1836 0.00064014 540.829003647803 41.843 1.328 42.107 41.612 42.939 0.26352 129 56 3 0 0 0 0.00021539 1 17060 130.56 70.204 1 28171000 867794 615 13259 14854 804190 804190 -1
+KGHIYQGSEADSVFSGFLIFPSA 23 Unmodified _KGHIYQGSEADSVFSGFLIFPSA_ 0 0 0 0 0 1 P02745 P02745 P02745 C1QA Complement C1q subcomponent subunit A MULTI-MATCH AD23_BA39-Cohort2_INSOLUBLE_01 AD23_C2_INSOLUBLE_01 3 819.741018 2456.20123 2.1073 0.0017274 6.0655 0.0049722 8.1728 0.0066996 820.081620896768 118.62 0.16141 114.42 114.3 114.46 -4.2009 0.23369 0.014818 NaN 96.79 8 5 2 NaN NaN NaN NaN 0 NaN NaN 0 5886100 978505 482 14724 16510 -1
+GYISPYFINTSK 12 Unmodified _GYISPYFINTSK_ 0 0 0 0 0 0 P10809 P10809 P10809 HSPD1 60 kDa heat shock protein, mitochondrial MULTI-MSMS AD34_BA39-Cohort1_INSOLUBLE_02 AD34_C1_INSOLUBLE_02 695.355346679688 2 695.356085 1388.69762 0.64743 0.00045019 -0.52464 -0.00036481 0.12279 8.5384E-05 695.355381456612 101.43 0.72142 96.502 96.189 96.91 -4.9244 193 79 3 0 0 0 0.0057921 1 33277 71.349 40.779 1 6929900 725717 706 11245 12618 672112 672112 -1
+NMQNVEHVPLSLDR 14 Oxidation (M) _NM(Oxidation (M))QNVEHVPLSLDR_ 0 0 0 1 0 0 P20618 P20618 P20618 PSMB1 Proteasome subunit beta type-1 MULTI-MATCH CTR21_BA39-Cohort2_INSOLUBLE_01 CTR21_C2_INSOLUBLE_01 3 556.610511 1666.8097 0.84804 0.00047203 -0.52016 -0.00028953 0.32788 0.0001825 556.945174178551 54.16 0.15687 72.098 72.002 72.159 17.937 0.19668 -0.00082964 NaN 127.07 21 15 2 NaN NaN NaN NaN 0 NaN NaN 0 8149000 1405587 882 20962 23911 1447 -1
+FYTDPSYFFDLWK 13 Unmodified _FYTDPSYFFDLWK_ 0 0 0 0 0 0 Q9UPY6;Q9UPY6-2 Q9UPY6 Q9UPY6 WASF3 Wiskott-Aldrich syndrome protein family member 3 MULTI-MATCH CTR08_BA39-Cohort1_INSOLUBLE_01 CTR08_C1_INSOLUBLE_01 2 864.900857 1727.78716 0.61102 0.00052847 2.8039 0.0024251 3.4149 0.0029535 864.90328806373 106.92 0.12303 117.47 117.38 117.51 10.551 0.16038 0.0030897 NaN 97.456 20 15 2 NaN NaN NaN NaN 0 NaN NaN 0 1266900 575608 2720 9022 10124 -1
+IVLEDGTLHVTEGSGR 16 Unmodified _IVLEDGTLHVTEGSGR_ 0 0 0 0 0 0 Q16555;Q16555-2 Q16555;Q16555-2 Q16555 DPYSL2 Dihydropyrimidinase-related protein 2 MULTI-MSMS AD07_BA39-Cohort2_INSOLUBLE_01 AD07_C2_INSOLUBLE_01 561.629516601563 3 561.628448 1681.86351 1.4554 0.00081742 0.30742 0.00017265 1.7629 0.00099008 561.628714948598 58.416 2.6444 69.115 68.474 71.118 10.699 708 282 4 0 0 0 6.8498E-05 4 35700 96.303 76.464 1 90443000 933901 1858;1859 14156 15878 867313;867314;867315;867316 867314 -1
+EAAVSHAGSMHR 12 Unmodified _EAAVSHAGSMHR_ 0 0 0 0 0 0 Q9Y2A7-2;Q9Y2A7 Q9Y2A7-2 Q9Y2A7-2 NCKAP1 Nck-associated protein 1 MULTI-MSMS CTR33_BA39-Cohort1_INSOLUBLE_01 CTR33_C1_INSOLUBLE_01 418.199279785156 3 418.199894 1251.57785 -0.10796 -4.515E-05 -0.95997 -0.00040146 -1.0679 -0.00044661 418.199608071684 9.3569 0.18945 25.082 24.955 25.144 15.725 23 7 4 0 0 0 0.00016853 1 2096 117.79 93.803 1 48644000 345472 2736 5400 6078 313901 313901 -1
+ILTPLVSLDTPGK 13 Unmodified _ILTPLVSLDTPGK_ 0 0 0 0 0 0 Q9HC38-2;Q9HC38 Q9HC38-2 Q9HC38-2 GLOD4 Glyoxalase domain-containing protein 4 MULTI-MSMS AD10_BA39-Cohort2_INSOLUBLE_01 AD10_C2_INSOLUBLE_01 677.403259277344 2 677.403035 1352.79152 1.0084 0.00068312 -0.014508 -9.8274E-06 0.99393 0.00067329 677.403051867105 90.734 0.57135 100.68 100.37 100.94 9.9472 145 43 4 0 0 0 0.00052033 2 57855 97.734 50.131 1 80098000 875767 2477 13360 14964 811236;811237 811236 -1
+LTGMAFR 7 Unmodified _LTGMAFR_ 0 0 0 0 0 0 P04406;P04406-2;O14556 P04406;P04406-2;O14556 P04406 GAPDH;GAPDHS Glyceraldehyde-3-phosphate dehydrogenase;Glyceraldehyde-3-phosphate dehydrogenase, testis-specific MULTI-MSMS CTR25_BA39-Cohort1_INSOLUBLE_01 CTR25_C1_INSOLUBLE_01 398.213470458984 2 398.212724 794.410894 -0.86251 -0.00034346 -0.52396 -0.00020865 -1.3865 -0.00055211 398.213654188092 45.907 4.4892 60.189 59.251 63.74 14.282 839 314 5 0 0 0 3.2182E-08 11 18936 177.54 142.65 1 5512400000 1236829 523;524;160 18684 20926 1143372;1143373;1143374;1143375;1143376;1143377;1143378;1143379;1143380;1143381;1143382 1143376 -1
+ADDGRPFPQVIK 12 Unmodified _ADDGRPFPQVIK_ 0 0 0 0 0 1 P04075;P04075-2 P04075 P04075 ALDOA Fructose-bisphosphate aldolase A MULTI-MSMS AD49_BA39-Cohort2_INSOLUBLE_01 AD49_C2_INSOLUBLE_01 671.861633300781 2 671.859326 1341.7041 3.9932 0.0026829 -0.64365 -0.00043245 3.3495 0.0022504 671.858698947208 73.352 0.77962 70.734 70.433 71.213 -2.6178 85 30 4 0 0 0 0.015492 1 29639 76.143 27.346 1 25182000 29720 507 387 430 28506 28506 -1
+LTPVSPESSSTEEK 14 Unmodified _LTPVSPESSSTEEK_ 0 0 0 0 0 0 Q13501;Q13501-2 Q13501 Q13501 SQSTM1 Sequestosome-1 MULTI-MATCH CTR43_BA39-Cohort2_INSOLUBLE_01 CTR43_C2_INSOLUBLE_01 2 745.864668 1489.71478 -0.25018 -0.0001866 -1.9405 -0.0014474 -2.1907 -0.001634 745.86317731389 45.025 0.36262 32.711 32.48 32.843 -12.313 0.29428 -0.0023373 NaN 107.06 25 16 2 NaN NaN NaN NaN 0 NaN NaN 0 1853500 1243231 1706 18762 21012 -1
+LNFSHGTHEYHAETIK 16 Unmodified _LNFSHGTHEYHAETIK_ 0 0 0 0 0 0 P14618;P14618-2 P14618;P14618-2 P14618-2 PKM Pyruvate kinase PKM MULTI-MATCH CTR28_BA39-Cohort1_INSOLUBLE_02 CTR28_C1_INSOLUBLE_02 3 628.639347 1882.89621 0.29586 0.00018599 -0.2795 -0.0001757 0.016367 1.0289E-05 628.973454355428 40.898 0.3502 56.429 56.144 56.495 15.531 -0.19336 -0.00036375 NaN 130.39 29 24 2 NaN NaN NaN NaN 0 NaN NaN 0 4979200 1181695 792;791 17759 19907 -1
+IGLGTDVAGGYSYSMLDAIR 20 Unmodified _IGLGTDVAGGYSYSMLDAIR_ 0 0 0 0 0 0 Q9Y2T3;Q9Y2T3-3;Q9Y2T3-2 Q9Y2T3 Q9Y2T3 GDA Guanine deaminase MULTI-MATCH AD24_BA39-Cohort1_INSOLUBLE_01 AD24_C1_INSOLUBLE_01 2 1030.01187 2058.00919 0.86893 0.00089501 3.4226 0.0035253 4.2915 0.0044203 1030.51674051124 123.92 0.19853 112.77 112.63 112.83 -11.148 0.24321 0.0035415 NaN 126.63 35 21 2 NaN NaN NaN NaN 0 NaN NaN 0 3043900 828686 2749 12769 14313 -1
+RLTVSSLQESGLK 13 Unmodified _RLTVSSLQESGLK_ 0 0 0 0 0 1 P21333-2;P21333 P21333-2 P21333-2 FLNA Filamin-A MULTI-MATCH AD38_BA39-Cohort1_INSOLUBLE_02 AD38_C1_INSOLUBLE_02 3 473.271824 1416.79364 -0.67773 -0.00032075 0.90307 0.0004274 0.22533 0.00010664 473.27245681294 34.335 0.42134 47.792 47.498 47.919 13.456 0.2276 0.00037282 NaN 81.904 28 16 2 NaN NaN NaN NaN 0 NaN NaN 0 2090400 1541192 897 23396 26589 -1
+KYAAELHLVHWNTK 14 Unmodified _KYAAELHLVHWNTK_ 0 0 0 0 0 1 P00918 P00918 P00918 CA2 Carbonic anhydrase 2 MULTI-MATCH AD23_BA39-Cohort1_INSOLUBLE_02 AD23_C1_INSOLUBLE_02 4 428.233508 1708.90492 -1.6285 -0.00069737 -0.50875 -0.00021786 -2.1372 -0.00091523 428.483595189195 61.115 0.26408 52.435 52.301 52.566 -8.6798 0.21885 5.4823E-05 NaN 33.301 34 19 3 NaN NaN NaN NaN 0 NaN NaN 0 11600000 1031852 421 15515 17392 -1
+KVLEPMPSTAEISTSGAVLK 20 Unmodified _KVLEPMPSTAEISTSGAVLK_ 0 0 0 0 0 1 Q12860;Q12860-2;Q12860-3 Q12860 Q12860 CNTN1 Contactin-1 MULTI-MSMS CTR05_BA39-Cohort2_INSOLUBLE_01 CTR05_C2_INSOLUBLE_01 1030.0654296875 2 1029.5612 2057.10784 0.17244 0.00017754 1.6218 0.0016697 1.7942 0.0018472 1029.56443379744 98.215 0.3049 95.67 95.529 95.834 -2.5458 17 10 2 0 0 0 0.0024858 1 41575 59.709 45.451 1 7072400 1027865 1665 15461 17332 949394 949394 -1
+VSNTPLR 7 Unmodified _VSNTPLR_ 0 0 0 0 0 0 O75781;O75781-2 O75781 O75781 PALM Paralemmin-1 MSMS CTR13_BA39-Cohort2_INSOLUBLE_01 CTR13_C2_INSOLUBLE_01 393.725860595703 2 393.727052 785.439552 NaN NaN NaN NaN NaN NaN NaN 26.2 1 24.916 24.416 25.416 -1.2839 0 0 0 0.028501 1 8527 86.866 29.403 1 1988809 319 30295 34428 1844952 1844952 -1
+QRQEVCQSYK 10 Unmodified _QRQEVCQSYK_ 0 0 0 0 0 1 P08133;P08133-2 P08133 P08133 ANXA6 Annexin A6 MULTI-MATCH CTR16_BA39-Cohort2_INSOLUBLE_01 CTR16_C2_INSOLUBLE_01 3 447.218954 1338.63503 0.17889 8.0001E-05 -2.9131 -0.0013028 -2.7342 -0.0012228 447.551724318091 35.485 0.047195 28.303 28.276 28.323 -7.1814 -0.22476 -0.0044833 NaN 73.887 10 7 2 NaN NaN NaN NaN 0 NaN NaN 0 334070 1498289 615 22736 25887 -1
+ELPGHTGYLSCCR 13 Unmodified _ELPGHTGYLSCCR_ 0 0 0 0 0 0 P62879;P62879-2;Q9HAV0 P62879;Q9HAV0 P62879 GNB2;GNB4 Guanine nucleotide-binding protein G(I)/G(S)/G(T) subunit beta-2;Guanine nucleotide-binding protein subunit beta-4 MULTI-MATCH AD38_BA39-Cohort1_INSOLUBLE_03 AD38_C1_INSOLUBLE_03 2 789.363592 1576.71263 -0.8029 -0.00063378 -1.144 -0.00090302 -1.9469 -0.0015368 789.362061951717 24.601 0.24303 38.838 38.706 38.949 14.237 0.025381 -0.00095001 NaN 116.77 14 9 2 NaN NaN NaN NaN 0 NaN NaN 0 3245700 424961 1490;2474 6747 7574 -1
+GNAGQSNYGFANSAMER 17 Unmodified _GNAGQSNYGFANSAMER_ 0 0 0 0 0 0 P49327 P49327 P49327 FASN Fatty acid synthase;[Acyl-carrier-protein] S-acetyltransferase;[Acyl-carrier-protein] S-malonyltransferase;3-oxoacyl-[acyl-carrier-protein] synthase;3-oxoacyl-[acyl-carrier-protein] reductase;3-hydroxyacyl-[acyl-carrier-protein] dehydratase;Enoyl-[acyl-carrier-protein] reductase;Oleoyl-[acyl-carrier-protein] hydrolase MULTI-MSMS CTR31_BA39-Cohort1_INSOLUBLE_01 CTR31_C1_INSOLUBLE_01 887.380615234375 2 887.384099 1772.75365 -2.2661 -0.0020109 -0.60066 -0.00053302 -2.8667 -0.0025439 887.383753210332 54.393 0.25789 69.592 69.461 69.719 15.199 32 19 2 0 0 0 0.0024833 1 21841 63.76 53.807 1 9760400 669242 1234 10371 11654 616995 616995 -1
+TMSIVSYNHLGNNDGENLSAPLQFR 25 Unmodified _TMSIVSYNHLGNNDGENLSAPLQFR_ 0 0 0 0 0 0 Q9NPH2;Q9NPH2-2;Q9NPH2-3 Q9NPH2 Q9NPH2 ISYNA1 Inositol-3-phosphate synthase 1 MULTI-MSMS CTR44_BA39-Cohort1_INSOLUBLE_01 CTR44_C1_INSOLUBLE_01 926.783569335938 3 926.448569 2776.32388 0.53304 0.00049383 -1.3743 -0.0012732 -0.84126 -0.00077938 926.781903282906 104.5 1.0317 97.397 96.995 98.027 -7.1031 219 68 4 0 0 0 1.3637E-13 2 47219 102.07 87.761 1 41336000 1769434 2496 27207 30910 1629600;1629601 1629600 -1
+ILISLATGHREEGGENLDQAR 21 Unmodified _ILISLATGHREEGGENLDQAR_ 0 0 0 0 0 1 P08133;P08133-2 P08133 P08133 ANXA6 Annexin A6 MULTI-SECPEP AD47_BA39-Cohort1_INSOLUBLE_01 AD47_C1_INSOLUBLE_01 571.299438476563 4 570.548919 2278.16657 -0.78121 -0.00044572 -0.72667 -0.0004146 -1.5079 -0.00086032 570.548478032104 39.212 0.86587 54.232 53.885 54.751 15.02 61 35 2 0 0 0 0.00022228 1 16527 64.723 45.17 1 28601000 867946 615 13260 14855 804305 804305 -1
+LVALLNTLDR 10 Unmodified _LVALLNTLDR_ 0 0 0 0 0 0 Q15257-2;Q15257;Q15257-3 Q15257-2 Q15257-2 PPP2R4 Serine/threonine-protein phosphatase 2A activator MULTI-MATCH AD36_BA39-Cohort1_INSOLUBLE_01 AD36_C1_INSOLUBLE_01 2 564.342781 1126.67101 0.98163 0.00055398 0.085858 4.8453E-05 1.0675 0.00060243 564.342883423096 99.213 0.99001 82.292 81.825 82.815 -16.921 -0.088157 0.00044872 NaN 140.5 105 46 3 NaN NaN NaN NaN 0 NaN NaN 0 45405000 1248610 1809 18852 21109 -1
+HNADDIVATGLAVESIK 17 Unmodified _HNADDIVATGLAVESIK_ 0 0 0 0 0 0 Q9P265 Q9P265 Q9P265 DIP2B Disco-interacting protein 2 homolog B MULTI-SECPEP CTR41_BA39-Cohort1_INSOLUBLE_01 CTR41_C1_INSOLUBLE_01 585.777954101563 3 584.975736 1751.90538 0.46336 0.00027106 -0.57231 -0.00033479 -0.10894 -6.3729E-05 585.309732774391 116.49 0.56831 107.29 107.07 107.63 -9.2018 68 34 3 0 0 0 0.0035561 1 52598 58.672 46.649 1 8316600 758292 2598 11770 13209 700345 700345 -1
+LVEQLLSPR 9 Unmodified _LVEQLLSPR_ 0 0 0 0 0 0 Q99719-2 Q99719-2 Q99719-2 SEPT5 Septin-5 MULTI-MATCH CTR21_BA39-Cohort2_INSOLUBLE_01 CTR21_C2_INSOLUBLE_01 2 527.816399 1053.61824 0.71113 0.00037534 -0.40497 -0.00021375 0.30616 0.0001616 527.816293895392 61.773 0.80315 79.69 79.283 80.086 17.917 0.12383 -0.0004808 NaN 130.75 112 86 2 NaN NaN NaN NaN 0 NaN NaN 0 14846000 1252766 2334 18906 21168 -1
+NGPVEGAFSVYSDFLLYK 18 Unmodified _NGPVEGAFSVYSDFLLYK_ 0 0 0 0 0 0 P07858 P07858 P07858 CTSB Cathepsin B;Cathepsin B light chain;Cathepsin B heavy chain MULTI-MSMS CTR42_BA39-Cohort1_INSOLUBLE_02 CTR42_C1_INSOLUBLE_02 1003.50341796875 2 1003.49892 2004.98329 0.55957 0.00056153 0.82932 0.00083222 1.3889 0.0013937 1004.0003574662 105.47 1.0924 117.56 117.03 118.12 12.088 107 39 4 0 0 0 1.4661E-05 2 46121 112.51 95.017 1 6222400 1378081 604 20560 23446 1274549;1274550 1274550 -1
+LLTIDQDLMVAQFSTPSLPPTLK 23 Unmodified _LLTIDQDLMVAQFSTPSLPPTLK_ 0 0 0 0 0 0 P13798 P13798 P13798 APEH Acylamino-acid-releasing enzyme MULTI-MATCH AD27_BA39-Cohort1_INSOLUBLE_01 AD27_C1_INSOLUBLE_01 2 1264.68766 2527.36076 -2.9096 -0.0036798 0.29595 0.00037428 -2.6137 -0.0033055 1265.18969855501 125.56 0.11996 114.36 114.3 114.42 -11.207 -0.011364 0.0015731 NaN 107.61 7 4 2 NaN NaN NaN NaN 0 NaN NaN 0 70324000 1167794 775 17587 19680 -1
+KTLYNNQPIDFLKK 14 Unmodified _KTLYNNQPIDFLKK_ 0 0 0 0 0 2 Q13867 Q13867 Q13867 BLMH Bleomycin hydrolase MULTI-MATCH CTR44_BA39-Cohort1_INSOLUBLE_01 CTR44_C1_INSOLUBLE_01 3 574.657678 1720.95121 1.8935 0.0010881 -0.82457 -0.00047384 1.069 0.00061429 574.991030889557 69.974 0.39287 74.729 74.528 74.921 4.7546 -0.16879 -0.0014212 NaN 67.136 52 22 3 NaN NaN NaN NaN 0 NaN NaN 0 19590000 1023482 1733 15379 17242 -1
+GNVLSLECIAEGLPTPIIYWAK 22 Unmodified _GNVLSLECIAEGLPTPIIYWAK_ 0 0 0 0 0 0 Q92823-2;Q92823;Q92823-5;Q92823-3;Q92823-6;Q92823-4 Q92823-2 Q92823-2 NRCAM Neuronal cell adhesion molecule MULTI-MSMS AD44_BA39-Cohort1_INSOLUBLE_01 AD44_C1_INSOLUBLE_01 820.773986816406 3 820.106533 2457.29777 0.45019 0.0003692 -0.27114 -0.00022236 0.17905 0.00014684 820.440951459866 122.01 0.47455 133.27 132.99 133.46 11.257 46 21 3 0 0 0 0.043526 1 51551 20.814 5.8857 1 920450 673558 2207 10434 11724 621926 621926 -1
+TSATWLALSR 10 Unmodified _TSATWLALSR_ 0 0 0 0 0 0 P05023-4;P05023;P05023-3;P05023-2 P05023-4 P05023-4 ATP1A1 Sodium/potassium-transporting ATPase subunit alpha-1 MULTI-MATCH AD16_BA39-Cohort2_INSOLUBLE_01 AD16_C2_INSOLUBLE_01 2 553.303655 1104.59276 8.1191 0.0044923 -2.4362 -0.001348 5.6829 0.0031444 553.302085504826 102.38 0.50364 89.75 89.362 89.866 -12.629 -0.029719 -0.0022925 NaN 169.21 18 17 2 NaN NaN NaN NaN 0 NaN NaN 0 3288400 1794117 531 27538 31295 -1
+TPHDLFSSGLFR 12 Unmodified _TPHDLFSSGLFR_ 0 0 0 0 0 0 Q7Z7M0;Q7Z7M0-2 Q7Z7M0 Q7Z7M0 MEGF8 Multiple epidermal growth factor-like domains protein 8 MULTI-MATCH AD39_BA39-Cohort2_INSOLUBLE_01 AD39_C2_INSOLUBLE_01 3 459.570093 1375.68845 -0.46564 -0.00021399 -0.051961 -2.388E-05 -0.5176 -0.00023787 459.570047046905 107.44 0.69014 103.96 103.64 104.33 -3.4788 -0.34047 0.00083795 NaN 49.081 53 24 3 NaN NaN NaN NaN 0 NaN NaN 0 4285000 1777567 2031 27345 31067 -1
+FEVGDIMLIR 10 Oxidation (M) _FEVGDIM(Oxidation (M))LIR_ 0 0 0 1 0 0 P00491 P00491 P00491 PNP Purine nucleoside phosphorylase MULTI-MATCH AD01_BA39-Cohort2_INSOLUBLE_01 AD01_C2_INSOLUBLE_01 2 604.820824 1207.62709 0.36039 0.00021797 5.6544 0.0034199 6.0148 0.0036379 605.324902478739 95.58 0.027981 103.94 103.92 103.95 8.3612 0.10125 0.0072271 NaN 60.91 4 2 2 NaN NaN NaN NaN 0 NaN NaN 0 1247400 497877 409 8087 9085 481 -1
+FTASAGIQVVGDDLTVTNPK 20 Unmodified _FTASAGIQVVGDDLTVTNPK_ 0 0 0 0 0 0 P06733;P06733-2 P06733;P06733-2 P06733 ENO1 Alpha-enolase MULTI-MATCH CTR29_BA39-Cohort1_INSOLUBLE_02 CTR29_C1_INSOLUBLE_02 3 678.356505 2032.04769 0.35819 0.00024298 3.5761 0.0024259 3.9343 0.0026689 678.359914622898 105.83 0.15445 101.53 101.4 101.56 -4.2919 -0.47838 0.00683 NaN 191.21 22 15 2 NaN NaN NaN NaN 0 NaN NaN 0 3326900 561946 569;570 8814 9898 -1
+TFPLDVGSIVGYSGQK 16 Unmodified _TFPLDVGSIVGYSGQK_ 0 0 0 0 0 0 P48147 P48147 P48147 PREP Prolyl endopeptidase MULTI-MSMS AD32_BA39-Cohort2_INSOLUBLE_01 AD32_C2_INSOLUBLE_01 834.436462402344 2 834.435595 1666.85664 -0.0071404 -5.9582E-06 0.44335 0.00036995 0.43621 0.00036399 834.435911192148 106.26 0.50361 101.91 101.61 102.11 -4.3492 96 62 2 0 0 0 0.017427 1 67694 51.013 38.057 1 7197700 1723886 1218 26496 30089 1585015 1585015 -1
+RKPADLQNLAPGTHPPFITFNSEVK 25 Unmodified _RKPADLQNLAPGTHPPFITFNSEVK_ 0 0 0 0 0 2 Q9Y696 Q9Y696 Q9Y696 CLIC4 Chloride intracellular channel protein 4 MULTI-MATCH-MSMS CTR29_BA39-Cohort1_INSOLUBLE_03 CTR29_C1_INSOLUBLE_03 4 695.123788 2776.46605 0.31647 0.00021999 -0.32654 -0.00022698 -0.010063 -6.9952E-06 695.374687760673 92.093 0.4889 108.27 108.08 108.57 16.182 -0.23372 0.00094611 NaN 44.258 43 30 2 NaN NaN NaN NaN 0 NaN NaN 0 7595800 1535060 2786 23306 26493 -1
+GTVVYGEPITASLGTDGSHYWSK 23 Unmodified _GTVVYGEPITASLGTDGSHYWSK_ 0 0 0 0 0 0 Q16555;Q16555-2 Q16555;Q16555-2 Q16555 DPYSL2 Dihydropyrimidinase-related protein 2 MULTI-MSMS AD44_BA39-Cohort1_INSOLUBLE_03 AD44_C1_INSOLUBLE_03 1213.58911132813 2 1213.08715 2424.15975 0.46019 0.00055825 0.22622 0.00027443 0.68641 0.00083267 1213.5888271269 66.123 0.70687 76.687 76.397 77.104 10.565 129 26 6 0 0 0 3.3428E-66 2 27475 201.16 159.68 1 260820000 708762 1858;1859 11002 12345 654085;654086 654086 -1
+ALGFPLER 8 Unmodified _ALGFPLER_ 0 0 0 0 0 0 O75390 O75390 O75390 CS Citrate synthase, mitochondrial MULTI-MSMS AD39_BA39-Cohort2_INSOLUBLE_01 AD39_C2_INSOLUBLE_01 451.756591796875 2 451.758352 901.502152 -3.313 -0.0014967 0.98701 0.00044589 -2.326 -0.0010508 451.758327148779 90.517 0.77566 87.079 86.737 87.513 -3.4379 52 30 2 0 0 0 0.0031534 1 37516 104.45 51.765 1 10159000 106602 302 1577 1766 97414 97414 -1
+RGTGGVDTAATGGVFDISNLDR 22 Unmodified _RGTGGVDTAATGGVFDISNLDR_ 0 0 0 0 0 1 P12532;P12532-2 P12532 P12532 CKMT1A Creatine kinase U-type, mitochondrial MULTI-MSMS AD48_BA39-Cohort2_INSOLUBLE_01 AD48_C2_INSOLUBLE_01 727.362548828125 3 727.029451 2178.06652 -3.0542 -0.0022205 1.5563 0.0011315 -1.4979 -0.001089 727.364788220349 107.15 0.87434 104.04 103.54 104.41 -3.1121 109 29 5 0 0 0 1.6382E-11 1 45596 119.28 103.5 1 232890000 1530915 747 23232 26414 1415429 1415429 -1
+TATPQQAQEVHEK 13 Unmodified _TATPQQAQEVHEK_ 0 0 0 0 0 0 P60174;P60174-1;P60174-4 P60174 P60174 TPI1 Triosephosphate isomerase MULTI-MSMS AD23_BA39-Cohort1_INSOLUBLE_02 AD23_C1_INSOLUBLE_02 733.865661621094 2 733.865337 1465.71612 0.21235 0.00015583 0.016901 1.2403E-05 0.22925 0.00016824 733.865458434708 11.822 1.3562 3.1924 2.7097 4.0659 -8.6295 444 111 6 0 0 0 4.6562E-55 3 3318 219.33 191.59 1 552420000 1704774 1388 26175 29731 1566080;1566081;1566082 1566081 -1
+TLFPLIEAK 9 Unmodified _TLFPLIEAK_ 0 0 0 0 0 0 P13010 P13010 P13010 XRCC5 X-ray repair cross-complementing protein 5 MULTI-MATCH-MSMS CTR23_BA39-Cohort2_INSOLUBLE_01 CTR23_C2_INSOLUBLE_01 2 516.310418 1030.60628 -0.0034418 -1.777E-06 -0.47601 -0.00024577 -0.47945 -0.00024755 516.310716075561 90.111 0.67549 109.56 109.2 109.88 19.447 -0.10274 -0.00024027 NaN 67.993 112 63 2 NaN NaN NaN NaN 0 NaN NaN 0 10421000 1758698 754 26982 30638 -1
+FLLSESGSGK 10 Unmodified _FLLSESGSGK_ 0 0 0 0 0 0 P19367-4;P19367-2;P19367;P19367-3 P19367-4 P19367-4 HK1 Hexokinase-1 MULTI-MATCH AD02_BA39-Cohort1_INSOLUBLE_01 AD02_C1_INSOLUBLE_01 2 512.769114 1023.52368 0.16068 8.2391E-05 -6.0782 -0.0031167 -5.9176 -0.0030343 512.765958075907 64.203 0.56512 62.984 62.767 63.333 -1.2187 0.14741 -3.125E-05 NaN 98.033 119 85 2 NaN NaN NaN NaN 0 NaN NaN 0 373290 522461 865 8437 9471 -1
+FMQASEDLLKEHYVDLK 17 Unmodified _FMQASEDLLKEHYVDLK_ 0 0 0 0 0 1 P15531;P15531-2;P22392-2 P15531;P22392-2 P22392-2 NME1;NME2 Nucleoside diphosphate kinase A;Nucleoside diphosphate kinase B MULTI-MATCH AD25_BA39-Cohort1_INSOLUBLE_01 AD25_C1_INSOLUBLE_01 4 517.262033 2065.01903 0.39052 0.000202 1.4578 0.00075409 1.8484 0.00095609 517.513461889754 90.632 1.3135 81.384 80.912 82.225 -9.2482 -0.21304 0.0007785 NaN 90.714 207 81 3 NaN NaN NaN NaN 0 NaN NaN 0 27046000 527686 917;811 8524 9576 -1
+FIIPQIVK 8 Unmodified _FIIPQIVK_ 0 0 0 0 0 0 P07195 P07195 P07195 LDHB L-lactate dehydrogenase B chain MULTI-MATCH AD05_BA39-Cohort2_INSOLUBLE_01 AD05_C2_INSOLUBLE_01 1 957.613165 956.605889 -1.1865 -0.0011362 -0.012268 -1.1748E-05 -1.1987 -0.0011479 957.613069851335 111.87 1.1949 100.47 99.966 101.16 -11.401 0.18641 7.473E-05 NaN 154.09 120 40 4 NaN NaN NaN NaN 0 NaN NaN 0 64930000 513358 584 8290 9310 -1
+THIETVINALK 11 Unmodified _THIETVINALK_ 0 0 0 0 0 0 O94973;O94973-2;O94973-3 O94973 O94973 AP2A2 AP-2 complex subunit alpha-2 MULTI-MATCH AD17_BA39-Cohort2_INSOLUBLE_01 AD17_C2_INSOLUBLE_01 2 619.858795 1237.70304 0.067216 4.1664E-05 0.042399 2.6282E-05 0.10962 6.7946E-05 619.859280206017 87.084 0.41847 75.307 75.046 75.465 -11.777 -0.054455 0.00094894 NaN 81.263 32 14 3 NaN NaN NaN NaN 0 NaN NaN 0 12167000 1735561 358 26675 30291 -1
+TKEGVVHGVATVAEK 15 Unmodified _TKEGVVHGVATVAEK_ 0 0 0 0 0 1 P37840;P37840-2 P37840 P37840 SNCA Alpha-synuclein MULTI-MATCH AD37_BA39-Cohort1_INSOLUBLE_01 AD37_C1_INSOLUBLE_01 4 381.964966 1523.83076 -0.73084 -0.00027916 1.2601 0.0004813 0.52923 0.00020215 382.216254234741 27.367 0.20424 18.452 18.366 18.57 -8.9147 -0.30924 0.0016783 NaN 103.88 19 16 2 NaN NaN NaN NaN 0 NaN NaN 0 1529700 1751395 1136 26878 30522 -1
+FTYGFQNIVDAYGIGTYR 18 Unmodified _FTYGFQNIVDAYGIGTYR_ 0 0 0 0 0 0 Q93050-1;Q93050;Q93050-3 Q93050-1 Q93050-1 ATP6V0A1 V-type proton ATPase 116 kDa subunit a isoform 1 MULTI-MATCH AD12_BA39-Cohort2_INSOLUBLE_01 AD12_C2_INSOLUBLE_01 2 1043.00745 2084.00034 -2.9456 -0.0030723 5.7312 0.0059777 2.7856 0.0029054 1043.01184651247 123.66 0.26044 110.75 110.54 110.8 -12.911 0.080915 0.0080928 NaN 99.003 11 9 2 NaN NaN NaN NaN 0 NaN NaN 0 27987000 567109 2223 8881 9970 -1
+VLEDVGK 7 Unmodified _VLEDVGK_ 0 0 0 0 0 0 Q9BY11 Q9BY11 Q9BY11 PACSIN1 Protein kinase C and casein kinase substrate in neurons protein 1 MULTI-MATCH-MSMS AD01_BA39-Cohort1_INSOLUBLE_03 AD01_C1_INSOLUBLE_03 2 380.215986 758.417419 0.089221 3.3923E-05 1.9871 0.00075554 2.0763 0.00078946 380.21562921349 19.137 0.68985 30.935 30.546 31.236 11.798 -0.0026874 0.0012682 NaN 83.614 138 40 5 NaN NaN NaN NaN 0 NaN NaN 0 10554000 1932707 2390 29426 33431 -1
+AVAVGRPSNEELR 13 Acetyl (Protein N-term) _(Acetyl (Protein N-term))AVAVGRPSNEELR_ 0 1 0 0 0 1 Q9NVA2 Q9NVA2 Q9NVA2 SEPT11 Septin-11 MULTI-MATCH AD08_BA39-Cohort2_INSOLUBLE_01 AD08_C2_INSOLUBLE_01 3 480.591557 1438.75284 -4.6839 -0.002251 1.3978 0.00067178 -3.2861 -0.0015793 480.591856396347 73.449 0.47216 61.584 61.294 61.767 -11.865 -0.39323 0.0010156 NaN 61.212 38 18 3 NaN NaN NaN NaN 0 NaN NaN 0 7590200 186336 2547 2719 3066 -1
+GSSSGGGYSSGSSSYGSGGR 20 Unmodified _GSSSGGGYSSGSSSYGSGGR_ 0 0 0 0 0 0 CON__P35908;CON__P35908v2;P35908 CON__P35908;CON__P35908v2 CON__P35908v2 KRT2 Keratin, type II cytoskeletal 2 epidermal MULTI-MATCH-MSMS AD40_BA39-Cohort2_INSOLUBLE_01 AD40_C2_INSOLUBLE_01 2 870.856426 1739.6983 -0.51716 -0.00045037 -0.52415 -0.00045646 -1.0413 -0.00090683 870.856023201049 25.481 0.41605 21.112 20.888 21.304 -4.3683 -0.17125 -0.0010446 NaN 142.97 69 26 3 NaN NaN NaN NaN 0 NaN NaN 0 13553000 + 698819 83;84 10839 12172 -1
+LEEMLRPLVEEGLR 14 Oxidation (M) _LEEM(Oxidation (M))LRPLVEEGLR_ LEEM(1)LRPLVEEGLR LEEM(60)LRPLVEEGLR 0 0 0 1 0 1 P13716;P13716-2 P13716;P13716-2 P13716 ALAD Delta-aminolevulinic acid dehydratase MULTI-MSMS CTR29_BA39-Cohort1_INSOLUBLE_03 CTR29_C1_INSOLUBLE_03 567.305603027344 3 567.306428 1698.89746 -1.919 -0.0010886 -1.0763 -0.00061059 -2.9953 -0.0016992 567.305639623191 80.24 0.60881 96.793 96.569 97.177 16.553 70 35 3 0 0 0 0.0064587 1 36037 59.607 25.825 1 20253000 1078309 769;770 16179 18130 996394 996394 1219 -1
+VDIVAINDPFIDLNYMVYMFQYDSTHGK 28 2 Oxidation (M) _VDIVAINDPFIDLNYM(Oxidation (M))VYM(Oxidation (M))FQYDSTHGK_ 0 0 0 2 0 0 P04406 P04406 P04406 GAPDH Glyceraldehyde-3-phosphate dehydrogenase MULTI-MATCH AD26_BA39-Cohort1_INSOLUBLE_01 AD26_C1_INSOLUBLE_01 3 1114.18954 3339.5468 -5.2637 -0.0058647 -1.2278 -0.001368 -6.4915 -0.0072327 1114.52115857196 125.52 0.18973 114.34 114.26 114.45 -11.173 -0.20794 -0.0023098 NaN 114.68 14 7 4 NaN NaN NaN NaN 0 NaN NaN 0 88513000 1856077 523 28430 32314 677;678 -1
+KHISQISVAEDDDESLLGHLMIVGK 25 Oxidation (M) _KHISQISVAEDDDESLLGHLM(Oxidation (M))IVGK_ KHISQISVAEDDDESLLGHLM(1)IVGK KHISQISVAEDDDESLLGHLM(62)IVGK 0 0 0 1 0 1 P49773 P49773 P49773 HINT1 Histidine triad nucleotide-binding protein 1 MULTI-MSMS AD46_BA39-Cohort2_INSOLUBLE_01 AD46_C2_INSOLUBLE_01 551.086303710938 5 550.886405 2749.39564 -3.1462 -0.0017332 0.25728 0.00014173 -2.889 -0.0015915 551.087326424265 115.25 0.84065 111.1 110.74 111.58 -4.1513 107 28 5 0 0 0 9.365E-07 1 49851 62.082 54.46 1 16703000 984824 1258 14815 16607 913391 913391 2196 -1
+VIYPTDSR 8 Unmodified _VIYPTDSR_ 0 0 0 0 0 0 Q8IWA5;Q8IWA5-3 Q8IWA5 Q8IWA5 SLC44A2 Choline transporter-like protein 2 MULTI-MATCH CTR36_BA39-Cohort1_INSOLUBLE_02 CTR36_C1_INSOLUBLE_02 2 475.750724 949.486896 0.080451 3.8275E-05 0.86408 0.00041109 0.94453 0.00044936 475.751524723381 30.384 0.61197 41.08 40.658 41.27 10.696 0.49447 0.00058355 NaN 54.157 62 48 2 NaN NaN NaN NaN 0 NaN NaN 0 6066100 1922577 2063 29280 33265 -1
+FLEQQNQVLQTK 12 Unmodified _FLEQQNQVLQTK_ 0 0 0 0 0 0 CON__P35908;CON__P35908v2;P35908;P04264;CON__P04264;CON__ENSEMBL:ENSBTAP00000038253;CON__Q7Z794;Q7Z794 CON__P35908;CON__P35908v2;P04264;CON__ENSEMBL:ENSBTAP00000038253;CON__Q7Z794 P04264 KRT2;KRT1;KRT77 Keratin, type II cytoskeletal 2 epidermal;Keratin, type II cytoskeletal 1;Keratin, type II cytoskeletal 1b MULTI-MSMS AD13_BA39-Cohort2_INSOLUBLE_01 AD13_C2_INSOLUBLE_01 738.398864746094 2 738.396273 1474.77799 3.2282 0.0023837 0.057193 4.2231E-05 3.2854 0.0024259 738.396638329929 49.231 1.8739 58.078 57.557 59.431 8.8474 624 214 5 0 0 0 2.2356E-30 6 28243 196.27 133.84 1 842830000 + 519862 519;83;84;110;54 8404 9436 467021;467022;467023;467024;467025;467026 467022 -1
+INEKPQVIADYESGR 15 Unmodified _INEKPQVIADYESGR_ 0 0 0 0 0 1 O60869-2;O60869-3;O60869 O60869-2 O60869-2 EDF1 Endothelial differentiation-related factor 1 MULTI-MATCH CTR30_BA39-Cohort1_INSOLUBLE_02 CTR30_C1_INSOLUBLE_02 3 573.628448 1717.86351 0.89933 0.00051588 1.1773 0.00067535 2.0767 0.0011912 573.628747696117 51.762 0.62486 67.168 66.848 67.473 15.406 0.14046 0.00011886 NaN 38.227 79 48 2 NaN NaN NaN NaN 0 NaN NaN 0 8859000 885879 270 13462 15104 -1
+NQVSLTCLVK 10 Unmodified _NQVSLTCLVK_ 0 0 0 0 0 0 P01861;P01860;P01857;P01859 P01861;P01860;P01857;P01859 P01857 IGHG4;IGHG3;IGHG1;IGHG2 Ig gamma-4 chain C region;Ig gamma-3 chain C region;Ig gamma-1 chain C region;Ig gamma-2 chain C region MULTI-MSMS CTR37_BA39-Cohort1_INSOLUBLE_01 CTR37_C1_INSOLUBLE_01 588.326599121094 2 588.326273 1174.63799 0.75165 0.00044222 -0.73219 -0.00043076 0.019464 1.1451E-05 588.326147246726 69.826 1.5052 85.427 84.783 86.288 15.601 338 108 5 0 0 0 0.00034341 3 27770 119.07 86.227 1 649190000 1417051 456;458;459;457 21166 24141 1308704;1308705;1308706 1308705 -1
+HAPVLELEGK 10 Unmodified _HAPVLELEGK_ 0 0 0 0 0 0 P40123;P40123-2 P40123 P40123 CAP2 Adenylyl cyclase-associated protein 2 MULTI-MATCH CTR23_BA39-Cohort2_INSOLUBLE_01 CTR23_C2_INSOLUBLE_01 2 546.806031 1091.59751 1.2918 0.00070636 0.87081 0.00047616 2.1626 0.0011825 547.3077000543 34.263 0.34597 53.758 53.648 53.994 19.495 0.35708 0.00055405 NaN 55.461 71 41 2 NaN NaN NaN NaN 0 NaN NaN 0 5210000 730555 1148 11320 12698 -1
+AGGFLMK 7 Oxidation (M) _AGGFLM(Oxidation (M))K_ 0 0 0 1 0 0 P00558;P00558-2 P00558 P00558 PGK1 Phosphoglycerate kinase 1 MULTI-MATCH AD01_BA39-Cohort1_INSOLUBLE_02 AD01_C1_INSOLUBLE_02 2 370.193999 738.373446 -0.31852 -0.00011791 0.10507 3.8896E-05 -0.21345 -7.9017E-05 370.193916418628 27.4 0.65832 39.689 39.487 40.145 12.289 -0.12024 4.5037E-05 NaN 66.994 50 37 2 NaN NaN NaN NaN 0 NaN NaN 0 909370 65061 412 968 1096 -1
+FGIQAQMVTTDFQK 14 Oxidation (M) _FGIQAQM(Oxidation (M))VTTDFQK_ FGIQAQM(1)VTTDFQK FGIQAQM(180)VTTDFQK 0 0 0 1 0 0 P49720 P49720 P49720 PSMB3 Proteasome subunit beta type-3 MULTI-MSMS CTR38_BA39-Cohort1_INSOLUBLE_01 CTR38_C1_INSOLUBLE_01 815.401489257813 2 815.400698 1628.78684 0.057924 4.7231E-05 -0.45532 -0.00037127 -0.39739 -0.00032404 815.401047778762 79.641 0.80964 93.306 93.032 93.842 13.665 209 62 4 0 0 0 1.0463E-18 2 32729 179.57 139.7 1 76108000 506279 1252 8190 9203 454753;454754 454753 2186 -1
+VQIVYKPVDLSK 12 Unmodified _VQIVYKPVDLSK_ 0 0 0 0 0 1 P10636-3;P10636-5 P10636-3;P10636-5 P10636-5 MAPT Microtubule-associated protein tau MULTI-MSMS AD30_BA39-Cohort2_INSOLUBLE_01 AD30_C2_INSOLUBLE_01 694.912170410156 2 694.911027 1387.8075 1.8086 0.0012568 0.053547 3.721E-05 1.8621 0.001294 694.911157154756 59.305 1.4155 54.059 53.529 54.944 -5.2458 457 149 5 0 0 0 2.4188E-16 4 36347 180.07 117.24 1 1129600000 1978263 698;697 30111 34223 1836169;1836170;1836171;1836172 1836171 -1
+CNEEHPAYLASDEITTVR 18 Unmodified _CNEEHPAYLASDEITTVR_ 0 0 0 0 0 0 O60313-13;O60313;O60313-9;O60313-11;O60313-2;O60313-10 O60313-13 O60313-13 OPA1 Dynamin-like 120 kDa protein, mitochondrial;Dynamin-like 120 kDa protein, form S1 MULTI-MSMS AD46_BA39-Cohort1_INSOLUBLE_03 AD46_C1_INSOLUBLE_03 706.995483398438 3 706.996871 2117.96878 0.10312 7.2904E-05 -1.8916 -0.0013373 -1.7885 -0.0012644 706.995612619727 70.025 0.27644 77.646 77.49 77.767 7.6215 23 15 2 0 0 0 4.1064E-05 1 29469 87.16 64.685 1 11101000 221113 251 3328 3743 200058 200058 -1
+QLLTLSSELSQAR 13 Unmodified _QLLTLSSELSQAR_ 0 0 0 0 0 0 P15311 P15311 P15311 EZR Ezrin MULTI-SECPEP CTR31_BA39-Cohort1_INSOLUBLE_01 CTR31_C1_INSOLUBLE_01 724.361572265625 2 723.401555 1444.78856 0.65008 0.00047027 -0.058429 -4.2268E-05 0.59165 0.000428 723.401127991512 87.036 0.92099 102.36 101.82 102.74 15.326 122 53 3 0 0 0 0.00079992 1 37969 107.06 58.494 1 38909000 1486605 808 22480 25592 1374443 1374443 -1
+VYGPGVAK 8 Unmodified _VYGPGVAK_ 0 0 0 0 0 0 P21333-2;P21333 P21333-2 P21333-2 FLNA Filamin-A MULTI-MATCH CTR41_BA39-Cohort1_INSOLUBLE_01 CTR41_C1_INSOLUBLE_01 2 395.726521 789.438489 0.1669 6.6047E-05 -0.24187 -9.5713E-05 -0.074967 -2.9667E-05 395.726384039157 21.548 0.93532 11.431 11.013 11.948 -10.117 0.074754 -0.00022334 NaN 74.191 155 84 2 NaN NaN NaN NaN 0 NaN NaN 0 17367000 2043831 897 30883 35072 -1
+VNFHFILFNNVDGHLYELDGR 21 Unmodified _VNFHFILFNNVDGHLYELDGR_ 0 0 0 0 0 0 P09936 P09936 P09936 UCHL1 Ubiquitin carboxyl-terminal hydrolase isozyme L1 MULTI-MSMS AD44_BA39-Cohort1_INSOLUBLE_03 AD44_C1_INSOLUBLE_03 840.755920410156 3 840.420391 2518.23934 0.47738 0.0004012 -0.98607 -0.00082871 -0.50869 -0.00042752 840.754003053694 90.88 1.0412 102.01 101.67 102.72 11.125 108 38 5 0 0 0 4.6541E-17 2 37645 138.46 122.18 1 15780000 1956805 666 29808 33880 1813140;1813141 1813140 -1
+IVDTPCNEMNTDTFLEEINK 20 Oxidation (M) _IVDTPCNEM(Oxidation (M))NTDTFLEEINK_ 0 0 0 1 0 0 Q8NDH3;Q8NDH3-2;Q8NDH3-5;Q8NDH3-4;Q8NDH3-3 Q8NDH3 Q8NDH3 NPEPL1 Probable aminopeptidase NPEPL1 MULTI-MATCH AD40_BA39-Cohort2_INSOLUBLE_01 AD40_C2_INSOLUBLE_01 2 1207.04852 2412.08249 -0.04658 -5.6224E-05 -0.77312 -0.00093319 -0.8197 -0.00098942 1207.54999752794 109.78 0.40453 105.56 105.37 105.78 -4.2203 -0.090216 -0.0015991 NaN 132.86 29 13 3 NaN NaN NaN NaN 0 NaN NaN 0 4507700 928278 2128 14106 15820 3354 -1
+NQVAMNPTNTVFDAK 15 Unmodified _NQVAMNPTNTVFDAK_ 0 0 0 0 0 0 P11142;P11142-2 P11142 P11142 HSPA8 Heat shock cognate 71 kDa protein MULTI-MATCH AD19_BA39-Cohort2_INSOLUBLE_01 AD19_C2_INSOLUBLE_01 2 825.401229 1648.78791 0.65623 0.00054166 6.5497 0.0054061 7.2059 0.0059478 825.409210362979 74.111 0.12027 60.998 60.923 61.043 -13.112 -0.54383 0.0087337 NaN 229.29 6 4 2 NaN NaN NaN NaN 0 NaN NaN 0 1800800 1416403 714 21162 24136 -1
+DINAYNCEEPTEK 13 Unmodified _DINAYNCEEPTEK_ 0 0 0 0 0 0 P30041 P30041 P30041 PRDX6 Peroxiredoxin-6 MULTI-SECPEP CTR10_BA39-Cohort1_INSOLUBLE_01 CTR10_C1_INSOLUBLE_01 799.309265136719 2 798.845952 1595.67735 -0.89767 -0.0007171 -0.44704 -0.00035711 -1.3447 -0.0010742 798.845764229276 33.934 0.77321 53.296 52.945 53.718 19.362 105 31 5 0 0 0 0.00075074 1 13063 124.39 89.853 1 62979000 271284 1034 4198 4710 245252 245252 -1
+MIFVGIK 7 Unmodified _MIFVGIK_ 0 0 0 0 0 0 P99999 P99999 P99999 CYCS Cytochrome c MULTI-MATCH-MSMS AD48_BA39-Cohort2_INSOLUBLE_01 AD48_C2_INSOLUBLE_01 2 404.243492 806.472432 -4.2139 -0.0017035 -0.080847 -3.2682E-05 -4.2948 -0.0017361 404.243311139678 90.596 0.9536 88.274 87.89 88.844 -2.3221 -0.41071 0.00011523 NaN 77.72 73 36 3 NaN NaN NaN NaN 0 NaN NaN 0 41452000 1307913 1564 19669 22180 -1
+EYQLNDSAK 9 Unmodified _EYQLNDSAK_ 0 0 0 0 0 0 P09471;P09471-2 P09471;P09471-2 P09471-2 GNAO1 Guanine nucleotide-binding protein G(o) subunit alpha MULTI-MATCH-MSMS CTR33_BA39-Cohort1_INSOLUBLE_01 CTR33_C1_INSOLUBLE_01 2 534.253828 1066.4931 -0.49142 -0.00026254 -0.40291 -0.00021526 -0.89433 -0.0004778 534.253457639785 10.29 0.65619 26.032 25.517 26.173 15.741 0.10747 -0.00028512 NaN 126.41 67 30 3 NaN NaN NaN NaN 0 NaN NaN 0 81168000 478659 649;650 7806 8774 -1
+KEGGLGPLNIPLLADVTR 18 Unmodified _KEGGLGPLNIPLLADVTR_ 0 0 0 0 0 1 P32119 P32119 P32119 PRDX2 Peroxiredoxin-2 MULTI-MATCH-MSMS AD17_BA39-Cohort2_INSOLUBLE_01 AD17_C2_INSOLUBLE_01 3 621.694792 1862.06255 0.62476 0.00038841 5.6228 0.0034956 6.2475 0.0038841 622.032029432827 130.93 0.57455 117.82 117.62 118.2 -13.107 0.027163 0.009592 NaN 127.37 45 19 4 NaN NaN NaN NaN 0 NaN NaN 0 1136000 967015 1076 14568 16332 -1
+IGIVGLPNVGK 11 Unmodified _IGIVGLPNVGK_ 0 0 0 0 0 0 Q9NTK5;Q9NTK5-3 Q9NTK5 Q9NTK5 OLA1 Obg-like ATPase 1 MULTI-MSMS AD37_BA39-Cohort1_INSOLUBLE_01 AD37_C1_INSOLUBLE_01 533.835021972656 2 533.834591 1065.65463 0.036618 1.9548E-05 0.23491 0.0001254 0.27152 0.00014495 533.834630056752 82.62 0.91163 68.543 68.05 68.962 -14.078 113 45 3 0 0 0 0.0090574 1 36858 69.825 33.429 1 18453000 827934 2536 12763 14307 763288 763288 -1
+EMLQQSK 7 Oxidation (M) _EM(Oxidation (M))LQQSK_ 0 0 0 1 0 0 P07900;P07900-2;P08238;Q58FF7 P07900;P08238 P07900 HSP90AA1;HSP90AB1;HSP90AB3P Heat shock protein HSP 90-alpha;Heat shock protein HSP 90-beta;Putative heat shock protein HSP 90-beta-3 MULTI-MATCH AD23_BA39-Cohort2_INSOLUBLE_01 AD23_C2_INSOLUBLE_01 2 440.21566 878.416767 0.68264 0.00030051 -0.10997 -4.8409E-05 0.57268 0.0002521 440.215462567907 23.322 0.037055 19.063 19.052 19.089 -4.259 -0.041809 -0.00039326 NaN 76.847 7 3 3 NaN NaN NaN NaN 0 NaN NaN 0 2416900 432484 605;621 6890 7744 841 -1
+SVASFSIYSPHTGIQEYQDGVPK 23 Unmodified _SVASFSIYSPHTGIQEYQDGVPK_ 0 0 0 0 0 0 Q9Y646 Q9Y646 Q9Y646 CPQ Carboxypeptidase Q MULTI-MSMS CTR42_BA39-Cohort1_INSOLUBLE_02 CTR42_C1_INSOLUBLE_02 837.746032714844 3 837.411449 2509.21252 0.11517 9.6448E-05 -0.25855 -0.00021651 -0.14337 -0.00012006 837.745749523166 61.662 0.42972 65.982 65.71 66.14 4.3205 39 17 3 0 0 0 4.9963E-08 1 27109 89.946 69.507 1 21419000 1680806 2785 25807 29313 1543819 1543819 -1
+MGAPESGLAEYLFDK 15 Unmodified _MGAPESGLAEYLFDK_ 0 0 0 0 0 0 P02794 P02794 P02794 FTH1 Ferritin heavy chain;Ferritin heavy chain, N-terminally processed MULTI-MSMS CTR19_BA39-Cohort1_INSOLUBLE_01 CTR19_C1_INSOLUBLE_01 814.388427734375 2 814.387256 1626.75996 1.101 0.00089666 1.059 0.00086244 2.16 0.0017591 814.387786215214 115.67 6.4515 131.48 129.3 135.76 15.804 1275 466 4 0 0 0 4.9511E-19 9 52543 170.68 133.57 1 1064200000 1301699 500 19586 22039 1205894;1205895;1205896;1205897;1205898;1205899;1205900;1205901;1205902 1205897 -1
+VQAQHDYTATDTDELQLK 18 Unmodified _VQAQHDYTATDTDELQLK_ 0 0 0 0 0 0 O00499;O00499-3;O00499-5;O00499-6;O00499-2;O00499-9;O00499-7;O00499-4;O00499-11;O00499-10;O00499-8 O00499;O00499-6 O00499 BIN1 Myc box-dependent-interacting protein 1 MULTI-MSMS CTR27_BA39-Cohort1_INSOLUBLE_01 CTR27_C1_INSOLUBLE_01 692.665710449219 3 692.667519 2074.98073 -1.6518 -0.0011441 -0.20874 -0.00014459 -1.8605 -0.0012887 693.002549154902 55.807 1.1306 70.902 70.355 71.486 15.095 220 78 4 0 0 0 3.0206E-18 2 23566 157.12 141.49 1 65373000 1976730 144;145 30069 34178 1834577;1834578 1834578 -1
+TPVQQPGPGK 10 Unmodified _TPVQQPGPGK_ 0 0 0 0 0 0 Q9Y6V0-6;Q9Y6V0-5 Q9Y6V0-6 Q9Y6V0-6 PCLO Protein piccolo MULTI-MSMS CTR15_BA39-Cohort2_INSOLUBLE_01 CTR15_C2_INSOLUBLE_01 504.777740478516 2 504.777274 1007.53999 0.75002 0.00037859 0.30025 0.00015156 1.0503 0.00053015 504.777371746492 25.216 0.45847 23.456 23.208 23.666 -1.7602 47 27 2 0 0 0 0.010751 1 7891 71.379 37.583 1 1810300 1783832 2796 27428 31168 1644231 1644231 -1
+GPVYIGELPQDFLR 14 Unmodified _GPVYIGELPQDFLR_ 0 0 0 0 0 0 Q9H0E2 Q9H0E2 Q9H0E2 TOLLIP Toll-interacting protein MULTI-MATCH AD01_BA39-Cohort1_INSOLUBLE_02 AD01_C1_INSOLUBLE_02 2 802.427573 1602.84059 0.4263 0.00034207 -1.7898 -0.0014362 -1.3635 -0.0010941 802.92811332665 106.62 0.64296 109.65 109.29 109.93 3.0356 0.24823 -0.0037798 NaN 177.76 50 22 3 NaN NaN NaN NaN 0 NaN NaN 0 1236500 683997 2418 10587 11895 -1
+REELITNWEQIR 12 Unmodified _REELITNWEQIR_ 0 0 0 0 0 1 Q13813-2;Q13813;Q13813-3 Q13813-2;Q13813-3 Q13813-2 SPTAN1 Spectrin alpha chain, non-erythrocytic 1 MULTI-MSMS CTR24_BA39-Cohort1_INSOLUBLE_01 CTR24_C1_INSOLUBLE_01 529.948059082031 3 529.614361 1585.82125 0.53859 0.00028524 -0.16847 -8.9224E-05 0.37012 0.00019602 529.614120226679 83.972 0.91393 98.787 98.244 99.158 14.815 197 68 4 0 0 0 0.00047271 1 34602 85.536 47.541 1 24417000 1521495 1728;1729 23140 26314 1404971 1404971 -1
+RLSLESEGAGEGAAASPELSALEEAFR 27 Unmodified _RLSLESEGAGEGAAASPELSALEEAFR_ 0 0 0 0 0 1 O94811 O94811 O94811 TPPP Tubulin polymerization-promoting protein MULTI-MSMS AD47_BA39-Cohort1_INSOLUBLE_01 AD47_C1_INSOLUBLE_01 916.788818359375 3 916.454265 2746.34097 0.45275 0.00041492 1.0506 0.00096282 1.5033 0.0013777 916.455652754655 86.163 0.80527 99.231 98.81 99.615 13.068 99 29 5 0 0 0 1.7463E-24 2 37089 115.45 102.52 1 9420900 1539639 344 23384 26575 1422037;1422038 1422038 -1
+RGHLFLQTDQPIYNPGQR 18 Unmodified _RGHLFLQTDQPIYNPGQR_ 0 0 0 0 0 1 P0C0L4;P0C0L4-2;P0C0L5 P0C0L4;P0C0L5 P0C0L5 C4A;C4B Complement C4-A;Complement C4 beta chain;Complement C4-A alpha chain;C4a anaphylatoxin;C4b-A;C4d-A;Complement C4 gamma chain;Complement C4-B;Complement C4 beta chain;Complement C4-B alpha chain;C4a anaphylatoxin;C4b-B;C4d-B;Complement C4 gamma chain MULTI-MSMS CTR02_BA39-Cohort1_INSOLUBLE_01 CTR02_C1_INSOLUBLE_01 536.282531738281 4 535.781619 2139.09737 -0.30976 -0.00016596 -0.5097 -0.00027309 -0.81947 -0.00043906 536.032335975709 68.244 0.42735 82.774 82.592 83.02 14.53 50 27 3 0 0 0 0.00032858 1 30577 67.605 56.971 1 36612000 1529893 669;670 23214 26394 1414311 1414311 -1
+LDPPPFSLIVETR 13 Unmodified _LDPPPFSLIVETR_ 0 0 0 0 0 0 O43426-4;O43426-2;O43426;O43426-5 O43426-4 O43426-4 SYNJ1 Synaptojanin-1 MULTI-MSMS CTR31_BA39-Cohort2_INSOLUBLE_01 CTR31_C2_INSOLUBLE_01 742.411315917969 2 742.411391 1482.80823 0.02408 1.7877E-05 0.56133 0.00041674 0.58541 0.00043462 742.411890917471 114.11 1.3856 132.55 131.74 133.12 18.441 426 175 3 0 0 0 0.0064882 2 72413 68.069 56.114 1 9535100 1070189 220 16038 17973 989893;989894 989893 -1
+TLDGHMVVR 9 Unmodified _TLDGHMVVR_ 0 0 0 0 0 0 P13591-1;P13591-4;P13591-3 P13591-1 P13591-1 NCAM1 Neural cell adhesion molecule 1 MULTI-MATCH CTR30_BA39-Cohort1_INSOLUBLE_02 CTR30_C1_INSOLUBLE_02 3 343.183293 1026.52805 0.36209 0.00012426 -0.6831 -0.00023443 -0.32101 -0.00011017 343.183225987903 33.1 1.0383 48.404 47.809 48.847 15.304 0.17404 -0.00022557 NaN 74.464 180 92 3 NaN NaN NaN NaN 0 NaN NaN 0 4163800 1757073 762 26946 30598 -1
+VTLELGGK 8 Unmodified _VTLELGGK_ 0 0 0 0 0 0 P05091;P05091-2;P00352;O94788;O94788-2;O94788-4;O94788-3;P30837;P47895 P05091;P00352;O94788;P30837;P47895 P05091 ALDH2;ALDH1A1;ALDH1A2;ALDH1B1;ALDH1A3 Aldehyde dehydrogenase, mitochondrial;Retinal dehydrogenase 1;Retinal dehydrogenase 2;Aldehyde dehydrogenase X, mitochondrial;Aldehyde dehydrogenase family 1 member A3 MULTI-MATCH AD15_BA39-Cohort2_INSOLUBLE_01 AD15_C2_INSOLUBLE_01 2 408.744911 815.475269 -3.8841 -0.0015876 -0.55546 -0.00022704 -4.4395 -0.0018146 408.744757192182 47.693 0.57627 35.096 34.772 35.348 -12.597 0.083777 -3.0376E-05 NaN 99.375 39 23 2 NaN NaN NaN NaN 0 NaN NaN 0 2264900 2001850 540;400;1057;343;1212 30468 34613 -1
+RGPGLYYVDSEGNR 14 Unmodified _RGPGLYYVDSEGNR_ 0 0 0 0 0 1 P28074;P28074-3 P28074;P28074-3 P28074 PSMB5 Proteasome subunit beta type-5 MULTI-MATCH CTR20_BA39-Cohort1_INSOLUBLE_01 CTR20_C1_INSOLUBLE_01 3 528.258466 1581.75357 0.46523 0.00024576 -1.7919 -0.0009466 -1.3267 -0.00070084 528.591929184344 47.314 0.10592 63.4 63.327 63.433 16.087 -0.0098852 -0.0027704 NaN 196.5 13 8 2 NaN NaN NaN NaN 0 NaN NaN 0 2402700 1530682 1012;1013 23222 26403 -1
+FQMPDQGMTSADDFFQGTK 19 Oxidation (M) _FQM(Oxidation (M))PDQGMTSADDFFQGTK_ 0 0 0 1 0 0 Q16555;Q16555-2 Q16555;Q16555-2 Q16555 DPYSL2 Dihydropyrimidinase-related protein 2 MULTI-MATCH AD10_BA39-Cohort1_INSOLUBLE_01 AD10_C1_INSOLUBLE_01 2 1083.95898 2165.90341 0.28721 0.00031132 -1.5982 -0.0017324 -1.311 -0.0014211 1084.45798619096 100.44 0.3056 101.08 100.97 101.28 0.63783 -0.11258 -0.0023283 NaN 296.04 32 23 2 NaN NaN NaN NaN 0 NaN NaN 0 3897000 539829 1858;1859 8668 9737 3178;3179 -1
+FTCTVTHTDLPSPLK 15 Unmodified _FTCTVTHTDLPSPLK_ 0 0 0 0 0 0 P01871;P01871-2 P01871 P01871 IGHM Ig mu chain C region MULTI-MSMS AD46_BA39-Cohort2_INSOLUBLE_01 AD46_C2_INSOLUBLE_01 577.629150390625 3 577.630912 1729.87091 -3.7267 -0.0021527 0.54024 0.00031206 -3.1865 -0.0018406 577.631355797154 88.572 1.3007 86.255 85.596 86.897 -2.3169 154 46 4 0 0 0 3.086E-11 2 37726 155.43 131.68 1 450240000 562518 460 8819 9903 513525;513526 513526 -1
+AYDATHLVK 9 Unmodified _AYDATHLVK_ 0 0 0 0 0 0 P10768 P10768 P10768 ESD S-formylglutathione hydrolase MULTI-MATCH AD03_BA39-Cohort1_INSOLUBLE_01 AD03_C1_INSOLUBLE_01 3 339.850308 1016.5291 -0.26781 -9.1014E-05 0.21823 7.4166E-05 -0.049575 -1.6848E-05 339.849790876717 41.575 0.099529 42.043 41.969 42.068 0.46835 -0.38982 -2.7912E-05 NaN 74.376 17 15 2 NaN NaN NaN NaN 0 NaN NaN 0 86508 204698 705 3015 3393 -1
+YLQEIYNSNNQK 12 Unmodified _YLQEIYNSNNQK_ 0 0 0 0 0 0 P02679-2;P02679 P02679-2 P02679-2 FGG Fibrinogen gamma chain MULTI-MSMS AD11_BA39-Cohort2_INSOLUBLE_01 AD11_C2_INSOLUBLE_01 757.367370605469 2 757.367712 1512.72087 -0.49654 -0.00037606 -0.48287 -0.00036571 -0.97941 -0.00074178 757.366881461793 61.53 1.5391 46.3 45.529 47.068 -15.229 435 162 5 0 0 0 0.00044414 1 14395 123.63 81.435 1 3869300 2106684 474 31832 36133 1956940 1956940 -1
+QDEHGYISR 9 Unmodified _QDEHGYISR_ 0 0 0 0 0 0 P04792 P04792 P04792 HSPB1 Heat shock protein beta-1 MULTI-MSMS CTR40_BA39-Cohort1_INSOLUBLE_02 CTR40_C1_INSOLUBLE_02 368.840118408203 3 368.840472 1103.49959 0.14458 5.3327E-05 0.36177 0.00013343 0.50635 0.00018676 368.84029238428 9.3728 0.36893 9.6363 9.4787 9.8476 0.26352 31 14 3 0 0 0 0.0068938 1 2719 57.348 10.151 1 6888200 1456655 528 21950 25006 1346822 1346822 -1
+SRAEVDLER 9 Unmodified _SRAEVDLER_ 0 0 0 0 0 1 P36959 P36959 P36959 GMPR GMP reductase 1 MULTI-MATCH AD02_BA39-Cohort1_INSOLUBLE_01 AD02_C1_INSOLUBLE_01 3 358.856122 1073.54654 -0.18886 -6.7772E-05 2.7194 0.00097586 2.5305 0.00090809 358.856871311905 8.2612 0.071943 8.6204 8.5754 8.6473 0.35921 -0.5112 0.0014165 NaN 48.998 16 11 2 NaN NaN NaN NaN 0 NaN NaN 0 86281 1659078 1129 25445 28905 -1
+HNLQDFINIK 10 Unmodified _HNLQDFINIK_ 0 0 0 0 0 0 P46821 P46821 P46821 MAP1B Microtubule-associated protein 1B;MAP1B heavy chain;MAP1 light chain LC1 MULTI-MATCH CTR02_BA39-Cohort1_INSOLUBLE_01 CTR02_C1_INSOLUBLE_01 2 621.335487 1240.65642 -2.242 -0.0013931 -0.93316 -0.00057981 -3.1752 -0.0019729 621.334269864761 56.873 0.37024 71.524 71.282 71.652 14.651 0.008415 -0.0007823 NaN 139.43 28 20 2 NaN NaN NaN NaN 0 NaN NaN 0 32655000 759801 1202 11794 13235 -1
+TLSSPTEPVKR 11 Unmodified _TLSSPTEPVKR_ 0 0 0 0 0 1 P40306 P40306 P40306 PSMB10 Proteasome subunit beta type-10 MULTI-MATCH AD45_BA39-Cohort1_INSOLUBLE_02 AD45_C1_INSOLUBLE_02 3 405.562827 1213.66665 -0.69698 -0.00028267 -0.25468 -0.00010329 -0.95166 -0.00038596 405.562635835697 22.997 0.38902 33.932 33.761 34.15 10.935 0.029522 0.00071893 NaN 67.08 30 14 3 NaN NaN NaN NaN 0 NaN NaN 0 2991700 1764905 1150 27113 30786 -1
+VLDSGAPIKIPVGPETLGR 19 Unmodified _VLDSGAPIKIPVGPETLGR_ 0 0 0 0 0 1 P06576 P06576 P06576 ATP5B ATP synthase subunit beta, mitochondrial MULTI-MSMS CTR05_BA39-Cohort2_INSOLUBLE_01 CTR05_C2_INSOLUBLE_01 640.371154785156 3 640.370197 1918.08876 -0.15157 -9.7064E-05 1.0507 0.00067282 0.8991 0.00057576 640.371199848517 114.15 1.2313 110.46 109.67 110.9 -3.6845 78 42 3 0 0 0 0.0019031 1 48583 50.883 32.287 1 58126000 1931814 565 29412 33415 1789508 1789508 -1
+QPVLSQTEAR 10 Unmodified _QPVLSQTEAR_ 0 0 0 0 0 0 P28070 P28070 P28070 PSMB4 Proteasome subunit beta type-4 MULTI-MSMS AD46_BA39-Cohort1_INSOLUBLE_01 AD46_C1_INSOLUBLE_01 564.803466796875 2 564.80402 1127.59349 0.24916 0.00014073 -0.13409 -7.5735E-05 0.11507 6.4993E-05 564.803922475939 23.884 1.9597 35.741 34.63 36.59 11.857 650 194 5 0 0 0 1.4828E-27 4 7573 196.99 137.64 1 250770000 1493884 1010 22642 25779 1380243;1380244;1380245;1380246 1380244 -1
+TIAPALVSK 9 Unmodified _TIAPALVSK_ 0 0 0 0 0 0 P06733 P06733 P06733 ENO1 Alpha-enolase MULTI-MSMS AD37_BA39-Cohort2_INSOLUBLE_01 AD37_C2_INSOLUBLE_01 450.282196044922 2 450.28166 898.548768 1.0586 0.00047666 0.16988 7.6496E-05 1.2285 0.00055315 450.28164431072 40.205 0.62726 35.593 35.314 35.941 -4.6118 113 49 3 0 0 0 0.013807 1 23215 66.299 23.43 1 63056000 1740010 569 26724 30350 1602206 1602206 -1
+RGAVVAK 7 Unmodified _RGAVVAK_ 0 0 0 0 0 1 Q9GZV7 Q9GZV7 Q9GZV7 HAPLN2 Hyaluronan and proteoglycan link protein 2 MSMS AD27_BA39-Cohort1_INSOLUBLE_01 AD27_C1_INSOLUBLE_01 350.726379394531 2 350.726855 699.439158 NaN NaN NaN NaN NaN NaN NaN 5.4914 1 -6.3849 -6.8849 -5.8849 -11.876 0 0 0 0.022581 1 902 95.957 43.726 1 1528932 2414 23191 26371 1413864 1413864 -1
+GPGEDFR 7 Unmodified _GPGEDFR_ 0 0 0 0 0 0 P41222 P41222 P41222 PTGDS Prostaglandin-H2 D-isomerase MULTI-MSMS AD40_BA39-Cohort2_INSOLUBLE_01 AD40_C2_INSOLUBLE_01 389.178955078125 2 389.179935 776.345317 -2.0767 -0.00080823 -0.47064 -0.00018316 -2.5474 -0.00099139 389.180002820875 28.093 0.85883 23.596 23.281 24.14 -4.497 313 61 7 0 0 0 0.0034347 1 9498 141.98 141.98 1 1333500000 676764 1157 10487 11783 624447 624447 -1
+FKDIFQEIFDK 11 Unmodified _FKDIFQEIFDK_ 0 0 0 0 0 1 P48735;P48735-2 P48735 P48735 IDH2 Isocitrate dehydrogenase [NADP], mitochondrial MULTI-MSMS CTR28_BA39-Cohort1_INSOLUBLE_01 CTR28_C1_INSOLUBLE_01 477.250030517578 3 477.250249 1428.72892 0.51722 0.00024684 -0.10304 -4.9175E-05 0.41418 0.00019767 477.250128074804 151.36 1.044 148.43 147.8 148.84 -2.9312 247 99 4 0 0 0 0.00062204 2 68546 91.961 63.058 1 16582000 515887 1227 8333 9358 463420;463421 463421 -1
+INPSSMFDVHVK 12 Unmodified _INPSSMFDVHVK_ 0 0 0 0 0 0 P11216 P11216 P11216 PYGB Glycogen phosphorylase, brain form MULTI-MATCH CTR31_BA39-Cohort1_INSOLUBLE_01 CTR31_C1_INSOLUBLE_01 2 687.347737 1372.68092 -0.4517 -0.00031048 0.49281 0.00033873 0.041109 2.8256E-05 687.34782792797 79.46 0.71429 94.771 94.531 95.245 15.312 -0.22869 0.00091295 NaN 85.807 144 50 4 NaN NaN NaN NaN 0 NaN NaN 0 35630000 887354 717 13498 15144 -1
+VTAPDVDLHLK 11 Unmodified _VTAPDVDLHLK_ 0 0 0 0 0 0 Q09666 Q09666 Q09666 AHNAK Neuroblast differentiation-associated protein AHNAK MULTI-MATCH CTR26_BA39-Cohort2_INSOLUBLE_01 CTR26_C2_INSOLUBLE_01 3 403.227556 1206.66084 -1.2908 -0.00052049 0.14895 6.0062E-05 -1.1419 -0.00046043 403.227679902058 59.71 0.42562 77.967 77.695 78.121 18.257 -0.045017 -3.481E-05 NaN 46.592 98 43 3 NaN NaN NaN NaN 0 NaN NaN 0 12484000 1997328 1651 30379 34519 -1
+DSQEEEKTEALTSAK 15 Unmodified _DSQEEEKTEALTSAK_ 0 0 0 0 0 1 P06396-2;P06396-4;P06396-3;P06396;CON__Q3SX14 P06396-2 P06396-2 GSN Gelsolin MULTI-MATCH-MSMS CTR01_BA39-Cohort1_INSOLUBLE_01 CTR01_C1_INSOLUBLE_01 2 833.394321 1664.77409 0.38877 0.000324 -0.68857 -0.00057385 -0.2998 -0.00024985 833.394526842259 29.541 1.3767 41.04 40.715 42.092 11.5 0.050404 -0.0015811 NaN 265.13 172 124 3 NaN NaN NaN NaN 0 NaN NaN 0 8584100 + 320184 563 4979 5610 -1
+FSSSSGYGGGSSR 13 Unmodified _FSSSSGYGGGSSR_ 0 0 0 0 0 0 P35527;CON__P35527 P35527 P35527 KRT9 Keratin, type I cytoskeletal 9 MULTI-MSMS AD44_BA39-Cohort1_INSOLUBLE_04 AD44_C1_INSOLUBLE_04 618.267883300781 2 618.267998 1234.52144 0.51575 0.00031887 -0.71448 -0.00044174 -0.19873 -0.00012287 618.267717878678 9.5538 0.2876 20.718 20.563 20.85 11.164 20 11 2 0 0 0 1.545E-05 1 3024 140.07 101.05 1 10406000 + 554675 1097 8794 9878 504541 504541 -1
+EVDEKPASTPWGSK 14 Unmodified _EVDEKPASTPWGSK_ 0 0 0 0 0 1 Q92747;Q92747-2 Q92747 Q92747 ARPC1A Actin-related protein 2/3 complex subunit 1A MULTI-MATCH AD10_BA39-Cohort1_INSOLUBLE_01 AD10_C1_INSOLUBLE_01 3 510.919339 1529.73619 -0.026875 -1.3731E-05 0.60294 0.00030806 0.57607 0.00029433 510.919556154659 39.344 0.7426 40.252 39.806 40.549 0.90754 -0.10143 0.0007096 NaN 42.958 154 62 3 NaN NaN NaN NaN 0 NaN NaN 0 11635000 464155 2199 7545 8483 -1
+GTVACGQPPVVENAK 15 Unmodified _GTVACGQPPVVENAK_ 0 0 0 0 0 0 P13611;P13611-5;P13611-3;P13611-2;P13611-4 P13611 P13611 VCAN Versican core protein MULTI-MATCH CTR29_BA39-Cohort1_INSOLUBLE_03 CTR29_C1_INSOLUBLE_03 3 514.264452 1539.77153 1.3591 0.00069894 1.9998 0.0010284 3.3589 0.0017274 514.265736073325 34.128 0.26155 51.024 50.957 51.219 16.895 -0.38447 0.0036528 NaN 90.229 26 21 2 NaN NaN NaN NaN 0 NaN NaN 0 6026100 706954 763 10976 12318 -1
+VVEQMCITQYER 12 Unmodified _VVEQMCITQYER_ 0 0 0 0 0 0 P04156-2;P04156 P04156-2 P04156-2 PRNP Major prion protein MULTI-MSMS CTR32_BA39-Cohort1_INSOLUBLE_01 CTR32_C1_INSOLUBLE_01 785.37353515625 2 785.373626 1568.7327 -0.3262 -0.00025619 -0.13815 -0.0001085 -0.46435 -0.00036469 785.373253864812 65.114 0.61109 80.587 80.241 80.852 15.474 92 45 3 0 0 0 0.00072139 1 26747 116.23 87.146 1 16003000 2025681 511 30640 34809 1882301 1882301 -1
+AVTEQGHELSNEER 14 Unmodified _AVTEQGHELSNEER_ 0 0 0 0 0 0 P31946;P31946-2 P31946;P31946-2 P31946-2 YWHAB 14-3-3 protein beta/alpha;14-3-3 protein beta/alpha, N-terminally processed MULTI-MSMS CTR03_BA39-Cohort1_INSOLUBLE_01 CTR03_C1_INSOLUBLE_01 799.874450683594 2 799.87389 1597.73323 0.64622 0.0005169 0.11742 9.3919E-05 0.76364 0.00061082 799.874100929997 19.819 0.76727 31.434 30.95 31.718 11.615 179 69 3 0 0 0 1.4089E-05 2 6162 125.82 80.681 1 20553000 200432 1070;1071 2927 3298 182212;182213 182213 -1
+AAEAAAAPAESAAPAAGEEPSKEEGEPK 28 Unmodified _AAEAAAAPAESAAPAAGEEPSKEEGEPK_ 0 0 0 0 0 1 P80723 P80723 P80723 BASP1 Brain acid soluble protein 1 MULTI-MATCH AD04_BA39-Cohort1_INSOLUBLE_01 AD04_C1_INSOLUBLE_01 3 879.415588 2635.22493 1.456 0.0012804 0.62422 0.00054894 2.0802 0.0018294 879.750770163028 40.221 0.10104 40.896 40.815 40.916 0.67474 -0.19949 0.0020173 NaN 145.58 21 16 2 NaN NaN NaN NaN 0 NaN NaN 0 351220 3989 1547 80 87 -1
+FVSEMLQK 8 Unmodified _FVSEMLQK_ 0 0 0 0 0 0 Q9Y2T3;Q9Y2T3-3;Q9Y2T3-2 Q9Y2T3 Q9Y2T3 GDA Guanine deaminase MULTI-MSMS AD43_BA39-Cohort1_INSOLUBLE_01 AD43_C1_INSOLUBLE_01 491.257537841797 2 491.257328 980.500103 0.26613 0.00013074 -0.71219 -0.00034987 -0.44606 -0.00021913 491.257052664433 29.855 1.0175 44.692 44.126 45.144 14.837 110 44 4 0 0 0 0.040494 2 12053 58.917 37.763 1 23819000 571195 2749 8947 10043 522817;522818 522818 -1
+DALEIYKR 8 Unmodified _DALEIYKR_ 0 0 0 0 0 1 O60641;O60641-4;O60641-3 O60641 O60641 SNAP91 Clathrin coat assembly protein AP180 MULTI-MATCH CTR23_BA39-Cohort2_INSOLUBLE_01 CTR23_C2_INSOLUBLE_01 3 336.522192 1006.54475 0.20176 6.7898E-05 0.061942 2.0845E-05 0.2637 8.8742E-05 336.857060394473 34.646 0.022947 54.141 54.124 54.147 19.495 0.32284 0.00057268 NaN 85.212 4 2 2 NaN NaN NaN NaN 0 NaN NaN 0 1273500 231617 259 3589 4025 -1
+QSPINIDEDLTQVNVNLKK 19 Unmodified _QSPINIDEDLTQVNVNLKK_ 0 0 0 0 0 1 P23471;P23471-2;P23471-3 P23471 P23471 PTPRZ1 Receptor-type tyrosine-protein phosphatase zeta MULTI-SECPEP CTR28_BA39-Cohort1_INSOLUBLE_01 CTR28_C1_INSOLUBLE_01 722.975402832031 3 723.390097 2167.14846 -0.016819 -1.2167E-05 -1.1152 -0.00080673 -1.132 -0.0008189 723.723478016406 119.29 0.88617 116.36 115.85 116.73 -2.9312 254 61 5 0 0 0 0.059956 1 53826 31.462 26.935 1 81582000 1501037 942 22779 25932 1386713 1386713 -1
+EAVCEVALDYKK 12 Unmodified _EAVCEVALDYKK_ 0 0 0 0 0 1 Q01082 Q01082 Q01082 SPTBN1 Spectrin beta chain, non-erythrocytic 1 MULTI-MSMS AD15_BA39-Cohort2_INSOLUBLE_01 AD15_C2_INSOLUBLE_01 480.245971679688 3 480.246399 1437.71737 -0.31959 -0.00015348 1.0584 0.00050829 0.73882 0.00035481 480.246622815535 65.98 0.9971 53.17 52.831 53.828 -12.809 85 38 4 0 0 0 0.0011583 1 25712 74.46 52.229 1 19393000 359603 1577 5607 6308 326434 326434 -1
+QGQNVIGLQMGSNK 14 Unmodified _QGQNVIGLQMGSNK_ 0 0 0 0 0 0 Q9UI15 Q9UI15 Q9UI15 TAGLN3 Transgelin-3 MULTI-MSMS CTR41_BA39-Cohort1_INSOLUBLE_03 CTR41_C1_INSOLUBLE_03 737.376708984375 2 737.377557 1472.74056 0.22953 0.00016925 -0.13166 -9.708E-05 0.097871 7.2168E-05 737.376575868115 38.307 0.93055 42.929 42.506 43.437 4.6221 156 39 5 0 0 0 1.0515E-05 1 17074 128.97 90.197 1 36692000 1471958 2650 22207 25297 1361587 1361587 -1
+DHINLPGFSGQNPLR 15 Unmodified _DHINLPGFSGQNPLR_ 0 0 0 0 0 0 P00491 P00491 P00491 PNP Purine nucleoside phosphorylase MULTI-MSMS AD46_BA39-Cohort1_INSOLUBLE_03 AD46_C1_INSOLUBLE_03 555.955871582031 3 555.621627 1663.84305 -0.22991 -0.00012774 0.88365 0.00049097 0.65374 0.00036323 555.621925193824 95.976 1.1545 102.18 101.43 102.58 6.2034 132 57 3 0 0 0 0.0014291 1 42560 63.09 45.871 1 19122000 262098 409 4087 4585 236593 236593 -1
+RTPDGTENGDFLALDLGGTNFR 22 Unmodified _RTPDGTENGDFLALDLGGTNFR_ 0 0 0 0 0 1 P19367-4;P19367-2;P19367;P19367-3 P19367-4 P19367-4 HK1 Hexokinase-1 MULTI-MSMS CTR36_BA39-Cohort1_INSOLUBLE_02 CTR36_C1_INSOLUBLE_02 789.389221191406 3 789.383894 2365.12985 0.27307 0.00021555 0.81551 0.00064375 1.0886 0.0008593 789.385202974425 114.78 0.633 126.43 126.06 126.69 11.649 96 37 4 0 0 0 1.3985E-05 1 51605 72.145 48.583 1 17551000 1551684 865 23610 26824 1432075 1432075 -1
+QQTEWQSGQR 10 Unmodified _QQTEWQSGQR_ 0 0 0 0 0 0 P02649 P02649 P02649 APOE Apolipoprotein E MULTI-MATCH-MSMS AD30_BA39-Cohort1_INSOLUBLE_02 AD30_C1_INSOLUBLE_02 2 624.291808 1246.56906 -0.091183 -5.6925E-05 -0.78384 -0.00048934 -0.87502 -0.00054627 624.291434000431 44.364 0.85419 28.367 27.737 28.591 -15.998 -0.31659 -0.00021569 NaN 90.657 143 56 3 NaN NaN NaN NaN 0 NaN NaN 0 9084100 1497017 470 22708 25855 -1
+TVTPASSAKTSPAK 14 3 Phospho (STY) _TVT(Phospho (STY))PASS(Phospho (STY))AKTS(Phospho (STY))PAK_ 0 0 0 0 3 1 Q16555;Q16555-2 Q16555;Q16555-2 Q16555 DPYSL2 Dihydropyrimidinase-related protein 2 MULTI-MATCH CTR42_BA39-Cohort1_INSOLUBLE_02 CTR42_C1_INSOLUBLE_02 2 793.319219 1584.62389 0.090969 7.2168E-05 -0.41497 -0.00032921 -0.324 -0.00025704 793.318333020301 7.0263 0.19793 11.347 11.231 11.429 4.3205 -0.11902 -0.0007223 NaN 83.964 17 8 3 NaN NaN NaN NaN 0 NaN NaN 0 23579000 1823031 1858;1859 27958 31775 153;154;155;367;368 -1
+ASSHSTDLMEAMAMGSVEASYK 22 Oxidation (M) _ASSHSTDLMEAM(Oxidation (M))AMGSVEASYK_ ASSHSTDLM(0.013)EAM(0.79)AM(0.196)GSVEASYK ASSHSTDLM(-18)EAM(6)AM(-6)GSVEASYK 0 0 0 1 0 0 P14618-2 P14618-2 P14618-2 PKM Pyruvate kinase PKM MSMS CTR34_BA39-Cohort1_INSOLUBLE_01 CTR34_C1_INSOLUBLE_01 773.66796875 3 773.669437 2317.98648 NaN NaN NaN NaN NaN NaN NaN 98.002 1 114.58 114.08 115.08 16.576 0 0 0 0.00048791 1 45291 51.469 41.811 3 169223 792 2462 2778 154780 154780 1271;1272;1273 -1
+YAASSYLSLTPEQWK 15 Unmodified _YAASSYLSLTPEQWK_ 0 0 0 0 0 0 P0DOY2;P0DOY3;P0CF74;B9A064;P0CG04 P0DOY2;B9A064 B9A064 IGLC6;IGLL5;IGLC1 Ig lambda-6 chain C region;Immunoglobulin lambda-like polypeptide 5;Ig lambda-1 chain C regions MULTI-MSMS AD47_BA39-Cohort1_INSOLUBLE_01 AD47_C1_INSOLUBLE_01 872.434143066406 2 872.433052 1742.85155 0.46077 0.00040199 0.12012 0.0001048 0.58089 0.00050679 872.432969726657 68.953 1.2926 83.169 82.556 83.848 14.216 178 50 4 0 0 0 4.9146E-119 3 29588 268.58 241.91 1 110930000 2066698 45;677 31226 35457 1921517;1921518;1921519 1921517 -1
+LQDETNLR 8 Unmodified _LQDETNLR_ 0 0 0 0 0 0 P14136;P14136-3;P14136-2 P14136 P14136 GFAP Glial fibrillary acidic protein MULTI-MATCH AD47_BA39-Cohort1_INSOLUBLE_01 AD47_C1_INSOLUBLE_01 2 494.756538 987.498523 -1.3654 -0.00067554 -1.5615 -0.00077258 -2.9269 -0.0014481 494.756299802422 9.7205 0.3752 24.741 24.527 24.902 15.02 -0.016108 -0.0013118 NaN 204.19 25 16 2 NaN NaN NaN NaN 0 NaN NaN 0 10157000 1199087 781 18085 20259 -1
+LNIPVSQVNPR 11 Unmodified _LNIPVSQVNPR_ 0 0 0 0 0 0 P13637;P13637-2;P13637-3;P05023-4;P05023;P05023-3 P13637;P05023-4 P05023-4 ATP1A3;ATP1A1 Sodium/potassium-transporting ATPase subunit alpha-3;Sodium/potassium-transporting ATPase subunit alpha-1 MULTI-MSMS CTR34_BA39-Cohort1_INSOLUBLE_01 CTR34_C1_INSOLUBLE_01 618.856628417969 2 618.856586 1235.69862 0.21589 0.00013361 -0.18582 -0.000115 0.030069 1.8609E-05 618.85652079547 59.559 1.0333 76.464 76.007 77.04 16.905 178 56 4 0 0 0 0.00064859 2 25158 108.74 54.193 1 95439000 1182697 531;764 17778 19927 1092782;1092783 1092782 -1
+SGHFEQAIK 9 Unmodified _SGHFEQAIK_ 0 0 0 0 0 0 Q01082;Q01082-2;Q01082-3 Q01082 Q01082 SPTBN1 Spectrin beta chain, non-erythrocytic 1 MULTI-MSMS CTR32_BA39-Cohort2_INSOLUBLE_01 CTR32_C2_INSOLUBLE_01 339.510925292969 3 339.510174 1015.50869 1.5234 0.00051721 0.62818 0.00021327 2.1516 0.00073048 339.510382367762 16.445 0.36368 35.019 34.857 35.221 18.574 79 40 2 0 0 0 0.00034124 1 7706 105.52 77.996 1 57010000 1593976 1577 24371 27673 1468242 1468242 -1
+AGKPVICATQMLESMIK 17 Oxidation (M) _AGKPVICATQM(Oxidation (M))LESMIK_ 0 0 0 1 0 1 P14618;P14618-3;P14618-2 P14618;P14618-2 P14618-2 PKM Pyruvate kinase PKM MULTI-MATCH AD24_BA39-Cohort1_INSOLUBLE_02 AD24_C1_INSOLUBLE_02 3 636.33148 1905.97261 -0.95031 -0.00060471 0.22653 0.00014415 -0.72378 -0.00046056 636.666380535871 124.11 0.13356 108.42 108.32 108.46 -15.695 -0.16512 0.0038401 NaN 128.64 36 10 6 NaN NaN NaN NaN 0 NaN NaN 0 6457200 68174 792;791 999 1129 1259;1260 -1
+AINEAYK 7 Unmodified _AINEAYK_ 0 0 0 0 0 0 P08133;P08133-2 P08133 P08133 ANXA6 Annexin A6 MULTI-MSMS AD04_BA39-Cohort2_INSOLUBLE_01 AD04_C2_INSOLUBLE_01 404.712768554688 2 404.713611 807.412668 -1.0535 -0.00042638 0.10563 4.2749E-05 -0.94791 -0.00038363 404.713565395739 13.413 0.36905 21.166 20.954 21.323 7.753 79 39 3 0 0 0 0.03392 1 5647 74.439 25.678 1 45270000 87146 615 1286 1449 80450 80450 -1
diff --git a/ui/runs/form_mapping.py b/ui/runs/form_mapping.py
index 7221bba6..ae227367 100644
--- a/ui/runs/form_mapping.py
+++ b/ui/runs/form_mapping.py
@@ -63,6 +63,8 @@
data_analysis.DimensionReductionUMAP: data_analysis_forms.DimensionReductionUMAPForm,
data_analysis.ProteinGraphPeptidesToIsoform: data_analysis_forms.ProteinGraphPeptidesToIsoformForm,
data_analysis.ProteinGraphVariationGraph: data_analysis_forms.ProteinGraphVariationGraphForm,
+ data_analysis.PredictSpectrum: data_analysis_forms.PredictSpectrumForm,
+ data_analysis.PlotPredictedSpectrum: data_analysis_forms.PlotPredictedSpectrumForm,
data_analysis.SelectPeptidesForProtein: data_analysis_forms.SelectPeptidesForProteinForm,
data_analysis.FLEXIQuantLF: data_analysis_forms.FLEXIQuantLFForm,
data_analysis.PTMsPerSample: data_analysis_forms.PTMsPerSampleForm,
diff --git a/ui/runs/forms/custom_fields.py b/ui/runs/forms/custom_fields.py
index 7171f173..f5159823 100644
--- a/ui/runs/forms/custom_fields.py
+++ b/ui/runs/forms/custom_fields.py
@@ -1,6 +1,7 @@
import logging
from enum import Enum
+import django.forms as forms
from django.forms import (
BooleanField,
CharField,
@@ -126,3 +127,34 @@ class CustomFloatField(FloatField):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.widget.attrs.update({"class": "form-control mb-2"})
+
+
+from django import forms
+from django.utils.safestring import mark_safe
+
+
+class TextDisplayWidget(forms.Widget):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.attrs.update()
+
+ def render(self, name, value, attrs=None, renderer=None):
+ display_text = self.attrs.get("data-display-text", "")
+ return mark_safe(
+ f"
diff --git a/ui/runs/views.py b/ui/runs/views.py index 020063eb..e55a9bfe 100644 --- a/ui/runs/views.py +++ b/ui/runs/views.py @@ -1,5 +1,5 @@ -import os import io +import os import tempfile import traceback import zipfile @@ -8,6 +8,7 @@ import networkx as nx import numpy as np import pandas as pd +from django.conf import settings from django.http import ( FileResponse, HttpRequest, @@ -18,11 +19,11 @@ ) from django.shortcuts import render from django.urls import reverse -from django.conf import settings -from protzilla.run import Run, get_available_run_names -from protzilla.run_v2 import delete_run_folder +from protzilla.disk_operator import FileOutput +from protzilla.run import Run, get_available_run_names from protzilla.run_helper import log_messages +from protzilla.run_v2 import delete_run_folder from protzilla.stepfactory import StepFactory from protzilla.steps import Step from protzilla.utilities.utilities import ( @@ -113,7 +114,9 @@ def detail(request: HttpRequest, run_name: str): show_table = ( not run.current_outputs.is_empty - and any(isinstance(v, pd.DataFrame) for _, v in run.current_outputs) + and any( + isinstance(v, (pd.DataFrame, FileOutput)) for _, v in run.current_outputs + ) or any(check_is_path(v) for _, v in run.current_outputs) ) @@ -232,6 +235,7 @@ def continue_(request: HttpRequest): return HttpResponseRedirect(reverse("runs:detail", args=(run_name,))) + def delete_(request: HttpRequest): """ Deletes an existing run. The user is redirected to the index page. @@ -239,15 +243,15 @@ def delete_(request: HttpRequest): :param request: the request object :type request: HttpRequest - + :return: the rendered details page of the run :rtype: HttpResponse """ run_name = request.POST["run_name"] if run_name in active_runs: del active_runs[run_name] - - try: + + try: delete_run_folder(run_name) except Exception as e: display_message( @@ -281,7 +285,7 @@ def next_(request, run_name): run = active_runs[run_name] name = request.POST.get("name", None) if name: - run.steps.name_current_step_instance(name) + run.steps.name_current_step_instance(name) run.step_next() return HttpResponseRedirect(reverse("runs:detail", args=(run_name,))) @@ -355,7 +359,7 @@ def tables(request, run_name, index, key=None): options = [] for k, value in outputs: - if isinstance(value, pd.DataFrame) and k != key: + if isinstance(value, (pd.DataFrame, FileOutput)) and k != key: options.append(k) if key is None and options: @@ -520,24 +524,33 @@ def tables_content(request, run_name, index, key): if run_name not in active_runs: active_runs[run_name] = Run(run_name) run = active_runs[run_name] - # TODO this will change with df_mode implementation if index < len(run.steps.previous_steps): outputs = run.steps.previous_steps[index].output[key] else: outputs = run.current_outputs[key] - out = outputs.replace(np.nan, None) - - if "clean-ids" in request.GET: - for column in out.columns: - if "protein" in column.lower(): - out[column] = out[column].map( - lambda group: ";".join( - unique_justseen(map(clean_uniprot_id, group.split(";"))) + + if isinstance(outputs, pd.DataFrame): + out = outputs.replace(np.nan, None) + + if "clean-ids" in request.GET: + for column in out.columns: + if "protein" in column.lower(): + out[column] = out[column].map( + lambda group: ";".join( + unique_justseen(map(clean_uniprot_id, group.split(";"))) + ) ) - ) - return JsonResponse( - dict(columns=out.to_dict("split")["columns"], data=out.to_dict("split")["data"]) - ) + return JsonResponse( + dict( + is_text_content=False, + columns=out.to_dict("split")["columns"], + data=out.to_dict("split")["data"], + ) + ) + elif isinstance(outputs, FileOutput): + return JsonResponse(dict(is_text_content=True, content=outputs.content)) + else: + return JsonResponse(dict(is_text_content=True, content=str(outputs))) def change_method(request, run_name): diff --git a/user_data/workflows/spectrum-prediction.yaml b/user_data/workflows/spectrum-prediction.yaml new file mode 100644 index 00000000..754a4f29 --- /dev/null +++ b/user_data/workflows/spectrum-prediction.yaml @@ -0,0 +1,14 @@ +df_mode: disk_memory +steps: + - form_inputs: { } + inputs: { } + instance_identifier: EvidenceImport_1 + type: EvidenceImport + - form_inputs: { } + inputs: { } + instance_identifier: PredictSpectrum_1 + type: PredictSpectrum + - form_inputs: { } + inputs: { } + instance_identifier: PlotPredictedSpectrum_1 + type: PlotPredictedSpectrum