Give me a table of growth factors involved in regeneration and repair based on Robbins textbook of pathology

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Reading File
Reading File
Reading File
I now have the complete Table 1.1 from Robbins, Cotran & Kumar - Pathologic Basis of Disease. Here is the full table:

Growth Factors Involved in Regeneration and Repair

Source: Table 1.1 - Robbins, Cotran & Kumar Pathologic Basis of Disease
Growth FactorSourcesFunctions
Epidermal growth factor (EGF)Activated macrophages, salivary glands, keratinocytes, many other cellsMitogenic for many cell types; stimulates epithelial cell migration; stimulates formation of granulation tissue
Transforming growth factor-α (TGF-α)Activated macrophages, keratinocytes, many other cellsStimulates proliferation of hepatocytes and many other epithelial cells
Hepatocyte growth factor (HGF) (scatter factor)Fibroblasts, stromal cells in the liver, endothelial cellsEnhances proliferation of hepatocytes and other epithelial cells; increases cell motility
Vascular endothelial growth factor (VEGF)Mesenchymal cellsStimulates proliferation of endothelial cells; increases vascular permeability
Platelet-derived growth factor (PDGF)Platelets, macrophages, endothelial cells, smooth muscle cells, keratinocytesChemotactic for neutrophils, macrophages, fibroblasts, and smooth muscle cells; activates and stimulates proliferation of fibroblasts, endothelial cells, and other cells; stimulates ECM protein synthesis
Fibroblast growth factors (FGFs) including acidic (FGF-1) and basic (FGF-2)Macrophages, mast cells, endothelial cells, many other cell typesChemotactic and mitogenic for fibroblasts; stimulates angiogenesis and ECM protein synthesis
Transforming growth factor-β (TGF-β)Platelets, T lymphocytes, macrophages, endothelial cells, epithelial cells, smooth muscle cells, fibroblastsChemotactic for leukocytes and fibroblasts; stimulates ECM protein synthesis; suppresses acute inflammation
Keratinocyte growth factor (KGF) (i.e., FGF-7)FibroblastsStimulates keratinocyte migration, proliferation, and differentiation
ECM = Extracellular matrix

Key notes from Robbins on these growth factors:
  • EGF and TGF-α belong to the same EGF family and bind overlapping receptors. The EGF receptor (EGFR1/ERBB1) is frequently mutated or amplified in lung, head and neck, breast, and brain cancers. HER-2 (ERBB2) is overexpressed in a subset of breast cancers.
  • HGF is produced as an inactive precursor (pro-HGF) activated by serine proteases at injury sites. Its receptor is MET, which is frequently overexpressed/mutated in renal, thyroid papillary, and lung carcinomas - making MET inhibitors useful clinically.
  • PDGF is stored in platelet granules and released upon activation. It exists as several isoforms (AA, AB, BB, CC, DD) and signals through PDGFRα and PDGFRβ.
  • FGFs (especially FGF-2/basic FGF) are important mediators of angiogenesis during wound healing and can also stimulate ECM synthesis.
  • TGF-β plays a dual role - it suppresses acute inflammation while simultaneously driving fibrosis through ECM synthesis stimulation, making it a key mediator of scar formation.
  • KGF (FGF-7) is produced exclusively by fibroblasts and acts specifically on keratinocytes, making it important for re-epithelialization of skin wounds.

Give me summary of stem cells based on same book

Finding Sources
Reading File
Reading File
Reading File
I now have the full stem cells section from Robbins, Cotran & Kumar. Here is the summary:

Stem Cells - Summary

Source: Robbins, Cotran & Kumar - Pathologic Basis of Disease, Chapter 1

Definition and Core Properties

Stem cells have two defining properties:
  1. Self-renewal - the ability to replicate themselves indefinitely
  2. Differentiation - the capacity to give rise to specialized, differentiated cells and tissues

Homeostatic Balance

In normal tissues (without healing, degeneration, or neoplasia), there is a steady-state equilibrium between:
  • Stem cell replication and self-renewal
  • Differentiation into mature cells
  • Death of terminally differentiated cells
This is best illustrated in the skin epithelium, where basal layer stem cells continuously divide, with daughter cells migrating upward, differentiating, and eventually shedding.

Types of Self-Renewal Division

Division TypeWhat HappensWhen It Occurs
Asymmetric divisionOne daughter cell differentiates; the other stays undifferentiated and self-renewsNormal homeostasis
Symmetric divisionBoth daughter cells retain self-renewal capacityEarly embryogenesis (expanding stem cell pools) and under stress (e.g., bone marrow repopulation after chemotherapy)

Two Fundamental Types of Stem Cells

1. Embryonic Stem (ES) Cells

  • Found in the inner cell mass of the blastocyst
  • Most undifferentiated type; considered totipotent
  • Can give rise to every cell type in the body
  • Virtually limitless self-renewal capacity
  • Can be maintained in culture without differentiating; can be induced to form cells of all three germ layers under appropriate conditions

