spcelleval / methods.html
Arozhada's picture
update method links (#1)
29445f3
Raw
History Blame Contribute Delete
12.9 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>spCellEval Methods</title>
<script src="https://cdn.tailwindcss.com"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
.solid-bg {
background-color: #120822;
}
.card-hover {
transition: all 0.3s ease;
}
.card-hover:hover {
transform: translateY(-5px);
box-shadow: 0 10px 25px -5px rgba(0,0,0,0.15);
}
.method-cell {
position: sticky;
left: 0;
background-color: #ffffff;
z-index: 10;
box-shadow: 2px 0 3px rgba(0,0,0,0.05);
}
.sticky-header {
position: sticky;
top: 0;
z-index: 20;
backdrop-filter: blur(8px);
background-color: rgba(255,255,255,0.9);
}
</style>
</head>
<body class="solid-bg font-sans antialiased">
<header class="fixed top-0 left-0 right-0 z-50 bg-gray-900/70 backdrop-blur-lg border-b border-gray-700/50">
<div class="container mx-auto px-6 py-3 flex justify-between items-center">
<a href="index.html" class="flex items-center space-x-3">
<img src="./plotly_figures/logo_example.png" alt="Cell Phenotyping Logo" width="56" height="56" class="transition-transform duration-300 hover:scale-110">
<span class="text-xl font-bold tracking-tight text-white">spCellEval</span>
</a>
<nav class="hidden md:flex space-x-10">
<a href="index.html#about" class="text-gray-300 hover:text-indigo-400 transition-colors">About</a>
<a href="results.html" class="text-gray-300 hover:text-indigo-400 transition-colors">Results</a>
<a href="methods.html" class="text-indigo-300 font-semibold">Methods</a>
<a href="datasets.html" class="text-gray-300 hover:text-indigo-400 transition-colors">Datasets</a>
<a href="index.html#cta" class="text-gray-300 hover:text-indigo-400 transition-colors">Contact</a>
</nav>
</div>
</header>
<main class="container mx-auto px-4 pt-32 pb-10">
<section class="text-center text-white mb-10">
<h1 class="text-4xl md:text-5xl font-extrabold tracking-tight">Methods</h1>
<p class="mt-4 max-w-3xl mx-auto text-gray-300">
This page summarizes the algorithmic families included in spCellEval and the criteria used to assess method performance across datasets.
</p>
</section>
<section class="grid grid-cols-1 md:grid-cols-4 gap-6 mb-8">
<div class="bg-white/10 rounded-xl p-6 card-hover">
<i class="fas fa-user-check text-indigo-300 text-2xl mb-3"></i>
<h2 class="text-white font-semibold text-lg mb-2">Supervised</h2>
<p class="text-indigo-100 text-sm">Learns explicit labels and generally achieves strongest recovery when high-quality annotations are available.</p>
</div>
<div class="bg-white/10 rounded-xl p-6 card-hover">
<i class="fas fa-project-diagram text-indigo-300 text-2xl mb-3"></i>
<h2 class="text-white font-semibold text-lg mb-2">Prior-Knowledge Based</h2>
<p class="text-indigo-100 text-sm">Uses marker panels and biological priors for robust cell typing when labels are scarce.</p>
</div>
<div class="bg-white/10 rounded-xl p-6 card-hover">
<i class="fas fa-layer-group text-indigo-300 text-2xl mb-3"></i>
<h2 class="text-white font-semibold text-lg mb-2">Unsupervised</h2>
<p class="text-indigo-100 text-sm">Identifies structure in large cohorts and supports exploratory phenotyping in novel tissues.</p>
</div>
<div class="bg-white/10 rounded-xl p-6 card-hover">
<i class="fas fa-plug-circle-check text-indigo-300 text-2xl mb-3"></i>
<h2 class="text-white font-semibold text-lg mb-2">Pre-trained</h2>
<p class="text-indigo-100 text-sm">Enables rapid cell typing in novel tissues using pre-existing models.</p>
</div>
</section>
<section class="bg-white rounded-xl shadow-sm overflow-hidden mb-8">
<div class="border-b border-gray-100 px-6 py-4">
<h2 class="text-xl font-semibold text-gray-800">Method Papers</h2>
<p class="text-gray-500 text-sm">Open the primary paper or publication page for each method in the benchmark.</p>
</div>
<div id="methodPaperGrid" class="p-6 space-y-8"></div>
</section>
<!--
<section class="bg-white rounded-xl shadow-sm overflow-hidden mb-8">
<div class="border-b border-gray-100 px-6 py-4">
<h2 class="text-xl font-semibold text-gray-800">Method Comparison Snapshot</h2>
<p class="text-gray-500 text-sm">Illustrative examples of method profiles used in the benchmark.</p>
</div>
<div class="p-4 overflow-x-auto">
<table class="w-full border-collapse min-w-[760px]">
<thead class="sticky-header">
<tr>
<th class="method-cell py-3 px-4 text-left font-semibold text-gray-700 border-b text-sm">Method</th>
<th class="py-3 px-4 text-left font-semibold text-gray-700 border-b text-sm">Family</th>
<th class="py-3 px-4 text-left font-semibold text-gray-700 border-b text-sm">Strength</th>
<th class="py-3 px-4 text-left font-semibold text-gray-700 border-b text-sm">Best Use Case</th>
</tr>
</thead>
<tbody>
<tr class="border-b hover:bg-gray-50">
<td class="method-cell py-3 px-4 text-sm font-medium text-gray-900">scimap</td>
<td class="py-3 px-4 text-sm text-gray-700">Prior-knowledge / Gating</td>
<td class="py-3 px-4 text-sm text-gray-700">Marker-aware interpretability</td>
<td class="py-3 px-4 text-sm text-gray-700">Marker-guided discovery workflows</td>
</tr>
<tr class="border-b hover:bg-gray-50">
<td class="method-cell py-3 px-4 text-sm font-medium text-gray-900">Phenograph</td>
<td class="py-3 px-4 text-sm text-gray-700">Unsupervised</td>
<td class="py-3 px-4 text-sm text-gray-700">Community detection in high-dimensional space</td>
<td class="py-3 px-4 text-sm text-gray-700">Discovery of novel cell states</td>
</tr>
<tr class="hover:bg-gray-50">
<td class="method-cell py-3 px-4 text-sm font-medium text-gray-900">Leiden + UMAP</td>
<td class="py-3 px-4 text-sm text-gray-700">Clustering + Visualization</td>
<td class="py-3 px-4 text-sm text-gray-700">Scalable exploratory segmentation</td>
<td class="py-3 px-4 text-sm text-gray-700">Initial stratification before supervision</td>
</tr>
</tbody>
</table>
</div>
</section> -->
<section class="bg-gradient-to-r from-indigo-700 to-teal-700 rounded-xl p-8 text-center">
<h2 class="text-2xl font-bold text-white">Need Full Quantitative Results?</h2>
<p class="mt-2 text-indigo-100">Explore the full metric matrix and ranking tables on the homepage Results section.</p>
<a href="results.html" class="inline-block mt-5 px-6 py-3 bg-white text-indigo-700 font-semibold rounded-lg hover:bg-gray-100 transition-colors">Open Results</a>
</section>
</main>
<script>
const methodGroups = {
"Supervised": ["XGBoost", "Logistic Regression", "Random Forest", "MAPS", "CellSighter"],
"Unsupervised": [
"Phenograph", "Leiden", "CellLENS_Lite", "CellLENS_Full",
"FuseSOM", "Starling", "FlowSOM Meta Clusters"
],
"Prior-Knowledge-driven": ["Scyan", "Tacit", "Tribus", "Astir"],
"Pre-trained Models": ["Nimbus", "Deepcelltypes", "Deepcelltypes_adapted", "RIBCA", "RIBCA_adapted"],
};
const methodPaperLinks = {
"XGBoost": "https://doi.org/10.1145/2939672.2939785",
"Logistic Regression": "https://doi.org/10.1038/nmeth.3904",
"Random Forest": "https://doi.org/10.1023/A:1010933404324",
"MAPS": "https://doi.org/10.1038/s41467-023-44188-w",
"CellSighter": "https://doi.org/10.1038/s41467-023-40066-7",
"Phenograph": "https://doi.org/10.1016/j.cell.2015.05.047",
"Leiden": "https://doi.org/10.1038/s41598-019-41695-z",
"CellLENS_Lite": "https://doi.org/10.1038/s41590-025-02163-1",
"CellLENS_Full": "https://doi.org/10.1038/s41590-025-02163-1",
"FuseSOM": "https://doi.org/10.1093/bioadv/vbad141",
"Starling": "https://doi.org/10.1038/s41467-024-55214-w",
"FlowSOM Meta Clusters": "https://doi.org/10.1002/cyto.a.22625",
"Scyan": "https://doi.org/10.1093/bib/bbad260",
"Tacit": "https://doi.org/10.1038/s41467-025-58874-4",
"Tribus": "https://doi.org/10.1093/bioinformatics/btaf082",
"Astir": "https://doi.org/10.1016/j.cels.2021.08.012",
"Nimbus": "https://doi.org/10.1038/s41592-025-02826-9",
"Deepcelltypes": "https://doi.org/10.1101/2024.11.02.621624",
"RIBCA": "https://doi.org/10.1016/j.cels.2025.101374",
};
const methodPaperGrid = document.getElementById('methodPaperGrid');
const categoryColors = {
"Supervised": "from-indigo-50 to-white",
"Unsupervised": "from-cyan-50 to-white",
"Prior-Knowledge-driven": "from-amber-50 to-white",
"Pre-trained Models": "from-emerald-50 to-white"
};
Object.entries(methodGroups).forEach(([category, methods]) => {
const section = document.createElement('div');
section.className = 'rounded-xl border border-gray-200 bg-white shadow-sm overflow-hidden';
const header = document.createElement('div');
header.className = 'flex items-center justify-between gap-3 px-6 py-4 border-b border-gray-100 bg-gray-50/80';
header.innerHTML = `
<div>
<h3 class="text-lg font-semibold text-gray-800">${category}</h3>
<p class="text-sm text-gray-500">${methods.length} methods</p>
</div>
`;
section.appendChild(header);
const body = document.createElement('div');
body.className = 'p-6';
const grid = document.createElement('div');
grid.className = 'grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3 gap-4';
methods.forEach((methodName) => {
const link = methodPaperLinks[methodName] || `https://scholar.google.com/scholar?q=${encodeURIComponent(methodName + ' paper')}`;
const tile = document.createElement('a');
tile.href = link;
tile.target = '_blank';
tile.rel = 'noreferrer';
tile.className = `block rounded-xl border border-gray-200 bg-gradient-to-br ${categoryColors[category] || 'from-gray-50 to-white'} p-5 card-hover hover:border-indigo-300`;
tile.innerHTML = `
<div class="flex items-start justify-between gap-3">
<div>
<div class="inline-flex items-center rounded-full bg-gray-900 px-2.5 py-1 text-xs font-semibold text-white mb-3">${category}</div>
<h4 class="text-base font-semibold text-gray-900 leading-snug">${methodName}</h4>
</div>
<span class="mt-1 inline-flex h-9 w-9 items-center justify-center rounded-full bg-white text-indigo-600 shadow-sm border border-gray-200">
<i class="fas fa-arrow-up-right-from-square text-sm"></i>
</span>
</div>
<div class="mt-4 flex items-center justify-between text-sm text-gray-600">
<span>Paper link</span>
<span class="font-medium text-indigo-700">Open</span>
</div>
`;
grid.appendChild(tile);
});
body.appendChild(grid);
section.appendChild(body);
methodPaperGrid.appendChild(section);
});
</script>
</body>
</html>