HTS Analyzer Studio Z-prime & SSMD 4PL IC50 Hit prioritization

Screen, validate, fit
and prioritize HTS hits

A complete high-throughput screening analytics workflow: primary hit identification, activity distributions, assay quality, plate normalization, replicate QC, dose-response IC50, batch fitting, counter-screening, plate maps, hit prioritization, and complete report exports.

API status
Checking...
Report status
Ready
Hits
Z-prime / IC50
How to create an HTS report
1. Identify hitsPaste primary screening activity data and select a threshold.
2. Check assay qualityCalculate Z-prime, SSMD, signal window and CV from controls.
3. Fit IC50Run 4PL dose-response fitting and inspect curve quality.
4. PrioritizeCombine potency, selectivity, tractability and artifact flags.
Use this as research screening analytics. Confirm hits with replicates, orthogonal assays, counter-screens, dose-response confirmation, PAINS/tox filters, and medicinal chemistry review.
Scientific guardrails
Primary HTS hit calls are not final leads. Assay quality, artifacts, counter-screening, reproducibility, curve quality, and chemical tractability must drive decisions.
Z-prime SSMD 4PL IC50 Counter-screen Replicate QC
User outputs
Hit table Dose-response curve Assay QC Plate map JSON / HTML / Word / CSV Share report
Primary Screening Data
Hit Distribution
Run hit identification to see hit rate, classes, and distribution.
Assay Quality Controls
QC Interpretation
Z-prime ≥ 0.5 is generally suitable for HTS. Combine Z-prime with SSMD, CV, signal window, and control trends.
Dose-Response 4PL
Dose-Response Curve
Batch Dose-Response JSON
Plate Normalization
Plate Map View
Counter-screen Selectivity
Counter-screen Logic
Prioritize compounds with strong primary activity and low counter-screen activity. Counter-screen hits may indicate assay artifacts, nonspecific activity, cytotoxicity, aggregation, or promiscuity.
Multi-Parameter Hit Prioritization
Complete Report Center
Create a complete HTS analytics report, then view it here or download/share it.
Raw JSON
{}
`; } function downloadReport(type){ const data = state.lastReport || state.lastRaw; if(!data || !Object.keys(data).length){ toast('Create a report first','err'); return; } const name = slug(); if(type === 'json') download(`${name}.json`, pretty(data), 'application/json'); if(type === 'html') download(`${name}.html`, reportHTML(), 'text/html'); if(type === 'doc') download(`${name}.doc`, reportHTML(), 'application/msword'); } function hitRowsForCSV(){ return state.lastReport?.hit_identification?.top_hits || state.lastHitID?.top_hits || state.lastPriority?.prioritized_hits || []; } function downloadCSV(){ const rows = hitRowsForCSV(); if(!rows.length){ toast('No hit rows available','err'); return; } const headers = ['compound_id','activity_percent','hit_classification','ic50_um','selectivity_score','priority_score','recommendation','well','plate_id']; const csvRows = rows.map(r=>[ r.compound_id || '', r.activity_percent ?? '', r.hit_classification || '', r.ic50_um ?? '', r.selectivity_score ?? '', r.priority_score ?? '', r.recommendation || '', r.well || '', r.plate_id || '' ]); const csv = [headers, ...csvRows].map(r=>r.map(x=>`"${String(x).replace(/"/g,'""')}"`).join(',')).join('\n'); download(`${slug()}-hits.csv`, csv, 'text/csv'); } async function shareReport(){ const data = state.lastReport || state.lastRaw; if(!data || !Object.keys(data).length){ toast('Create a report first','err'); return; } const text = `HTS Analyzer Report\nHits: ${$('kpi-hits').textContent || '—'}\nKey metric: ${$('kpi-key').textContent || '—'}\nResearch-use screening analytics only.`; if(navigator.share){ try{ await navigator.share({title:'HTS Analyzer Report', text}); toast('Share sheet opened'); }catch(e){} }else{ navigator.clipboard.writeText(text + '\n\n' + pretty(data).slice(0,3000)); toast('Share text copied'); } } function copyHitData(){ navigator.clipboard.writeText($('hit-data').value); toast('Hit data copied'); } function copyRaw(){ navigator.clipboard.writeText(pretty(state.lastRaw || {})); toast('Raw JSON copied'); } function loadAllExamples(){ $('hit-data').value = pretty(exampleHitData); $('priority-data').value = pretty(examplePriority); $('plate-raw-data').value = pretty(exampleRawSignals); $('primary-hits-data').value = pretty([ {"compound_id":"CMP-001","activity_percent":85}, {"compound_id":"CMP-003","activity_percent":92}, {"compound_id":"CMP-005","activity_percent":76} ]); $('counter-data').value = pretty([ {"compound_id":"CMP-001","activity_percent":12}, {"compound_id":"CMP-003","activity_percent":55}, {"compound_id":"CMP-005","activity_percent":18} ]); loadBatchDoseExample(); drawPlateMap(exampleHitData); toast('Examples loaded'); } function init(){ initTabs(); loadAllExamples(); healthCheck(); setRaw({ready:true, app:'HTS Analyzer Studio', endpoints:[ '/hts/gold/health', '/hts/gold/identify-hits', '/hts/gold/activity-distribution', '/hts/gold/assay-quality', '/hts/gold/normalize-plate', '/hts/gold/replicate-qc', '/hts/gold/dose-response', '/hts/gold/batch-dose-response', '/hts/gold/counter-screen', '/hts/gold/prioritize-hits', '/hts/gold/plate-map', '/hts/gold/report' ]}); } init();