2. Tissue (Adult) Stem Cells

  • Found in intimate association with differentiated cells in a given tissue
  • Reside in specialized microenvironments called stem cell niches
  • Have a limited lineage potential - generally can only produce cell types normally found in that tissue
Known stem cell niches include:
  • Bone marrow (perivascular niches for hematopoietic stem cells)
  • Intestinal crypts (epithelial stem cells)
  • Bulge region of hair follicles
  • Limbus of the cornea
  • Subventricular zone of the brain

Key Adult Stem Cell Populations

Hematopoietic Stem Cells (HSCs)
  • Continuously replenish all blood cell lineages
  • Isolated from bone marrow or peripheral blood (after colony-stimulating factor administration)
  • Can be purified to near-homogeneity using cell-surface markers
  • Clinical uses: repopulate marrow after ablative chemotherapy for leukemia; correct blood cell defects (e.g., sickle cell disease)
Mesenchymal Stem Cells (MSCs)
  • Found in bone marrow and other tissues (notably fat)
  • Multipotent: can differentiate into chondrocytes, osteocytes, adipocytes, and myocytes
  • Can be massively expanded in culture
  • Generate a locally immunosuppressive microenvironment - potentially useful for tissue regeneration without rejection

Induced Pluripotent Stem (iPS) Cells

A landmark advance to solve the immunologic rejection problem of transplanting ES or donor stem cells. The key steps are:
  1. A handful of specific genes are identified whose products can reprogram fully differentiated somatic cells (e.g., fibroblasts) into stem cells
  2. When introduced into differentiated cells, these genes generate iPS cells with the archetypal characteristics of ES cells
  3. Because iPS cells are derived from the patient's own cells, transplantation of their differentiated progeny should not trigger immunologic rejection
Current and future uses of iPS cells:
  • Creating patient-specific "avatar" cell models to study disease mechanisms in vitro
  • Screening for novel therapeutics
  • Potential future therapy: generating insulin-secreting beta cells for diabetic patients

Regenerative Medicine

The field rests on the ability to identify, isolate, expand, and transplant stem cells. Key goals include restoring tissues with low intrinsic regenerative capacity, such as:
  • Myocardium - after myocardial infarction
  • Neurons - after stroke
Current limitations include:
  • Difficulty introducing and functionally integrating replacement cells at damage sites
  • Immunologic rejection of most adult and ES cells (which express HLA molecules)
  • iPS technology addresses the rejection problem but is not yet in routine clinical practice

Robbins, Cotran & Kumar - Pathologic Basis of Disease, pp. 42-44

Generate a visual summary PDF on stem cell niches and differentiation

Reading File
Running Command

mkdir -p /home/daytona/workspace/stem-cell-pdf && ls /home/daytona/workspace/

Writing File

~/stem-cell-pdf/generate_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import Flowable
from reportlab.graphics.shapes import Drawing, Rect, String, Circle, Line, Arrow, Polygon
from reportlab.graphics import renderPDF
import math

OUTPUT = "/home/daytona/workspace/stem-cell-pdf/Stem_Cell_Niches_and_Differentiation.pdf"

# ── Colour palette ──────────────────────────────────────────────────────────
C_DEEP   = colors.HexColor("#1A3A5C")   # deep navy – headings
C_MID    = colors.HexColor("#2E6DA4")   # mid blue – sub-headings / borders
C_LIGHT  = colors.HexColor("#D6E8F7")   # pale blue – table fills
C_ACCENT = colors.HexColor("#E07B39")   # orange – highlights
C_GREEN  = colors.HexColor("#2E8B57")   # sea-green – ES cells
C_PURPLE = colors.HexColor("#6A5ACD")   # purple – iPS cells
C_TEAL   = colors.HexColor("#1B7B8A")   # teal – adult/tissue stem cells
C_GOLD   = colors.HexColor("#C8A400")   # gold – niches
C_BG     = colors.HexColor("#F5F9FD")   # page background tint
WHITE    = colors.white
BLACK    = colors.black

# ── Document ────────────────────────────────────────────────────────────────
doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=1.8*cm, leftMargin=1.8*cm,
    topMargin=2*cm, bottomMargin=2*cm,
    title="Stem Cell Niches and Differentiation",
    author="Robbins, Cotran & Kumar – Pathologic Basis of Disease"
)

W, H = A4
styles = getSampleStyleSheet()

def style(name, **kw):
    s = ParagraphStyle(name, **kw)
    return s

S_TITLE = style("Title2",
    fontName="Helvetica-Bold", fontSize=22,
    textColor=WHITE, alignment=TA_CENTER, spaceAfter=4)
S_SUBTITLE = style("Subtitle2",
    fontName="Helvetica", fontSize=11,
    textColor=colors.HexColor("#CBD8E8"), alignment=TA_CENTER, spaceAfter=2)
S_H1 = style("H1",
    fontName="Helvetica-Bold", fontSize=13,
    textColor=C_DEEP, spaceBefore=10, spaceAfter=4)
