use gsva::{EnrichmentResult, ExprMatrix};
use crate::data::XCellModel;
use crate::microenv::microenvironment_scores;
use crate::rawenrich::raw_enrichment;
use crate::spillover::spill_over;
use crate::transform::transform_scores;
#[derive(Debug, Clone)]
pub struct XCellParams {
pub rnaseq: bool,
pub scale: bool,
pub alpha: f64,
}
impl Default for XCellParams {
fn default() -> Self {
XCellParams {
rnaseq: true,
scale: true,
alpha: 0.5,
}
}
}
pub fn xcell_analysis(
expr: &ExprMatrix,
model: &XCellModel,
params: &XCellParams,
) -> EnrichmentResult {
let spill = model.spill_for(params.rnaseq);
let raw = raw_enrichment(expr, model);
let transformed = transform_scores(&raw, spill, params.scale);
let adjusted = spill_over(&transformed, spill, params.alpha);
microenvironment_scores(&adjusted)
}