Source code for alphadia.search.scoring.features.reference_features

"""Reference-based features comparing against library spectra."""

import numba as nb
import numpy as np

from alphadia.search.scoring.features.features_utils import (
    cosine_similarity_a1,
)
from alphadia.utils import USE_NUMBA_CACHING


[docs] @nb.njit(cache=USE_NUMBA_CACHING) def reference_features( reference_observation_importance, reference_fragments_scan_profile, reference_fragments_frame_profile, reference_template_scan_profile, reference_template_frame_profile, observation_importance, fragments_scan_profile, fragments_frame_profile, template_scan_profile, template_frame_profile, fragment_lib_intensity, ): feature_dict = nb.typed.Dict.empty( key_type=nb.types.unicode_type, value_type=nb.types.float32 ) fragment_idx_sorted = np.argsort(fragment_lib_intensity)[::-1] if ( reference_fragments_scan_profile.shape[0] == 0 or fragments_scan_profile.shape[0] == 0 or reference_fragments_scan_profile.shape[0] != fragments_scan_profile.shape[0] ): feature_dict["reference_intensity_correlation"] = 0 feature_dict["mean_reference_scan_cosine"] = 0 feature_dict["top3_reference_scan_cosine"] = 0 feature_dict["mean_reference_frame_cosine"] = 0 feature_dict["top3_reference_frame_cosine"] = 0 feature_dict["mean_reference_template_scan_cosine"] = 0 feature_dict["top3_reference_template_scan_cosine"] = 0 feature_dict["mean_reference_template_frame_cosine"] = 0 feature_dict["top3_reference_template_frame_cosine"] = 0 return feature_dict # ============= Fragment Intensity ============= reference_fragment_intensity = np.sum( np.sum(reference_fragments_scan_profile, axis=-1) * reference_observation_importance.reshape(1, -1), axis=-1, ) fragment_intensity = np.sum( np.sum(fragments_scan_profile, axis=-1) * observation_importance.reshape(1, -1), axis=-1, ) total_fragment_intensity = np.sum(fragment_intensity) reference_intensity_correlation = 0 if total_fragment_intensity > 1 and np.sum(reference_fragment_intensity) > 1: # print('reference_fragment_intensity',reference_fragment_intensity, reference_fragment_intensity.shape) # print('fragment_intensity',fragment_intensity, fragment_intensity.shape) reference_intensity_correlation = np.corrcoef( reference_fragment_intensity, fragment_intensity )[0, 1] feature_dict["reference_intensity_correlation"] = reference_intensity_correlation # ============= Fragment Profile ============= reference_scan_profile = np.sum( reference_fragments_scan_profile * reference_observation_importance.reshape(1, -1, 1), axis=1, ) scan_profile = np.sum( fragments_scan_profile * observation_importance.reshape(1, -1, 1), axis=1 ) scan_similarity = cosine_similarity_a1(reference_scan_profile, scan_profile) feature_dict["mean_reference_scan_cosine"] = np.mean(scan_similarity) feature_dict["top3_reference_scan_cosine"] = scan_similarity[ fragment_idx_sorted[:3] ].mean() reference_frame_profile = np.sum( reference_fragments_frame_profile * reference_observation_importance.reshape(1, -1, 1), axis=1, ) frame_profile = np.sum( fragments_frame_profile * observation_importance.reshape(1, -1, 1), axis=1 ) frame_similarity = cosine_similarity_a1(reference_frame_profile, frame_profile) feature_dict["mean_reference_frame_cosine"] = np.mean(frame_similarity) feature_dict["top3_reference_frame_cosine"] = frame_similarity[ fragment_idx_sorted[:3] ].mean() # ============= Template Profile ============= reference_template_scan_profile = np.sum( reference_template_scan_profile * reference_observation_importance.reshape(1, -1, 1), axis=1, ) template_scan_profile = np.sum( template_scan_profile * observation_importance.reshape(1, -1, 1), axis=1 ) scan_similarity = cosine_similarity_a1( reference_template_scan_profile, template_scan_profile ) feature_dict["mean_reference_template_scan_cosine"] = np.mean(scan_similarity) reference_template_frame_profile = np.sum( reference_template_frame_profile * reference_observation_importance.reshape(1, -1, 1), axis=1, ) template_frame_profile = np.sum( template_frame_profile * observation_importance.reshape(1, -1, 1), axis=1 ) frame_similarity = cosine_similarity_a1( reference_template_frame_profile, template_frame_profile ) feature_dict["mean_reference_template_frame_cosine"] = np.mean(frame_similarity) return feature_dict