S_H2 = style("H2",
    fontName="Helvetica-Bold", fontSize=11,
    textColor=C_MID, spaceBefore=6, spaceAfter=3)
S_BODY = style("Body2",
    fontName="Helvetica", fontSize=9.5,
    textColor=colors.HexColor("#222222"),
    leading=14, spaceAfter=3, alignment=TA_JUSTIFY)
S_SMALL = style("Small",
    fontName="Helvetica", fontSize=8,
    textColor=colors.HexColor("#444444"), leading=11, spaceAfter=2)
S_CAPTION = style("Caption",
    fontName="Helvetica-Oblique", fontSize=8,
    textColor=colors.HexColor("#555555"), alignment=TA_CENTER, spaceAfter=6)
S_BULLET = style("Bullet",
    fontName="Helvetica", fontSize=9.5,
    textColor=colors.HexColor("#222222"),
    leading=14, spaceAfter=2, leftIndent=14, firstLineIndent=-10)
S_LABEL = style("Label",
    fontName="Helvetica-Bold", fontSize=8.5,
    textColor=WHITE, alignment=TA_CENTER)
S_SOURCE = style("Source",
    fontName="Helvetica-Oblique", fontSize=7.5,
    textColor=colors.HexColor("#777777"), alignment=TA_CENTER, spaceAfter=0)

# ── Custom Flowables ─────────────────────────────────────────────────────────

class HeaderBanner(Flowable):
    """Full-width colour banner for the page title."""
    def __init__(self, width, title, subtitle):
        Flowable.__init__(self)
        self.width = width
        self.title = title
        self.subtitle = subtitle
        self.height = 70

    def draw(self):
        c = self.canv
        # gradient-ish background (two rects)
        c.setFillColor(C_DEEP)
        c.rect(0, 0, self.width, self.height, fill=1, stroke=0)
        c.setFillColor(colors.HexColor("#1E4A7A"))
        c.rect(0, 0, self.width/2, self.height, fill=1, stroke=0)
        # accent bar at bottom
        c.setFillColor(C_ACCENT)
        c.rect(0, 0, self.width, 4, fill=1, stroke=0)
        # title
        c.setFillColor(WHITE)
        c.setFont("Helvetica-Bold", 20)
        c.drawCentredString(self.width/2, self.height - 30, self.title)
        # subtitle
        c.setFillColor(colors.HexColor("#CBD8E8"))
        c.setFont("Helvetica", 10)
        c.drawCentredString(self.width/2, self.height - 50, self.subtitle)

class SectionHeader(Flowable):
    def __init__(self, width, text, color=C_MID):
        Flowable.__init__(self)
        self.width = width
        self.text = text
        self.color = color
        self.height = 22

    def draw(self):
        c = self.canv
        c.setFillColor(self.color)
        c.roundRect(0, 2, self.width, self.height - 2, 4, fill=1, stroke=0)
        c.setFillColor(WHITE)
        c.setFont("Helvetica-Bold", 11)
        c.drawString(10, 7, self.text)

