Can u create a simple differentiation chart between DMD vs SMA peads only including exam specific points for the final MBBS professional exam YR 5.
Sources: Tietz Textbook of Laboratory Medicine 7th Ed; Bradley & Daroff's Neurology in Clinical Practice; Campbell's Operative Orthopaedics 15th Ed 2026
| Feature | DMD (Duchenne Muscular Dystrophy) | SMA (Spinal Muscular Atrophy) |
|---|---|---|
| Full name | Duchenne Muscular Dystrophy | Spinal Muscular Atrophy (SMA5q) |
| Pathology | Myopathy - muscle cell disease | Neuropathy - anterior horn cell degeneration |
| Site of lesion | Muscle (sarcolemma/cytoskeleton) | Spinal cord anterior horn cells + lower brainstem motor neurons |
| Gene | DMD gene - Xp21.2 | SMN1 gene - chromosome 5q11.2-13.3 |
| Protein | Dystrophin (400 kD) - absent | SMN protein - absent/reduced |
| Inheritance | X-linked recessive | Autosomal recessive (95% of cases) |
| Sex affected | Males only (females are carriers; rarely manifesting carriers) | Both males and females equally |
| Incidence | 1 in 3,500 live male births (most common severe NMD) | 1 in 6,000-10,000 live births |
| Age of onset | 2-5 years (mean diagnosis ~41 months) | Varies by type (see below) |
| Onset pattern | Normal early milestones, then progressive weakness from ~3-5 years | Depends on type - can be prenatal (Type 0) to adulthood (Type IV) |
| Pattern of weakness | Proximal > distal; lower limb first, then upper limb | Proximal > distal; symmetric; lower limbs worse |
| Reflexes | Reduced/absent (late) | Absent (early, even in mild forms) |
| Sensation | Normal | Normal (pure motor disease) |
| Fasciculations | Absent | Present (tongue fasciculations classic in Type I) |
| Calf pseudohypertrophy | Present (classic - firm, rubbery calves due to fat/fibrosis replacing muscle) | Absent |
| Gower's sign | Present (classic sign - uses hands to climb up thighs) | Usually absent |
| Facial muscles | Usually spared | Involved in Type I (bulbar weakness) |
| Cardiac involvement | Dilated cardiomyopathy (DCM) - nearly universal; conduction abnormalities | Generally absent (except in rare forms) |
| Cognitive/IQ | Present - non-progressive cognitive impairment, lower IQ; associated with dystrophin isoform expression | Normal intelligence |
| Respiratory failure | Late complication (chronic respiratory insufficiency develops in ALL patients) | Can be early (Type I respiratory failure <1 year); Type II in 3rd decade |
| Scoliosis | Common; worsens respiratory function | Common in Type II and III |
| CK level | Massively elevated (>10x normal; often 50-100x) | Normal or mildly elevated |
| Muscle biopsy | Fiber necrosis, fibrosis, variation in size, fat replacement; dystrophin absent on immunohistochemistry (IHC) | Grouped atrophy of type 1 fibres; type 2 fibre hypertrophy; no dystrophin defect |
| EMG findings | Myopathic (short duration, low amplitude, polyphasic) | Neurogenic (fibrillations, fasciculations, large motor units) |
| Nerve conduction | Normal | Normal motor NCV; may show denervation changes |
| Key investigation | Genetic testing (deletion/duplication in DMD gene); CK; muscle biopsy + IHC | Genetic testing (SMN1 deletion/copy number); SMN1 MLPA; EMG |
| Type | Synonym | Onset | Max Function | Survival |
|---|---|---|---|---|
| Type 0 | - | Prenatal | None (hypotonia at birth) | Weeks to 6 months |
| Type I | Werdnig-Hoffmann | <6 months | Cannot sit | <1 year (median) |
| Type II | Intermediate | 7-18 months | Sits, cannot walk | Into 3rd decade |
| Type III | Kugelberg-Welander | >18 months | Walks (may lose later) | Normal |
| Type IV | Adult SMA | 20s-30s | Ambulatory | Normal |
| Stage | Age | Key Event |
|---|---|---|
| Pre-symptomatic | 0-2 years | Normal milestones; CK already elevated |
| Early symptomatic | 2-5 years | Toe walking, Gower's sign, calf pseudohypertrophy |
| Progressive weakness | 5-10 years | Proximal > distal weakness, scoliosis starts |
| Loss of ambulation | 10-15 years | Wheelchair dependent |
| Cardiorespiratory failure | Late teens/20s | Primary cause of death |
| Clue in question | Think |
|---|---|
| "Calf pseudohypertrophy" | DMD |
| "Gower's sign" | DMD |
| "CK >10,000 U/L" | DMD |
| "Dilated cardiomyopathy in a child" | DMD |
| "Low IQ + muscle weakness" | DMD |
| "Tongue fasciculations in an infant" | SMA Type I |
| "Cannot sit by 9 months, hypotonia" | SMA Type I |
| "Floppy baby + absent reflexes" | SMA (or consider) |
| "Both sexes affected, AR inheritance" | SMA |
| "Grouped atrophy on biopsy" | SMA |
| "Dystrophin absent on IHC" | DMD |
| Treatment | DMD | SMA |
|---|---|---|
| Disease-modifying | Exon-skipping (eteplirsen); gene therapy trials | Nusinersen (intrathecal antisense oligonucleotide); Onasemnogene abeparvovec (gene therapy); Risdiplam (oral SMN2 splicing modifier) |
| Steroids | Deflazacort / prednisolone - slow progression | Not used |
| Cardiac | ACE inhibitors, beta-blockers, diuretics (for DCM) | Not routinely needed |
| Respiratory | NIV (non-invasive ventilation) | NIV in Types I and II |
| Orthopaedic | Spinal fusion for scoliosis; Achilles tendon release | Spinal fusion for scoliosis (Types II/III) |
Make it a very condensed table with subheadings and easy remebering points
| Feature | DMD | SMA |
|---|---|---|
| Pathology | Myopathy | Neuropathy (anterior horn cell) |
| Gene / Protein | DMD Xp21 / Dystrophin absent | SMN1 5q / SMN protein absent |
| Inheritance | X-linked recessive | Autosomal recessive |
| Who gets it | Males only | Both sexes |
| Incidence | 1 in 3,500 males | 1 in 6,000-10,000 |
| Feature | DMD | SMA |
|---|---|---|
| Onset | 2-5 yrs (diagnosis ~41 mo) | Type-dependent (birth β adult) |
| Weakness pattern | Proximal > distal, LL first | Proximal > distal, symmetric |
| Reflexes | Reduced (late) | Absent (early) |
| Sensation | Normal | Normal |
| Fasciculations | β Absent | β Present (tongue in Type I) |
| Gower's sign | β Classic | β Absent |
| Calf pseudohypertrophy | β Classic (fat + fibrosis) | β Absent |
| Cardiac | DCM - nearly universal | Normal |
| Intelligence | Low IQ (non-progressive) | Normal |
| Facial weakness | Spared | Type I only |
| Respiratory failure | Late (all patients eventually) | Early in Type I (<1 yr) |
| Scoliosis | Yes (worsens respiratory) | Yes (Types II-III) |
| Test | DMD | SMA |
|---|---|---|
| CK | Massively high (>10-50x normal) | Normal / mildly elevated |
| Muscle biopsy | Necrosis, fat replacement; dystrophin absent on IHC | Grouped atrophy type I fibres; type II hypertrophy |
| EMG | Myopathic (short, low amplitude) | Neurogenic (fibrillations, large units) |
| Genetics | DMD gene deletion/duplication | SMN1 deletion (MLPA) |
| Treatment | DMD | SMA |
|---|---|---|
| Steroids | β Deflazacort / prednisolone | β Not used |
| Disease-modifying | Eteplirsen (exon-skipping) | Nusinersen (intrathecal) / Risdiplam (oral) / Gene therapy |
| Cardiac | ACE-I + beta-blockers | Not needed |
| Respiratory | NIV | NIV (Types I-II) |
| Type | Name | Onset | Max function | Survival |
|---|---|---|---|---|
| 0 | - | Prenatal | None | Weeks |
| I | Werdnig-Hoffmann | <6 mo | Cannot sit | <1 yr |
| II | Intermediate | 7-18 mo | Sits, not walk | 3rd decade |
| III | Kugelberg-Welander | >18 mo | Walks | Normal |
| IV | Adult | 20s-30s | Ambulatory | Normal |
Calf hypertrophy Β· Cardiomyopathy Β· CK sky-high Β· X-linked
Fasciculations Β· Anterior horn Β· Normal intellect + sensation Β· SMN1 gone
| If question says... | Answer |
|---|---|
| Calf pseudohypertrophy | DMD |
| Gower's sign | DMD |
| Dilated cardiomyopathy in a child | DMD |
| Low IQ + muscle weakness | DMD |
| Tongue fasciculations in an infant | SMA Type I |
| Floppy baby + absent reflexes + normal CK | SMA |
| Grouped atrophy on biopsy | SMA |
| Dystrophin absent on IHC | DMD |
| Both sexes, AR, proximal weakness | SMA |
| Cannot sit by 9 months | SMA Type I |
make more chunkings in table , make it more exam specific
| DMD | SMA | |
|---|---|---|
| Disease type | Myopathy | Motor neuron disease |
| Gene | DMD β Xp21.2 | SMN1 β Chr 5q13 |
| Protein lost | Dystrophin | SMN protein |
| Inheritance | X-linked recessive | Autosomal recessive |
| Sex | Males only | Both sexes |
| Carrier | Females (asymptomatic) | Both (1 in 35 population) |
| Incidence | 1 in 3,500 males | 1 in 6,000β10,000 |
| DMD | SMA | |
|---|---|---|
| Age of onset | 2β5 yrs | Birth β adulthood (type-dependent) |
| Early clue | Toe walking, delayed walk | Floppy infant / hypotonia |
| Course | Steadily progressive | Progressive (may plateau briefly) |
| Wheelchair | 10β15 yrs | Type I: never walks; Type III: may lose walking later |
| Death | Late teensβ20s (cardiorespiratory) | Type I: <1 yr; Type IIIβIV: normal lifespan |
| DMD | SMA | |
|---|---|---|
| Weakness pattern | Proximal > distal, LL β UL | Proximal > distal, symmetric |
| Tone | Hypotonia (later) | Profound hypotonia (early) |
| Reflexes | Reduced late | Absent early |
| Fasciculations | β | β Tongue + limbs (classic) |
| Gower's sign | β Classic | β |
| Calf pseudohypertrophy | β Firm, rubbery | β |
| Facial weakness | β Spared | β Type I (bulbar) |
| Neck flexor weakness | Late | Early & prominent |
| DMD | SMA | |
|---|---|---|
| Intelligence / IQ | Low (non-progressive cognitive impairment) | Normal |
| Sensation | Normal | Normal |
| Cardiac | DCM (dilated cardiomyopathy) β universal | Absent (usually) |
| Respiratory | Late; affects all patients | Early in Type I; NIV-dependent |
| Scoliosis | Yes (accelerates after wheelchair) | Yes (Types IIβIII, severe) |
| Joint contractures | Yes (Achilles tendon, hips, knees) | Yes (hip dislocation in Type II) |
| Tongue | Normal | Fasciculating + atrophied |
| Test | DMD | SMA |
|---|---|---|
| CK (creatine kinase) | >10β50Γ normal (hallmark) | Normal or mildly elevated |
| EMG | Myopathic (short, low amplitude, polyphasic) | Neurogenic (fibrillations, fasciculations, large MUPs) |
| NCV | Normal | Normal |
| Muscle biopsy | Necrosis, fibrosis, fat replacement | Grouped atrophy (type Iβ, type II hypertrophy) |
| IHC staining | Dystrophin absent | Dystrophin present |
| Genetic test | DMD gene deletion/duplication (MLPA) | SMN1 deletion (MLPA β gold standard) |
| Newborn screen | Elevated CK on blood spot | SMN1 copy number |
| Finding | DMD | SMA |
|---|---|---|
| Key pattern | Endomysial fibrosis, fat infiltration | Grouped fibre atrophy |
| Fibre necrosis | β Present | β |
| Regenerating fibres | β Present | β |
| Fibre type grouping | β | β (reinnervation pattern) |
| Dystrophin on IHC | β Absent | β Normal |
| Type | Alias | Onset | Best Motor Milestone | Survival |
|---|---|---|---|---|
| 0 | Severe prenatal | Fetal | None (resp. failure at birth) | Weeks |
| I | Werdnig-Hoffmann | <6 months | Cannot sit | <1 year |
| II | Intermediate | 7β18 months | Sits, cannot walk | 3rd decade |
| III | Kugelberg-Welander | >18 months | Walks (may lose it) | Normal |
| IV | Adult SMA | 20sβ30s | Ambulatory | Normal |
Exam rule: Type I = sits never Β· Type II = sits yes, walks never Β· Type III = walks yes
| Stage | Age | Landmark |
|---|---|---|
| Silent | 0β2 yrs | CK already very high; normal milestones |
| Early | 2β5 yrs | Toe walk, Gower's sign, calf hypertrophy |
| Ambulatory | 5β10 yrs | Proximal weakness, lumbar lordosis |
| Non-ambulatory | 10β15 yrs | Wheelchair (key exam age) |
| Late | Teensβ20s | DCM + respiratory failure = cause of death |
| DMD | SMA | |
|---|---|---|
| Steroids | β Deflazacort / prednisolone (slow progression) | β |
| Disease-modifying | Eteplirsen (exon 51 skipping) | Nusinersen (intrathecal) Β· Risdiplam (oral) Β· Onasemnogene (gene Rx) |
| Cardiac | ACE-I + Ξ²-blockers + diuretics | Not needed |
| Respiratory | Non-invasive ventilation (NIV) | NIV in Types IβII |
| Orthopaedic | Spinal fusion (scoliosis), Achilles release | Spinal fusion (Types IIβIII) |
| Genetic counselling | Carrier females, prenatal testing | Carrier couples (AR), prenatal/NBS |
| Letter | Meaning |
|---|---|
| C | Calf pseudohypertrophy |
| C | Cardiomyopathy (DCM) |
| C | CK through the roof |
| X | X-linked (males only) |
| G | Gower's sign |
| Letter | Meaning |
|---|---|
| F | Fasciculations (tongue!) |
| A | Anterior horn cell |
| N | Normal IQ + sensation |
| G | Grouped atrophy (biopsy) |
| S | SMN1 deleted |
| Stem clue | Diagnosis |
|---|---|
| Firm calves + proximal weakness + male child | DMD |
| Uses hands to stand up from floor | DMD (Gower's) |
| CK 20,000 U/L in a 4-year-old boy | DMD |
| Dilated cardiomyopathy + muscle disease in child | DMD |
| Cognitive delay + muscle weakness | DMD |
| Floppy infant + tongue fasciculations | SMA Type I |
| Cannot sit at 9 months + absent reflexes + normal CK | SMA Type I |
| Child sits but never walks, both sexes | SMA Type II |
| Teenager walks but has proximal weakness | SMA Type III |
| Grouped atrophy on biopsy | SMA |
| Dystrophin absent on IHC | DMD |
| Normal CK + neurogenic EMG + floppy baby | SMA |
| AR inheritance + motor only + normal intellect | SMA |
make the exact content but even more chunkings easy to remeber
| DMD | SMA | |
|---|---|---|
| Disease category | Myopathy | Motor Neuron Disease |
| Sex | Males ONLY | Both sexes |
| Inheritance | X-linked recessive | Autosomal recessive |
| Gene | DMD gene | SMN1 gene |
| Chromosome | Xp21.2 | 5q13 |
| Protein lost | Dystrophin | SMN protein |
π‘ Hook: DMD = X = eXclusively males | SMA = 5 = both 5ex-es
| DMD | SMA | |
|---|---|---|
| Site | Muscle fibre (sarcolemma) | Spinal anterior horn cells |
| Neuron type | NOT a neuron problem | Lower motor neuron ONLY |
| Upper motor signs? | No | No |
| Sensory involvement? | No | No |
π‘ Hook: DMD = Muscle dies | SMA = Motor neuron dies
| DMD | SMA | |
|---|---|---|
| Incidence | 1 in 3,500 males | 1 in 6,000β10,000 |
| Most common type | Only one type of DMD | Type I = 50% of all SMA |
| Carrier frequency | Female carriers | 1 in 35 general population |
| Spontaneous mutation | 30% cases | Rare |
| DMD | SMA | |
|---|---|---|
| Onset age | 2β5 years | Birth β adulthood |
| First clue | Toe walking, falls often | Floppy baby / hypotonia |
| Diagnosis age | Mean 41 months | Type I: <6 months |
| Early milestones | Initially normal | Delayed from birth (Type I) |
π‘ Hook: DMD starts after walking | SMA Type I never even reaches walking
| Sign | DMD | SMA |
|---|---|---|
| Weakness pattern | Proximal > distal | Proximal > distal |
| Limbs affected first | Lower limbs first | Lower limbs worse |
| Tone | Hypotonia (later) | Profound hypotonia (early) |
| Reflexes | Reduced (late) | Absent early |
| Fasciculations | β ABSENT | β PRESENT |
| Gower's sign | β CLASSIC | β |
| Calf pseudohypertrophy | β CLASSIC | β |
| Facial weakness | β Spared | β Type I only |
| Tongue | Normal | Fasciculating + wasted |
| Neck flexors | Weak (late) | Weak early |
π‘ Hook: Calves big + Gower's = DMD every time
| Feature | DMD | SMA |
|---|---|---|
| Intelligence | LOW IQ (non-progressive) | NORMAL |
| Cardiac | DCM β universal | Absent |
| Arrhythmia | Yes (conduction defects) | No |
| Respiratory failure | Late (ALL patients) | Early in Type I |
| Cause of death | Cardiorespiratory failure | Respiratory failure (Type I) |
π‘ Hook: SMA = pure motor, NOTHING else affected (no heart, no brain)
| Feature | DMD | SMA |
|---|---|---|
| Scoliosis | Yes (post-wheelchair) | Yes (Types IIβIII, severe) |
| Contractures | Achilles tendon, hips, knees | Hip dislocation (Type II) |
| Lumbar lordosis | β Early sign | Less prominent |
| Joint laxity | Less | More in Type II |
| Test | DMD | SMA |
|---|---|---|
| CK level | >10β50Γ normal | Normal / mildly raised |
| CK value | Often 10,000β50,000 U/L | <500 U/L |
| CK on newborn screen | Elevated on blood spot | Normal |
| Other enzymes | LDH, AST, ALT mildly raised | Normal |
π‘ Hook: CK sky-high = DMD. Normal CK + floppy = think SMA
| Test | DMD | SMA |
|---|---|---|
| EMG pattern | Myopathic | Neurogenic |
| MUP size | Short, low amplitude, polyphasic | Large, long duration |
| Fibrillations | Absent | β Present |
| Fasciculations on EMG | Absent | β Present |
| NCV | Normal | Normal |
π‘ Hook: Myopathic EMG = muscle disease (DMD) | Neurogenic EMG = nerve/neuron disease (SMA)
| Finding | DMD | SMA |
|---|---|---|
| Pattern | Random scattered necrosis | Grouped fibre atrophy |
| Fibre necrosis | β Present | β |
| Fibre regeneration | β Present | β |
| Fat + fibrosis | β Late feature | β |
| Fibre type grouping | β | β (reinnervation) |
| Type I fibres | Variable | Atrophied & grouped |
| Type II fibres | Variable | Hypertrophied (compensatory) |
| Dystrophin on IHC | β ABSENT | β Normal |
π‘ Hook: Grouped atrophy = neuron died, muscle regrouped = SMA
| DMD | SMA | |
|---|---|---|
| Gold standard test | MLPA / PCR for DMD gene | MLPA for SMN1 deletion |
| Confirm diagnosis | Dystrophin absent on IHC | SMN1 copy number = 0 |
| Prenatal test | CVS / amniocentesis | CVS / amniocentesis |
| Carrier testing | Female relatives | Both parents (AR) |
| Newborn screening | CK on dried blood spot | SMN1 copy number |
| DMD | SMA | |
|---|---|---|
| Steroids used? | β YES β first-line | β NO |
| Drug | Deflazacort / Prednisolone | β |
| Purpose | Slow muscle weakness | β |
| Side effects | Weight gain, osteoporosis, growth delay | β |
| Drug | DMD | SMA |
|---|---|---|
| Nusinersen | β | β Intrathecal (antisense oligo) |
| Risdiplam | β | β Oral (SMN2 splicing modifier) |
| Onasemnogene | β | β IV gene therapy (one-time) |
| Eteplirsen | β Exon 51 skipping | β |
| Ataluren | β Nonsense mutation only | β |
π‘ Hook: SMA has 3 drugs (N-R-O) | DMD has exon-skipping therapy
| Support | DMD | SMA |
|---|---|---|
| Cardiac drugs | ACE-I + Ξ²-blockers + diuretics | Not needed |
| Respiratory | NIV (non-invasive ventilation) | NIV (Types IβII) |
| Spinal surgery | Fusion for scoliosis | Fusion (Types IIβIII) |
| Physiotherapy | β Maintain ambulation | β Prevent contractures |
| Achilles release | β Yes | Less often |
| Type | Name | Onset | Best Milestone | Survival |
|---|---|---|---|---|
| 0 | Prenatal | In womb | None | Weeks |
| I | Werdnig-Hoffmann | <6 months | Cannot sit | <1 year |
| II | Intermediate | 7β18 months | Sits, no walk | 3rd decade |
| III | Kugelberg-Welander | >18 months | Walks | Normal |
| IV | Adult | 20sβ30s | Ambulatory | Normal |
π‘ Rule of thumb: Sit = Type II and above Β· Walk = Type III and above
| Stage | Age | Key Event |
|---|---|---|
| Silent | 0β2 yrs | CK already high, no symptoms |
| Early | 2β5 yrs | Toe-walk, Gower's, calf hypertrophy |
| Progressive | 5β10 yrs | Proximal weakness, lordosis, scoliosis |
| Wheelchair | 10β15 yrs | Loss of ambulation β exam favourite |
| Terminal | Teensβ20s | DCM + respiratory failure = death |
| Letter | = |
|---|---|
| Calf hypertrophy | β exam classic |
| Cardiomyopathy (DCM) | β universal |
| CK sky high | β >10x normal |
| X-linked males only | β no female patients |
| Gower's sign | β uses hands to rise |
| Letter | = |
|---|---|
| Fasciculations (tongue) | β LMN sign |
| Anterior horn cell | β neuron dies |
| Normal IQ + sensation | β only motor |
| Grouped atrophy (biopsy) | β pathology key |
| SMN1 deleted | β chr 5q |
| If you see this... | Answer |
|---|---|
| Firm calves + proximal weakness, 4yr boy | DMD |
| Child climbs up his own legs to stand | DMD (Gower's) |
| CK = 20,000 U/L in a toddler | DMD |
| Dilated cardiomyopathy + muscle disease | DMD |
| Low IQ + proximal weakness in child | DMD |
| X-linked + dystrophin absent | DMD |
| Floppy infant + tongue fasciculations | SMA Type I |
| Cannot sit at 9 months, absent reflexes, normal CK | SMA Type I |
| Both sexes, AR, sits but never walks | SMA Type II |
| Teenager walks but proximal leg weakness | SMA Type III |
| Grouped atrophy on biopsy | SMA |
| Dystrophin absent on IHC | DMD |
| Neurogenic EMG + normal CK + floppy | SMA |
| AR + motor only + normal intellect | SMA |
| Nusinersen prescribed | SMA |
| Deflazacort prescribed | DMD |
make even more chunkings in the motor signs group it and regenrate again. and also give the meaning of abbreveiations
| Abbreviation | Full Meaning |
|---|---|
| DMD | Duchenne Muscular Dystrophy |
| SMA | Spinal Muscular Atrophy |
| SMN1 | Survival Motor Neuron 1 gene |
| CK | Creatine Kinase (muscle enzyme) |
| DCM | Dilated Cardiomyopathy |
| IHC | Immunohistochemistry |
| NIV | Non-Invasive Ventilation |
| EMG | Electromyography |
| NCV | Nerve Conduction Velocity |
| MUP | Motor Unit Potential |
| MLPA | Multiplex Ligation-dependent Probe Amplification (genetic test) |
| LMN | Lower Motor Neuron |
| UMN | Upper Motor Neuron |
| LL | Lower Limbs |
| UL | Upper Limbs |
| AR | Autosomal Recessive |
| XLR | X-Linked Recessive |
| CVS | Chorionic Villus Sampling (prenatal test) |
| NBS | Newborn Screening |
| ACE-I | Angiotensin Converting Enzyme Inhibitor |
| NIV | Non-Invasive Ventilation (e.g. BiPAP/CPAP) |
| LDH | Lactate Dehydrogenase |
| AST/ALT | Liver enzymes (also elevated in muscle disease) |
| snRNP | Small Nuclear Ribonucleoprotein (involved in mRNA splicing) |
| DMD | SMA | |
|---|---|---|
| Disease category | Myopathy (muscle disease) | Motor Neuron Disease |
| Sex affected | Males ONLY | Both males and females |
| Inheritance | X-Linked Recessive (XLR) | Autosomal Recessive (AR) |
| Carrier | Females (usually asymptomatic) | Both parents carry one faulty copy |
| Spontaneous mutation | 30% of cases (no family history) | Rare |
π‘ Hook: DMD = X chromosome = eXclusively males | SMA = chromosome 5 = both 5eXes (both sexes)
| DMD | SMA | |
|---|---|---|
| Gene mutated | DMD gene | SMN1 gene |
| Chromosome location | Xp21.2 | 5q13 |
| Protein lost | Dystrophin (400 kDa structural protein) | SMN protein (mRNA splicing protein) |
| Function of protein | Stabilises muscle cell membrane | Assembles spliceosome (mRNA processing) |
| Type of mutation | Deletion / duplication of exons | Homozygous deletion of SMN1 |
π‘ Hook: Dystrophin = structural (like scaffolding for muscle) | SMN = factory worker (makes mRNA machinery)
| DMD | SMA | |
|---|---|---|
| Primary site | Muscle fibre (sarcolemma/cytoskeleton) | Spinal cord anterior horn cells |
| Neuron involved? | No | Yes β Lower Motor Neuron (LMN) |
| Upper motor signs? | No | No |
| Sensory involvement? | No | No β pure motor disease |
| Bulbar involvement? | No | Yes β Type I (tongue, swallowing) |
π‘ Hook: DMD = Muscle dies | SMA = Motor neuron dies β muscle then wastes secondarily
| DMD | SMA | |
|---|---|---|
| Incidence | 1 in 3,500 males | 1 in 6,000β10,000 births |
| Most common type | Single phenotype (only DMD) | Type I = 50% of all SMA cases |
| Carrier frequency (population) | β | 1 in 35 general population |
| Leading cause of... | Most common severe NMD in humans | Leading genetic cause of infant mortality |
| DMD | SMA | |
|---|---|---|
| Onset age | 2β5 years | Birth to adulthood (depends on type) |
| Mean diagnosis age | 41 months (~3.5 years) | Type I: <6 months |
| Early milestones | Initially NORMAL | Delayed from birth (Type I) |
| First parent complaint | "He walks funny / keeps falling" | "My baby is floppy / not moving" |
| Pre-symptomatic clue | CK already elevated before symptoms | Reduced fetal movements (Type 0) |
π‘ Hook: DMD starts AFTER walking begins | SMA Type I never even reaches walking
| Sign | DMD | SMA |
|---|---|---|
| Pattern | Proximal > Distal | Proximal > Distal |
| Limb onset | Lower limbs first, then upper limbs | Lower limbs worse than upper |
| Symmetry | Symmetric | Symmetric |
| Progression | Steady downhill | Progressive (may briefly plateau) |
| Axial muscles | Weak (lordosis) | Weak (poor head control) |
π‘ Both are proximal - but DMD is a muscle problem, SMA is a neuron problem
| Sign | DMD | SMA |
|---|---|---|
| Muscle tone | Hypotonia (develops later) | Profound hypotonia from early on |
| Deep tendon reflexes | Reduced (only late in disease) | Absent early β hallmark |
| Ankle reflexes | Lost first | Lost earliest |
| Knee reflexes | Lost later | Also absent |
π‘ Hook: Absent reflexes early = think SMA (anterior horn cells gone = no reflex arc)
| Sign | DMD | SMA |
|---|---|---|
| Fasciculations | β ABSENT | β PRESENT β LMN sign |
| Tongue fasciculations | β | β Classic in Type I β look for this! |
| Limb fasciculations | β | β Present |
| Fibrillations (EMG) | β | β On EMG only |
| Muscle cramps | Occasionally | Less common |
π‘ Hook: Twitching tongue in a floppy baby = SMA Type I until proven otherwise
| Sign | DMD | SMA |
|---|---|---|
| Gower's sign | β CLASSIC β uses hands to climb up thighs to stand | β Absent |
| Calf pseudohypertrophy | β CLASSIC β firm, rubbery (fat + fibrosis, not real muscle) | β Absent |
| Lumbar lordosis | β Early sign (compensates for weak hip extensors) | Less prominent |
| Waddling gait | β Present | β |
| Trendelenburg gait | β Present | β |
π‘ Hook: Big calves that are WEAK = pseudohypertrophy = DMD (real hypertrophy = strong calves)
| Sign | DMD | SMA |
|---|---|---|
| Facial muscles | β Spared | β Involved in Type I |
| Tongue | Normal | Fasciculating + wasted (Type I) |
| Swallowing | Normal | Dysphagia in Type I β aspiration risk |
| Feeding difficulty | Uncommon | β Common in Type I |
| Neck flexors | Weak (late) | Weak early β poor head control |
| Head control | Normal initially | Lost early in Type I |
| Feature | DMD | SMA |
|---|---|---|
| Intelligence (IQ) | LOW β non-progressive cognitive impairment | NORMAL |
| Cause of low IQ | Dystrophin isoforms expressed in brain | Not applicable |
| Learning disability | Present in many patients | Absent |
| Behaviour problems | Yes (ADHD, autism-like features) | No |
π‘ Hook: SMA = ONLY motor neurons affected β brain completely normal
| Feature | DMD | SMA |
|---|---|---|
| Cardiac involvement | β Universal β affects ALL patients | β Generally absent |
| Type of heart disease | Dilated Cardiomyopathy (DCM) | None |
| Mechanism | Cardiac fibrosis (dystrophin absent in heart) | Not applicable |
| Arrhythmia | β Conduction defects | β |
| Heart failure | β Left ventricular dilation β CCF | β |
| When does it appear | From early teens onward | β |
| Cause of death contribution | Major (alongside respiratory) | Not applicable |
π‘ Hook: Heart has dystrophin too β no dystrophin = heart also destroyed in DMD
| Feature | DMD | SMA |
|---|---|---|
| Respiratory failure | Late complication β affects ALL patients | Early in Type I (<1 year) |
| Mechanism | Respiratory muscle weakness + scoliosis | Intercostal + diaphragm weakness |
| Type I SMA | β | Respiratory failure = cause of death <1 yr |
| Management | NIV (Non-Invasive Ventilation) | NIV in Types I and II |
| Tracheostomy | Considered late | Type I β sometimes needed |
| Feature | DMD | SMA |
|---|---|---|
| Scoliosis | β Yes β worsens after wheelchair | β Yes β severe in Types IIβIII |
| Contractures | Achilles tendon, hip flexors, knee flexors | Hip dislocation in Type II |
| Lumbar lordosis | β Prominent early sign | Less common |
| Fractures | β Due to steroid use + immobility | Yes β due to muscle weakness |
| Hip dislocation | Less common | β Common in Type II |
| Test | DMD | SMA |
|---|---|---|
| CK (Creatine Kinase) | >10β50Γ normal | Normal or mildly elevated |
| Typical CK value | 10,000β50,000 U/L | <500 U/L |
| CK at birth | Already elevated (pre-symptomatic!) | Normal |
| LDH | Mildly elevated | Normal |
| AST / ALT | Mildly elevated (from muscle, not liver!) | Normal |
π‘ Hook: Raised AST/ALT in a child with weakness = check CK first β it may be muscle, not liver!
| Finding | DMD | SMA |
|---|---|---|
| EMG pattern | Myopathic | Neurogenic |
| Motor Unit Potential (MUP) size | Small, short, low amplitude | Large, long duration |
| Polyphasic potentials | β Yes | Less |
| Fibrillations | β Absent | β Present (denervation) |
| Fasciculations on EMG | β Absent | β Present |
| Recruitment pattern | Early recruitment | Reduced recruitment |
π‘ Hook: Myopathic = small units (fewer fibres working) | Neurogenic = large units (surviving neurons take over)
| Finding | DMD | SMA |
|---|---|---|
| Motor NCV | Normal | Normal |
| Sensory NCV | Normal | Normal |
| F-waves | Normal | May be abnormal |
| Interpretation | Nerves intact β muscle is the problem | Nerves intact β neurons are dying |
π‘ Normal NCV in both β the problem is upstream (neuron body in SMA) or downstream (muscle in DMD)
| Finding | DMD | SMA |
|---|---|---|
| Overall pattern | Random scattered necrosis | Grouped fibre atrophy |
| Fat infiltration | β Late feature | β |
| Fibrosis | β Endomysial fibrosis | β |
| Inflammation | β Mild inflammatory infiltrate | β |
| Finding | DMD | SMA |
|---|---|---|
| Fibre necrosis | β Present | β Absent |
| Fibre regeneration | β Present (basophilic fibres) | β Absent |
| Variation in fibre size | β Yes | Less |
| Type I fibre atrophy | Variable | β Grouped β hallmark |
| Type II fibre hypertrophy | Variable | β Compensatory |
| Fibre type grouping | β | β Reinnervation pattern |
| Stain / Test | DMD | SMA |
|---|---|---|
| Dystrophin IHC | β ABSENT β diagnostic | β Normal / Present |
| ATPase stain | Shows fibre size variation | Shows grouped atrophy |
| H&E stain | Necrosis + regeneration | Grouped atrophy |
| Modified Gomori trichrome | Fibrosis prominent | Less prominent |
π‘ Exam rule: Dystrophin absent on IHC = DMD diagnosed
| DMD | SMA | |
|---|---|---|
| Gold standard | MLPA / PCR for DMD gene deletions | MLPA for SMN1 copy number |
| What is tested | Exon deletion/duplication in DMD gene | SMN1 = 0 copies confirms SMA |
| Confirm diagnosis | Dystrophin absent on IHC (muscle) | SMN1 deletion |
| Prenatal testing | CVS or amniocentesis | CVS or amniocentesis |
| Carrier testing | Female relatives | Both parents tested (AR) |
| DMD | SMA | |
|---|---|---|
| Used? | β YES β first-line treatment | β NO |
| Drug of choice | Deflazacort (preferred) / Prednisolone | β |
| Purpose | Slow muscle weakness, delay wheelchair | β |
| Side effects | Weight gain, Cushingoid features, osteoporosis, growth delay | β |
| When started | ~4β5 years of age | β |
| Drug | For DMD? | For SMA? | How given? |
|---|---|---|---|
| Nusinersen | β | β | Intrathecal injection (into spinal fluid) |
| Risdiplam | β | β | Oral (daily syrup) |
| Onasemnogene abeparvovec | β | β | IV β one-time gene therapy |
| Eteplirsen | β Exon 51 skipping | β | IV infusion |
| Ataluren | β Nonsense mutations only | β | Oral |
π‘ Hook: SMA has 3 drugs β Nusinersen Β· Risdiplam Β· Onasemnogene = "NRO"
| Support | DMD | SMA |
|---|---|---|
| Cardiac drugs | ACE-I + Beta-blockers + Diuretics (for DCM/CCF) | Not needed |
| Respiratory | NIV (BiPAP/CPAP) when FVC drops | NIV essential in Types IβII |
| Spinal surgery | Fusion for progressive scoliosis | Fusion for Types IIβIII scoliosis |
| Achilles tendon release | β For contractures | Less common |
| Physiotherapy | β Maintain ambulation as long as possible | β Prevent contractures, positioning |
| Nutritional support | For weight/growth (steroid side effects) | Gastrostomy in Type I (feeding difficulty) |
| Genetic counselling | β Female carriers, prenatal testing | β Both parents, prenatal/NBS |
| Type | Alias / Name | Onset Age | Best Motor Milestone Ever Achieved | Survival |
|---|---|---|---|---|
| 0 | Severe prenatal | In womb | None β respiratory failure at birth | Weeks to 6 months |
| I | Werdnig-Hoffmann | <6 months | Cannot sit | <1 year |
| II | Intermediate SMA | 7β18 months | Can sit, cannot walk | Into 3rd decade |
| III | Kugelberg-Welander | >18 months | Can walk (may lose it later) | Normal |
| IV | Adult SMA | 20sβ30s | Fully ambulatory | Normal |
π‘ Exam rule: Type I = never sits | Type II = sits only | Type III = walks | Type IV = adult onset
| Stage | Age | Key Event / Landmark |
|---|---|---|
| Silent | 0β2 yrs | CK already sky-high, child looks normal |
| Early symptomatic | 2β5 yrs | Toe walking, falls, Gower's sign, calf hypertrophy |
| Progressive | 5β10 yrs | Proximal weakness, lordosis, scoliosis starting |
| Loss of ambulation | 10β15 yrs | Wheelchair bound β most exam-tested fact |
| Terminal | Late teensβ20s | DCM + respiratory failure = primary cause of death |
| Letter | Meaning |
|---|---|
| C | Calf pseudohypertrophy (big but weak calves) |
| C | Cardiomyopathy β Dilated (DCM) universal |
| C | CK β sky high (>10x normal) |
| X | X-linked β males only |
| G | Gower's sign (uses hands to get up) |
| Letter | Meaning |
|---|---|
| F | Fasciculations β especially tongue |
| A | Anterior horn cell death |
| N | Normal IQ, Normal sensation β only motor |
| G | Grouped atrophy on biopsy |
| S | SMN1 gene deleted on chromosome 5 |
| If question stem says... | Your answer |
|---|---|
| Firm calves + proximal weakness + 4-yr-old boy | DMD |
| Child uses hands to climb up his own legs to stand | DMD β Gower's sign |
| CK = 20,000 U/L in a toddler | DMD |
| Dilated cardiomyopathy + muscle weakness in a child | DMD |
| Low IQ + proximal muscle weakness in boy | DMD |
| X-linked inheritance + dystrophin absent on IHC | DMD |
| Deflazacort prescribed for muscle disease | DMD |
| Floppy infant + tongue fasciculations + absent reflexes | SMA Type I |
| Cannot sit at 9 months + normal CK | SMA Type I |
| Both sexes affected + AR + sits but never walks | SMA Type II |
| Teenager with proximal leg weakness, walks but struggles | SMA Type III |
| Grouped atrophy of type I fibres on biopsy | SMA |
| Dystrophin absent on immunohistochemistry | DMD |
| Neurogenic EMG + normal CK + floppy baby | SMA |
| AR inheritance + pure motor + normal intellect + normal sensation | SMA |
| Nusinersen / Risdiplam prescribed | SMA |
| Myopathic EMG + massively raised CK | DMD |
| Reduced fetal movements + hypotonia at birth + respiratory failure | SMA Type 0 |
Generate a PDF quick reference card for this DMD vs SMA chart, Make it more condensed , remove not asked details in meq, seq and MCQ, make it a must know pdf
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
~/dmd_sma_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import KeepTogether
# ββ Output path ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
OUTPUT = "/tmp/workspace/DMD_vs_SMA_Quick_Reference.pdf"
# ββ Colour palette ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
C_DMD = colors.HexColor("#1A3C6E") # deep navy β DMD column
C_SMA = colors.HexColor("#7B1F1F") # deep red β SMA column
C_HEAD_BG = colors.HexColor("#0D1B2A") # almost black β main title bar
C_SEC_BG = colors.HexColor("#E8EDF4") # light steel β section sub-header
C_ROW_ALT = colors.HexColor("#F5F7FA") # very light blue β alternate rows
C_WHITE = colors.white
C_YELLOW = colors.HexColor("#FFF4CC") # mnemonic boxes
C_GREEN = colors.HexColor("#D6F0D6") # memory hooks
C_RED_LIGHT= colors.HexColor("#FDECEA") # MCQ box
C_BORDER = colors.HexColor("#BBCDE5")
# ββ Page setup ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=10*mm, rightMargin=10*mm,
topMargin=10*mm, bottomMargin=10*mm,
)
W = A4[0] - 20*mm # usable width
# ββ Paragraph styles βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def PS(name, size, bold=False, color=colors.black, align=TA_LEFT, leading=None):
return ParagraphStyle(
name, fontSize=size,
fontName="Helvetica-Bold" if bold else "Helvetica",
textColor=color, alignment=align,
leading=leading or size*1.25,
spaceAfter=0, spaceBefore=0,
)
title_s = PS("title", 13, bold=True, color=C_WHITE, align=TA_CENTER, leading=16)
sec_s = PS("sec", 8, bold=True, color=C_DMD, align=TA_LEFT)
cell_bold = PS("cb", 7, bold=True, color=colors.black)
cell_norm = PS("cn", 7, color=colors.black)
cell_dmd = PS("cdmd", 7, bold=True, color=C_DMD)
cell_sma = PS("csma", 7, bold=True, color=C_SMA)
hook_s = PS("hook", 7, bold=False, color=colors.HexColor("#1A472A"))
mcq_q = PS("mcqq", 7, color=colors.black)
mcq_a = PS("mcqa", 7, bold=True, color=C_DMD)
footer_s = PS("foot", 6, color=colors.grey, align=TA_CENTER)
# ββ Helpers βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def B(txt): return Paragraph(txt, cell_bold)
def N(txt): return Paragraph(txt, cell_norm)
def D(txt): return Paragraph(txt, cell_dmd)
def S(txt): return Paragraph(txt, cell_sma)
def H(txt): return Paragraph(txt, hook_s)
def section_header(text):
tbl = Table([[Paragraph(text, sec_s)]], colWidths=[W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_SEC_BG),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 0.5, C_BORDER),
]))
return tbl
def make_table(headers, rows, col_widths, alt=True):
"""Build a styled comparison table."""
data = [headers] + rows
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style = [
# Header row
("BACKGROUND", (0,0), (-1,0), C_DMD),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 7.5),
("ALIGN", (0,0), (-1,0), "CENTER"),
("TOPPADDING", (0,0), (-1,0), 3),
("BOTTOMPADDING", (0,0), (-1,0), 3),
# Body rows
("FONTSIZE", (0,1), (-1,-1), 7),
("TOPPADDING", (0,1), (-1,-1), 2),
("BOTTOMPADDING", (0,1), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("GRID", (0,0), (-1,-1), 0.4, C_BORDER),
]
if alt:
for i in range(1, len(data)):
if i % 2 == 0:
style.append(("BACKGROUND", (0,i), (-1,i), C_ROW_ALT))
tbl.setStyle(TableStyle(style))
return tbl
def hook_box(text, bg=C_GREEN):
tbl = Table([[H(text)]], colWidths=[W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#7CB87C")),
]))
return tbl
def sp(h=2): return Spacer(1, h*mm)
# ββ Column widths βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CW3 = [W*0.32, W*0.34, W*0.34] # Feature | DMD | SMA
CW2 = [W*0.32, W*0.68] # two-col (abbrev etc.)
CW4 = [W*0.18, W*0.20, W*0.25, W*0.15, W*0.22] # SMA types
# =============================================================================
story = []
# ββ MAIN TITLE ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
title_tbl = Table(
[[Paragraph("DMD vs SMA β Quick Reference Card", title_s),
Paragraph("Final MBBS Yr 5 | Paediatrics", PS("sub",8,color=C_WHITE,align=TA_CENTER))]],
colWidths=[W*0.65, W*0.35]
)
title_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_HEAD_BG),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story += [title_tbl, sp(2)]
# ββ ABBREVIATIONS (compact inline) βββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("ABBREVIATIONS"))
abbr_data = [
[B("DMD"), N("Duchenne Muscular Dystrophy"), B("SMA"), N("Spinal Muscular Atrophy")],
[B("CK"), N("Creatine Kinase"), B("DCM"), N("Dilated Cardiomyopathy")],
[B("IHC"), N("Immunohistochemistry"), B("NIV"), N("Non-Invasive Ventilation")],
[B("EMG"), N("Electromyography"), B("NCV"), N("Nerve Conduction Velocity")],
[B("MLPA"), N("Multiplex Ligation Probe Ampl."),B("LMN"), N("Lower Motor Neuron")],
[B("XLR"), N("X-Linked Recessive"), B("AR"), N("Autosomal Recessive")],
[B("MUP"), N("Motor Unit Potential"), B("NBS"), N("Newborn Screening")],
[B("ACE-I"),N("ACE Inhibitor (cardiac drug)"), B("CVS"), N("Chorionic Villus Sampling")],
]
abbr_tbl = Table(abbr_data, colWidths=[W*0.1, W*0.4, W*0.1, W*0.4])
abbr_tbl.setStyle(TableStyle([
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 1.5),
("BOTTOMPADDING", (0,0), (-1,-1), 1.5),
("LEFTPADDING", (0,0), (-1,-1), 4),
("GRID", (0,0), (-1,-1), 0.3, C_BORDER),
*[("BACKGROUND", (0,i), (-1,i), C_ROW_ALT) for i in range(0,8,2)],
]))
story += [abbr_tbl, sp(2)]
# ββ CHUNK 1: IDENTITY βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("1. IDENTITY β Who Gets It?"))
rows = [
[B("Disease type"), D("Myopathy (muscle)"), S("Motor neuron disease")],
[B("Gene / Chr"), D("DMD gene β Xp21.2"), S("SMN1 gene β Chr 5q13")],
[B("Protein lost"), D("Dystrophin (structural)"), S("SMN protein (mRNA splicing)")],
[B("Inheritance"), D("X-Linked Recessive (XLR)"), S("Autosomal Recessive (AR)")],
[B("Sex affected"), D("Males ONLY"), S("Both sexes")],
[B("Incidence"), D("1 in 3,500 males"), S("1 in 6,000β10,000")],
[B("Spontaneous mut"),D("30% cases"), S("Rare")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("Hook: DMD = X = eXclusively males | SMA = chromosome 5 = both sexes"))
story.append(sp(2))
# ββ CHUNK 2: LESION SITE ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("2. SITE OF LESION"))
rows = [
[B("Primary site"), D("Muscle fibre (sarcolemma)"), S("Spinal anterior horn cells")],
[B("Neuron involved"),D("NO"), S("YES β LMN only")],
[B("UMN signs"), D("Absent"), S("Absent")],
[B("Sensation"), D("Normal"), S("Normal β PURE motor")],
[B("Bulbar"), D("Spared"), S("Type I β tongue/swallowing")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("Hook: DMD = Muscle dies | SMA = Motor neuron dies β muscle wastes secondarily"))
story.append(sp(2))
# ββ CHUNK 3: ONSET & PROGRESSION βββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("3. ONSET & PROGRESSION"))
rows = [
[B("Onset age"), D("2β5 yrs (mean dx 41 mo)"), S("Birth β adulthood")],
[B("First clue"), D("Toe walking, falls"), S("Floppy baby / hypotonia")],
[B("Early milestones"),D("Initially NORMAL"), S("Delayed from birth (Type I)")],
[B("Wheelchair"), D("10β15 yrs β KEY exam fact"), S("Type I: never walks")],
[B("Cause of death"), D("DCM + respiratory failure"), S("Resp failure (Type I <1 yr)")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(sp(2))
# ββ CHUNK 4A: MOTOR β WEAKNESS ββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4A. MOTOR SIGNS β Weakness Pattern"))
rows = [
[B("Pattern"), D("Proximal > Distal"), S("Proximal > Distal")],
[B("Limb onset"), D("Lower limbs first"), S("Lower limbs worse")],
[B("Axial muscles"), D("Weak (lordosis early)"), S("Weak (poor head control)")],
[B("Progression"), D("Steady downhill"), S("Progressive / brief plateau")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(sp(1))
# ββ CHUNK 4B: MOTOR β TONE & REFLEXES ββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4B. MOTOR SIGNS β Tone & Reflexes"))
rows = [
[B("Muscle tone"), D("Hypotonia (develops later)"), S("Profound hypotonia β EARLY")],
[B("DTRs"), D("Reduced late"), S("ABSENT EARLY β hallmark")],
[B("Ankle reflex"), D("Lost late"), S("Lost earliest")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("Hook: Absent reflexes EARLY = SMA (anterior horn gone = no reflex arc)"))
story.append(sp(1))
# ββ CHUNK 4C: MOTOR β INVOLUNTARY βββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4C. MOTOR SIGNS β Involuntary Movements"))
rows = [
[B("Fasciculations"), D("ABSENT"), S("PRESENT β LMN sign")],
[B("Tongue fascicula"),D("Absent"), S("Classic Type I β KEY SIGN")],
[B("Fibrillations EMG"),D("Absent"), S("Present on EMG")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("Hook: Twitching tongue + floppy baby = SMA Type I until proven otherwise"))
story.append(sp(1))
# ββ CHUNK 4D: MOTOR β CLASSIC SIGNS ββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4D. MOTOR SIGNS β Classic Clinical Signs"))
rows = [
[B("Gower's sign"), D("CLASSIC β hands climb up thighs"),S("ABSENT")],
[B("Calf pseudohypert"),D("CLASSIC β firm, rubbery calves"),S("ABSENT")],
[B("Lumbar lordosis"), D("Early sign"), S("Less prominent")],
[B("Waddling gait"), D("Present"), S("Absent (can't walk Type I-II)")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("Hook: Big calves that are WEAK = pseudohypertrophy = DMD (fat + fibrosis, not muscle)"))
story.append(sp(1))
# ββ CHUNK 4E: MOTOR β FACE & BULBAR ββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4E. MOTOR SIGNS β Face & Bulbar"))
rows = [
[B("Facial muscles"), D("Spared"), S("Involved β Type I")],
[B("Tongue"), D("Normal"), S("Fasciculating + wasted")],
[B("Swallowing"), D("Normal"), S("Dysphagia β aspiration risk")],
[B("Head control"), D("Normal initially"), S("LOST EARLY β Type I")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(sp(2))
# ββ CHUNK 5: NON-MOTOR ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("5. NON-MOTOR FEATURES"))
rows = [
[B("Intelligence"), D("LOW IQ β non-progressive"), S("NORMAL β brain unaffected")],
[B("Sensation"), D("Normal"), S("Normal")],
[B("Cardiac β DCM"), D("UNIVERSAL β all patients"), S("Absent")],
[B("Arrhythmia"), D("Conduction defects"), S("Absent")],
[B("Respiratory"), D("Late β affects ALL"), S("Early in Type I (<1 yr)")],
[B("Scoliosis"), D("Post-wheelchair"), S("Severe Types IIβIII")],
[B("Contractures"), D("Achilles, hips, knees"), S("Hip dislocation Type II")],
]
story.append(make_table([B("Feature"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("Hook: SMA = ONLY motor neurons. Heart, brain, sensation β all NORMAL"))
story.append(sp(2))
# ββ CHUNK 6: INVESTIGATIONS βββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("6. INVESTIGATIONS"))
rows = [
[B("CK level"), D(">10β50Γ normal (10,000β50,000)"), S("Normal / mildly raised")],
[B("CK at birth"), D("Already elevated!"), S("Normal")],
[B("LDH/AST/ALT"), D("Mildly raised (from muscle)"), S("Normal")],
[B("EMG pattern"), D("MYOPATHIC β small, polyphasic"), S("NEUROGENIC β large MUPs")],
[B("Fibrillations"), D("Absent"), S("Present on EMG")],
[B("NCV"), D("Normal"), S("Normal")],
[B("Biopsy pattern"), D("Random necrosis + fat replacement"),S("GROUPED fibre atrophy")],
[B("Fibre necrosis"), D("Present"), S("Absent")],
[B("Type II fibres"), D("Variable"), S("Hypertrophied (compensatory)")],
[B("Dystrophin IHC"), D("ABSENT β diagnostic"), S("Present / Normal")],
[B("Genetic test"), D("MLPA β DMD gene deletion"), S("MLPA β SMN1 copy number=0")],
]
story.append(make_table([B("Test"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("Hook: CK sky-high = DMD | Normal CK + floppy baby + absent reflexes = SMA | Grouped atrophy on biopsy = SMA"))
story.append(sp(2))
# ββ CHUNK 7: TREATMENT ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("7. TREATMENT"))
rows = [
[B("Steroids"), D("Deflazacort / Prednisolone"), S("NOT used")],
[B("Nusinersen"), D("No"), S("YES β intrathecal injection")],
[B("Risdiplam"), D("No"), S("YES β oral daily")],
[B("Onasemnogene"), D("No"), S("YES β IV one-time gene therapy")],
[B("Eteplirsen"), D("YES β exon 51 skipping"), S("No")],
[B("Cardiac"), D("ACE-I + Beta-blockers + Diuretics"),S("Not needed")],
[B("Respiratory"), D("NIV (late)"), S("NIV Types IβII (early)")],
[B("Spinal surgery"), D("Fusion for scoliosis"), S("Fusion Types IIβIII")],
]
story.append(make_table([B("Drug / Rx"), D("DMD"), S("SMA")], rows, CW3))
story.append(hook_box("SMA drugs = NRO: Nusinersen Β· Risdiplam Β· Onasemnogene | DMD = Deflazacort + Exon-skipping"))
story.append(sp(2))
# ββ CHUNK 8: SMA TYPES ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("8. SMA TYPES β One Glance"))
sma_hdr = [B("Type"), B("Alias"), B("Onset"), B("Best Milestone"), B("Survival")]
sma_rows = [
[B("0"), N("Prenatal"), N("In womb"), N("None β resp failure at birth"), N("Weeks")],
[B("I"), D("Werdnig-Hoffmann"), N("<6 months"), N("Cannot sit"), N("<1 year")],
[B("II"), N("Intermediate"), N("7β18 months"), N("Sits β cannot walk"), N("3rd decade")],
[B("III"),N("Kugelberg-Welander"), N(">18 months"), N("Walks (may lose later)"), N("Normal")],
[B("IV"), N("Adult SMA"), N("20sβ30s"), N("Ambulatory"), N("Normal")],
]
sma_tbl = Table([sma_hdr]+sma_rows, colWidths=CW4)
sma_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_SMA),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 7),
("ALIGN", (0,0), (-1,0), "CENTER"),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("GRID", (0,0), (-1,-1), 0.4, C_BORDER),
("BACKGROUND", (0,2), (-1,2), C_ROW_ALT),
("BACKGROUND", (0,4), (-1,4), C_ROW_ALT),
# Highlight Type I row
("BACKGROUND", (0,1), (-1,1), colors.HexColor("#FDECEA")),
]))
story += [sma_tbl]
story.append(hook_box("Rule: Type I = never sits | Type II = sits only | Type III = walks | IV = adult onset"))
story.append(sp(2))
# ββ CHUNK 9: DMD STAGES βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("9. DMD DISEASE STAGES"))
dmd_rows = [
[B("Silent"), N("0β2 yrs"), N("CK already sky-high β NO symptoms yet")],
[B("Early"), N("2β5 yrs"), N("Toe walking Β· Falls Β· Gower's sign Β· Calf hypertrophy")],
[B("Progressive"), N("5β10 yrs"), N("Proximal weakness Β· Lordosis Β· Scoliosis starts")],
[B("Wheelchair"), D("10β15 yrs"), D("Loss of ambulation β MOST EXAM-TESTED FACT")],
[B("Terminal"), N("Teensβ20s"), N("DCM + Respiratory failure = Cause of death")],
]
dmd_tbl = Table([[B("Stage"), B("Age"), B("Key Event")]]+dmd_rows,
colWidths=[W*0.15, W*0.13, W*0.72])
dmd_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), C_DMD),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("GRID", (0,0), (-1,-1), 0.4, C_BORDER),
("BACKGROUND", (0,2), (-1,2), C_ROW_ALT),
("BACKGROUND", (0,4), (-1,4), C_ROW_ALT),
# Highlight wheelchair row
("BACKGROUND", (0,4), (-1,4), colors.HexColor("#FFF4CC")),
]))
story += [dmd_tbl, sp(2)]
# ββ CHUNK 10: MNEMONICS ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("10. MEMORY MNEMONICS"))
mnem_data = [
[Paragraph("<b>DMD = \"3C + X + G\"</b>", PS("mn",8,bold=True,color=C_DMD)),
Paragraph("<b>SMA = \"FANGS\"</b>", PS("mn2",8,bold=True,color=C_SMA))],
[
Table([
[B("C"), N("Calf pseudohypertrophy β big but WEAK")],
[B("C"), N("Cardiomyopathy β DCM universal")],
[B("C"), N("CK β sky high (>10Γ normal)")],
[B("X"), N("X-linked β males only")],
[B("G"), N("Gower's sign β uses hands to stand")],
], colWidths=[W*0.03, W*0.44]),
Table([
[B("F"), N("Fasciculations β tongue esp. Type I")],
[B("A"), N("Anterior horn cell β LMN death")],
[B("N"), N("Normal IQ + Normal sensation")],
[B("G"), N("Grouped atrophy on biopsy")],
[B("S"), N("SMN1 deleted β Chr 5q13")],
], colWidths=[W*0.03, W*0.44]),
]
]
mnem_tbl = Table(mnem_data, colWidths=[W*0.5, W*0.5])
mnem_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (0,0), colors.HexColor("#D6E4F0")),
("BACKGROUND", (1,0), (1,0), colors.HexColor("#FDECEA")),
("BACKGROUND", (0,1), (0,1), colors.HexColor("#EBF5FB")),
("BACKGROUND", (1,1), (1,1), colors.HexColor("#FEF9F9")),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 5),
("BOX", (0,0), (-1,-1), 0.5, C_BORDER),
("INNERGRID", (0,0), (-1,-1), 0.3, C_BORDER),
("VALIGN", (0,0), (-1,-1), "TOP"),
("ALIGN", (0,0), (-1,0), "CENTER"),
]))
story += [mnem_tbl, sp(2)]
# ββ CHUNK 11: MCQ RAPID FIRE ββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("11. MCQ / MEQ RAPID FIRE β Must Know"))
mcq_items = [
("Firm calves + proximal weakness + 4yr boy", "DMD"),
("Child uses hands to climb up his own legs to stand", "DMD β Gower's sign"),
("CK = 20,000 U/L in a toddler", "DMD"),
("Dilated cardiomyopathy + muscle weakness in a child", "DMD"),
("Low IQ + proximal weakness in boy", "DMD"),
("Dystrophin absent on IHC / muscle biopsy", "DMD"),
("Deflazacort prescribed for muscle disease", "DMD"),
("Floppy infant + tongue fasciculations + absent reflexes", "SMA Type I"),
("Cannot sit at 9 months + normal CK + absent DTRs", "SMA Type I"),
("Both sexes + AR + sits but NEVER walks", "SMA Type II"),
("Teenager walks but has proximal leg weakness", "SMA Type III"),
("Grouped atrophy of type I fibres on biopsy", "SMA"),
("Neurogenic EMG + normal CK + floppy baby", "SMA"),
("AR inheritance + pure motor + normal IQ + normal sensation", "SMA"),
("Nusinersen / Risdiplam prescribed", "SMA"),
("Myopathic EMG + massively raised CK", "DMD"),
("Reduced fetal movements + hypotonia at birth + resp failure", "SMA Type 0"),
("Normal CK + no sensation loss + absent reflexes + infant", "SMA"),
]
mcq_data = [[B("If question says..."), B("Answer")]]
for q, a in mcq_items:
col = C_DMD if "DMD" in a else C_SMA
mcq_data.append([
Paragraph(q, mcq_q),
Paragraph(a, PS("ans", 7, bold=True, color=col))
])
mcq_tbl = Table(mcq_data, colWidths=[W*0.68, W*0.32])
mcq_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#2C3E50")),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("GRID", (0,0), (-1,-1), 0.3, C_BORDER),
*[("BACKGROUND", (0,i), (-1,i), C_ROW_ALT) for i in range(1,len(mcq_data),2)],
]))
story += [mcq_tbl, sp(2)]
# ββ FOOTER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(HRFlowable(width=W, thickness=0.5, color=C_BORDER))
story.append(sp(1))
story.append(Paragraph(
"Sources: Tietz Textbook of Laboratory Medicine 7e | Bradley & Daroff's Neurology in Clinical Practice | "
"Campbell's Operative Orthopaedics 15e 2026 β For educational use: Final MBBS Yr 5",
footer_s
))
# ββ BUILD βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story)
print("PDF built:", OUTPUT)
cd /tmp/workspace && python dmd_sma_pdf.py 2>&1
ls -lh /tmp/workspace/DMD_vs_SMA_Quick_Reference.pdf
DMD vs SMA Quick Reference
PDF Document Β· PDF
| # | Section |
|---|---|
| 1 | Abbreviations guide (all terms explained) |
| 2 | Identity β Who gets it (gene, protein, inheritance) |
| 3 | Site of lesion |
| 4 | Onset & progression |
| 4A-4E | Motor signs split into 5 mini-tables (weakness / tone & reflexes / involuntary / classic signs / face & bulbar) |
| 5 | Non-motor features (brain, heart, lungs, bones) |
| 6 | Investigations (CK, EMG, biopsy, genetics) |
| 7 | Treatment (all drugs colour-coded) |
| 8 | SMA Types table (0-IV at a glance) |
| 9 | DMD disease stages |
| 10 | Mnemonics β 3C+X+G (DMD) and FANGS (SMA) |
| 11 | MCQ/MEQ rapid fire (18 high-yield stems with answers) |
please do not confuse by telling the investigations and treatmeent one in one line. BCS it confusing make it more organised even to answer the seq and seq
~/dmd_sma_pdf_v2.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import (
SimpleDocTemplate, Table, TableStyle, Paragraph,
Spacer, HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT
OUTPUT = "/tmp/workspace/DMD_vs_SMA_QuickRef_v2.pdf"
# ββ Colours βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
C_DMD = colors.HexColor("#1A3C6E")
C_SMA = colors.HexColor("#7B1F1F")
C_HEAD_BG = colors.HexColor("#0D1B2A")
C_SEC_BG = colors.HexColor("#E8EDF4")
C_ROW_ALT = colors.HexColor("#F5F7FA")
C_WHITE = colors.white
C_GREEN = colors.HexColor("#D6F0D6")
C_YELLOW = colors.HexColor("#FFF9E6")
C_BORDER = colors.HexColor("#BBCDE5")
C_INV_HDR = colors.HexColor("#1B4F72") # investigations header
C_TX_HDR = colors.HexColor("#4A235A") # treatment header
C_ORANGE = colors.HexColor("#F5CBA7") # highlight important rows
# ββ Page ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=10*mm, rightMargin=10*mm,
topMargin=10*mm, bottomMargin=10*mm,
)
W = A4[0] - 20*mm
# ββ Styles ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def PS(name, size, bold=False, color=colors.black, align=TA_LEFT, leading=None):
return ParagraphStyle(
name, fontSize=size,
fontName="Helvetica-Bold" if bold else "Helvetica",
textColor=color, alignment=align,
leading=leading or size*1.3,
spaceAfter=0, spaceBefore=0,
)
title_s = PS("title", 13, bold=True, color=C_WHITE, align=TA_CENTER)
sub_s = PS("sub", 8, bold=False, color=C_WHITE, align=TA_CENTER)
sec_s = PS("sec", 8, bold=True, color=C_DMD)
cb = lambda t: Paragraph(t, PS("cb", 7, bold=True))
cn = lambda t: Paragraph(t, PS("cn", 7))
cd = lambda t: Paragraph(t, PS("cd", 7, bold=True, color=C_DMD))
cs = lambda t: Paragraph(t, PS("cs", 7, bold=True, color=C_SMA))
hook_s = PS("hook", 7, color=colors.HexColor("#1A472A"))
foot_s = PS("foot", 6, color=colors.grey, align=TA_CENTER)
def sp(h=2): return Spacer(1, h*mm)
def sec_hdr(text, color=C_SEC_BG, text_color=C_DMD):
tbl = Table([[Paragraph(text, PS("sh", 8, bold=True, color=text_color))]], colWidths=[W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), color),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 0.5, C_BORDER),
]))
return tbl
def inv_hdr(text):
"""Dark blue header for investigation sub-sections"""
tbl = Table([[Paragraph(text, PS("ih", 7.5, bold=True, color=C_WHITE))]], colWidths=[W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_INV_HDR),
("TOPPADDING", (0,0), (-1,-1), 2.5),
("BOTTOMPADDING", (0,0), (-1,-1), 2.5),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
return tbl
def tx_hdr(text):
"""Purple header for treatment sub-sections"""
tbl = Table([[Paragraph(text, PS("th", 7.5, bold=True, color=C_WHITE))]], colWidths=[W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_TX_HDR),
("TOPPADDING", (0,0), (-1,-1), 2.5),
("BOTTOMPADDING", (0,0), (-1,-1), 2.5),
("LEFTPADDING", (0,0), (-1,-1), 8),
]))
return tbl
def make_table(headers, rows, col_widths, hdr_color=C_DMD, highlights=None):
data = [headers] + rows
tbl = Table(data, colWidths=col_widths, repeatRows=1)
style = [
("BACKGROUND", (0,0), (-1,0), hdr_color),
("TEXTCOLOR", (0,0), (-1,0), C_WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,0), 7.5),
("ALIGN", (0,0), (-1,0), "CENTER"),
("TOPPADDING", (0,0), (-1,0), 3),
("BOTTOMPADDING", (0,0), (-1,0), 3),
("FONTSIZE", (0,1), (-1,-1), 7),
("TOPPADDING", (0,1), (-1,-1), 2),
("BOTTOMPADDING", (0,1), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("GRID", (0,0), (-1,-1), 0.4, C_BORDER),
]
for i in range(1, len(data)):
if i % 2 == 0:
style.append(("BACKGROUND", (0,i), (-1,i), C_ROW_ALT))
if highlights:
for row_idx, bg in highlights:
style.append(("BACKGROUND", (0, row_idx), (-1, row_idx), bg))
tbl.setStyle(TableStyle(style))
return tbl
def hook_box(text, bg=C_GREEN):
tbl = Table([[Paragraph(text, hook_s)]], colWidths=[W])
tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#7CB87C")),
]))
return tbl
# ββ Column presets ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CW3 = [W*0.30, W*0.35, W*0.35]
CW3b = [W*0.32, W*0.34, W*0.34]
# =============================================================================
story = []
# ββ TITLE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
title_tbl = Table(
[[Paragraph("DMD vs SMA β Quick Reference Card", title_s),
Paragraph("Final MBBS Yr 5 | Paediatrics", sub_s)]],
colWidths=[W*0.65, W*0.35]
)
title_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), C_HEAD_BG),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story += [title_tbl, sp(2)]
# ββ ABBREVIATIONS βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("ABBREVIATIONS β Know These First"))
abbr = [
[cb("DMD"), cn("Duchenne Muscular Dystrophy"), cb("SMA"), cn("Spinal Muscular Atrophy")],
[cb("CK"), cn("Creatine Kinase (muscle enzyme)"),cb("DCM"), cn("Dilated Cardiomyopathy")],
[cb("IHC"), cn("Immunohistochemistry"), cb("NIV"), cn("Non-Invasive Ventilation")],
[cb("EMG"), cn("Electromyography"), cb("NCV"), cn("Nerve Conduction Velocity")],
[cb("MUP"), cn("Motor Unit Potential"), cb("DTR"), cn("Deep Tendon Reflex")],
[cb("LMN"), cn("Lower Motor Neuron"), cb("UMN"), cn("Upper Motor Neuron")],
[cb("XLR"), cn("X-Linked Recessive"), cb("AR"), cn("Autosomal Recessive")],
[cb("MLPA"),cn("Multiplex Ligation Probe Amplification (gene test)"), cb("CVS"), cn("Chorionic Villus Sampling")],
[cb("ACE-I"),cn("ACE Inhibitor"), cb("NBS"), cn("Newborn Screening")],
]
at = Table(abbr, colWidths=[W*0.09, W*0.41, W*0.09, W*0.41])
at.setStyle(TableStyle([
("FONTSIZE", (0,0),(-1,-1), 7),
("TOPPADDING", (0,0),(-1,-1), 1.5),
("BOTTOMPADDING", (0,0),(-1,-1), 1.5),
("LEFTPADDING", (0,0),(-1,-1), 4),
("GRID", (0,0),(-1,-1), 0.3, C_BORDER),
*[("BACKGROUND", (0,i),(-1,i), C_ROW_ALT) for i in range(0,9,2)],
]))
story += [at, sp(2)]
# ββ 1. IDENTITY βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("1. IDENTITY β Who Gets It?"))
rows = [
[cb("Disease type"), cd("Myopathy β muscle disease"), cs("Motor Neuron Disease")],
[cb("Gene"), cd("DMD gene"), cs("SMN1 gene")],
[cb("Chromosome"), cd("Xp21.2"), cs("5q13")],
[cb("Protein lost"), cd("Dystrophin (structural protein)"), cs("SMN protein (mRNA splicing)")],
[cb("Inheritance"), cd("X-Linked Recessive (XLR)"), cs("Autosomal Recessive (AR)")],
[cb("Sex affected"), cd("Males ONLY"), cs("Both sexes equally")],
[cb("Incidence"), cd("1 in 3,500 males"), cs("1 in 6,000β10,000")],
[cb("Spontaneous mut"),cd("30% β no family history"), cs("Rare")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(hook_box("Hook: DMD = X = eXclusively males | SMA = Chr 5 = both 5eXes"))
story.append(sp(2))
# ββ 2. SITE OF LESION βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("2. SITE OF LESION"))
rows = [
[cb("Primary site"), cd("Muscle fibre β sarcolemma"), cs("Spinal anterior horn cells")],
[cb("Neuron involved?"),cd("NO"), cs("YES β LMN only")],
[cb("UMN signs?"), cd("Absent"), cs("Absent")],
[cb("Sensory loss?"), cd("NO β normal sensation"), cs("NO β PURE motor disease")],
[cb("Bulbar involved?"),cd("NO β face spared"), cs("YES β Type I (tongue, swallow)")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(hook_box("Hook: DMD = Muscle dies | SMA = Motor neuron dies β muscle wastes secondary"))
story.append(sp(2))
# ββ 3. ONSET & PROGRESSION ββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("3. ONSET & PROGRESSION"))
rows = [
[cb("Onset age"), cd("2β5 yrs (mean diagnosis 41 mo)"), cs("Birth β adulthood (type-dependent)")],
[cb("First clue"), cd("Toe walking, frequent falls"), cs("Floppy baby / hypotonia")],
[cb("Early milestones"),cd("Initially NORMAL"), cs("Delayed from birth (Type I)")],
[cb("Wheelchair age"), cd("10β15 yrs β KEY EXAM FACT"), cs("Type I: never walks; Type III: may lose walking")],
[cb("Cause of death"), cd("DCM + Respiratory failure"), cs("Respiratory failure (Type I <1 yr)")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3,
highlights=[(4, C_ORANGE)]))
story.append(sp(2))
# ββ 4. MOTOR SIGNS (5 sub-chunks) βββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("4. MOTOR SIGNS"))
story.append(sp(1))
# 4A Weakness
story.append(inv_hdr(" 4A. Weakness Pattern"))
rows = [
[cb("Pattern"), cd("Proximal > Distal"), cs("Proximal > Distal")],
[cb("Limb onset"), cd("Lower limbs FIRST, then upper"), cs("Lower limbs worse than upper")],
[cb("Axial muscles"), cd("Weak β lumbar lordosis early"), cs("Weak β poor head control early")],
[cb("Progression"), cd("Steady downhill"), cs("Progressive / brief plateau possible")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(sp(1))
# 4B Tone & Reflexes
story.append(inv_hdr(" 4B. Tone & Deep Tendon Reflexes (DTRs)"))
rows = [
[cb("Muscle tone"), cd("Hypotonia β develops LATER"), cs("Profound hypotonia β FROM BIRTH (Type I)")],
[cb("DTRs overall"), cd("Reduced β LATE in disease"), cs("ABSENT β EARLY hallmark sign")],
[cb("Ankle reflex"), cd("Lost late"), cs("LOST EARLIEST")],
[cb("Knee reflex"), cd("Lost later"), cs("Also absent")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(hook_box("Hook: Absent reflexes EARLY = SMA. Anterior horn cell gone = no reflex arc."))
story.append(sp(1))
# 4C Involuntary
story.append(inv_hdr(" 4C. Involuntary Movements"))
rows = [
[cb("Fasciculations"), cd("ABSENT"), cs("PRESENT β LMN sign")],
[cb("Tongue fascicul."), cd("Absent"), cs("CLASSIC in Type I β KEY exam sign")],
[cb("Fibrillations (EMG)"),cd("Absent"), cs("Present on EMG")],
[cb("Muscle cramps"), cd("Occasionally"), cs("Less common")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(hook_box("Hook: Twitching tongue + floppy baby = SMA Type I until proven otherwise"))
story.append(sp(1))
# 4D Classic signs
story.append(inv_hdr(" 4D. Classic Clinical Signs"))
rows = [
[cb("Gower's sign"), cd("CLASSIC β hands climb thighs to stand"), cs("ABSENT")],
[cb("Calf pseudohypertrophy"),cd("CLASSIC β firm, rubbery (fat+fibrosis)"), cs("ABSENT")],
[cb("Lumbar lordosis"), cd("Early prominent sign"), cs("Less prominent")],
[cb("Waddling gait"), cd("Present"), cs("Types I-II cannot walk")],
[cb("Trendelenburg gait"), cd("Present"), cs("Absent")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(hook_box("Hook: Big calves that are WEAK = pseudohypertrophy = DMD (fat+fibrosis replacing muscle)"))
story.append(sp(1))
# 4E Face & Bulbar
story.append(inv_hdr(" 4E. Face & Bulbar Signs"))
rows = [
[cb("Facial muscles"), cd("SPARED"), cs("Involved β Type I only")],
[cb("Tongue"), cd("Normal"), cs("Fasciculating + wasted (Type I)")],
[cb("Swallowing"), cd("Normal"), cs("Dysphagia β aspiration risk (Type I)")],
[cb("Feeding"), cd("Normal"), cs("Difficulty feeding β Type I")],
[cb("Head control"), cd("Normal initially"), cs("LOST EARLY β Type I")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(sp(2))
# ββ 5. NON-MOTOR FEATURES ββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("5. NON-MOTOR FEATURES"))
story.append(sp(1))
story.append(inv_hdr(" 5A. Cognition & Intelligence"))
rows = [
[cb("Intelligence / IQ"),cd("LOW β non-progressive cognitive impairment"), cs("NORMAL β brain unaffected")],
[cb("Why low IQ?"), cd("Dystrophin isoforms expressed in brain"), cs("Not applicable")],
[cb("Behaviour"), cd("ADHD, autism-like features possible"), cs("Normal behaviour")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(sp(1))
story.append(inv_hdr(" 5B. Cardiac"))
rows = [
[cb("Cardiac involvement"),cd("UNIVERSAL β affects ALL patients"), cs("ABSENT (generally)")],
[cb("Type"), cd("Dilated Cardiomyopathy (DCM)"), cs("None")],
[cb("Mechanism"), cd("Cardiac fibrosis β dystrophin absent in heart"),cs("Not applicable")],
[cb("Arrhythmia"), cd("Conduction defects"), cs("Absent")],
[cb("Heart failure"), cd("LV dilation β Congestive Heart Failure"), cs("Absent")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(hook_box("Hook: Heart also has dystrophin β no dystrophin = heart destroyed too in DMD"))
story.append(sp(1))
story.append(inv_hdr(" 5C. Respiratory"))
rows = [
[cb("Respiratory failure"),cd("Late β affects ALL patients eventually"), cs("EARLY in Type I (<1 yr)")],
[cb("Mechanism"), cd("Resp. muscle weakness + scoliosis"), cs("Intercostal + diaphragm weakness")],
[cb("Type I SMA"), cd("β"), cs("Resp. failure = cause of death <1 yr")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(sp(1))
story.append(inv_hdr(" 5D. Orthopaedic / Skeletal"))
rows = [
[cb("Scoliosis"), cd("Yes β worsens post-wheelchair"), cs("Yes β severe in Types IIβIII")],
[cb("Contractures"), cd("Achilles tendon, hip flexors, knees"), cs("Hip dislocation β Type II")],
[cb("Lumbar lordosis"), cd("Prominent early"), cs("Less common")],
[cb("Fractures"), cd("Steroid-related + immobility"), cs("Muscle weakness-related")],
]
story.append(make_table([cb("Feature"), cd("DMD"), cs("SMA")], rows, CW3))
story.append(sp(2))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# ββ 6. INVESTIGATIONS β FULLY EXPANDED, SEQ-READY βββββββββββββββββ
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("6. INVESTIGATIONS (SEQ / MEQ Ready)", color=colors.HexColor("#D0E4F7"), text_color=C_INV_HDR))
story.append(sp(1))
# 6A Blood
story.append(inv_hdr(" 6A. Blood Tests"))
rows = [
[cb("CK β Creatine Kinase"),
cd("MASSIVELY elevated\n>10β50Γ normal\nTypical: 10,000β50,000 U/L\nAlready HIGH at birth (before symptoms!)"),
cs("Normal OR mildly elevated\nUsually <500 U/L\nNormal at birth")],
[cb("LDH\n(Lactate Dehydrogenase)"),
cd("Mildly elevated\n(from dying muscle cells)"),
cs("Normal")],
[cb("AST / ALT\n(liver enzymes)"),
cd("Mildly elevated\nCAUSE = muscle, NOT liver!\nAlways check CK if raised in a child"),
cs("Normal")],
]
bt = Table([[cb("Test"), cd("DMD β What to Write"), cs("SMA β What to Write")]] + rows,
colWidths=[W*0.28, W*0.36, W*0.36], repeatRows=1)
bt.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_INV_HDR),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),3),
("BOTTOMPADDING", (0,0),(-1,-1),3),
("LEFTPADDING", (0,0),(-1,-1),4),
("VALIGN", (0,0),(-1,-1),"TOP"),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
("BACKGROUND", (0,2),(-1,2), C_ROW_ALT),
]))
story += [bt, sp(1)]
# 6B EMG
story.append(inv_hdr(" 6B. EMG β Electromyography"))
rows = [
[cb("Overall pattern"), cd("MYOPATHIC"), cs("NEUROGENIC")],
[cb("MUP size"), cd("Small, short, low amplitude"), cs("Large, long duration MUPs")],
[cb("Polyphasic MUPs"), cd("YES β characteristic"), cs("Less prominent")],
[cb("Fibrillations"), cd("ABSENT"), cs("PRESENT β denervation sign")],
[cb("Fasciculations"), cd("ABSENT"), cs("PRESENT")],
[cb("Recruitment"), cd("Early recruitment (many small units)"),cs("Reduced recruitment (fewer large units)")],
]
story.append(make_table([cb("EMG Finding"), cd("DMD"), cs("SMA")], rows, CW3, hdr_color=C_INV_HDR))
story.append(hook_box("Hook: Myopathic = small units (fewer fibres work) | Neurogenic = large units (surviving neurons compensate)"))
story.append(sp(1))
# 6C NCV
story.append(inv_hdr(" 6C. Nerve Conduction Velocity (NCV)"))
rows = [
[cb("Motor NCV"), cd("NORMAL"), cs("NORMAL")],
[cb("Sensory NCV"), cd("NORMAL"), cs("NORMAL")],
[cb("Interpretation"), cd("Nerves intact β muscle is the problem"), cs("Nerves intact β neuron BODY is dying (not the nerve)")],
]
story.append(make_table([cb("NCV Finding"), cd("DMD"), cs("SMA")], rows, CW3, hdr_color=C_INV_HDR))
story.append(sp(1))
# 6D Muscle Biopsy β Pattern
story.append(inv_hdr(" 6D. Muscle Biopsy β Gross Histological Pattern"))
rows = [
[cb("Overall pattern"), cd("Random scattered necrosis"), cs("GROUPED fibre atrophy")],
[cb("Fat infiltration"), cd("YES β late feature"), cs("NO")],
[cb("Fibrosis"), cd("Endomysial fibrosis β YES"), cs("NO")],
[cb("Inflammation"), cd("Mild inflammatory infiltrate"), cs("NO")],
]
story.append(make_table([cb("Finding"), cd("DMD"), cs("SMA")], rows, CW3, hdr_color=C_INV_HDR))
story.append(sp(1))
# 6E Muscle Biopsy β Fibres
story.append(inv_hdr(" 6E. Muscle Biopsy β Individual Fibre Changes"))
rows = [
[cb("Fibre necrosis"), cd("PRESENT β hallmark"), cs("ABSENT")],
[cb("Fibre regeneration"), cd("PRESENT β basophilic fibres"), cs("ABSENT")],
[cb("Fibre size variation"), cd("YES β marked"), cs("Less prominent")],
[cb("Type I fibres"), cd("Variable atrophy"), cs("GROUPED ATROPHY β hallmark")],
[cb("Type II fibres"), cd("Variable"), cs("HYPERTROPHIED β compensatory")],
[cb("Fibre type grouping"), cd("ABSENT"), cs("PRESENT β reinnervation pattern")],
]
story.append(make_table([cb("Fibre Finding"), cd("DMD"), cs("SMA")], rows, CW3, hdr_color=C_INV_HDR))
story.append(sp(1))
# 6F Biopsy β Special Stains
story.append(inv_hdr(" 6F. Muscle Biopsy β Special Stains (IHC)"))
rows = [
[cb("Dystrophin IHC"), cd("ABSENT β DIAGNOSTIC"), cs("PRESENT / Normal")],
[cb("H&E stain"), cd("Necrosis + regeneration"), cs("Grouped atrophy")],
[cb("Modified Gomori"), cd("Fibrosis prominent"), cs("Less prominent")],
[cb("ATPase stain"), cd("Fibre size variation"), cs("Grouped atrophy of Type I")],
]
story.append(make_table([cb("Stain / Test"), cd("DMD"), cs("SMA")], rows, CW3, hdr_color=C_INV_HDR))
story.append(hook_box("Biopsy Exam Rule: Grouped atrophy = SMA (neuron died β muscle regrouped) | Dystrophin absent = DMD"))
story.append(sp(1))
# 6G Genetic
story.append(inv_hdr(" 6G. Genetic Testing"))
rows = [
[cb("Gold standard test"), cd("MLPA / PCR\n(DMD gene deletion / duplication)"), cs("MLPA for SMN1\n(copy number = 0 confirms SMA)")],
[cb("Confirm diagnosis"), cd("Dystrophin absent on IHC\n+ gene test"), cs("SMN1 deletion confirmed")],
[cb("Prenatal test"), cd("CVS or amniocentesis"), cs("CVS or amniocentesis")],
[cb("Carrier testing"), cd("Female relatives (XLR)"), cs("Both parents (AR)")],
[cb("Newborn screening"), cd("CK on dried blood spot"), cs("SMN1 copy number")],
]
story.append(make_table([cb("Genetic Test"), cd("DMD"), cs("SMA")], rows, CW3, hdr_color=C_INV_HDR))
story.append(sp(2))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# ββ 7. TREATMENT β FULLY EXPANDED, SEQ-READY ββββββββββββββββββββββ
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("7. TREATMENT (SEQ / MEQ Ready)", color=colors.HexColor("#EDE0F5"), text_color=C_TX_HDR))
story.append(sp(1))
# 7A Steroids
story.append(tx_hdr(" 7A. Corticosteroids"))
rows = [
[cb("Used?"), cd("YES β FIRST LINE in DMD"), cs("NO β not used in SMA")],
[cb("Drug of choice"), cd("Deflazacort (preferred)\nor Prednisolone"), cs("β")],
[cb("Purpose"), cd("Slows muscle weakness\nDelays wheelchair by ~2 yrs"), cs("β")],
[cb("Start age"), cd("~4β5 years of age"), cs("β")],
[cb("Side effects"), cd("Weight gain, Cushingoid features\nOsteoporosis, Growth delay"), cs("β")],
]
st = Table([[cb("Point"), cd("DMD"), cs("SMA")]] + rows,
colWidths=CW3, repeatRows=1)
st.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_TX_HDR),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),3),
("BOTTOMPADDING", (0,0),(-1,-1),3),
("LEFTPADDING", (0,0),(-1,-1),4),
("VALIGN", (0,0),(-1,-1),"TOP"),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
*[("BACKGROUND", (0,i),(-1,i), C_ROW_ALT) for i in range(1,6,2)],
]))
story += [st, sp(1)]
# 7B Disease-modifying
story.append(tx_hdr(" 7B. Disease-Modifying Therapies"))
dm_hdr = [cb("Drug"), cb("For DMD?"), cb("For SMA?"), cb("Route"), cb("Mechanism")]
dm_rows = [
[cd("Deflazacort / Prednisolone"),
cd("YES β 1st line"),
cs("NO"),
cn("Oral"),
cn("Corticosteroid β slows degeneration")],
[cs("Nusinersen"),
cd("NO"),
cs("YES"),
cn("Intrathecal\n(into spinal fluid)"),
cn("Antisense oligonucleotide\nIncreases full-length SMN protein from SMN2")],
[cs("Risdiplam"),
cd("NO"),
cs("YES"),
cn("Oral daily\n(syrup)"),
cn("SMN2 splicing modifier\nIncreases functional SMN protein")],
[cs("Onasemnogene\nabeparvovec"),
cd("NO"),
cs("YES"),
cn("IV β ONE TIME\ngene therapy"),
cn("Delivers functional SMN1 gene\nvia AAV9 vector")],
[cd("Eteplirsen"),
cd("YES\n(exon 51 del.)"),
cs("NO"),
cn("IV infusion"),
cn("Exon 51 skipping\nRestores partial dystrophin")],
[cd("Ataluren"),
cd("YES\n(nonsense mut.)"),
cs("NO"),
cn("Oral"),
cn("Read-through of premature\nstop codon")],
]
dm_cw = [W*0.22, W*0.12, W*0.10, W*0.16, W*0.40]
dm_t = Table([dm_hdr]+dm_rows, colWidths=dm_cw, repeatRows=1)
dm_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_TX_HDR),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),2.5),
("BOTTOMPADDING", (0,0),(-1,-1),2.5),
("LEFTPADDING", (0,0),(-1,-1),4),
("VALIGN", (0,0),(-1,-1),"TOP"),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
*[("BACKGROUND", (0,i),(-1,i), C_ROW_ALT) for i in range(1,7,2)],
# SMA drugs highlight
("BACKGROUND", (0,2),(-1,2), colors.HexColor("#FDECEA")),
("BACKGROUND", (0,3),(-1,3), colors.HexColor("#FDECEA")),
("BACKGROUND", (0,4),(-1,4), colors.HexColor("#FDECEA")),
]))
story += [dm_t]
story.append(hook_box("SMA drugs = NRO: Nusinersen Β· Risdiplam Β· Onasemnogene | DMD = Deflazacort (steroid) + Eteplirsen/Ataluren (gene-level)"))
story.append(sp(1))
# 7C Cardiac treatment
story.append(tx_hdr(" 7C. Cardiac Treatment"))
rows = [
[cb("Indication"), cd("DCM present in ALL DMD patients"), cs("NOT needed (no cardiac disease)")],
[cb("ACE Inhibitor"), cd("YES β start early (enalapril)"), cs("β")],
[cb("Beta-blocker"), cd("YES β carvedilol / metoprolol"), cs("β")],
[cb("Diuretics"), cd("YES β for heart failure / oedema"), cs("β")],
[cb("When to start"), cd("From ~10 yrs or when DCM detected"),cs("β")],
]
ct = Table([[cb("Drug / Point"), cd("DMD"), cs("SMA")]] + rows, colWidths=CW3, repeatRows=1)
ct.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_TX_HDR),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),3),
("BOTTOMPADDING", (0,0),(-1,-1),3),
("LEFTPADDING", (0,0),(-1,-1),4),
("VALIGN", (0,0),(-1,-1),"TOP"),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
*[("BACKGROUND", (0,i),(-1,i), C_ROW_ALT) for i in range(1,6,2)],
]))
story += [ct, sp(1)]
# 7D Respiratory treatment
story.append(tx_hdr(" 7D. Respiratory Treatment"))
rows = [
[cb("Non-invasive ventilation (NIV)"),cd("YES β when FVC drops\n(BiPAP / CPAP)"), cs("YES β Types IβII\nearly and essential")],
[cb("Tracheostomy"), cd("Considered very late"), cs("Type I β sometimes needed")],
[cb("Cough assist device"), cd("YES β for secretion clearance"), cs("YES β Type I")],
[cb("Chest physiotherapy"), cd("YES"), cs("YES")],
]
rt = Table([[cb("Respiratory Rx"), cd("DMD"), cs("SMA")]] + rows, colWidths=CW3, repeatRows=1)
rt.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_TX_HDR),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),3),
("BOTTOMPADDING", (0,0),(-1,-1),3),
("LEFTPADDING", (0,0),(-1,-1),4),
("VALIGN", (0,0),(-1,-1),"TOP"),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
*[("BACKGROUND", (0,i),(-1,i), C_ROW_ALT) for i in range(1,5,2)],
]))
story += [rt, sp(1)]
# 7E Orthopaedic
story.append(tx_hdr(" 7E. Orthopaedic / Supportive Treatment"))
rows = [
[cb("Spinal fusion"), cd("YES β for progressive scoliosis"), cs("YES β Types IIβIII")],
[cb("Achilles tendon release"),cd("YES β for contractures"), cs("Less common")],
[cb("Physiotherapy"), cd("Maintain ambulation as long as possible"), cs("Prevent contractures, positioning")],
[cb("Nutritional support"), cd("For steroid side effects\n(weight/growth monitoring)"), cs("Gastrostomy tube β Type I\n(feeding difficulty)")],
[cb("Genetic counselling"), cd("Female carriers β prenatal testing"), cs("Both parents β prenatal / NBS")],
]
ot = Table([[cb("Support"), cd("DMD"), cs("SMA")]] + rows, colWidths=CW3, repeatRows=1)
ot.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_TX_HDR),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),3),
("BOTTOMPADDING", (0,0),(-1,-1),3),
("LEFTPADDING", (0,0),(-1,-1),4),
("VALIGN", (0,0),(-1,-1),"TOP"),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
*[("BACKGROUND", (0,i),(-1,i), C_ROW_ALT) for i in range(1,6,2)],
]))
story += [ot, sp(2)]
# ββ 8. SMA TYPES βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("8. SMA TYPES β One Glance"))
sma_hdr = [cb("Type"), cb("Alias / Name"), cb("Onset Age"), cb("Best Milestone EVER"), cb("Survival")]
sma_rows = [
[cb("0"), cn("Prenatal / Severe"), cn("In womb"), cn("NONE β resp. failure at birth"), cn("Weeks")],
[cb("I"), cd("Werdnig-Hoffmann"), cn("<6 months"), cn("Cannot sit"), cn("<1 year")],
[cb("II"), cn("Intermediate SMA"), cn("7β18 months"), cn("Sits β cannot walk"), cn("3rd decade")],
[cb("III"),cn("Kugelberg-Welander"), cn(">18 months"), cn("Walks (may lose later)"), cn("Normal")],
[cb("IV"), cn("Adult SMA"), cn("20sβ30s"), cn("Ambulatory"), cn("Normal")],
]
sma_cw = [W*0.07, W*0.24, W*0.15, W*0.30, W*0.24]
sma_t = Table([sma_hdr]+sma_rows, colWidths=sma_cw)
sma_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_SMA),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),2.5),
("BOTTOMPADDING", (0,0),(-1,-1),2.5),
("LEFTPADDING", (0,0),(-1,-1),4),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
("BACKGROUND", (0,2),(-1,2), C_ROW_ALT),
("BACKGROUND", (0,4),(-1,4), C_ROW_ALT),
("BACKGROUND", (0,1),(-1,1), colors.HexColor("#FDECEA")), # Type I highlight
]))
story += [sma_t]
story.append(hook_box("Rule: Type I = never sits | Type II = sits only | Type III = walks | Type IV = adult onset"))
story.append(sp(2))
# ββ 9. DMD STAGES ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("9. DMD DISEASE STAGES"))
dmd_rows = [
[cb("Silent"), cn("0β2 yrs"), cn("CK already sky-high β child looks COMPLETELY NORMAL")],
[cb("Early"), cn("2β5 yrs"), cn("Toe walking Β· Frequent falls Β· Gower's sign Β· Calf hypertrophy appears")],
[cb("Progressive"), cn("5β10 yrs"), cn("Proximal weakness Β· Lumbar lordosis Β· Scoliosis begins Β· CK still very high")],
[cb("Wheelchair"), cd("10β15 yrs"), cd("LOSS OF AMBULATION β MOST TESTED EXAM FACT")],
[cb("Terminal"), cn("Late teensβ20s"),cn("DCM + Respiratory failure = Primary cause of death")],
]
dmd_t = Table([[cb("Stage"), cb("Age"), cb("Key Event / Landmark")]]+dmd_rows,
colWidths=[W*0.14, W*0.13, W*0.73])
dmd_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), C_DMD),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),2.5),
("BOTTOMPADDING", (0,0),(-1,-1),2.5),
("LEFTPADDING", (0,0),(-1,-1),4),
("GRID", (0,0),(-1,-1),0.4, C_BORDER),
("BACKGROUND", (0,2),(-1,2), C_ROW_ALT),
("BACKGROUND", (0,4),(-1,4), C_YELLOW), # wheelchair
]))
story += [dmd_t, sp(2)]
# ββ 10. MNEMONICS βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("10. MEMORY MNEMONICS"))
m1 = Table([
[Paragraph("DMD = \"3C + X + G\"", PS("m1h",8,bold=True,color=C_DMD))],
[Table([
[cb("C"), cn("Calf pseudohypertrophy β big but WEAK")],
[cb("C"), cn("Cardiomyopathy (DCM) β universal")],
[cb("C"), cn("CK β sky high >10Γ normal")],
[cb("X"), cn("X-linked β males ONLY")],
[cb("G"), cn("Gower's sign β hands climb thighs")],
], colWidths=[W*0.04, W*0.43])],
], colWidths=[W*0.47])
m1.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),colors.HexColor("#D6E4F0")),
("BACKGROUND",(0,1),(-1,1),colors.HexColor("#EBF5FB")),
("TOPPADDING",(0,0),(-1,-1),3),("BOTTOMPADDING",(0,0),(-1,-1),3),
("LEFTPADDING",(0,0),(-1,-1),5),
("BOX",(0,0),(-1,-1),0.5,C_BORDER),
]))
m2 = Table([
[Paragraph("SMA = \"FANGS\"", PS("m2h",8,bold=True,color=C_SMA))],
[Table([
[cb("F"), cn("Fasciculations β tongue esp. Type I")],
[cb("A"), cn("Anterior horn cell death β LMN")],
[cb("N"), cn("Normal IQ + Normal sensation")],
[cb("G"), cn("Grouped atrophy on biopsy")],
[cb("S"), cn("SMN1 deleted β Chr 5q13")],
], colWidths=[W*0.04, W*0.43])],
], colWidths=[W*0.47])
m2.setStyle(TableStyle([
("BACKGROUND",(0,0),(-1,0),colors.HexColor("#FDECEA")),
("BACKGROUND",(0,1),(-1,1),colors.HexColor("#FEF9F9")),
("TOPPADDING",(0,0),(-1,-1),3),("BOTTOMPADDING",(0,0),(-1,-1),3),
("LEFTPADDING",(0,0),(-1,-1),5),
("BOX",(0,0),(-1,-1),0.5,C_BORDER),
]))
mnem_outer = Table([[m1, Spacer(W*0.06,1), m2]], colWidths=[W*0.47, W*0.06, W*0.47])
mnem_outer.setStyle(TableStyle([("VALIGN",(0,0),(-1,-1),"TOP")]))
story += [mnem_outer, sp(2)]
# ββ 11. MCQ RAPID FIRE ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(sec_hdr("11. MCQ / SEQ / MEQ RAPID FIRE"))
mcq_items = [
("Firm calves + proximal weakness + 4yr boy", "DMD", C_DMD),
("Child uses hands to climb up legs to stand", "DMD β Gower's sign", C_DMD),
("CK = 20,000 U/L in a toddler", "DMD", C_DMD),
("Dilated cardiomyopathy + muscle weakness in a child", "DMD", C_DMD),
("Low IQ + proximal weakness in a boy", "DMD", C_DMD),
("Dystrophin absent on IHC", "DMD", C_DMD),
("Deflazacort prescribed for a child with muscle disease", "DMD", C_DMD),
("Myopathic EMG + massively raised CK", "DMD", C_DMD),
("Floppy infant + tongue fasciculations + absent reflexes", "SMA Type I", C_SMA),
("Cannot sit at 9 months + normal CK + absent DTRs", "SMA Type I", C_SMA),
("Both sexes affected + AR + sits but NEVER walks", "SMA Type II",C_SMA),
("Teenager walks but has proximal leg weakness, normal CK", "SMA Type III",C_SMA),
("Grouped atrophy of type I fibres on biopsy", "SMA", C_SMA),
("Neurogenic EMG + normal CK + floppy baby", "SMA", C_SMA),
("Pure motor + normal IQ + normal sensation + AR inheritance", "SMA", C_SMA),
("Nusinersen / Risdiplam prescribed", "SMA", C_SMA),
("Reduced fetal movements + hypotonia at birth + resp failure", "SMA Type 0", C_SMA),
("Normal CK + no sensation loss + absent reflexes + infant", "SMA", C_SMA),
]
mcq_data = [[cb("If question / stem says..."), cb("Answer")]]
for q, a, c in mcq_items:
mcq_data.append([
Paragraph(q, PS("mq",7)),
Paragraph(a, PS("ma",7,bold=True,color=c))
])
mcq_t = Table(mcq_data, colWidths=[W*0.70, W*0.30], repeatRows=1)
mcq_t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,0), colors.HexColor("#2C3E50")),
("TEXTCOLOR", (0,0),(-1,0), C_WHITE),
("FONTNAME", (0,0),(-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0),(-1,-1),7),
("TOPPADDING", (0,0),(-1,-1),2),
("BOTTOMPADDING", (0,0),(-1,-1),2),
("LEFTPADDING", (0,0),(-1,-1),4),
("VALIGN", (0,0),(-1,-1),"MIDDLE"),
("GRID", (0,0),(-1,-1),0.3, C_BORDER),
*[("BACKGROUND", (0,i),(-1,i), C_ROW_ALT) for i in range(1,len(mcq_data),2)],
]))
story += [mcq_t, sp(2)]
# ββ FOOTER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(HRFlowable(width=W, thickness=0.5, color=C_BORDER))
story.append(sp(1))
story.append(Paragraph(
"Sources: Tietz Textbook of Laboratory Medicine 7e | "
"Bradley & Daroff's Neurology in Clinical Practice | "
"Campbell's Operative Orthopaedics 15e 2026 β For educational use Β· Final MBBS Yr 5",
foot_s
))
doc.build(story)
print("PDF built:", OUTPUT)
cd /tmp/workspace && python dmd_sma_pdf_v2.py 2>&1
ls -lh /tmp/workspace/DMD_vs_SMA_QuickRef_v2.pdf
DMD vs SMA QuickRef v2
PDF Document Β· PDF
| Sub-section | What it covers |
|---|---|
| 6A. Blood Tests | CK (with exact values + when it rises), LDH, AST/ALT separately explained |
| 6B. EMG | Full breakdown β MUP size, polyphasic, fibrillations, fasciculations, recruitment β each on its own row |
| 6C. NCV | Separate table β motor NCV, sensory NCV, interpretation |
| 6D. Biopsy β Gross Pattern | Necrosis vs grouped atrophy, fat, fibrosis, inflammation |
| 6E. Biopsy β Fibre Changes | Type I vs Type II fibres, necrosis, regeneration β each separate |
| 6F. Biopsy β Special Stains | Dystrophin IHC, H&E, Gomori, ATPase β each on its own row |
| 6G. Genetic Testing | Gold standard, prenatal, carrier, NBS β all separate rows |
| Sub-section | What it covers |
|---|---|
| 7A. Corticosteroids | Drug, dose timing, purpose, side effects β each row separate |
| 7B. Disease-Modifying | Each drug (Nusinersen, Risdiplam, Onasemnogene, Eteplirsen, Ataluren) with route + mechanism |
| 7C. Cardiac | ACE-I, beta-blocker, diuretics, when to start β all separate |
| 7D. Respiratory | NIV, tracheostomy, cough assist β all separate |
| 7E. Orthopaedic / Supportive | Spinal fusion, physio, nutrition, genetic counselling |