Compare CRISPR Modalities#
This guide helps you choose between CRISPR modalities for your application.
Modality Overview#
Modality |
Use Case |
Reversible? |
Complexity |
|---|---|---|---|
CRISPRa |
Gene activation |
Yes |
Low |
CRISPRi |
Gene repression |
Yes |
Low |
Knockout |
Gene disruption |
No |
Low |
Prime edit |
Precise edits |
No |
High |
Base edit |
Single nucleotide changes |
No |
Medium |
Quick Decision Guide#
- Want to increase gene expression?
Use CRISPRa
- Want to decrease gene expression?
Use CRISPRi (reversible) or Knockout (permanent)
- Need a specific mutation?
Single base change: Base editing
Larger change: Prime editing
- Gene therapy for haploinsufficiency?
CRISPRa (restore expression from remaining allele)
Comparing CRISPRa vs CRISPRi#
from phaselab.crispr import design_guides, design_crispri_guides
# Same target, different approaches
sequence = "..." # Target gene promoter
tss_index = 200
# CRISPRa: Activate gene
crispra = design_guides(sequence, tss_index)
print(f"CRISPRa candidates: {len(crispra)}")
print(f"Best CRISPRa: {crispra.iloc[0]['combined_score']:.3f}")
# CRISPRi: Repress gene
crispri = design_crispri_guides(sequence, tss_index)
print(f"CRISPRi candidates: {len(crispri)}")
print(f"Best CRISPRi: {crispri.iloc[0]['combined_score']:.3f}")
Knockout vs CRISPRi#
from phaselab.crispr import design_crispri_guides, design_knockout_guides
# CRISPRi: Reversible repression
crispri = design_crispri_guides(sequence, tss_index)
# Knockout: Permanent disruption
knockout = design_knockout_guides(
sequence,
exon_start=500,
exon_end=800
)
print("CRISPRi advantages:")
print("- Reversible (remove dCas9 to restore)")
print("- No DNA damage")
print("- Tunable (VP64/KRAB fusion strength)")
print("Knockout advantages:")
print("- Complete loss-of-function")
print("- Permanent effect")
print("- Well-established protocols")
Base Editing vs Prime Editing#
from phaselab.crispr import design_base_edit_guides, design_prime_edit
target_position = 150
sequence = "..."
# Base editing: Single base change (A->G or C->T)
# Check if target base is editable
target_base = sequence[target_position]
if target_base == 'A':
# ABE can convert A->G
abe_guides = design_base_edit_guides(
sequence,
target_position=target_position,
target_base='A',
editor_type='ABE'
)
print(f"ABE candidates: {len(abe_guides)}")
elif target_base == 'C':
# CBE can convert C->T
cbe_guides = design_base_edit_guides(
sequence,
target_position=target_position,
target_base='C',
editor_type='CBE'
)
print(f"CBE candidates: {len(cbe_guides)}")
else:
print("Base editing not applicable for this base")
# Prime editing: Any edit type
prime = design_prime_edit(
sequence,
edit_position=target_position,
edit_type='substitution',
new_base='G'
)
print(f"Prime editing pegRNA designed")
Decision Matrix#
def recommend_modality(
goal: str,
reversible: bool = False,
specific_mutation: str = None
) -> str:
"""Recommend CRISPR modality based on requirements."""
if goal == "increase_expression":
return "CRISPRa"
elif goal == "decrease_expression":
return "CRISPRi" if reversible else "Knockout"
elif goal == "specific_mutation":
if specific_mutation in ['A>G', 'T>C']:
return "ABE (base editing)"
elif specific_mutation in ['C>T', 'G>A']:
return "CBE (base editing)"
else:
return "Prime editing"
elif goal == "gene_disruption":
return "Knockout"
else:
return "Consult literature for your specific case"
# Examples
print(recommend_modality("increase_expression")) # CRISPRa
print(recommend_modality("decrease_expression", reversible=True)) # CRISPRi
print(recommend_modality("specific_mutation", specific_mutation="A>G")) # ABE
Full Comparison Pipeline#
from phaselab.crispr import (
design_guides,
design_crispri_guides,
design_knockout_guides,
compute_coherence_batch,
)
import pandas as pd
# Design for all modalities
crispra = design_guides(sequence, tss_index).head(5)
crispra['modality'] = 'CRISPRa'
crispri = design_crispri_guides(sequence, tss_index).head(5)
crispri['modality'] = 'CRISPRi'
knockout = design_knockout_guides(sequence, 500, 800).head(5)
knockout['modality'] = 'Knockout'
# Combine and compare
all_guides = pd.concat([crispra, crispri, knockout], ignore_index=True)
# Add quantum coherence
all_guides['quantum_coherence'] = compute_coherence_batch(
all_guides['sequence'].tolist(),
mode="quantum"
)
# Compare by modality
comparison = all_guides.groupby('modality').agg({
'combined_score': 'mean',
'quantum_coherence': 'mean',
'gc_content': 'mean'
})
print(comparison)
See Also#
Filter Guides by Coherence - Filter by coherence
CRISPR Guide Design - Full design tutorial