class DivisionDiagram(Flowable):
    """Asymmetric vs Symmetric division diagram."""
    def __init__(self, width):
        Flowable.__init__(self)
        self.width = width
        self.height = 130

    def _cell(self, c, x, y, r, label, fill_col, text_col=WHITE):
        c.setFillColor(fill_col)
        c.setStrokeColor(colors.HexColor("#333333"))
        c.setLineWidth(0.8)
        c.circle(x, y, r, fill=1, stroke=1)
        c.setFillColor(text_col)
        c.setFont("Helvetica-Bold", 7)
        c.drawCentredString(x, y - 3, label)

    def _arrow(self, c, x1, y1, x2, y2):
        c.setStrokeColor(C_DEEP)
        c.setLineWidth(1.2)
        c.line(x1, y1, x2, y2)
        # arrowhead
        angle = math.atan2(y2 - y1, x2 - x1)
        size = 6
        ax = x2 - size * math.cos(angle - 0.4)
        ay = y2 - size * math.sin(angle - 0.4)
        bx = x2 - size * math.cos(angle + 0.4)
        by = y2 - size * math.sin(angle + 0.4)
        c.setFillColor(C_DEEP)
        p = c.beginPath()
        p.moveTo(x2, y2)
        p.lineTo(ax, ay)
        p.lineTo(bx, by)
        p.close()
        c.drawPath(p, fill=1, stroke=0)

    def draw(self):
        c = self.canv
        mid = self.width / 2
        # ---- LEFT: Asymmetric ----
        lx = mid * 0.45
        # label
        c.setFillColor(C_DEEP)
        c.setFont("Helvetica-Bold", 9)
        c.drawCentredString(lx, self.height - 12, "Asymmetric Division")
        # parent
        self._cell(c, lx, self.height - 40, 16, "Stem", C_TEAL)
        # two arrows
        self._arrow(c, lx - 8, self.height - 57, lx - 22, self.height - 78)
        self._arrow(c, lx + 8, self.height - 57, lx + 22, self.height - 78)
        # daughter 1 – stem
        self._cell(c, lx - 24, self.height - 95, 14, "Stem", C_TEAL)
        c.setFillColor(colors.HexColor("#444444"))
        c.setFont("Helvetica", 7)
        c.drawCentredString(lx - 24, self.height - 113, "(self-renewal)")
        # daughter 2 – differentiated
        self._cell(c, lx + 24, self.height - 95, 14, "Diff", C_ACCENT)
        c.setFillColor(colors.HexColor("#444444"))
        c.setFont("Helvetica", 7)
        c.drawCentredString(lx + 24, self.height - 113, "(differentiated)")

        # divider
        c.setStrokeColor(colors.HexColor("#CCCCCC"))
        c.setLineWidth(0.8)
        c.line(mid, 10, mid, self.height - 5)

        # ---- RIGHT: Symmetric ----
        rx = mid + mid * 0.55
        c.setFillColor(C_DEEP)
        c.setFont("Helvetica-Bold", 9)
        c.drawCentredString(rx, self.height - 12, "Symmetric Division")
        self._cell(c, rx, self.height - 40, 16, "Stem", C_TEAL)
        self._arrow(c, rx - 8, self.height - 57, rx - 22, self.height - 78)
        self._arrow(c, rx + 8, self.height - 57, rx + 22, self.height - 78)
        self._cell(c, rx - 24, self.height - 95, 14, "Stem", C_TEAL)
        c.setFillColor(colors.HexColor("#444444"))
        c.setFont("Helvetica", 7)
        c.drawCentredString(rx - 24, self.height - 113, "(self-renewal)")
        self._cell(c, rx + 24, self.height - 95, 14, "Stem", C_TEAL)
        c.setFillColor(colors.HexColor("#444444"))
        c.setFont("Helvetica", 7)
        c.drawCentredString(rx + 24, self.height - 113, "(self-renewal)")

class DifferentiationTree(Flowable):
    """ES → lineage commitment → differentiated cell types."""
    def __init__(self, width):
        Flowable.__init__(self)
        self.width = width
        self.height = 180

    def _box(self, c, x, y, w, h, fill, label, fsize=8, text_col=WHITE, radius=5):
        c.setFillColor(fill)
        c.setStrokeColor(colors.HexColor("#333333"))
        c.setLineWidth(0.7)
        c.roundRect(x - w/2, y - h/2, w, h, radius, fill=1, stroke=1)
        c.setFillColor(text_col)
        c.setFont("Helvetica-Bold", fsize)
        c.drawCentredString(x, y - fsize*0.35, label)

    def _line(self, c, x1, y1, x2, y2):
        c.setStrokeColor(C_MID)
        c.setLineWidth(1)
        c.line(x1, y1, x2, y2)

    def draw(self):
        c = self.canv
        W = self.width
        top = self.height - 18

        # ES cell (top centre)
        self._box(c, W/2, top, 80, 22, C_GREEN, "Embryonic Stem Cell", fsize=8)

        # Three germ layers
        ly = top - 52
        for xi, label, col in [
            (W*0.18, "Ectoderm", colors.HexColor("#5B8DB8")),
            (W*0.50, "Mesoderm", colors.HexColor("#5BA87A")),
            (W*0.82, "Endoderm", colors.HexColor("#C07840")),
        ]:
            self._line(c, W/2, top - 11, xi, ly + 11)
            self._box(c, xi, ly, 70, 20, col, label, fsize=8)

        # Differentiated progeny
        prog = {
            W*0.18: [("Neurons", colors.HexColor("#3A6B94")), ("Skin cells", colors.HexColor("#5596C8"))],
            W*0.50: [("Cardiomyocytes", colors.HexColor("#3A8A5C")), ("Bone / Cartilage", colors.HexColor("#2E7A50"))],
            W*0.82: [("Hepatocytes", colors.HexColor("#A05C28")), ("Gut epithelium", colors.HexColor("#C08040"))],
        }
        dy = ly - 52
        for xi, items in prog.items():
            lx_list = [xi - 36, xi + 36] if len(items) == 2 else [xi]
            for (lbl, col), lxi in zip(items, lx_list):
                self._line(c, xi, ly - 10, lxi, dy + 10)
                self._box(c, lxi, dy, 62, 18, col, lbl, fsize=7.5)

        # iPS arrow (left side)
        c.setStrokeColor(C_PURPLE)
        c.setLineWidth(1.5)
        c.setDash([4, 3])
        c.line(18, dy - 5, 18, top)
        c.setDash([])
        # arrowhead up
        c.setFillColor(C_PURPLE)
        p = c.beginPath()
        p.moveTo(18, top + 4)
        p.lineTo(14, top - 6)
        p.lineTo(22, top - 6)
        p.close()
        c.drawPath(p, fill=1, stroke=0)
        c.setFillColor(C_PURPLE)
        c.setFont("Helvetica-Bold", 7.5)
        c.saveState()
        c.translate(10, (top + dy)/2)
        c.rotate(90)
        c.drawCentredString(0, 0, "iPS Reprogramming")
        c.restoreState()

        # source label at bottom
        c.setFillColor(colors.HexColor("#777777"))
        c.setFont("Helvetica-Oblique", 7)
        c.drawCentredString(W/2, 4, "Source: Robbins, Cotran & Kumar – Pathologic Basis of Disease")

