Can ypu make editable ppt from this PDF and make change theme also
cd /home/daytona/workspace && python3 -c " import pdfplumber pdf_path = '/home/daytona/workspace/attachments/6fd812dd-dad2-495e-a80a-b184a4a05485/Alphafold .pdf' with pdfplumber.open(pdf_path) as pdf: print(f'Total pages: {len(pdf.pages)}') for i, page in enumerate(pdf.pages): text = page.extract_text() print(f'\\n=== PAGE {i+1} ===') print(text[:2000] if text else '[No text]') "
cd /home/daytona/workspace && python3 -c " import subprocess # Try OCR with pytesseract via pdf2image result = subprocess.run(['python3', '-c', ''' import pdf2image from PIL import Image import pytesseract pdf_path = \"/home/daytona/workspace/attachments/6fd812dd-dad2-495e-a80a-b184a4a05485/Alphafold .pdf\" pages = pdf2image.convert_from_path(pdf_path, dpi=150, first_page=1, last_page=5) for i, page in enumerate(pages): text = pytesseract.image_to_string(page) print(f\"\\n=== PAGE {i+1} ===\") print(text[:1500]) '''], capture_output=True, text=True, timeout=120) print(result.stdout[:5000]) print('STDERR:', result.stderr[:1000]) "
~/alphafold-ppt/extract_pdf.py
import pdf2image
import pytesseract
pdf_path = "/home/daytona/workspace/attachments/6fd812dd-dad2-495e-a80a-b184a4a05485/Alphafold .pdf"
pages = pdf2image.convert_from_path(pdf_path, dpi=150)
print("Total pages:", len(pages))
all_text = {}
for i, page in enumerate(pages):
text = pytesseract.image_to_string(page)
all_text[i+1] = text
print("\n=== PAGE", i+1, "===")
print(text[:1200])
python3 /home/daytona/workspace/alphafold-ppt/extract_pdf.py 2>&1 | head -300
python3 /home/daytona/workspace/alphafold-ppt/extract_pdf.py 2>&1 | tail -600
~/alphafold-ppt/create_ppt.js
const pptxgen = require("pptxgenjs");
let pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.title = 'AlphaFold - DeepMind';
pres.author = 'DeepMind';
// ============================
// THEME COLORS
// ============================
const C = {
dark: "0A1628", // deep navy - dominant bg
mid: "0D2240", // mid navy for content slides
accent1: "00C4CC", // teal/cyan - primary accent
accent2: "6C63FF", // indigo/purple - secondary accent
accent3: "FF6B6B", // coral/red - highlight
white: "FFFFFF",
lightgray:"C8D8E8",
subtext: "8EA8C3",
cardBg: "112040", // card background
divider: "1E3A60",
};
// Helper: section divider slide (dark)
function addSectionSlide(pres, title, subtitle) {
let slide = pres.addSlide();
// Full background
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.dark } });
// Accent bar left
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 0.08, h: 5.625, fill: { color: C.accent1 } });
// Decorative diagonal shape
slide.addShape(pres.ShapeType.rect, { x: 7, y: 0, w: 3, h: 5.625, fill: { color: C.cardBg } });
slide.addShape(pres.ShapeType.rect, { x: 6.5, y: 0, w: 0.08, h: 5.625, fill: { color: C.accent2 } });
// DeepMind label top right
slide.addText("DeepMind", {
x: 7.2, y: 0.3, w: 2.5, h: 0.35,
fontSize: 10, fontFace: "Calibri", color: C.accent1,
bold: true, charSpacing: 3, align: "right"
});
slide.addText(title, {
x: 0.5, y: 1.6, w: 6, h: 1.4,
fontSize: 36, fontFace: "Calibri", color: C.white,
bold: true, align: "left"
});
if (subtitle) {
slide.addText(subtitle, {
x: 0.5, y: 3.1, w: 5.5, h: 0.6,
fontSize: 15, fontFace: "Calibri", color: C.lightgray,
align: "left"
});
}
// Accent line under title
slide.addShape(pres.ShapeType.rect, { x: 0.5, y: 3.0, w: 2.5, h: 0.04, fill: { color: C.accent1 } });
}
// Helper: content slide
function addContentSlide(pres, title, bullets, options = {}) {
let slide = pres.addSlide();
const bgColor = options.dark ? C.dark : C.mid;
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: bgColor } });
// Top accent bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.accent1 } });
// Title bar
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.06, w: 10, h: 0.75, fill: { color: C.cardBg } });
// Left accent dot
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.06, w: 0.08, h: 0.75, fill: { color: C.accent2 } });
slide.addText(title, {
x: 0.25, y: 0.1, w: 9.3, h: 0.65,
fontSize: 20, fontFace: "Calibri", color: C.white,
bold: true, align: "left", margin: 0
});
if (bullets && bullets.length > 0) {
const items = bullets.map((b, i) => {
if (typeof b === 'string') {
return { text: b, options: { bullet: { code: '25B8', color: C.accent1 }, color: C.lightgray, fontSize: 14, fontFace: "Calibri", breakLine: i < bullets.length - 1, paraSpaceBefore: 4 } };
} else {
return b;
}
});
slide.addText(items, {
x: 0.4, y: 1.0, w: 9.2, h: 4.3,
align: "left", valign: "top"
});
}
return slide;
}
// Helper: two-column content slide
function addTwoColSlide(pres, title, leftItems, rightItems) {
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.mid } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.accent1 } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.06, w: 10, h: 0.75, fill: { color: C.cardBg } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0.06, w: 0.08, h: 0.75, fill: { color: C.accent2 } });
slide.addText(title, {
x: 0.25, y: 0.1, w: 9.3, h: 0.65,
fontSize: 20, fontFace: "Calibri", color: C.white,
bold: true, align: "left", margin: 0
});
// Divider
slide.addShape(pres.ShapeType.rect, { x: 5.0, y: 1.0, w: 0.03, h: 4.3, fill: { color: C.divider } });
const makeItems = (items) => items.map((b, i) => ({
text: b,
options: { bullet: { code: '25B8', color: C.accent1 }, color: C.lightgray, fontSize: 13, fontFace: "Calibri", breakLine: i < items.length - 1, paraSpaceBefore: 5 }
}));
slide.addText(makeItems(leftItems), { x: 0.4, y: 1.0, w: 4.4, h: 4.3, align: "left", valign: "top" });
slide.addText(makeItems(rightItems), { x: 5.2, y: 1.0, w: 4.4, h: 4.3, align: "left", valign: "top" });
return slide;
}
// ============================
// SLIDE 1: TITLE SLIDE
// ============================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.dark } });
// Big right panel
slide.addShape(pres.ShapeType.rect, { x: 6.8, y: 0, w: 3.2, h: 5.625, fill: { color: C.cardBg } });
// Horizontal accent lines
slide.addShape(pres.ShapeType.rect, { x: 0, y: 2.6, w: 6.5, h: 0.05, fill: { color: C.accent1 } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 2.7, w: 4.0, h: 0.03, fill: { color: C.accent2 } });
slide.addText("AlphaFold", {
x: 0.5, y: 0.8, w: 6, h: 1.4,
fontSize: 52, fontFace: "Calibri", color: C.white,
bold: true, align: "left"
});
slide.addText("Protein Structure Prediction", {
x: 0.5, y: 2.3, w: 6, h: 0.6,
fontSize: 20, fontFace: "Calibri", color: C.accent1,
bold: false, align: "left"
});
slide.addText("Using Deep Learning to Solve One of Biology's\nGreatest Challenges", {
x: 0.5, y: 2.85, w: 6, h: 1.0,
fontSize: 13, fontFace: "Calibri", color: C.lightgray,
align: "left"
});
slide.addText("DeepMind", {
x: 7.0, y: 2.4, w: 2.8, h: 0.5,
fontSize: 18, fontFace: "Calibri", color: C.accent1,
bold: true, align: "center"
});
slide.addText("deepmind.com", {
x: 7.0, y: 2.95, w: 2.8, h: 0.35,
fontSize: 10, fontFace: "Calibri", color: C.subtext,
align: "center"
});
}
// ============================
// SLIDE 2: What are Proteins?
// ============================
addContentSlide(pres, "What are Proteins?", [
"Proteins are molecular machines essential to all life",
"They perform many functions: structural (hair), immune system, enzymes, signaling",
"Consist of chains of amino acids that fold into a 3D structure",
"The exact 3D shape determines a protein's function",
"Understanding protein structures is a fundamental challenge in biology",
]);
// ============================
// SLIDE 3: Proteins - CS View
// ============================
addContentSlide(pres, "What are Proteins? - A Computational View", [
"Long molecule (chain) of amino acids",
"Computer science view: strings over an alphabet of 20 letters",
"Each letter = a specific collection of atoms and chemical bonds",
"Called 'residues' or 'amino acids'",
"DNA sequences directly encode the protein sequence",
"Sequence → Structure → Function",
]);
// ============================
// SLIDE 4: Why Predict Structures?
// ============================
addContentSlide(pres, "Why Predict Protein Structures?", [
"Experimental structure determination (X-ray crystallography, cryo-EM) can take months to years",
"Requires: expressing protein → breaking cells → purifying → growing crystals → X-ray diffraction → interpretation",
"Structure prediction provides actionable information much faster",
"Enables drug discovery, understanding disease mechanisms, and rational protein design",
"Critical for rapid response to new pathogens (e.g., SARS-CoV-2)",
]);
// ============================
// SLIDE 5: CASP Section Divider
// ============================
addSectionSlide(pres, "AlphaFold at CASP", "A clear success metric for structure prediction");
// ============================
// SLIDE 6: CASP Performance
// ============================
addContentSlide(pres, "AlphaFold at CASP", [
"CASP (Critical Assessment of Protein Structure Prediction) is a biennial blind assessment",
"Participants predict recently solved structures that are not yet publicly available",
"At CASP14, AlphaFold achieved consistently high accuracy - ranked top method",
"Performance measured in GDT (Global Distance Test) score - 0 to 100",
"AlphaFold 2 achieved median accuracy of 92.4 GDT over all CASP14 targets",
"CASP organizers recognized AlphaFold as a solution to the structure prediction problem",
]);
// ============================
// SLIDE 7: Historical Perspective
// ============================
addContentSlide(pres, "CASP: Historical Perspective (1994-2020)", [
"CASP has provided blind assessment of structure prediction methods over 25+ years",
"Progress was slow and incremental from CASP1 (1994) to CASP12",
"AlphaFold 1 showed breakthrough results at CASP13 (2018)",
"AlphaFold 2 at CASP14 (2020): median 92.4 GDT - a massive jump over all previous methods",
"The gap between AlphaFold 2 and the next-best method was larger than 25 years of prior progress combined",
]);
// ============================
// SLIDE 8: Protein Examples
// ============================
addTwoColSlide(pres,
"Protein Examples: CASP14 Predictions vs. Experiment",
[
"T1064 - ORF8 (SARS-CoV-2)",
"Rapidly evolving coronavirus protein",
"Implicated in immune evasion",
"AlphaFold: 87.0 GDT",
"Near-perfect match to experimental structure (7JTL)",
],
[
"T1044 - RNA Polymerase (Cryo-EM)",
"Folded as a single long chain",
"Composed of multiple individual domains (T1041-T1043)",
"Correctly predicted domain arrangement",
"Reference: Drobysheva et al., Nature (2020)",
]
);
// ============================
// SLIDE 9: Agenda Section
// ============================
addSectionSlide(pres, "How AlphaFold Works", "Architecture, network design, and key innovations");
// ============================
// SLIDE 10: Inductive Bias
// ============================
addContentSlide(pres, "Inductive Bias for Deep Learning Models", [
"Different architectures encode different assumptions about data:",
"Convolutional Networks (e.g., computer vision): data in regular grids, local information flow",
"Recurrent Networks (e.g., language): data in ordered sequences, sequential information flow",
"Graph Networks (e.g., molecules): fixed graph structure, information flows along fixed edges",
"Attention / Transformer: unordered sets, information flow dynamically controlled via keys and queries",
"AlphaFold 1 used graph networks; AlphaFold 2 uses attention with triangular biasing",
]);
// ============================
// SLIDE 11: Protein Knowledge in Model
// ============================
addContentSlide(pres, "Building Protein Knowledge Into the Model", [
"Physical and geometric insights are built into the network architecture itself",
"Inductive biases reflect our knowledge of protein physics and geometry",
"Sequence positions are de-emphasized in favor of spatial proximity",
"Residues that are close in 3D space need to communicate with each other",
"The model iteratively learns a graph of which residues are spatially close",
"Reasoning over this implicit spatial graph as it is being built",
]);
// ============================
// SLIDE 12: Evolution & Structure
// ============================
addContentSlide(pres, "Determining Structure from Evolution", [
"Evolutionary history encodes structural information",
"Protein sequence → evolutionary conservation → structural constraints",
"Mutations that preserve function reveal which amino acids are important",
"Co-evolution: two residues that are in spatial contact must mutate together",
"If one residue at a contact mutates, the partner must also mutate to maintain the interaction",
"This co-evolutionary signal is captured in a Multiple Sequence Alignment (MSA)",
]);
// ============================
// SLIDE 13: Co-Evolution Intuition
// ============================
addContentSlide(pres, "Co-Evolution: Key Intuition", [
"Search a large genetic database for sequences similar to the query protein",
"Build a Multiple Sequence Alignment (MSA) across hundreds/thousands of related sequences",
"Co-evolution: residues in spatial contact must mutate together to preserve interaction",
"Evolution conserves chemical properties: hydrophobic amino acids on 'inside', hydrophilic on 'outside'",
"Statistical analysis of the MSA reveals which pairs of positions co-vary",
"These co-varying pairs are likely to be spatially adjacent in 3D structure",
]);
// ============================
// SLIDE 14: Network Architecture
// ============================
addContentSlide(pres, "AlphaFold 2 Network Architecture", [
"INPUT: Amino acid sequence + Multiple Sequence Alignment (MSA) + structural templates",
"MSA Representation: encodes evolutionary co-variation signals (48 blocks of Evoformer)",
"Pair Representation: encodes pairwise relationships between residue pairs",
"Evoformer: jointly updates MSA and pair representations over 48 blocks",
"Structure Module (8 blocks): converts pair representation into 3D coordinates",
"Structure Module predicts a rotation + translation to place each residue (backbone)",
"A small sub-network predicts side chain torsion (chi) angles",
"Final structure is passed through a physical relaxation process",
]);
// ============================
// SLIDE 15: Recycling
// ============================
addContentSlide(pres, "Recycling: Iterative Refinement", [
"Key trick: feeding certain outputs back through the network again",
"The network runs 3 recycling iterations by default",
"Each pass refines the predicted structure based on the previous prediction",
"Similar to how a human expert might iteratively refine a model",
"Recycling significantly improves prediction accuracy",
"Part of a set of design choices where no single change dominates - all parts matter",
]);
// ============================
// SLIDE 16: Model Outputs
// ============================
addTwoColSlide(pres,
"AlphaFold Outputs: Structure + Confidence",
[
"Primary output: predicted 3D atomic coordinates",
"Per-residue confidence: pLDDT (0-100 scale)",
"pLDDT > 90: high confidence, examine side chains",
"pLDDT 70-90: good backbone accuracy",
"pLDDT < 50: likely disordered region",
],
[
"Pairwise confidence: Predicted Aligned Error (PAE)",
"PAE is a 2D plot showing inter-residue confidence",
"Low PAE in off-diagonal blocks = confident inter-domain placement",
"High pLDDT across domains does NOT imply confident relative positioning",
"PAE is the metric for assessing inter-domain confidence",
]
);
// ============================
// SLIDE 17: Ablation Study
// ============================
addContentSlide(pres, "Which Parts Mattered? All of Them.", [
"Ablation studies tested removing individual components",
"No single improvement dominates - all components interact synergistically",
"Removing templates, distogram heads, MSA, triangular attention all hurt performance",
"Removing IPA (Invariant Point Attention): significant accuracy drop",
"Removing recycling: significant accuracy drop",
"Key insight: physical and geometric inductive biases built into every layer",
"The methodology of encoding protein intuition into the model was the core innovation",
]);
// ============================
// SLIDE 18: Evoformer
// ============================
addContentSlide(pres, "Evoformer: The Core Architecture Block", [
"Evoformer jointly processes MSA representation and residue pair representation",
"Uses standard attention mechanisms across sequence rows and columns of the MSA",
"Adds Triangular Attention: a specialized attention that uses triangle inequality constraints",
"Triangular updates for pair representation: outgoing edges and incoming edges",
"Triangular multiplicative updates enforce geometric consistency",
"48 Evoformer blocks stack to build a deep representation of protein geometry",
]);
// ============================
// SLIDE 19: Triangular Attention
// ============================
addContentSlide(pres, "Triangular Attention: Geometric Reasoning", [
"Key insight: protein geometry satisfies the triangle inequality",
"Take 3 residues A, B, C in 3D space",
"If distance A-B and distance B-C are known → strong constraint on A-C",
"Pair embedding encodes pairwise relations between residues",
"Evolution and sequence data give information about relations between residue pairs",
"Update for pair A-C should depend on pairs B-C and A-B (via all triangles containing that edge)",
"Encodes transitivity: if A is close to B and B is close to C, A and C are likely close",
]);
// ============================
// SLIDE 20: Graph Inference
// ============================
addContentSlide(pres, "Graph Inference and Transitivity", [
"The 3D contact graph of a protein is not known in advance - it must be inferred",
"Edges in the graph = pairs of residues that may be spatially close",
"Each edge update considers all cycles (triangles) involving that edge",
"This encodes a transitivity inductive bias in the pair representations",
"Similar to loop closure in robotics / SLAM",
"Triangle inequality: if A-B close and B-C close, the distance A-C is bounded",
"Iterative refinement of the graph as the model builds a picture of 3D structure",
]);
// ============================
// SLIDE 21: Structure Module
// ============================
addContentSlide(pres, "Structure Module: 3D Coordinate Prediction", [
"End-to-end structure prediction instead of gradient descent optimization",
"Protein backbone modeled as a 'gas of 3D rigid bodies' (one per residue)",
"3D equivariant transformer architecture updates the rigid body frames",
"Equivariant: predictions rotate/translate correctly when the input is rotated/translated",
"Invariant Point Attention (IPA): attention that is equivariant to 3D transformations",
"8 Structure Module blocks refine the backbone rigid body placements",
"Side chains are predicted from backbone torsion (chi) angles",
]);
// ============================
// SLIDE 22: Noisy Student Distillation
// ============================
addContentSlide(pres, "Noisy Student Distillation: Using Unlabeled Data", [
"AlphaFold uses unlabeled protein sequences to improve training",
"Step 1: Train AlphaFold on PDB experimental structure data only",
"Step 2: Use trained model to predict structures on a large set of unlabeled sequences",
"Step 3: Train a second model where training set is enriched with confidently predicted structures",
"Only high-confidence predictions from step 1 are used as 'pseudo-labels'",
"Based on: Xie et al. 'Self-training with noisy student improves ImageNet classification' (CVPR 2020)",
"This semi-supervised approach significantly improves generalization",
]);
// ============================
// SLIDE 23: Section - Interpreting Predictions
// ============================
addSectionSlide(pres, "How to Interpret\nAlphaFold Predictions", "Understanding pLDDT and Predicted Aligned Error");
// ============================
// SLIDE 24: Biological Context
// ============================
addContentSlide(pres, "Biological Context and Limitations", [
"Computational structure prediction is typically underspecified",
"Missing context includes: oligomeric state, bound ligands, DNA-binding, experimental conditions, conformational ensembles",
"The AlphaFold network implicitly models some of this missing context",
"Uses both physical and evolutionary information to fill gaps",
"Example: T1056 (zinc-binding, 98.2 GDT) - correctly places zinc coordination without explicit zinc input",
"Example: T1080 (trimer, 85.9 GDT) - AlphaFold predicts monomer, 3x structure matches experiment",
]);
// ============================
// SLIDE 25: pLDDT Confidence
// ============================
addContentSlide(pres, "Understanding pLDDT: Per-Residue Confidence", [
"pLDDT = predicted Local Distance Difference Test (per residue, 0-100 scale)",
"pLDDT > 90: Very high confidence - reasonable to examine side chains and active site details",
"pLDDT 70-90: Good confidence - backbone is likely accurate, some uncertainty in side chains",
"pLDDT 50-70: Low confidence - treat with caution, large conformational uncertainty",
"pLDDT < 50: Likely disordered - AlphaFold is flagging disorder, NOT making a structure prediction",
"Disordered regions are biologically important! Low pLDDT ≠ wrong, it means 'no fixed structure'",
"Use pLDDT to identify confident domains vs. flexible linkers",
]);
// ============================
// SLIDE 26: PAE
// ============================
addContentSlide(pres, "Predicted Aligned Error (PAE): Inter-Domain Confidence", [
"PAE is a 2D plot: x-axis = scored residue, y-axis = aligned residue",
"Color at (x, y) = AlphaFold's predicted position error at residue x, when residue y is aligned to truth",
"Low PAE (green) within a block = confident relative positions within that domain",
"High PAE (red/yellow) between blocks = uncertain relative domain positioning",
"Key rule: High pLDDT on all domains does NOT mean AlphaFold is confident of their relative arrangement",
"Always use PAE to assess inter-domain and inter-chain confidence",
"PAE is especially important for multi-domain proteins and complexes",
]);
// ============================
// SLIDE 27: Accessing AlphaFold Section
// ============================
addSectionSlide(pres, "Accessing AlphaFold", "Database, Colab, and Open Source Code");
// ============================
// SLIDE 28: AlphaFold DB
// ============================
addContentSlide(pres, "AlphaFold Protein Structure Database", [
"Website developed and hosted by EMBL-EBI: alphafold.ebi.ac.uk",
"Launch: predictions for 20 model organisms + complete human proteome (~350,000 structures)",
"January 2022 update: +27 additional model organisms (~190,000 new structures)",
"Future plan: expand to UniRef90 (~100 million protein structures)",
"Freely accessible to the global research community",
"Download structures in mmCIF and PDB format with pLDDT and PAE data",
]);
// ============================
// SLIDE 29: AlphaFold Colab
// ============================
addContentSlide(pres, "AlphaFold Colab: Run in the Cloud", [
"A Colab is a website hosting a pre-written Python program (Google Colaboratory)",
"Code executes on a cloud machine - no local installation needed",
"Most user-friendly way to run structure prediction on a custom sequence",
"Steps: Enter amino acid sequence → run each cell → download predicted structure",
"Several community-developed Colabs available (ColabFold, etc.)",
"ColabFold (Mirdita et al.) is 40-60x faster than the original AlphaFold by using MMseqs2 for MSA",
]);
// ============================
// SLIDE 30: Open Source
// ============================
addContentSlide(pres, "Open Source Code: Run AlphaFold Locally", [
"Full source code available at: github.com/deepmind/alphafold",
"Most dependencies are bundled in a Docker container for easy setup",
"You must separately download: genetics databases, structural templates, and trained model weights",
"Databases are large (~2.2 TB) - requires significant disk space and compute",
"Supports both CPU and GPU inference (GPU strongly recommended)",
"Command: python3 docker/run_docker.py --fasta_paths=protein.fasta",
]);
// ============================
// SLIDE 31: Biology Community Section
// ============================
addSectionSlide(pres, "AlphaFold and the\nBiology Community", "Real-world impact on structural biology research");
// ============================
// SLIDE 32: Accelerating Research
// ============================
addContentSlide(pres, "Accelerating Structural Biology", [
"AlphaFold 2 predictions have been used as starting models in X-ray crystallography (molecular replacement)",
"Successfully integrated as search models into cryo-EM density map fitting workflows",
"Akdel et al. (biorxiv 2021): community assessment of AlphaFold 2 applications",
"Quote: 'The availability of high-quality structure predictions has reduced an extremely challenging, near-intractable structure solution into a straightforward task.'",
"Predictions have corrected errors in existing experimental models in the PDB",
"Helped place previously unmodeled domains with high confidence (mean pLDDT > 83)",
]);
// ============================
// SLIDE 33: Future Work
// ============================
addTwoColSlide(pres,
"Future Work and Directions",
[
"In Structural Biology:",
"AlphaFold-Multimer for protein complexes",
"Intrinsically disordered proteins",
"Conformational changes and dynamics",
"Effect of mutations on structure",
"Expanding the AlphaFold DB to ~100M structures",
],
[
"In AI for Science:",
"AlphaFold as a template for highly optimized ML for science",
"AI as the ultimate tool to help scientists see farther",
"Building on AlphaFold: AlphaFold 3 (nucleic acids + small molecules)",
"RoseTTAFold, ESMFold, and the broader structural AI ecosystem",
"Transforming drug discovery, synthetic biology, and medicine",
]
);
// ============================
// SLIDE 34: AlphaFold Interactions Section
// ============================
addSectionSlide(pres, "AlphaFold Protein\nInteractions", "Understanding and predicting protein complexes");
// ============================
// SLIDE 35: Protein Interactions
// ============================
addContentSlide(pres, "AlphaFold for Protein-Protein Interactions", [
"Most biological processes involve proteins acting in complexes, not in isolation",
"AlphaFold-Multimer extends AlphaFold 2 to predict multi-chain assemblies",
"Co-MSA approach: MSAs from interacting proteins are paired to capture interface co-evolution",
"Predicts both the structures of individual chains AND their relative arrangement",
"PAE is the primary metric for assessing interface and inter-chain confidence",
"Enables prediction of protein-protein binding interfaces for drug target design",
"Community tools: AlphaFold2-multimer available on ColabFold",
]);
// ============================
// SLIDE 36: Thank You / Credits
// ============================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 5.625, fill: { color: C.dark } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.06, fill: { color: C.accent1 } });
slide.addShape(pres.ShapeType.rect, { x: 0, y: 5.56, w: 10, h: 0.06, fill: { color: C.accent2 } });
slide.addText("Thank You", {
x: 0.5, y: 0.4, w: 9, h: 0.9,
fontSize: 32, fontFace: "Calibri", color: C.white,
bold: true, align: "center"
});
slide.addText("AlphaFold was made possible by the entire DeepMind team and the broader scientific community", {
x: 0.5, y: 1.2, w: 9, h: 0.5,
fontSize: 12, fontFace: "Calibri", color: C.lightgray,
align: "center", italic: true
});
// Two columns of names
const leftNames = "John Jumper | David Silver | Demis Hassabis | Andrew Senior | Richard Evans\nOriol Vinyals | Alex Pritzel | Kathryn Tunyasuvunakool | Russ Bates | Ewan Birney";
const rightNames = "Michal Zielinski | Martin Steinegger | Olaf Ronneberger | Bernardino Romera-Paredes\nPushmeet Kohli | Koray Kavukcuoglu | Jonas Adler | Alex Bridgland | Anna Potapenko";
slide.addShape(pres.ShapeType.rect, { x: 0.4, y: 1.85, w: 9.2, h: 2.1, fill: { color: C.cardBg }, line: { color: C.divider, width: 1 } });
slide.addText(leftNames, {
x: 0.6, y: 1.95, w: 4.2, h: 2.0,
fontSize: 9, fontFace: "Calibri", color: C.subtext,
align: "left", valign: "top"
});
slide.addText(rightNames, {
x: 5.0, y: 1.95, w: 4.4, h: 2.0,
fontSize: 9, fontFace: "Calibri", color: C.subtext,
align: "left", valign: "top"
});
slide.addText("The wider team at DeepMind and EMBL-EBI | The CASP community | The experimental biology community", {
x: 0.5, y: 4.1, w: 9, h: 0.4,
fontSize: 10, fontFace: "Calibri", color: C.accent1,
align: "center", bold: true
});
slide.addText("alphafold.ebi.ac.uk | github.com/deepmind/alphafold | deepmind.com", {
x: 0.5, y: 4.7, w: 9, h: 0.35,
fontSize: 11, fontFace: "Calibri", color: C.lightgray,
align: "center"
});
}
// ============================
// WRITE FILE
// ============================
pres.writeFile({ fileName: "/home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx" })
.then(() => console.log("SUCCESS: AlphaFold_Presentation.pptx created"))
.catch(err => console.error("ERROR:", err));
cd /home/daytona/workspace/alphafold-ppt && node create_ppt.js 2>&1
ls -lh /home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx
AlphaFold Presentation
Presentation · PPTX
#0A1628) as the dominant color#00C4CC) for highlights and bullets#6C63FF)#FF6B6B) for emphasisthis file can't open
cd /home/daytona/workspace/alphafold-ppt && node -e " const pptxgen = require('pptxgenjs'); let pres = new pptxgen(); let slide = pres.addSlide(); slide.addText('Test', { x: 1, y: 1, fontSize: 24, color: 'FFFFFF' }); pres.writeFile({ fileName: 'test.pptx' }).then(() => console.log('OK')).catch(e => console.error(e)); "
# Check if file is valid zip/pptx file /home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx python3 -c " import zipfile try: with zipfile.ZipFile('/home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx') as z: names = z.namelist() print('Valid ZIP. Files:', len(names)) print(names[:10]) except Exception as e: print('ERROR:', e) "
python3 -c " import zipfile from lxml import etree path = '/home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx' errors = [] with zipfile.ZipFile(path) as z: for name in z.namelist(): if name.endswith('.xml') or name.endswith('.rels'): try: data = z.read(name) etree.fromstring(data) except Exception as e: errors.append((name, str(e))) if errors: for name, err in errors: print('BAD:', name, '->', err[:120]) else: print('All XML files are valid.') "
python3 -c " import zipfile import xml.etree.ElementTree as ET path = '/home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx' errors = [] with zipfile.ZipFile(path) as z: for name in z.namelist(): if name.endswith('.xml') or name.endswith('.rels'): try: data = z.read(name) ET.fromstring(data) except Exception as e: errors.append((name, str(e))) if errors: for name, err in errors: print('BAD:', name, '->', err[:200]) else: print('All XML files are valid.') "
# Try converting to pdf with LibreOffice to see if it opens libreoffice --headless --convert-to pdf /home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx --outdir /home/daytona/workspace/alphafold-ppt/ 2>&1 | tail -20
# Try with a temp output directory that is definitely writable mkdir -p /tmp/pptout libreoffice --headless --convert-to pptx /home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pptx --outdir /tmp/pptout/ 2>&1 echo "Exit: $?" ls -lh /tmp/pptout/
cp /tmp/pptout/AlphaFold_Presentation.pptx /home/daytona/workspace/alphafold-ppt/AlphaFold_Fixed.pptx ls -lh /home/daytona/workspace/alphafold-ppt/AlphaFold_Fixed.pptx
AlphaFold Fixed
Presentation · PPTX
Export to PDF for sharing
libreoffice --headless --convert-to pdf /home/daytona/workspace/alphafold-ppt/AlphaFold_Fixed.pptx --outdir /home/daytona/workspace/alphafold-ppt/ 2>&1 ls -lh /home/daytona/workspace/alphafold-ppt/AlphaFold_Fixed.pdf
# Output to /tmp first (known writable), then copy libreoffice --headless --convert-to pdf /home/daytona/workspace/alphafold-ppt/AlphaFold_Fixed.pptx --outdir /tmp/pptout/ 2>&1 echo "Exit: $?" ls -lh /tmp/pptout/ cp /tmp/pptout/AlphaFold_Fixed.pdf /home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pdf ls -lh /home/daytona/workspace/alphafold-ppt/AlphaFold_Presentation.pdf
AlphaFold Presentation
PDF Document · PDF
Search for the latest AlphaFold 3 research papers on PubMedd protein structure so i can add in ppt and it is rotable
AlphaFold 3 protein structure prediction
AlphaFold protein structure deep learning 2024 2025
PMID: 39092344
PMID: 39369244
AlphaFold 3 Abramson diffusion model biomolecular
AlphaFold3 unified diffusion biomolecular structure
AlphaFold drug discovery protein interaction 2024 2025
PMID: 39643640
PMID: 39584560
~/alphafold-ppt/add_research_slide.js
const pptxgen = require("pptxgenjs");
const fs = require("fs");
// We'll create a standalone "Latest Research" presentation
// then the user can copy the slide into their main deck,
// OR we rebuild the full deck with this new slide appended.
// Re-use the same theme colors
const C = {
dark: "0A1628",
mid: "0D2240",
accent1: "00C4CC",
accent2: "6C63FF",
accent3: "FF6B6B",
white: "FFFFFF",
lightgray:"C8D8E8",
subtext: "8EA8C3",
cardBg: "112040",
divider: "1E3A60",
gold: "FFD166",
};
let pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
pres.title = 'AlphaFold 3 - Latest Research 2024-2025';
// ==========================================
// SLIDE 1: Section Divider
// ==========================================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.dark }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:0.08, h:5.625, fill:{ color: C.accent1 }});
slide.addShape(pres.ShapeType.rect, { x:7, y:0, w:3, h:5.625, fill:{ color: C.cardBg }});
slide.addShape(pres.ShapeType.rect, { x:6.5, y:0, w:0.08, h:5.625, fill:{ color: C.accent2 }});
// Nobel Prize badge in right panel
slide.addShape(pres.ShapeType.ellipse, { x:7.3, y:0.7, w:2.2, h:2.2, fill:{ color: C.gold }, line:{ color: "E8B800", width:2 }});
slide.addText("Nobel\nPrize\n2024", {
x:7.3, y:0.85, w:2.2, h:2.0,
fontSize:16, fontFace:"Calibri", color:"0A1628",
bold:true, align:"center", valign:"middle"
});
slide.addText("Chemistry", {
x:7.3, y:2.7, w:2.2, h:0.4,
fontSize:11, fontFace:"Calibri", color: C.gold,
bold:true, align:"center"
});
slide.addText("AlphaFold 3", {
x:0.5, y:1.0, w:5.8, h:1.0,
fontSize:42, fontFace:"Calibri", color: C.white, bold:true
});
slide.addText("Latest Research & Breakthroughs", {
x:0.5, y:2.05, w:5.8, h:0.55,
fontSize:18, fontFace:"Calibri", color: C.accent1
});
slide.addShape(pres.ShapeType.rect, { x:0.5, y:2.7, w:3.0, h:0.04, fill:{ color: C.accent1 }});
slide.addText("2024 - 2025 | PubMed Sourced", {
x:0.5, y:2.85, w:5.8, h:0.4,
fontSize:12, fontFace:"Calibri", color: C.subtext
});
}
// ==========================================
// SLIDE 2: What is AlphaFold 3?
// ==========================================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.mid }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.06, fill:{ color: C.accent1 }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:10, h:0.75, fill:{ color: C.cardBg }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:0.08, h:0.75, fill:{ color: C.gold }});
slide.addText("What is AlphaFold 3?", {
x:0.25, y:0.1, w:9.3, h:0.65,
fontSize:20, fontFace:"Calibri", color: C.white, bold:true, margin:0
});
// Two columns
slide.addShape(pres.ShapeType.rect, { x:0.4, y:1.05, w:4.3, h:4.2, fill:{ color: C.cardBg }, line:{ color: C.divider, width:1 }});
slide.addShape(pres.ShapeType.rect, { x:5.0, y:1.05, w:4.7, h:4.2, fill:{ color: C.cardBg }, line:{ color: C.divider, width:1 }});
slide.addText("AlphaFold 2 (2020)", {
x:0.55, y:1.15, w:4.0, h:0.4,
fontSize:13, fontFace:"Calibri", color: C.accent1, bold:true
});
const af2Points = [
"Proteins only",
"Evoformer + Structure Module",
"MSA-based co-evolution",
"Solved CASP14 protein folding",
"92.4 GDT median on CASP14",
];
slide.addText(af2Points.map((b,i) => ({
text: b,
options:{ bullet:{ code:'25B8', color: C.accent1 }, color: C.lightgray, fontSize:12, fontFace:"Calibri", breakLine: i<af2Points.length-1, paraSpaceBefore:5 }
})), { x:0.55, y:1.6, w:4.0, h:3.4, align:"left", valign:"top" });
slide.addText("AlphaFold 3 (2024)", {
x:5.15, y:1.15, w:4.3, h:0.4,
fontSize:13, fontFace:"Calibri", color: C.gold, bold:true
});
const af3Points = [
"Proteins + DNA + RNA + small molecules + ions",
"Diffusion-based architecture (like DALL-E for molecules)",
"Predicts full biomolecular complexes",
"50% more accurate than AlphaFold 2 for interactions",
"Available via AlphaFold Server (alphafoldserver.com)",
"Nobel Prize in Chemistry 2024: Hassabis & Jumper",
];
slide.addText(af3Points.map((b,i) => ({
text: b,
options:{ bullet:{ code:'25B8', color: C.gold }, color: C.lightgray, fontSize:12, fontFace:"Calibri", breakLine: i<af3Points.length-1, paraSpaceBefore:5 }
})), { x:5.15, y:1.6, w:4.3, h:3.4, align:"left", valign:"top" });
}
// ==========================================
// SLIDE 3: Nobel Prize + Drug Design Review
// ==========================================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.mid }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.06, fill:{ color: C.gold }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:10, h:0.75, fill:{ color: C.cardBg }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:0.08, h:0.75, fill:{ color: C.gold }});
slide.addText("AlphaFold 3: Advances in Drug Design (Desai et al., 2024)", {
x:0.25, y:0.1, w:9.3, h:0.65,
fontSize:17, fontFace:"Calibri", color: C.white, bold:true, margin:0
});
// Citation card
slide.addShape(pres.ShapeType.rect, { x:0.4, y:1.0, w:9.2, h:0.55, fill:{ color: "1A3050" }, line:{ color: C.gold, width:1 }});
slide.addText("Desai D, Kantliwala SV et al. | Cureus, Jul 2024 | PMID: 39092344 | PMC: PMC11292590", {
x:0.55, y:1.07, w:8.8, h:0.38,
fontSize:10, fontFace:"Calibri", color: C.gold, italic:true
});
const bullets = [
"AlphaFold 3 is superior in accuracy and speed compared to AlphaFold 2",
"Predicts protein structure in seconds vs. months of experimental work",
"Uses deep learning models similar to Gemini (Google DeepMind)",
"Key applications: drug discovery, vaccine design, enzyme engineering, receptor modulation",
"Provides insights into structural dynamics of proteins and their molecular interactions",
"Integration with rigorous validation is driving a new era of computational biochemistry",
"Positioned as a turning point for biomolecular development and drug target identification",
];
slide.addText(bullets.map((b,i) => ({
text: b,
options:{ bullet:{ code:'25B8', color: C.accent1 }, color: C.lightgray, fontSize:13, fontFace:"Calibri", breakLine: i<bullets.length-1, paraSpaceBefore:5 }
})), { x:0.4, y:1.65, w:9.2, h:3.7, align:"left", valign:"top" });
}
// ==========================================
// SLIDE 4: AlphaFold3 vs GPCR Structures
// ==========================================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.mid }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.06, fill:{ color: C.accent1 }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:10, h:0.75, fill:{ color: C.cardBg }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:0.08, h:0.75, fill:{ color: C.accent2 }});
slide.addText("AlphaFold3 vs. Experimental GPCR Structures (He et al., 2025)", {
x:0.25, y:0.1, w:9.3, h:0.65,
fontSize:17, fontFace:"Calibri", color: C.white, bold:true, margin:0
});
slide.addShape(pres.ShapeType.rect, { x:0.4, y:1.0, w:9.2, h:0.55, fill:{ color:"1A3050" }, line:{ color: C.accent1, width:1 }});
slide.addText("He XH, Li JR et al. | Acta Pharmacol Sin, Apr 2025 | PMID: 39643640 | DOI: 10.1038/s41401-024-01429-y", {
x:0.55, y:1.07, w:8.8, h:0.38,
fontSize:10, fontFace:"Calibri", color: C.accent1, italic:true
});
// Left: strengths. Right: limitations
slide.addText("Strengths", {
x:0.4, y:1.7, w:4.4, h:0.35,
fontSize:13, fontFace:"Calibri", color: C.accent1, bold:true
});
const strengths = [
"Improved GPCR backbone architecture vs. AlphaFold 2",
"Better prediction of overall receptor fold and transmembrane helices",
"Handles diverse ligand types (ions, peptides, small molecules, proteins)",
"Useful as an initial scaffold for structure-based drug design",
];
slide.addText(strengths.map((b,i) => ({
text: b,
options:{ bullet:{ code:'2713', color: C.accent1 }, color: C.lightgray, fontSize:12, fontFace:"Calibri", breakLine: i<strengths.length-1, paraSpaceBefore:5 }
})), { x:0.4, y:2.1, w:4.4, h:3.2, align:"left", valign:"top" });
slide.addShape(pres.ShapeType.rect, { x:5.0, y:1.7, w:0.03, h:3.6, fill:{ color: C.divider }});
slide.addText("Limitations", {
x:5.2, y:1.7, w:4.4, h:0.35,
fontSize:13, fontFace:"Calibri", color: C.accent3, bold:true
});
const limits = [
"Significant discrepancies persist in ligand-binding poses",
"Particularly poor for ion, peptide, and protein ligand orientations",
"Binding pocket geometry deviations limit direct use in drug docking",
"Experimental structure determination remains necessary for high-res drug design",
"Further refinement needed for protein-ligand interaction predictions",
];
slide.addText(limits.map((b,i) => ({
text: b,
options:{ bullet:{ code:'2717', color: C.accent3 }, color: C.lightgray, fontSize:12, fontFace:"Calibri", breakLine: i<limits.length-1, paraSpaceBefore:5 }
})), { x:5.2, y:2.1, w:4.4, h:3.2, align:"left", valign:"top" });
}
// ==========================================
// SLIDE 5: Nobel Prize + Protein Design
// ==========================================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.mid }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.06, fill:{ color: C.gold }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:10, h:0.75, fill:{ color: C.cardBg }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:0.08, h:0.75, fill:{ color: C.gold }});
slide.addText("Nobel Prize 2024: Protein Design & AlphaFold (Buller et al., 2025)", {
x:0.25, y:0.1, w:9.3, h:0.65,
fontSize:17, fontFace:"Calibri", color: C.white, bold:true, margin:0
});
slide.addShape(pres.ShapeType.rect, { x:0.4, y:1.0, w:9.2, h:0.55, fill:{ color:"1A3050" }, line:{ color: C.gold, width:1 }});
slide.addText("Buller R, Damborsky J et al. | Angew Chem Int Ed, Jan 2025 | PMID: 39584560 | DOI: 10.1002/anie.202421686", {
x:0.55, y:1.07, w:8.8, h:0.38,
fontSize:10, fontFace:"Calibri", color: C.gold, italic:true
});
const bullets = [
"Nobel Prize in Chemistry 2024: David Baker (protein design) + Demis Hassabis & John Jumper (AlphaFold)",
"AlphaFold has fundamentally changed how scientists research and engineer proteins",
"The wealth of predicted structures has advanced our understanding of life's molecules",
"Any therapeutic protein target can now be modelled computationally",
"Enables de novo design of peptide binders targeting previously undruggable proteins",
"In silico docking of large compound libraries against AlphaFold structures accelerates drug discovery",
"Future directions: protein engineering, medicinal chemistry, material design, synthetic biology",
];
slide.addText(bullets.map((b,i) => ({
text: b,
options:{ bullet:{ code:'25B8', color: C.gold }, color: C.lightgray, fontSize:12.5, fontFace:"Calibri", breakLine: i<bullets.length-1, paraSpaceBefore:6 }
})), { x:0.4, y:1.65, w:9.2, h:3.7, align:"left", valign:"top" });
}
// ==========================================
// SLIDE 6: Research Landscape & Trends
// ==========================================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.mid }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.06, fill:{ color: C.accent2 }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:10, h:0.75, fill:{ color: C.cardBg }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0.06, w:0.08, h:0.75, fill:{ color: C.accent2 }});
slide.addText("AlphaFold Research Landscape 2024-2025 (Guo et al., 2024)", {
x:0.25, y:0.1, w:9.3, h:0.65,
fontSize:17, fontFace:"Calibri", color: C.white, bold:true, margin:0
});
slide.addShape(pres.ShapeType.rect, { x:0.4, y:1.0, w:9.2, h:0.55, fill:{ color:"1A3050" }, line:{ color: C.accent2, width:1 }});
slide.addText("Guo SB, Meng Y et al. | Mol Cancer, Oct 2024 | PMID: 39369244 | Annual Growth Rate: 180.13%", {
x:0.55, y:1.07, w:8.8, h:0.38,
fontSize:10, fontFace:"Calibri", color: C.accent2, italic:true
});
// Stat boxes
const stats = [
{ val:"180%", label:"Annual Growth\nRate in Publications" },
{ val:"33%", label:"International\nCo-authorship Rate" },
{ val:"48.4", label:"Avg Citations per\nTop Cluster Paper" },
{ val:"383+", label:"AF3 Papers\n(Jun 2024-Jun 2025)" },
];
stats.forEach((s, i) => {
const x = 0.35 + i * 2.35;
slide.addShape(pres.ShapeType.rect, { x, y:1.7, w:2.1, h:1.4, fill:{ color: C.cardBg }, line:{ color: C.accent2, width:1 }});
slide.addText(s.val, { x, y:1.8, w:2.1, h:0.65, fontSize:26, fontFace:"Calibri", color: C.accent1, bold:true, align:"center" });
slide.addText(s.label, { x, y:2.45, w:2.1, h:0.6, fontSize:10, fontFace:"Calibri", color: C.subtext, align:"center" });
});
slide.addText("Key Research Hotspots (2024-2025):", {
x:0.4, y:3.25, w:9.2, h:0.35,
fontSize:13, fontFace:"Calibri", color: C.accent2, bold:true
});
const hotspots = [
{ text:"Structure Prediction + AI (Relevance: 100%, Growth slope: 12.4)", color: C.accent1 },
{ text:"SARS-CoV-2 / COVID-19 / Vaccine Design (Relevance: 97.8%)", color: C.accent3 },
{ text:"Homology Modeling + Virtual Screening + Membrane Proteins (Relevance: 89.9%)", color: C.gold },
{ text:"Drug Discovery + Molecular Dynamics (Emerging frontier, underexplored)", color: C.lightgray },
];
slide.addText(hotspots.map((h,i) => ({
text: h.text,
options:{ bullet:{ code:'25CF', color: h.color }, color: h.color, fontSize:12, fontFace:"Calibri", breakLine: i<hotspots.length-1, paraSpaceBefore:6 }
})), { x:0.4, y:3.6, w:9.2, h:1.8, align:"left", valign:"top" });
}
// ==========================================
// SLIDE 7: Key References Summary
// ==========================================
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:5.625, fill:{ color: C.dark }});
slide.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.06, fill:{ color: C.accent1 }});
slide.addShape(pres.ShapeType.rect, { x:0, y:5.56, w:10, h:0.06, fill:{ color: C.accent2 }});
slide.addText("Key References: AlphaFold 3 Research (PubMed 2024-2025)", {
x:0.4, y:0.15, w:9.2, h:0.55,
fontSize:16, fontFace:"Calibri", color: C.white, bold:true, align:"center"
});
const refs = [
{
num:"1",
color: C.gold,
cite:"Desai D et al. (2024). Review of AlphaFold 3: Transformative Advances in Drug Design and Therapeutics. Cureus. PMID: 39092344"
},
{
num:"2",
color: C.accent1,
cite:"He XH et al. (2025). AlphaFold3 versus experimental structures: assessment of the accuracy in ligand-bound G protein-coupled receptors. Acta Pharmacol Sin. PMID: 39643640"
},
{
num:"3",
color: C.accent2,
cite:"Buller R et al. (2025). Structure Prediction and Computational Protein Design for Efficient Biocatalysts and Bioactive Proteins. Angew Chem Int Ed. PMID: 39584560"
},
{
num:"4",
color: C.accent3,
cite:"Guo SB et al. (2024). Artificial intelligence alphafold model for molecular biology and drug discovery: a machine-learning-driven informatics investigation. Mol Cancer. PMID: 39369244"
},
{
num:"5",
color: C.subtext,
cite:"Nobel Prize in Chemistry 2024: David Baker (protein design) + Demis Hassabis & John Jumper (AlphaFold). Royal Swedish Academy of Sciences."
},
];
refs.forEach((r, i) => {
const y = 0.85 + i * 0.88;
slide.addShape(pres.ShapeType.rect, { x:0.35, y, w:9.3, h:0.76, fill:{ color: C.cardBg }, line:{ color: r.color, width:1 }});
slide.addShape(pres.ShapeType.rect, { x:0.35, y, w:0.45, h:0.76, fill:{ color: r.color }});
slide.addText(r.num, { x:0.35, y, w:0.45, h:0.76, fontSize:14, fontFace:"Calibri", color: C.dark, bold:true, align:"center", valign:"middle" });
slide.addText(r.cite, { x:0.9, y: y+0.07, w:8.6, h:0.62, fontSize:10.5, fontFace:"Calibri", color: C.lightgray, align:"left", valign:"middle" });
});
}
// ==========================================
// WRITE FILE
// ==========================================
pres.writeFile({ fileName: "/home/daytona/workspace/alphafold-ppt/AlphaFold3_Research.pptx" })
.then(() => console.log("SUCCESS: AlphaFold3_Research.pptx created"))
.catch(err => console.error("ERROR:", err));
cd /home/daytona/workspace/alphafold-ppt && node add_research_slide.js 2>&1
~/alphafold-ppt/merge_pptx.py
"""
Merge AlphaFold3_Research.pptx slides into AlphaFold_Fixed.pptx
and add a spin/rotate animation to a protein diagram shape on the new section slide.
"""
from pptx import Presentation
from pptx.util import Inches, Pt, Emu
from pptx.oxml.ns import qn
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from lxml import etree
import copy, zipfile, shutil, os
BASE = "/home/daytona/workspace/alphafold-ppt"
MAIN = f"{BASE}/AlphaFold_Fixed.pptx"
NEW = f"{BASE}/AlphaFold3_Research.pptx"
OUT = f"{BASE}/AlphaFold_Complete.pptx"
# --- Merge slides ---
main_prs = Presentation(MAIN)
new_prs = Presentation(NEW)
def copy_slide(source_prs, source_slide, target_prs):
"""Copy a slide from source to target presentation."""
# Add a blank slide using the first layout
slide_layout = target_prs.slide_layouts[6] # blank layout
new_slide = target_prs.slides.add_slide(slide_layout)
# Copy slide XML
template_xml = new_slide._element
source_xml = source_slide._element
# Remove all children from the new slide's spTree
sp_tree = new_slide.shapes._spTree
for child in list(sp_tree):
sp_tree.remove(child)
# Copy all children from source spTree
source_sp_tree = source_slide.shapes._spTree
for child in source_sp_tree:
sp_tree.append(copy.deepcopy(child))
# Copy slide background if any
if source_slide._element.find(qn('p:bg')) is not None:
bg = copy.deepcopy(source_slide._element.find(qn('p:bg')))
new_slide._element.insert(2, bg)
return new_slide
print(f"Main prs: {len(main_prs.slides)} slides")
print(f"New prs: {len(new_prs.slides)} slides")
for i, slide in enumerate(new_prs.slides):
copy_slide(new_prs, slide, main_prs)
print(f" Copied research slide {i+1}")
print(f"Total after merge: {len(main_prs.slides)} slides")
main_prs.save(OUT)
print(f"Saved to {OUT}")
python3 /home/daytona/workspace/alphafold-ppt/merge_pptx.py 2>&1
# python-pptx not available - merge via raw zip/XML manipulation instead # Use LibreOffice to do the merge or just deliver the research slides as a standalone + combined via zip merge # Check what pptx tools are available python3 -c "import pptx" 2>&1 node -e "require('pptxgenjs'); console.log('pptxgenjs ok')" 2>&1 which libreoffice
wc -l /home/daytona/workspace/alphafold-ppt/create_ppt.js
~/alphafold-ppt/check_deps.js
/**
* Adds research slides to the AlphaFold PPTX and injects
* a spin/rotate animation via raw XML into the section slide's protein shape.
*/
const pptxgen = require("pptxgenjs");
const fs = require("fs");
const path = require("path");
const AdmZip = require("adm-zip");
const RESEARCH_PPTX = "/home/daytona/workspace/alphafold-ppt/AlphaFold3_Research.pptx";
const BASE_PPTX = "/home/daytona/workspace/alphafold-ppt/AlphaFold_Fixed.pptx";
const OUT_PPTX = "/home/daytona/workspace/alphafold-ppt/AlphaFold_Complete.pptx";
// Check if AdmZip is available
try {
require.resolve("adm-zip");
console.log("adm-zip available");
} catch(e) {
console.log("adm-zip not found");
process.exit(1);
}
cd /home/daytona/workspace/alphafold-ppt && node check_deps.js 2>&1 ls node_modules/ 2>/dev/null | head -20 || echo "no node_modules here" node -e "require('adm-zip'); console.log('ok')" 2>&1
# Use Python's built-in zipfile to merge the two PPTX files (raw zip manipulation) # Also inject spin animation XML into the section slide protein shape python3 << 'PYEOF' import zipfile, shutil, os, re from xml.etree import ElementTree as ET BASE = "/home/daytona/workspace/alphafold-ppt" MAIN_PATH = f"{BASE}/AlphaFold_Fixed.pptx" NEW_PATH = f"{BASE}/AlphaFold3_Research.pptx" OUT_PATH = f"{BASE}/AlphaFold_Complete.pptx" shutil.copy(MAIN_PATH, OUT_PATH) # Count slides in main with zipfile.ZipFile(MAIN_PATH) as z: main_slides = sorted([n for n in z.namelist() if re.match(r'ppt/slides/slide\d+\.xml$', n)]) main_rels = sorted([n for n in z.namelist() if re.match(r'ppt/slides/_rels/slide\d+\.xml\.rels$', n)]) main_slide_count = len(main_slides) print(f"Main slides: {main_slide_count}") with zipfile.ZipFile(NEW_PATH) as z: new_slides = sorted([n for n in z.namelist() if re.match(r'ppt/slides/slide\d+\.xml$', n)]) new_rels = sorted([n for n in z.namelist() if re.match(r'ppt/slides/_rels/slide\d+\.xml\.rels$', n)]) new_slide_count = len(new_slides) print(f"New slides: {new_slide_count}") # Read all new slide XML and rels new_data = {} with zipfile.ZipFile(NEW_PATH) as z: for s, r in zip(new_slides, new_rels): new_data[s] = z.read(s) new_data[r] = z.read(r) # Add new slides into the output pptx with zipfile.ZipFile(OUT_PATH, 'a') as zout: for i, (s, r) in enumerate(zip(new_slides, new_rels)): new_idx = main_slide_count + i + 1 new_s = f"ppt/slides/slide{new_idx}.xml" new_r = f"ppt/slides/_rels/slide{new_idx}.xml.rels" # Fix rel references inside the rels file (slide layout refs stay as-is) rels_xml = new_data[r].decode('utf-8') zout.writestr(new_s, new_data[s]) zout.writestr(new_r, rels_xml.encode('utf-8')) print(f" Added {new_s}") # Now update ppt/presentation.xml to reference the new slides with zipfile.ZipFile(OUT_PATH) as z: prs_xml = z.read('ppt/presentation.xml').decode('utf-8') prs_rels = z.read('ppt/_rels/presentation.xml.rels').decode('utf-8') # Parse presentation rels to find highest rId rids = re.findall(r'Id="(rId\d+)"', prs_rels) max_rid = max(int(r.replace('rId','')) for r in rids) # Add new slide refs to presentation.xml.rels new_rels_entries = "" new_sldId_entries = "" with zipfile.ZipFile(NEW_PATH) as z: new_prs_rels = z.read('ppt/_rels/presentation.xml.rels').decode('utf-8') new_slide_rels = re.findall(r'<Relationship[^/]*/>', new_prs_rels) new_slide_rels = [r for r in new_slide_rels if 'slide' in r and 'slideLayout' not in r and 'slideMaster' not in r] for i, rel in enumerate(new_slide_rels): new_rid = f"rId{max_rid + i + 1}" new_idx = main_slide_count + i + 1 entry = f'<Relationship Id="{new_rid}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide{new_idx}.xml"/>' new_rels_entries += entry + "\n" new_sldId_entries += f'<p:sldId id="{300 + new_idx}" r:id="{new_rid}"/>\n' updated_prs_rels = prs_rels.replace('</Relationships>', new_rels_entries + '</Relationships>') # Add sldId entries to sldIdLst in presentation.xml updated_prs_xml = prs_xml.replace('</p:sldIdLst>', new_sldId_entries + '</p:sldIdLst>') # Rewrite the zip with updated presentation files # We need to rebuild the zip since we can't update existing entries easily import tempfile tmp = OUT_PATH + ".tmp" with zipfile.ZipFile(OUT_PATH) as zin: with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as zout: for item in zin.infolist(): if item.filename == 'ppt/presentation.xml': zout.writestr(item, updated_prs_xml.encode('utf-8')) elif item.filename == 'ppt/_rels/presentation.xml.rels': zout.writestr(item, updated_prs_rels.encode('utf-8')) else: zout.writestr(item, zin.read(item.filename)) os.replace(tmp, OUT_PATH) print(f"\nDone! Saved to {OUT_PATH}") print(f"Total slides should be: {main_slide_count + new_slide_count}") PYEOF
python3 << 'PYEOF' import zipfile, shutil, os, re BASE = "/home/daytona/workspace/alphafold-ppt" MAIN_PATH = f"{BASE}/AlphaFold_Fixed.pptx" NEW_PATH = f"{BASE}/AlphaFold3_Research.pptx" OUT_PATH = "/tmp/AlphaFold_Complete.pptx" shutil.copy2(MAIN_PATH, OUT_PATH) with zipfile.ZipFile(MAIN_PATH) as z: main_slides = sorted([n for n in z.namelist() if re.match(r'ppt/slides/slide\d+\.xml$', n)]) main_slide_count = len(main_slides) print(f"Main slides: {main_slide_count}") with zipfile.ZipFile(NEW_PATH) as z: new_slides = sorted([n for n in z.namelist() if re.match(r'ppt/slides/slide\d+\.xml$', n)]) new_rels = sorted([n for n in z.namelist() if re.match(r'ppt/slides/_rels/slide\d+\.xml\.rels$', n)]) new_slide_count = len(new_slides) print(f"New slides: {new_slide_count}") new_data = {} with zipfile.ZipFile(NEW_PATH) as z: for s, r in zip(new_slides, new_rels): new_data[s] = z.read(s) new_data[r] = z.read(r) with zipfile.ZipFile(OUT_PATH) as z: prs_xml = z.read('ppt/presentation.xml').decode('utf-8') prs_rels = z.read('ppt/_rels/presentation.xml.rels').decode('utf-8') rids = re.findall(r'Id="(rId\d+)"', prs_rels) max_rid = max(int(r.replace('rId','')) for r in rids) new_rels_entries = "" new_sldId_entries = "" for i in range(new_slide_count): new_rid = f"rId{max_rid + i + 1}" new_idx = main_slide_count + i + 1 entry = f'<Relationship Id="{new_rid}" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide" Target="slides/slide{new_idx}.xml"/>' new_rels_entries += entry + "\n" new_sldId_entries += f'<p:sldId id="{300 + new_idx}" r:id="{new_rid}"/>\n' updated_prs_rels = prs_rels.replace('</Relationships>', new_rels_entries + '</Relationships>') updated_prs_xml = prs_xml.replace('</p:sldIdLst>', new_sldId_entries + '</p:sldIdLst>') tmp = OUT_PATH + ".tmp" with zipfile.ZipFile(OUT_PATH) as zin: with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as zout: for item in zin.infolist(): if item.filename == 'ppt/presentation.xml': zout.writestr(item, updated_prs_xml.encode('utf-8')) elif item.filename == 'ppt/_rels/presentation.xml.rels': zout.writestr(item, updated_prs_rels.encode('utf-8')) else: zout.writestr(item, zin.read(item.filename)) # Add new slide XMLs for i, (s, r) in enumerate(zip(new_slides, new_rels)): new_idx = main_slide_count + i + 1 new_s = f"ppt/slides/slide{new_idx}.xml" new_r = f"ppt/slides/_rels/slide{new_idx}.xml.rels" # Fix rels: point slide layout to layout1 of main rels_xml = new_data[r].decode('utf-8') # Replace slideLayouts/slideLayout*.xml refs to use layout6 (blank) rels_xml = re.sub(r'Target="\.\.\/slideLayouts\/slideLayout\d+\.xml"', 'Target="../slideLayouts/slideLayout7.xml"', rels_xml) zout.writestr(new_s, new_data[s]) zout.writestr(new_r, rels_xml.encode('utf-8')) os.replace(tmp, OUT_PATH) # Now copy to workspace dest = f"{BASE}/AlphaFold_Complete.pptx" with open(OUT_PATH, 'rb') as src_f: with open(dest, 'wb') as dst_f: dst_f.write(src_f.read()) sz = os.path.getsize(dest) print(f"\nSaved to {dest} ({sz//1024} KB)") PYEOF
python3 << 'PYEOF' import zipfile, os, re # Read slide 37 (first research/section slide) and inject spin animation # The section slide has an ellipse shape used as a "Nobel Prize badge" # We'll inject a spin animation (p:animEffect) on that ellipse shape PPTX = "/home/daytona/workspace/alphafold-ppt/AlphaFold_Complete.pptx" SLIDE_NAME = "ppt/slides/slide37.xml" with zipfile.ZipFile(PPTX) as z: names = z.namelist() slide37_exists = SLIDE_NAME in names print("Slide37 exists:", slide37_exists) if slide37_exists: xml = z.read(SLIDE_NAME).decode('utf-8') # Show shape IDs to find the ellipse ids = re.findall(r'<p:sp>.*?<p:nvSpPr>.*?<p:cNvPr id="(\d+)" name="([^"]+)"', xml, re.DOTALL) print("Shapes:", ids[:20]) PYEOF
python3 << 'PYEOF' import zipfile, os, re, shutil PPTX = "/home/daytona/workspace/alphafold-ppt/AlphaFold_Complete.pptx" SLIDE_NAME = "ppt/slides/slide37.xml" # Spin animation XML to inject into slide 37 # This adds a spin (clockwise 360 degrees, 3 seconds, infinite repeat) on Shape 0 (the ellipse = id=2) # Using OOXML animation: p:timing > p:tnLst > p:par SPIN_ANIMATION = '''<p:timing> <p:tnLst> <p:par> <p:cTn id="1" dur="indefinite" restart="never" nodeType="tmRoot"> <p:childTnLst> <p:seq concurrent="1" nextAc="seek"> <p:cTn id="2" dur="indefinite" nodeType="mainSeq"> <p:childTnLst> <p:par> <p:cTn id="3" fill="hold"> <p:stCondLst> <p:cond delay="indefinite"/> </p:stCondLst> <p:childTnLst> <p:par> <p:cTn id="4" presetID="22" presetClass="emph" presetSubtype="0" fill="hold" nodeType="clickEffect"> <p:stCondLst> <p:cond delay="0"/> </p:stCondLst> <p:childTnLst> <p:animEffect transition="in" filter="blinds(horizontal)"/> </p:childTnLst> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:par> </p:childTnLst> </p:cTn> <p:prevCondLst> <p:cond evt="onPrevClick" delay="0"> <p:tn/> </p:cond> </p:prevCondLst> </p:seq> </p:childTnLst> </p:cTn> </p:par> </p:tnLst> <p:bldLst> <p:bldP spid="2" grpId="0" animBg="1"/> </p:bldLst> </p:timing>''' # Better: use a simple spin (rotate) animation on the ellipse (id=2) # p:animTransform type="rot" from 0 to 21600000 (360 degrees in EMU * 60000) SPIN_XML = '''<p:timing> <p:tnLst> <p:par> <p:cTn id="1" dur="indefinite" restart="never" nodeType="tmRoot"> <p:childTnLst> <p:seq concurrent="1" nextAc="seek"> <p:cTn id="2" dur="indefinite" nodeType="mainSeq"> <p:childTnLst> <p:par> <p:cTn id="3" fill="hold"> <p:stCondLst> <p:cond delay="indefinite"/> </p:stCondLst> <p:childTnLst> <p:par> <p:cTn id="4" presetID="22" presetClass="emph" presetSubtype="0" fill="hold" nodeType="clickEffect"> <p:stCondLst><p:cond delay="0"/></p:stCondLst> <p:childTnLst> <p:animEffect transition="in" filter="blinds(horizontal)"/> </p:childTnLst> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:seq> </p:childTnLst> </p:cTn> </p:par> </p:tnLst> </p:timing>''' # Actually use the correct spin animation for PowerPoint # presetID=22 is "spin" emphasis animation SPIN_ANIM = '''<p:timing> <p:tnLst> <p:par> <p:cTn id="1" dur="indefinite" restart="never" nodeType="tmRoot"> <p:childTnLst> <p:seq concurrent="1" nextAc="seek"> <p:cTn id="2" dur="indefinite" nodeType="mainSeq"> <p:childTnLst> <p:par> <p:cTn id="3" fill="hold"> <p:stCondLst><p:cond delay="indefinite"/></p:stCondLst> <p:childTnLst> <p:par> <p:cTn id="4" presetID="22" presetClass="emph" presetSubtype="26214400" accel="50000" decel="50000" fill="hold" nodeType="clickEffect"> <p:stCondLst><p:cond delay="0"/></p:stCondLst> <p:childTnLst> <p:animEffect transition="in" filter="blinds(horizontal)"/> <p:animTransform type="rot" by="21600000" dur="3000"/> </p:childTnLst> <p:spTgt spid="5"/> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:seq> </p:childTnLst> </p:cTn> </p:par> </p:tnLst> <p:bldLst> <p:bldP spid="5" grpId="0" animBg="1"/> </p:bldLst> </p:timing>''' with zipfile.ZipFile(PPTX) as z: slide_xml = z.read(SLIDE_NAME).decode('utf-8') # Remove any existing timing element slide_xml = re.sub(r'<p:timing>.*?</p:timing>', '', slide_xml, flags=re.DOTALL) # Insert spin animation before </p:sld> # Use correct OOXML spin emphasis animation spin = '''<p:timing> <p:tnLst> <p:par> <p:cTn id="1" dur="indefinite" restart="never" nodeType="tmRoot"> <p:childTnLst> <p:seq concurrent="1" nextAc="seek"> <p:cTn id="2" dur="indefinite" nodeType="mainSeq"> <p:childTnLst> <p:par> <p:cTn id="3" fill="hold"> <p:stCondLst><p:cond delay="indefinite"/></p:stCondLst> <p:childTnLst> <p:par> <p:cTn id="4" presetID="22" presetClass="emph" presetSubtype="0" fill="hold" nodeType="clickEffect"> <p:stCondLst><p:cond delay="0"/></p:stCondLst> <p:childTnLst> <p:animTransform type="rot"> <p:tav tm="0"><p:val><p:fltVal val="0"/></p:val></p:tav> <p:tav tm="100000"><p:val><p:fltVal val="360"/></p:val></p:tav> </p:animTransform> </p:childTnLst> <p:spTgt spid="5"/> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:seq> </p:childTnLst> </p:cTn> </p:par> </p:tnLst> <p:bldLst> <p:bldP spid="5" grpId="0" animBg="1"/> </p:bldLst> </p:timing>''' slide_xml = slide_xml.replace('</p:sld>', spin + '</p:sld>') # Rebuild zip tmp = PPTX + ".tmp2" with zipfile.ZipFile(PPTX) as zin: with zipfile.ZipFile(tmp, 'w', zipfile.ZIP_DEFLATED) as zout: for item in zin.infolist(): if item.filename == SLIDE_NAME: zout.writestr(item, slide_xml.encode('utf-8')) else: zout.writestr(item, zin.read(item.filename)) os.replace(tmp, PPTX) print("Spin animation injected into slide 37 (shape id=5 = Nobel ellipse)") print("Done:", os.path.getsize(PPTX) // 1024, "KB") PYEOF
python3 << 'PYEOF' import zipfile, os, re, io PPTX = "/home/daytona/workspace/alphafold-ppt/AlphaFold_Complete.pptx" SLIDE_NAME = "ppt/slides/slide37.xml" with zipfile.ZipFile(PPTX) as z: slide_xml = z.read(SLIDE_NAME).decode('utf-8') # Remove any existing timing slide_xml = re.sub(r'<p:timing>.*?</p:timing>', '', slide_xml, flags=re.DOTALL) # Inject spin (rotate emphasis) animation on ellipse shape (spid=5 is the Nobel ellipse) spin = '''<p:timing> <p:tnLst> <p:par> <p:cTn id="1" dur="indefinite" restart="never" nodeType="tmRoot"> <p:childTnLst> <p:seq concurrent="1" nextAc="seek"> <p:cTn id="2" dur="indefinite" nodeType="mainSeq"> <p:childTnLst> <p:par> <p:cTn id="3" fill="hold"> <p:stCondLst><p:cond delay="indefinite"/></p:stCondLst> <p:childTnLst> <p:par> <p:cTn id="4" presetID="22" presetClass="emph" presetSubtype="0" fill="hold" nodeType="clickEffect"> <p:stCondLst><p:cond delay="0"/></p:stCondLst> <p:childTnLst> <p:animTransform type="rot"> <p:tav tm="0"><p:val><p:fltVal val="0"/></p:val></p:tav> <p:tav tm="100000"><p:val><p:fltVal val="360"/></p:val></p:tav> </p:animTransform> </p:childTnLst> <p:spTgt spid="5"/> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:par> </p:childTnLst> </p:cTn> </p:seq> </p:childTnLst> </p:cTn> </p:par> </p:tnLst> <p:bldLst> <p:bldP spid="5" grpId="0" animBg="1"/> </p:bldLst> </p:timing>''' slide_xml = slide_xml.replace('</p:sld>', spin + '</p:sld>') # Write into memory buffer then save buf = io.BytesIO() with zipfile.ZipFile(PPTX) as zin: with zipfile.ZipFile(buf, 'w', zipfile.ZIP_DEFLATED) as zout: for item in zin.infolist(): if item.filename == SLIDE_NAME: zout.writestr(item.filename, slide_xml.encode('utf-8')) else: zout.writestr(item.filename, zin.read(item.filename)) # Write buffer to file with open(PPTX, 'wb') as f: f.write(buf.getvalue()) print("Done! Size:", os.path.getsize(PPTX)//1024, "KB") PYEOF
# Verify it opens and passes through LibreOffice libreoffice --headless --convert-to pptx /home/daytona/workspace/alphafold-ppt/AlphaFold_Complete.pptx --outdir /tmp/pptout/ 2>&1 echo "Exit: $?" ls -lh /tmp/pptout/AlphaFold_Complete.pptx 2>/dev/null cp /tmp/pptout/AlphaFold_Complete.pptx /home/daytona/workspace/alphafold-ppt/AlphaFold_Complete_Final.pptx 2>/dev/null || echo "copy step skipped" ls -lh /home/daytona/workspace/alphafold-ppt/AlphaFold_Complete.pptx
AlphaFold Complete
Presentation · PPTX
| # | Slide | Source |
|---|---|---|
| 37 | Section divider - "AlphaFold 3: Latest Research" with Nobel Prize badge + spin rotation animation on the badge shape | - |
| 38 | AF2 vs AF3 comparison - side-by-side: proteins-only vs. proteins+DNA+RNA+small molecules+diffusion model | - |
| 39 | Drug Design Advances - Desai et al., Cureus 2024 (PMID: 39092344) | Review |
| 40 | AF3 vs GPCR Structures - He et al., Acta Pharmacol Sin 2025 (PMID: 39643640) - strengths & limitations | Research |
| 41 | Nobel Prize 2024 + Protein Design - Buller et al., Angew Chem 2025 (PMID: 39584560) | Research |
| 42 | Research Landscape 2024-2025 - Guo et al., Mol Cancer 2024 (PMID: 39369244) - 180% annual growth, stat cards | Scientometric |
| 43 | Full References slide - all 4 papers + Nobel Prize citation with colored numbered cards | - |
Generate a summary Word document of the latest AlphaFold 3 researchd protein structure download
~/alphafold-ppt/create_summary.js
const {
Document, Packer, Paragraph, TextRun, Table, TableRow, TableCell,
HeadingLevel, AlignmentType, BorderStyle, WidthType, ShadingType,
VerticalAlign, PageNumber, Header, Footer, ExternalHyperlink,
TableOfContents, PageBreak
} = require('docx');
const fs = require('fs');
// ── Color palette ──
const NAVY = "1B3A6B";
const TEAL = "007B82";
const GOLD = "B8860B";
const GRAY = "4A4A4A";
const LGRAY = "767676";
const WHITE = "FFFFFF";
const BGBLUE = "EBF3FB";
const BGGREEN= "E8F8F5";
const BGGOLD = "FDF6EC";
// ── Helpers ──
function h1(text) {
return new Paragraph({
text, heading: HeadingLevel.HEADING_1,
spacing: { before: 360, after: 120 },
border: { bottom: { style: BorderStyle.SINGLE, size: 8, color: TEAL } },
run: { color: NAVY, bold: true, size: 28 }
});
}
function h2(text) {
return new Paragraph({
text, heading: HeadingLevel.HEADING_2,
spacing: { before: 240, after: 80 },
run: { color: TEAL, bold: true, size: 24 }
});
}
function h3(text) {
return new Paragraph({
text, heading: HeadingLevel.HEADING_3,
spacing: { before: 160, after: 60 },
run: { color: NAVY, bold: true, size: 22 }
});
}
function para(text, opts = {}) {
return new Paragraph({
spacing: { before: 80, after: 80, line: 320 },
children: [new TextRun({
text, size: 22, color: opts.color || GRAY,
bold: opts.bold || false, italic: opts.italic || false,
})]
});
}
function bullet(text, level = 0) {
return new Paragraph({
bullet: { level },
spacing: { before: 40, after: 40, line: 300 },
children: [new TextRun({ text, size: 21, color: GRAY })]
});
}
function boldBullet(label, text, color = TEAL) {
return new Paragraph({
bullet: { level: 0 },
spacing: { before: 50, after: 50, line: 300 },
children: [
new TextRun({ text: label + ": ", size: 21, bold: true, color }),
new TextRun({ text, size: 21, color: GRAY })
]
});
}
function divider() {
return new Paragraph({
border: { bottom: { style: BorderStyle.SINGLE, size: 4, color: "CCCCCC" } },
spacing: { before: 120, after: 120 }
});
}
function space(n = 1) {
return [...Array(n)].map(() => new Paragraph({ text: "", spacing: { before: 40, after: 40 } }));
}
// ── Citation card (shaded box) ──
function citationBox(num, color, authors, title, journal, year, pmid, doi) {
const shading = { type: ShadingType.SOLID, color: BGBLUE };
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 6, color },
bottom: { style: BorderStyle.NONE },
left: { style: BorderStyle.SINGLE, size: 12, color },
right: { style: BorderStyle.NONE },
insideH:{ style: BorderStyle.NONE },
insideV:{ style: BorderStyle.NONE },
},
rows: [
new TableRow({ children: [
new TableCell({
shading,
margins: { top: 120, bottom: 120, left: 160, right: 160 },
children: [
new Paragraph({ children: [
new TextRun({ text: `[${num}] `, size: 20, bold: true, color }),
new TextRun({ text: authors, size: 20, bold: true, color: GRAY }),
], spacing: { before: 0, after: 40 } }),
new Paragraph({ children: [
new TextRun({ text: title, size: 20, italic: true, color: NAVY }),
], spacing: { before: 0, after: 40 } }),
new Paragraph({ children: [
new TextRun({ text: `${journal}, ${year} | PMID: ${pmid} | DOI: ${doi}`, size: 18, color: LGRAY }),
], spacing: { before: 0, after: 0 } }),
]
})
]})
]
});
}
// ── Stats table ──
function statsTable(rows) {
return new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
borders: {
top: { style: BorderStyle.SINGLE, size: 4, color: TEAL },
bottom: { style: BorderStyle.SINGLE, size: 4, color: TEAL },
left: { style: BorderStyle.SINGLE, size: 4, color: TEAL },
right: { style: BorderStyle.SINGLE, size: 4, color: TEAL },
insideH:{ style: BorderStyle.SINGLE, size: 2, color: "CCCCCC" },
insideV:{ style: BorderStyle.SINGLE, size: 2, color: "CCCCCC" },
},
rows: rows.map(([col1, col2, col3], i) =>
new TableRow({
children: [col1, col2, col3].map((cell, ci) =>
new TableCell({
shading: { type: ShadingType.SOLID, color: i === 0 ? NAVY : (i % 2 === 0 ? "F5F9FF" : WHITE) },
verticalAlign: VerticalAlign.CENTER,
margins: { top: 80, bottom: 80, left: 120, right: 120 },
children: [new Paragraph({
alignment: ci === 0 ? AlignmentType.LEFT : AlignmentType.CENTER,
children: [new TextRun({
text: cell,
size: i === 0 ? 20 : 21,
bold: i === 0,
color: i === 0 ? WHITE : (ci === 1 ? TEAL : GRAY)
})]
})]
})
)
})
)
});
}
// ═══════════════════════════════════════════════════
// BUILD DOCUMENT
// ═══════════════════════════════════════════════════
const doc = new Document({
title: "AlphaFold 3 Research Summary",
description: "Summary of latest AlphaFold 3 research papers on protein structure prediction",
styles: {
default: {
document: { run: { font: "Calibri", size: 22 } },
},
paragraphStyles: [
{
id: "Heading1", name: "Heading 1", basedOn: "Normal",
run: { size: 28, bold: true, color: NAVY, font: "Calibri" },
paragraph: { spacing: { before: 360, after: 120 } }
},
{
id: "Heading2", name: "Heading 2", basedOn: "Normal",
run: { size: 24, bold: true, color: TEAL, font: "Calibri" },
paragraph: { spacing: { before: 240, after: 80 } }
},
{
id: "Heading3", name: "Heading 3", basedOn: "Normal",
run: { size: 22, bold: true, color: NAVY, font: "Calibri" },
paragraph: { spacing: { before: 160, after: 60 } }
},
]
},
sections: [{
properties: { page: { margin: { top: 1134, bottom: 1134, left: 1134, right: 1134 } } },
headers: {
default: new Header({
children: [new Paragraph({
alignment: AlignmentType.RIGHT,
border: { bottom: { style: BorderStyle.SINGLE, size: 4, color: TEAL } },
spacing: { before: 0, after: 100 },
children: [
new TextRun({ text: "AlphaFold 3 Research Summary | June 2026", size: 18, color: LGRAY, font: "Calibri" })
]
})]
})
},
footers: {
default: new Footer({
children: [new Paragraph({
alignment: AlignmentType.CENTER,
border: { top: { style: BorderStyle.SINGLE, size: 4, color: TEAL } },
spacing: { before: 100, after: 0 },
children: [
new TextRun({ text: "Sources: PubMed | Page ", size: 18, color: LGRAY }),
new TextRun({ children: [PageNumber.CURRENT], size: 18, color: LGRAY }),
new TextRun({ text: " of ", size: 18, color: LGRAY }),
new TextRun({ children: [PageNumber.TOTAL_PAGES], size: 18, color: LGRAY }),
]
})]
})
},
children: [
// ─── COVER ───────────────────────────────────────────────
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 600, after: 100 },
children: [new TextRun({ text: "AlphaFold 3", size: 56, bold: true, color: NAVY, font: "Calibri" })]
}),
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 0, after: 80 },
children: [new TextRun({ text: "Latest Research on Protein Structure Prediction", size: 30, color: TEAL, font: "Calibri" })]
}),
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 0, after: 80 },
children: [new TextRun({ text: "A Structured Literature Summary", size: 24, color: LGRAY, italic: true })]
}),
new Paragraph({
alignment: AlignmentType.CENTER,
spacing: { before: 40, after: 400 },
children: [new TextRun({ text: "PubMed Sources • 2024–2025 • June 9, 2026", size: 20, color: LGRAY })]
}),
new Table({
width: { size: 100, type: WidthType.PERCENTAGE },
borders: { top:{ style:BorderStyle.SINGLE,size:16,color:TEAL }, bottom:{style:BorderStyle.SINGLE,size:16,color:TEAL}, left:{style:BorderStyle.NONE}, right:{style:BorderStyle.NONE}, insideH:{style:BorderStyle.NONE}, insideV:{style:BorderStyle.NONE} },
rows:[new TableRow({ children:[new TableCell({
shading:{type:ShadingType.SOLID,color:BGBLUE},
margins:{top:140,bottom:140,left:240,right:240},
children:[
new Paragraph({alignment:AlignmentType.CENTER, spacing:{before:0,after:60}, children:[new TextRun({text:"Nobel Prize in Chemistry 2024",size:24,bold:true,color:NAVY})]}),
new Paragraph({alignment:AlignmentType.CENTER, spacing:{before:0,after:0}, children:[new TextRun({text:"Awarded jointly to Demis Hassabis & John Jumper (AlphaFold) and David Baker (computational protein design)",size:20,color:GRAY,italic:true})]})
]
})]})]
}),
...space(2),
new Paragraph({ children:[new PageBreak()] }),
// ─── EXECUTIVE SUMMARY ───────────────────────────────────
h1("Executive Summary"),
para("AlphaFold 3, released by Google DeepMind in 2024, represents a fundamental shift in computational biology. Building on the success of AlphaFold 2 — which solved the 50-year-old protein folding problem — AlphaFold 3 extends structure prediction beyond proteins to encompass DNA, RNA, small-molecule ligands, ions, and post-translational modifications within a single unified model architecture."),
para("This document summarizes the four most recent peer-reviewed publications indexed on PubMed (2024–2025), covering AlphaFold 3's architecture, performance benchmarks, drug discovery applications, limitations in ligand-bound receptor prediction, and its broader impact on structural biology as recognized by the 2024 Nobel Prize in Chemistry."),
...space(1),
// ─── KEY FINDINGS AT A GLANCE ────────────────────────────
h2("Key Findings at a Glance"),
statsTable([
["Metric", "AlphaFold 2 (2020)", "AlphaFold 3 (2024)"],
["Molecular scope", "Proteins only", "Proteins + DNA + RNA + small molecules + ions"],
["Architecture", "Evoformer + Structure Module", "Evoformer + Diffusion Module"],
["Interaction accuracy", "Baseline", "~50% improvement over AF2 for interactions"],
["CASP14 median GDT", "92.4 GDT", "N/A (CASP15 results pending full publication)"],
["Availability", "AlphaFold DB (EMBL-EBI)", "AlphaFold Server (alphafoldserver.com)"],
["Nobel Prize", "Not yet awarded", "Chemistry 2024 (Hassabis, Jumper, Baker)"],
["PubMed growth", "—", "180% annual growth rate in AlphaFold publications"],
]),
...space(1),
new Paragraph({ children:[new PageBreak()] }),
// ─── PAPER 1 ─────────────────────────────────────────────
h1("Paper 1: AlphaFold 3 — Advances in Drug Design"),
citationBox("1", GOLD,
"Desai D, Kantliwala SV, Vybhavi J, Ravi R, Patel H, Patel J.",
"Review of AlphaFold 3: Transformative Advances in Drug Design and Therapeutics.",
"Cureus", "July 2024",
"39092344", "10.7759/cureus.63646"
),
...space(1),
h3("Overview"),
para("This review provides a comprehensive assessment of AlphaFold 3's capabilities in drug design and therapeutics. The authors characterize AlphaFold 3 as a turning point in computational biochemistry, comparable to the leap AlphaFold 2 represented over classical homology modelling."),
h3("Key Points"),
boldBullet("Speed", "AlphaFold 3 predicts biomolecular structures in seconds, compared to the months or years required for experimental methods (X-ray crystallography, cryo-EM)."),
boldBullet("Architecture", "Uses deep learning models analogous to Google's Gemini — a diffusion-based approach that generates 3D structures by iteratively denoising random atomic configurations."),
boldBullet("Drug discovery", "Directly applicable to identifying drug-binding pockets, modelling receptor-ligand complexes, and generating virtual screening scaffolds."),
boldBullet("Vaccine design", "Can rapidly model antigen structures for novel or rapidly-evolving pathogens, accelerating vaccine candidate identification."),
boldBullet("Enzyme engineering", "Enables rational engineering of enzymes by predicting how mutations alter active-site geometry and substrate binding."),
boldBullet("Receptor modulation", "Models receptor conformations with and without bound ligands, informing allosteric drug design strategies."),
boldBullet("Integration", "When combined with rigorous experimental validation, AlphaFold 3 is positioned to catalyse a new era of structure-guided drug development."),
h3("Significance"),
para("The authors conclude that AlphaFold 3 has established itself as a transformative tool in biomolecular research, offering researchers unparalleled insights into structural dynamics and molecular interactions that were previously inaccessible without years of experimental effort."),
...space(1),
divider(),
// ─── PAPER 2 ─────────────────────────────────────────────
h1("Paper 2: AlphaFold 3 vs. Experimental GPCR Structures"),
citationBox("2", TEAL,
"He XH, Li JR, Shen SY, Xu HE.",
"AlphaFold3 versus experimental structures: assessment of the accuracy in ligand-bound G protein-coupled receptors.",
"Acta Pharmacologica Sinica", "April 2025",
"39643640", "10.1038/s41401-024-01429-y"
),
...space(1),
h3("Overview"),
para("This systematic benchmarking study directly compares AlphaFold 3-predicted GPCR structures against experimentally determined structures (X-ray and cryo-EM), with a specific focus on ligand-bound states. GPCRs are among the most important drug targets in medicine, responsible for regulating nearly every major physiological process and constituting ~35% of all FDA-approved drug targets."),
h3("Strengths of AlphaFold 3 for GPCRs"),
bullet("Improved overall GPCR backbone architecture compared to AlphaFold 2"),
bullet("Better prediction of the general fold and arrangement of transmembrane helices"),
bullet("Successfully handles diverse ligand types: ions, peptides, small molecules, and protein ligands"),
bullet("Useful as an initial structural scaffold for structure-based drug design pipelines"),
bullet("Significantly reduces the need for homology modelling when no close template exists"),
h3("Limitations of AlphaFold 3 for GPCRs"),
bullet("Significant discrepancies persist in ligand-binding pocket geometry"),
bullet("Ligand orientations (particularly for ions, peptides, and protein ligands) deviate substantially from experiment"),
bullet("Binding pocket shape deviations limit direct use as input for docking-based drug screening"),
bullet("High-resolution details of ligand interactions — critical for drug design — remain inaccurate"),
bullet("Experimental structure determination (X-ray / cryo-EM) remains essential for final drug candidate optimization"),
h3("Implications"),
para("The study recommends using AlphaFold 3 as an initial hypothesis-generating tool for GPCR drug design, but emphasises that experimental structures are still required for high-resolution structure-activity relationship (SAR) studies. The authors call for dedicated improvements in protein-ligand interaction prediction in future model iterations."),
...space(1),
divider(),
// ─── PAPER 3 ─────────────────────────────────────────────
h1("Paper 3: Nobel Prize 2024 — Protein Design & AlphaFold"),
citationBox("3", NAVY,
"Buller R, Damborsky J, Hilvert D, Bornscheuer UT.",
"Structure Prediction and Computational Protein Design for Efficient Biocatalysts and Bioactive Proteins.",
"Angewandte Chemie International Edition", "January 2025",
"39584560", "10.1002/anie.202421686"
),
...space(1),
h3("Overview"),
para("Written in the context of the 2024 Nobel Prize in Chemistry, this perspective highlights the fundamental transformation that AlphaFold and computational protein design have brought to biological research. The Nobel Committee recognised three scientists: David Baker for de novo computational protein design, and Demis Hassabis and John Jumper for developing the AlphaFold system."),
h3("Why the Nobel Prize?"),
bullet("AlphaFold has fundamentally changed how scientists research and engineer proteins"),
bullet("The wealth of predicted structures has advanced our understanding of how life's molecules function and interact"),
bullet("Combined with David Baker's protein design tools, researchers can now both predict AND design new proteins from scratch"),
bullet("Every therapeutic protein target can now be modelled — removing a key bottleneck in drug discovery"),
h3("Applications Highlighted"),
boldBullet("De novo peptide binders", "AlphaFold structures enable design of novel peptide binders for any modelled target, including previously undruggable proteins."),
boldBullet("In silico docking", "Large compound libraries (millions of small molecules) can now be docked against AlphaFold structures to identify hit candidates computationally before any wet lab work."),
boldBullet("Enzyme engineering", "Predicting how mutations alter enzyme active sites is now routine, enabling rational design of biocatalysts for organic synthesis and green chemistry."),
boldBullet("Materials design", "Protein structure prediction is expanding into materials science, enabling design of protein-based nanomaterials with defined geometries."),
boldBullet("Medicinal chemistry", "Drug metabolism predictions, prodrug activation pathways, and off-target interaction screening are all enabled by AlphaFold structural models."),
h3("Future Directions"),
bullet("Protein engineering: directed evolution guided by structure predictions"),
bullet("Synthetic biology: designing entire metabolic pathways with engineered enzymes"),
bullet("Personalized medicine: modelling patient-specific protein variants and their structural consequences"),
bullet("AlphaFold 3 and beyond: extending to RNA therapeutics, DNA-binding proteins, and multi-protein assemblies"),
...space(1),
divider(),
// ─── PAPER 4 ─────────────────────────────────────────────
h1("Paper 4: AlphaFold Research Landscape 2024–2025"),
citationBox("4", "#6C63FF",
"Guo SB, Meng Y, Lin L, Zhou ZZ, Li HL, Tian XP.",
"Artificial intelligence alphafold model for molecular biology and drug discovery: a machine-learning-driven informatics investigation.",
"Molecular Cancer", "October 2024",
"39369244", "10.1186/s12943-024-02140-6"
),
...space(1),
h3("Overview"),
para("This scientometric analysis applies machine learning methods to map the global AlphaFold research landscape, identify emerging trends, and highlight underexplored areas. Using unsupervised clustering, time series analysis, and network mapping on the entire AlphaFold publication corpus, the authors provide a quantitative picture of where the field is heading."),
h3("Quantitative Research Statistics"),
statsTable([
["Indicator", "Value", "Significance"],
["Annual Growth Rate", "180.13%", "One of the fastest-growing fields in all of biomedicine"],
["International Co-authorship", "33.33%", "Strong global collaboration across institutions"],
["Top Cluster Avg Citation", "48.4 ± 185", "High-impact papers driving field direction"],
["Top Research Cluster", "AI + Structural Biology", "Dominates the field by citation impact"],
["Growth Score (Structure prediction)", "s = 12.40", "Fastest-growing topic area"],
["Growth Score (Drug discovery)", "s = 1.90", "Rapidly emerging application area"],
["Growth Score (Molecular dynamics)", "s = 2.40", "Strong coupling with MD simulations"],
]),
h3("Top Research Clusters (by citation impact)"),
boldBullet("Cluster 1 (Highest impact)", "AI-Powered Advances in AlphaFold for Structural Biology — average 48.4 citations per paper.", TEAL),
boldBullet("Cluster 2", "SARS-CoV-2 / COVID-19 / Vaccine Design — 97.8% relevance to AlphaFold core, 37.5% development trajectory.", NAVY),
boldBullet("Cluster 3", "Homology Modeling / Virtual Screening / Membrane Proteins — 89.9% relevance, underexplored (only 26.1% developed).", GRAY),
boldBullet("Cluster 4", "Drug Discovery + Molecular Dynamics — emerging frontier with broad future potential.", LGRAY),
h3("Underexplored Areas with High Potential"),
bullet("Structural dynamics and conformational ensembles (AlphaFold predicts single conformations)"),
bullet("Integration of AlphaFold with molecular dynamics (MD) simulations for flexibility modelling"),
bullet("AlphaFold for intrinsically disordered regions (IDRs) — critical for disease biology"),
bullet("Multi-protein complex prediction for large assemblies (ribosomes, spliceosomes, etc.)"),
bullet("AlphaFold-guided rational design of CRISPR guide RNAs and base editors"),
...space(1),
new Paragraph({ children:[new PageBreak()] }),
// ─── ALPHAFOLD 3 ARCHITECTURE ────────────────────────────
h1("AlphaFold 3: Technical Overview"),
h2("Architectural Innovations vs. AlphaFold 2"),
para("AlphaFold 3 replaces the Structure Module of AlphaFold 2 with a diffusion-based generative module, fundamentally changing how structures are produced. Rather than directly predicting atomic coordinates via an equivariant transformer, AlphaFold 3 learns to iteratively denoise a 3D cloud of atoms — similar in principle to how diffusion models like DALL-E generate images from noise."),
h3("Key Changes from AlphaFold 2"),
boldBullet("Scope", "Extended from proteins-only to all biomolecules: proteins, DNA, RNA, small-molecule ligands, ions, and covalent modifications."),
boldBullet("Structure generation", "Diffusion module replaces the Structure Module — generates structures by iterative denoising from Gaussian noise."),
boldBullet("Pairformer", "Replaces Evoformer as the core representation module; retains pair and single representations but with updated architectural details."),
boldBullet("MSA handling", "MSA processing is simplified and deprioritised compared to AF2, reflecting that many non-protein entities have limited homologue databases."),
boldBullet("Training data", "Trained on the full PDB including protein-ligand, protein-DNA, protein-RNA, and protein-protein complexes."),
boldBullet("Output confidence", "Retains pLDDT per-residue confidence and PAE (Predicted Aligned Error) matrix; adds per-atom confidence metrics."),
h2("How to Access AlphaFold 3"),
bullet("AlphaFold Server: alphafoldserver.com — free online interface for up to 10 jobs/day with up to 5,000 tokens per job."),
bullet("AlphaFold Database (AF2): alphafold.ebi.ac.uk — ~200M pre-computed protein structure predictions (AF2, not AF3)."),
bullet("Open source AF2 code: github.com/deepmind/alphafold — original AlphaFold 2 code and weights."),
bullet("AlphaFold 3 code: github.com/google-deepmind/alphafold3 — model code released Nov 2024 (weights require application)."),
bullet("ColabFold: colab.research.google.com — community Colab using MMseqs2, ~40-60x faster than original AF2."),
...space(1),
new Paragraph({ children:[new PageBreak()] }),
// ─── CLINICAL & RESEARCH APPLICATIONS ───────────────────
h1("Applications in Research and Medicine"),
h2("Drug Discovery"),
para("AlphaFold 3's ability to model protein-ligand complexes directly — rather than requiring separate docking after structure prediction — represents a major advance for drug discovery workflows."),
bullet("Virtual screening: dock compound libraries against AF3 predicted binding pockets"),
bullet("Lead optimisation: predict how structural modifications to a drug alter binding"),
bullet("Allosteric drug design: identify secondary binding sites that modulate function"),
bullet("PROTAC design: model ternary complexes of target + linker + E3 ligase"),
bullet("Fragment-based drug design: predict fragment binding modes across the proteome"),
h2("Structural Biology"),
bullet("Molecular replacement: use AF3 predictions as search models for X-ray crystallography phase determination"),
bullet("Cryo-EM fitting: use AF3 as initial model for fitting into EM density maps"),
bullet("Model validation: compare AF3 predictions against deposited PDB structures to identify errors"),
bullet("Homology-independent modelling: predict structures for proteins with no known homologues"),
h2("Infectious Disease & Vaccine Development"),
bullet("Rapid structural modelling of novel viral proteins (demonstrated for SARS-CoV-2 ORF8 in AF2)"),
bullet("Predicting antibody-antigen interfaces for vaccine epitope design"),
bullet("Modelling drug resistance mutations in pathogen proteins"),
bullet("Structural basis of host-pathogen protein-protein interactions"),
h2("Cancer Biology"),
bullet("Modelling oncoproteins with mutations absent from the PDB"),
bullet("Predicting neoantigens for personalised cancer immunotherapy"),
bullet("Structural characterisation of cancer driver mutations in signalling proteins"),
bullet("Design of bispecific antibodies and CAR-T cell therapy targets"),
...space(1),
new Paragraph({ children:[new PageBreak()] }),
// ─── LIMITATIONS ─────────────────────────────────────────
h1("Current Limitations and Caveats"),
h2("Technical Limitations"),
boldBullet("Single conformation", "AlphaFold 3 predicts the most stable conformation; it does not model the full conformational ensemble or dynamic flexibility of proteins."),
boldBullet("Ligand binding poses", "He et al. (2025) demonstrated significant discrepancies in ligand orientations within GPCR binding pockets — particularly for ions, peptides, and protein ligands."),
boldBullet("Intrinsic disorder", "Low pLDDT scores in intrinsically disordered regions (IDRs) reflect genuine uncertainty; these regions require orthogonal experimental characterisation."),
boldBullet("Novel folds", "Performance on proteins with truly novel folds (no structural homologues) is less well-characterised than for common fold families."),
boldBullet("Covalent modifications", "While AF3 handles some post-translational modifications, complex glycosylation patterns and exotic modifications may not be accurately captured."),
boldBullet("Large complexes", "Prediction accuracy degrades for very large complexes (>2,000 residues or many chains), partly due to computational token limits."),
h2("Interpretation Caveats"),
bullet("High pLDDT on all domains does NOT mean AlphaFold is confident of their relative positions — always check PAE"),
bullet("pLDDT < 50 indicates likely disordered regions, not wrong predictions — biologically relevant disordered regions should not be discarded"),
bullet("AlphaFold predicts the apo (unbound) or holo (bound) structure depending on input; context matters"),
bullet("Predictions represent the lowest-energy state under the model's learned distribution — not necessarily the biologically active state"),
bullet("Do not use AF3 structures alone as the basis for FDA-submission crystallography replacement — experimental validation is mandatory"),
...space(1),
// ─── REFERENCES ──────────────────────────────────────────
h1("References"),
citationBox("1", GOLD,
"Desai D, Kantliwala SV, Vybhavi J et al.",
"Review of AlphaFold 3: Transformative Advances in Drug Design and Therapeutics.",
"Cureus", "July 2024", "39092344", "10.7759/cureus.63646"
),
...space(1),
citationBox("2", TEAL,
"He XH, Li JR, Shen SY, Xu HE.",
"AlphaFold3 versus experimental structures: assessment of the accuracy in ligand-bound G protein-coupled receptors.",
"Acta Pharmacologica Sinica", "April 2025", "39643640", "10.1038/s41401-024-01429-y"
),
...space(1),
citationBox("3", NAVY,
"Buller R, Damborsky J, Hilvert D, Bornscheuer UT.",
"Structure Prediction and Computational Protein Design for Efficient Biocatalysts and Bioactive Proteins.",
"Angewandte Chemie International Edition", "January 2025", "39584560", "10.1002/anie.202421686"
),
...space(1),
citationBox("4", "#6C63FF",
"Guo SB, Meng Y, Lin L et al.",
"Artificial intelligence alphafold model for molecular biology and drug discovery: a machine-learning-driven informatics investigation.",
"Molecular Cancer", "October 2024", "39369244", "10.1186/s12943-024-02140-6"
),
...space(1),
new Table({
width:{size:100,type:WidthType.PERCENTAGE},
borders:{top:{style:BorderStyle.SINGLE,size:4,color:GOLD},bottom:{style:BorderStyle.SINGLE,size:4,color:GOLD},left:{style:BorderStyle.NONE},right:{style:BorderStyle.NONE},insideH:{style:BorderStyle.NONE},insideV:{style:BorderStyle.NONE}},
rows:[new TableRow({children:[new TableCell({
shading:{type:ShadingType.SOLID,color:BGGOLD},
margins:{top:120,bottom:120,left:160,right:160},
children:[
new Paragraph({children:[new TextRun({text:"Nobel Prize in Chemistry 2024",size:20,bold:true,color:GOLD})],spacing:{before:0,after:40}}),
new Paragraph({children:[new TextRun({text:"Awarded to David Baker (University of Washington) for computational protein design, and jointly to Demis Hassabis and John Jumper (Google DeepMind) for AlphaFold. Royal Swedish Academy of Sciences, October 2024.",size:19,color:GRAY,italic:true})],spacing:{before:0,after:0}})
]
})]})
}),
...space(2),
para("Document generated on June 9, 2026. All papers sourced from PubMed. For the latest literature, search PubMed with: AlphaFold[All Fields] AND protein structure[MeSH Terms].", { color: LGRAY, italic: true }),
]
}]
});
Packer.toBuffer(doc).then(buffer => {
fs.writeFileSync("/home/daytona/workspace/alphafold-ppt/AlphaFold3_Research_Summary.docx", buffer);
console.log("SUCCESS: AlphaFold3_Research_Summary.docx created (" + Math.round(buffer.length/1024) + " KB)");
}).catch(err => {
console.error("ERROR:", err.message);
process.exit(1);
});
cd /home/daytona/workspace/alphafold-ppt && node create_summary.js 2>&1
# Find the syntax error - check node parse cd /home/daytona/workspace/alphafold-ppt && node --check create_summary.js 2>&1
# The hex color "#6C63FF" has a # which is invalid in some docx color fields # Check around line 430 where that color is used grep -n '"#6C63FF"' /home/daytona/workspace/alphafold-ppt/create_summary.js
# The # in color causes issue inside the citationBox function when used in border color # Replace "#6C63FF" with "6C63FF" (no hash) sed -i 's/"#6C63FF"/"6C63FF"/g' /home/daytona/workspace/alphafold-ppt/create_summary.js node --check /home/daytona/workspace/alphafold-ppt/create_summary.js 2>&1
# The extra }) at line 485 is the issue - the Table for Nobel Prize at end of references # Let's count brackets around line 460-490 python3 -c " lines = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').readlines() # Print lines 455-490 for i, l in enumerate(lines[454:492], 455): print(i, repr(l)) "
# The Table at line 474 ends with rows:[...)]}) but needs ]}) # Row structure: rows:[ TableRow( children:[ TableCell({ })] ) ] # Line 484: })]})\n - this closes: TableCell{}, TableRow children[], TableRow(), rows[] # Line 485: }), - closes Table{} # That looks correct syntactically... # Let's check if the error is actually in the docx color field - "#6C63FF" still in file grep -n '"#' /home/daytona/workspace/alphafold-ppt/create_summary.js
# The # character inside the citationBox function gets passed to border color # which expects no hash. But that would be a runtime error, not a syntax error. # Node.js v25 might have stricter spread operator rules. Let's check around line 485 # by looking at the full bracket balance python3 -c " content = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').read() # Count parens up to line 485 lines = content.split('\n') pre485 = '\n'.join(lines[:485]) opens = pre485.count('(') - pre485.count(')') brackets = pre485.count('[') - pre485.count(']') braces = pre485.count('{') - pre485.count('}') print(f'Line 485: unmatched ( = {opens}, [ = {brackets}, {{ = {braces}') # Find last few unmatched opens "
python3 -c " content = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').read() lines = content.split('\n') # Track unmatched at each line opens = brackets = braces = 0 for i, line in enumerate(lines, 1): for ch in line: if ch == '(': opens += 1 elif ch == ')': opens -= 1 elif ch == '[': brackets += 1 elif ch == ']': brackets -= 1 elif ch == '{': braces += 1 elif ch == '}': braces -= 1 if i >= 480 and i <= 495: print(f'Line {i}: ( ={opens:+d} [ ={brackets:+d} {{ ={braces:+d} | {line[:80]}') "
python3 -c " content = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').read() lines = content.split('\n') # Line 490: [ is still +1 after the }); — means the sections array is not closed # Line 489: }] closes sections: [{...}] BUT the [ from sections:[ is at Document({ sections:[ # That means Document({ sections: [ is the unclosed [ at end # Let's find where 'sections: [' opens for i, line in enumerate(lines, 1): if 'sections:' in line: print(i, line[:100]) "
python3 -c " content = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').read() lines = content.split('\n') # Line 489: }] closes children:[] then section {} but sections:[ is not closed with ] # Line 489 = ' }]' -- this closes the section object {} AND sections [{ but }] only does one # Need }] to close { and ] to close sections:[ # Let's see line 488-492 more carefully for i in range(487, 495): print(i+1, repr(lines[i])) "
~/alphafold-ppt/create_summary.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/alphafold-ppt/create_summary.js'
python3 -c " content = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').read() lines = content.split('\n') opens = brackets = braces = 0 for i, line in enumerate(lines, 1): for ch in line: if ch == '(': opens += 1 elif ch == ')': opens -= 1 elif ch == '[': brackets += 1 elif ch == ']': brackets -= 1 elif ch == '{': braces += 1 elif ch == '}': braces -= 1 print(f'Final balance: ( ={opens} [ ={brackets} {{ ={braces}') " node --check /home/daytona/workspace/alphafold-ppt/create_summary.js 2>&1
python3 -c " content = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').read() lines = content.split('\n') opens = brackets = braces = 0 # Find line where brackets goes negative or has an unexpected change for i, line in enumerate(lines, 1): prev_b = brackets for ch in line: if ch == '[': brackets += 1 elif ch == ']': brackets -= 1 # Print lines around the Table at end of references (lines 474-490) if i >= 474 and i <= 492: print(f'Line {i}: [ ={brackets:+d} | {line[:90]}') "
# rows:[ at line 477 opens a bracket that's not closed before line 484 # Line 484: })] closes: TableCell{}, children[], TableRow() but rows:[ is still open # Need to add ] to close rows:[ — fix line 484 from })]}) to })]}) with rows closed # Line 484 current: " })]}" which closes TableCell{} children[] TableRow() # But rows:[ needs a ] AND then Table{} needs } # Current: rows:[TableRow({...})] - that's rows:[...] correctly if line 477 = rows:[new TableRow({children:[new TableCell({ # TableCell closure needs: })] closes TableCell{} and children[] # TableRow closure needs: }) closes TableRow({}) # rows closure needs: ] closes rows:[ # Table closure needs: }) closes Table({}) # Line 484: " })]}" closes: TableCell{} + children[] + TableRow ({children:[...]) + rows:[...] # = } closes TableCell{} # ) closes TableCell( # ] closes children:[ # } closes TableRow{} # ) closes TableRow( # -- that's 5 chars: })]}) -- but rows:[ is not closed! # Need: })]}), which is: }) closes TableRow ] closes rows:[ }) closes Table({ python3 -c " lines = open('/home/daytona/workspace/alphafold-ppt/create_summary.js').readlines() print(repr(lines[483])) # line 484 print(repr(lines[484])) # line 485 "
~/alphafold-ppt/create_summary.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/alphafold-ppt/create_summary.js'
node --check /home/daytona/workspace/alphafold-ppt/create_summary.js 2>&1 && echo "SYNTAX OK" node /home/daytona/workspace/alphafold-ppt/create_summary.js 2>&1 ls -lh /home/daytona/workspace/alphafold-ppt/AlphaFold3_Research_Summary.docx 2>/dev/null
AlphaFold Complete
Presentation · PPTX
AlphaFold3 Research
Presentation · PPTX
})]}) needed to be })]}) ]})) that I couldn't fully resolve within the budget.open this file
Generate 3D protein structure visualization (PyMOL/UCSF Chimera script)