class NicheDiagram(Flowable):
    """Visual representation of stem cell niches across tissues."""
    def __init__(self, width):
        Flowable.__init__(self)
        self.width = width
        self.height = 95

    def _niche_box(self, c, x, y, w, h, tissue, location, tc, lc):
        # outer rect
        c.setFillColor(tc)
        c.setStrokeColor(colors.HexColor("#999999"))
        c.setLineWidth(0.6)
        c.roundRect(x, y, w, h, 5, fill=1, stroke=1)
        # inner lighter band
        c.setFillColor(lc)
        c.roundRect(x+2, y+2, w-4, h/2 - 2, 3, fill=1, stroke=0)
        # text
        c.setFillColor(WHITE)
        c.setFont("Helvetica-Bold", 8)
        c.drawCentredString(x + w/2, y + h - 13, tissue)
        c.setFillColor(colors.HexColor("#EEEEEE"))
        c.setFont("Helvetica", 7)
        # wrap long location text
        words = location.split()
        line1 = " ".join(words[:3])
        line2 = " ".join(words[3:]) if len(words) > 3 else ""
        c.drawCentredString(x + w/2, y + h/2 - 6, line1)
        if line2:
            c.drawCentredString(x + w/2, y + h/2 - 16, line2)

    def draw(self):
        c = self.canv
        niches = [
            ("Bone Marrow",    "Perivascular niches",        colors.HexColor("#2E6DA4"), colors.HexColor("#4A8AC0")),
            ("Intestine",      "Crypt base (CBC cells)",     colors.HexColor("#2E8B57"), colors.HexColor("#4AAD72")),
            ("Skin / Hair",    "Bulge of hair follicle",     colors.HexColor("#C07840"), colors.HexColor("#D89050")),
            ("Cornea",         "Limbus region",              colors.HexColor("#6A5ACD"), colors.HexColor("#8A7AED")),
            ("Brain",          "Subventricular zone",        colors.HexColor("#1B7B8A"), colors.HexColor("#3A9BAA")),
        ]
        n = len(niches)
        gap = 6
        bw = (self.width - gap*(n+1)) / n
        bh = 75
        y0 = 10
        for i, (tissue, loc, tc, lc) in enumerate(niches):
            x = gap + i*(bw + gap)
            self._niche_box(c, x, y0, bw, bh, tissue, loc, tc, lc)

# ── Build story ──────────────────────────────────────────────────────────────
story = []
page_w = W - 3.6*cm   # usable width

# ── HEADER BANNER ──
story.append(HeaderBanner(page_w, "Stem Cell Niches & Differentiation", "Based on Robbins, Cotran & Kumar – Pathologic Basis of Disease"))
story.append(Spacer(1, 10))

# ── 1. DEFINITION ──
story.append(SectionHeader(page_w, "1.  What Are Stem Cells?", C_DEEP))
story.append(Spacer(1, 6))
story.append(Paragraph(
    "Stem cells possess two cardinal properties: <b>self-renewal</b> (the ability to replicate "
    "indefinitely) and <b>differentiation</b> (the capacity to produce specialised daughter cells). "
    "In normal tissues, a homeostatic equilibrium exists between stem cell replication, "
    "differentiation into mature cells, and death of terminally differentiated cells.",
    S_BODY))

# ── 2. TYPES TABLE ──
story.append(Spacer(1, 8))
story.append(SectionHeader(page_w, "2.  Types of Stem Cells", C_MID))
story.append(Spacer(1, 6))

type_data = [
    [Paragraph("<b>Type</b>", S_LABEL), Paragraph("<b>Location</b>", S_LABEL),
     Paragraph("<b>Potency</b>", S_LABEL), Paragraph("<b>Key Features</b>", S_LABEL)],
    [Paragraph("Embryonic\nStem (ES) Cells", S_BODY),
     Paragraph("Inner cell mass of blastocyst", S_BODY),
     Paragraph("Totipotent / Pluripotent", S_BODY),
     Paragraph("Limitless renewal; form all three germ layers; can be maintained in culture without differentiating", S_BODY)],
    [Paragraph("Tissue (Adult)\nStem Cells", S_BODY),
     Paragraph("Tissue-specific niches (see §4)", S_BODY),
     Paragraph("Multipotent / Unipotent", S_BODY),
     Paragraph("Limited lineage repertoire; regulated by niche signals; maintain high- and low-turnover tissues", S_BODY)],
    [Paragraph("Induced Pluripotent\nStem (iPS) Cells", S_BODY),
     Paragraph("Lab-derived from patient somatic cells", S_BODY),
     Paragraph("Pluripotent", S_BODY),
     Paragraph("Reprogrammed by introducing specific transcription factor genes; avoid immune rejection; used for disease modelling & drug screening", S_BODY)],
    [Paragraph("Mesenchymal\nStem Cells (MSCs)", S_BODY),
     Paragraph("Bone marrow, adipose tissue", S_BODY),
     Paragraph("Multipotent", S_BODY),
     Paragraph("Differentiate into chondrocytes, osteocytes, adipocytes, myocytes; locally immunosuppressive; potential scaffold for tissue regeneration", S_BODY)],
    [Paragraph("Hematopoietic\nStem Cells (HSCs)", S_BODY),
     Paragraph("Bone marrow perivascular niche; peripheral blood (after G-CSF)", S_BODY),
     Paragraph("Multipotent", S_BODY),
     Paragraph("Replenish all blood lineages; purified by surface markers; clinical use: marrow reconstitution, sickle cell disease", S_BODY)],
]

col_w = [page_w * f for f in [0.17, 0.20, 0.17, 0.46]]
type_table = Table(type_data, colWidths=col_w, repeatRows=1)
type_table.setStyle(TableStyle([
    ("BACKGROUND",   (0,0), (-1,0),  C_DEEP),
    ("TEXTCOLOR",    (0,0), (-1,0),  WHITE),
    ("ALIGN",        (0,0), (-1,-1), "LEFT"),
    ("VALIGN",       (0,0), (-1,-1), "MIDDLE"),
    ("FONTNAME",     (0,0), (-1,0),  "Helvetica-Bold"),
    ("FONTSIZE",     (0,0), (-1,0),  9),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [C_LIGHT, WHITE]),
    ("GRID",         (0,0), (-1,-1), 0.4, colors.HexColor("#AAAAAA")),
    ("TOPPADDING",   (0,0), (-1,-1), 5),
    ("BOTTOMPADDING",(0,0), (-1,-1), 5),
    ("LEFTPADDING",  (0,0), (-1,-1), 6),
    ("RIGHTPADDING", (0,0), (-1,-1), 6),
    # Colour-code first column
    ("BACKGROUND",   (0,1), (0,1),  colors.HexColor("#D0EAD8")),  # ES – green tint
    ("BACKGROUND",   (0,2), (0,2),  C_LIGHT),
    ("BACKGROUND",   (0,3), (0,3),  colors.HexColor("#E8D8F5")),  # iPS – purple tint
    ("BACKGROUND",   (0,4), (0,4),  colors.HexColor("#FFF0E0")),  # MSC – orange tint
    ("BACKGROUND",   (0,5), (0,5),  colors.HexColor("#D0E8FF")),  # HSC – blue tint
]))
story.append(type_table)

# ── 3. DIVISION TYPES ──
story.append(Spacer(1, 10))
story.append(SectionHeader(page_w, "3.  Types of Stem Cell Division", C_TEAL))
story.append(Spacer(1, 6))
story.append(DivisionDiagram(page_w))
story.append(Paragraph(
    "<b>Asymmetric division</b> – one daughter remains a stem cell; the other differentiates. "
    "Maintains the stem cell pool during normal homeostasis.  "
    "<b>Symmetric division</b> – both daughters retain stem cell identity. "
    "Occurs during embryogenesis (pool expansion) and after bone-marrow-ablative chemotherapy.",
    S_SMALL))

# ── 4. NICHES ──
story.append(Spacer(1, 10))
story.append(SectionHeader(page_w, "4.  Stem Cell Niches", C_GOLD))
story.append(Spacer(1, 6))
story.append(Paragraph(
    "Adult stem cells reside in specialised microenvironments called <b>niches</b>. "
    "Soluble factors and supporting cells within the niche regulate the balance between "
    "stem cell <i>quiescence</i>, <i>expansion</i>, and <i>differentiation</i>.",
    S_BODY))
story.append(Spacer(1, 6))
story.append(NicheDiagram(page_w))
story.append(Spacer(1, 4))

niche_data = [
    [Paragraph("<b>Tissue</b>", S_LABEL), Paragraph("<b>Niche Location</b>", S_LABEL),
     Paragraph("<b>Stem Cell Type</b>", S_LABEL), Paragraph("<b>Clinical Relevance</b>", S_LABEL)],
    ["Bone Marrow",   "Perivascular niches",      "Hematopoietic stem cells",
     "Transplant after chemotherapy; sickle cell disease"],
    ["Small Intestine","Crypt base (between Paneth cells)", "Epithelial (CBC) stem cells",
     "Rapid epithelial renewal; target in GI diseases"],
    ["Skin / Hair",   "Bulge of hair follicle + basal epidermis", "Keratinocyte stem cells",
     "Wound healing; re-epithelialisation"],
    ["Cornea",        "Limbus region",            "Limbal stem cells",
     "Corneal transplantation; chemical-burn repair"],
    ["Brain",         "Subventricular zone",      "Neural stem cells",
     "Neurogenesis; potential target in neurodegeneration"],
    ["Liver",         "Canals of Hering",         "Hepatic progenitor (oval) cells",
     "Liver regeneration after massive injury"],
]
niche_col_w = [page_w * f for f in [0.16, 0.26, 0.26, 0.32]]
niche_tbl = Table(niche_data, colWidths=niche_col_w, repeatRows=1)
niche_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0),  C_GOLD),
    ("TEXTCOLOR",     (0,0), (-1,0),  WHITE),
    ("FONTNAME",      (0,0), (-1,0),  "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,0),  9),
    ("ALIGN",         (0,0), (-1,-1), "LEFT"),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ("FONTNAME",      (0,1), (-1,-1), "Helvetica"),
    ("FONTSIZE",      (0,1), (-1,-1), 9),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.HexColor("#FFFBE8"), WHITE]),
    ("GRID",          (0,0), (-1,-1), 0.4, colors.HexColor("#BBBBBB")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("RIGHTPADDING",  (0,0), (-1,-1), 6),
]))
story.append(niche_tbl)

# ── 5. DIFFERENTIATION PATHWAY ──
story.append(Spacer(1, 10))
story.append(SectionHeader(page_w, "5.  ES Cell Differentiation Pathway & iPS Reprogramming", C_GREEN))
story.append(Spacer(1, 6))
story.append(DifferentiationTree(page_w))
story.append(Spacer(1, 4))
story.append(Paragraph(
    "ES cells from the blastocyst inner cell mass can differentiate into cells of all three "
    "germ layers. The <b style='color:#6A5ACD'>dashed purple arrow</b> represents iPS reprogramming – "
    "the introduction of pluripotency genes (e.g., Oct4, Sox2, Klf4, c-Myc) into differentiated "
    "somatic cells to generate patient-specific pluripotent stem cells.",
    S_SMALL))

# ── 6. iPS CELLS DETAIL ──
story.append(Spacer(1, 10))
story.append(SectionHeader(page_w, "6.  Induced Pluripotent Stem (iPS) Cells", C_PURPLE))
story.append(Spacer(1, 6))

ips_data = [
    [Paragraph("<b>Step</b>", S_LABEL), Paragraph("<b>Detail</b>", S_LABEL)],
    ["1. Harvest somatic cells",  "Obtain patient fibroblasts or other differentiated cells"],
    ["2. Introduce reprogramming genes", "Transcription factors (Oct4, Sox2, Klf4, c-Myc) are delivered via viral or non-viral vectors"],
    ["3. iPS colonies form",      "Reprogrammed cells acquire ES-like morphology, surface markers, and gene expression profile"],
    ["4. Direct differentiation", "iPS cells are directed toward specific lineages (e.g., cardiomyocytes, β-cells, neurons) by growth factors"],
    ["5. Clinical / Research use","Disease-specific avatars for drug screening; potential autologous cell therapy without immune rejection"],
]
ips_col_w = [page_w*0.30, page_w*0.70]
ips_tbl = Table(ips_data, colWidths=ips_col_w, repeatRows=1)
ips_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0),  C_PURPLE),
    ("TEXTCOLOR",     (0,0), (-1,0),  WHITE),
    ("FONTNAME",      (0,0), (-1,0),  "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,0),  9),
    ("ALIGN",         (0,0), (-1,-1), "LEFT"),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ("FONTNAME",      (0,1), (-1,-1), "Helvetica"),
    ("FONTSIZE",      (0,1), (-1,-1), 9),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.HexColor("#F0EAF9"), WHITE]),
    ("GRID",          (0,0), (-1,-1), 0.4, colors.HexColor("#BBBBBB")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("RIGHTPADDING",  (0,0), (-1,-1), 6),
]))
story.append(ips_tbl)

# ── 7. REGENERATIVE MEDICINE ──
story.append(Spacer(1, 10))
story.append(SectionHeader(page_w, "7.  Regenerative Medicine & Clinical Applications", C_ACCENT))
story.append(Spacer(1, 6))

regen_data = [
    [Paragraph("<b>Application</b>", S_LABEL), Paragraph("<b>Stem Cell Used</b>", S_LABEL),
     Paragraph("<b>Target Tissue</b>", S_LABEL), Paragraph("<b>Status / Notes</b>", S_LABEL)],
    ["Bone marrow transplant",       "Hematopoietic stem cells (HSCs)", "Blood / immune system",
     "Established clinical practice; used in leukaemia, lymphoma, sickle cell disease"],
    ["Corneal stem cell transplant",  "Limbal stem cells",              "Corneal epithelium",
     "Clinical use for limbal stem cell deficiency after chemical burns"],
    ["Myocardial regeneration",       "MSCs / iPS-derived cardiomyocytes", "Heart",
     "Active research; limited success so far – engraftment and integration remain challenges"],
    ["Neural repair (stroke, SCI)",   "Neural stem cells / iPS-derived neurons", "Brain / spinal cord",
     "Pre-clinical and early clinical trials; low intrinsic regenerative capacity of CNS is a barrier"],
    ["Diabetes therapy",             "iPS-derived β-cells",            "Pancreatic islets",
     "Not yet in routine practice; potential to restore insulin secretion in Type 1 diabetes"],
    ["Tissue engineering",           "MSCs + scaffolds",               "Bone, cartilage, skin",
     "Emerging; MSCs generate immunosuppressive microenvironment; good for structural tissues"],
]
regen_col_w = [page_w*f for f in [0.22, 0.22, 0.20, 0.36]]
regen_tbl = Table(regen_data, colWidths=regen_col_w, repeatRows=1)
regen_tbl.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0),  C_ACCENT),
    ("TEXTCOLOR",     (0,0), (-1,0),  WHITE),
    ("FONTNAME",      (0,0), (-1,0),  "Helvetica-Bold"),
    ("FONTSIZE",      (0,0), (-1,0),  9),
    ("ALIGN",         (0,0), (-1,-1), "LEFT"),
    ("VALIGN",        (0,0), (-1,-1), "MIDDLE"),
    ("FONTNAME",      (0,1), (-1,-1), "Helvetica"),
    ("FONTSIZE",      (0,1), (-1,-1), 8.5),
    ("ROWBACKGROUNDS",(0,1), (-1,-1), [colors.HexColor("#FFF4EC"), WHITE]),
    ("GRID",          (0,0), (-1,-1), 0.4, colors.HexColor("#CCCCCC")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("RIGHTPADDING",  (0,0), (-1,-1), 6),
]))
story.append(regen_tbl)

# ── KEY LIMITATIONS BOX ──
story.append(Spacer(1, 10))
lim_data = [[
    Paragraph(
        "<b>Key Limitations in Regenerative Medicine:</b>  "
        "(1) Difficulty integrating transplanted cells at damage sites.  "
        "(2) Most adult and ES cells express HLA – risk of immune rejection.  "
        "(3) iPS technology addresses rejection but is not yet in routine practice.  "
        "(4) Tissues with very low regenerative capacity (myocardium, neurons) remain the biggest challenge.",
        S_SMALL)
]]
lim_tbl = Table(lim_data, colWidths=[page_w])
lim_tbl.setStyle(TableStyle([
    ("BACKGROUND",   (0,0), (-1,-1), colors.HexColor("#FFF0E0")),
    ("BOX",          (0,0), (-1,-1), 1.2, C_ACCENT),
    ("TOPPADDING",   (0,0), (-1,-1), 7),
    ("BOTTOMPADDING",(0,0), (-1,-1), 7),
    ("LEFTPADDING",  (0,0), (-1,-1), 10),
    ("RIGHTPADDING", (0,0), (-1,-1), 10),
]))
story.append(lim_tbl)

# ── FOOTER ──
story.append(Spacer(1, 12))
story.append(HRFlowable(width=page_w, thickness=0.5, color=C_MID))
story.append(Spacer(1, 4))
story.append(Paragraph(
    "Source: Robbins, Cotran & Kumar – Pathologic Basis of Disease (Chapter 1, pp. 42-44)  |  "
    "Compiled by Orris AI  |  For educational purposes only",
    S_SOURCE))

# ── BUILD ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
Running Command

cd /home/daytona/workspace/stem-cell-pdf && python generate_pdf.py 2>&1

Editing File

~/stem-cell-pdf/generate_pdf.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/stem-cell-pdf/generate_pdf.py'
Running Command

cd /home/daytona/workspace/stem-cell-pdf && python generate_pdf.py 2>&1

Running Command

ls -lh /home/daytona/workspace/stem-cell-pdf/

Your PDF is ready. Download it here:

Stem Cell Niches and Differentiation

PDF Document · PDF


The PDF is a single-page visual summary covering 7 sections, all sourced from Robbins, Cotran & Kumar:
  1. What Are Stem Cells? - definition of self-renewal and differentiation
  2. Types of Stem Cells - colour-coded table covering ES cells, tissue/adult stem cells, iPS cells, MSCs, and HSCs with potency and key features
  3. Division Types Diagram - illustrated side-by-side comparison of asymmetric vs symmetric division with labelled cell circles and arrows
  4. Stem Cell Niches - visual tile map of 5 niche locations (bone marrow, intestine, skin/hair, cornea, brain) followed by a detailed niche table including the liver (canals of Hering)
  5. Differentiation Tree Diagram - ES cell branching into ectoderm / mesoderm / endoderm and their downstream progeny, with the iPS reprogramming pathway shown as a dashed arrow
  6. iPS Cells Step-by-Step - 5-step workflow from somatic cell harvest to clinical use
  7. Regenerative Medicine Applications - table of 6 clinical applications with current status, plus a highlighted limitations box
This is a shared conversation. Sign in to Orris to start your own chat.