attachment
attachment

Answer these questions and make it in a pdf format

Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Reading File
Running Command

mkdir -p /tmp/workspace/biochemistry-exam && ls /tmp/workspace/

Writing File

~/biochemistry-exam/generate_pdf.py

from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.lib import colors
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    HRFlowable, PageBreak, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus.flowables import HRFlowable

OUTPUT = "/tmp/workspace/biochemistry-exam/Biochemistry_Exam_Answers.pdf"

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    rightMargin=2*cm, leftMargin=2*cm,
    topMargin=2.5*cm, bottomMargin=2.5*cm
)

styles = getSampleStyleSheet()

# Custom styles
title_style = ParagraphStyle(
    'TitleCustom', parent=styles['Title'],
    fontSize=13, spaceAfter=4, spaceBefore=0,
    alignment=TA_CENTER, textColor=colors.HexColor('#1a237e'),
    fontName='Helvetica-Bold'
)
subtitle_style = ParagraphStyle(
    'SubTitle', parent=styles['Normal'],
    fontSize=10, spaceAfter=2, alignment=TA_CENTER,
    textColor=colors.HexColor('#283593'), fontName='Helvetica'
)
q_heading_style = ParagraphStyle(
    'QHeading', parent=styles['Heading1'],
    fontSize=12, spaceBefore=14, spaceAfter=4,
    textColor=colors.HexColor('#b71c1c'), fontName='Helvetica-Bold',
    borderPad=4
)
sub_heading_style = ParagraphStyle(
    'SubHeading', parent=styles['Heading2'],
    fontSize=11, spaceBefore=10, spaceAfter=3,
    textColor=colors.HexColor('#1565c0'), fontName='Helvetica-Bold'
)
body_style = ParagraphStyle(
    'BodyCustom', parent=styles['Normal'],
    fontSize=10, leading=15, spaceAfter=4, spaceBefore=2,
    alignment=TA_JUSTIFY, fontName='Helvetica'
)
bullet_style = ParagraphStyle(
    'BulletCustom', parent=styles['Normal'],
    fontSize=10, leading=14, leftIndent=18, spaceAfter=2,
    bulletIndent=6, fontName='Helvetica'
)
bold_body = ParagraphStyle(
    'BoldBody', parent=styles['Normal'],
    fontSize=10, leading=14, spaceAfter=3,
    fontName='Helvetica-Bold'
)

def H(text, style=sub_heading_style):
    return Paragraph(text, style)

def P(text, style=body_style):
    return Paragraph(text, style)

def B(text):
    return Paragraph(f'<bullet>&bull;</bullet> {text}', bullet_style)

def SP(n=6):
    return Spacer(1, n)

def HR():
    return HRFlowable(width="100%", thickness=0.5, color=colors.grey, spaceAfter=4, spaceBefore=4)

story = []

# ── HEADER ──────────────────────────────────────────────────────────────────
story.append(P("KRISHNA VISHWA VIDYAPEETH DEEMED TO BE UNIVERSITY, KARAD", title_style))
story.append(P("KRISHNA INSTITUTE OF MEDICAL SCIENCES", subtitle_style))
story.append(P("DEPARTMENT OF BIOCHEMISTRY", subtitle_style))
story.append(P("1<super>ST</super> MBBS PRELIMINARY EXAMINATION JULY 2026 — PAPER I", subtitle_style))
story.append(P("MODEL ANSWERS", ParagraphStyle('ModelAns', parent=subtitle_style, fontSize=11,
    textColor=colors.HexColor('#b71c1c'), fontName='Helvetica-Bold', spaceAfter=6)))
story.append(HR())
story.append(SP(8))

# ════════════════════════════════════════════════════════════════════════════
#  QUESTION 2 — VITAMIN D (Long Essay, 10 Marks)
# ════════════════════════════════════════════════════════════════════════════
story.append(H("QUESTION 2 (Long Essay — 10 Marks)", q_heading_style))
story.append(H("Describe the chemistry, dietary sources, activation, biochemical functions and deficiency manifestations of Vitamin D.", sub_heading_style))
story.append(HR())

story.append(H("1. Chemistry of Vitamin D"))
story.append(P(
    "Vitamin D is a fat-soluble, steroid-like prohormone. The two biologically important forms are:"
))
story += [
    B("<b>Vitamin D<sub>2</sub> (Ergocalciferol)</b> — derived from ergosterol (plant/fungal sterols) by UV irradiation. MW ~396.6 Da."),
    B("<b>Vitamin D<sub>3</sub> (Cholecalciferol)</b> — synthesised in human skin from 7-dehydrocholesterol on exposure to UV-B radiation (290–315 nm). MW ~384.6 Da."),
]
story.append(P(
    "Structurally, vitamin D has a <b>secosteroid</b> backbone — a steroid with a broken B-ring. It contains a flexible side chain at C17 and three hydroxyl groups in its fully active form."
))

story.append(H("2. Dietary Sources"))
story += [
    B("<b>Vitamin D<sub>3</sub></b>: Oily fish (salmon, mackerel, herring, sardines), cod liver oil, egg yolk, liver, butter, fortified milk/cereals."),
    B("<b>Vitamin D<sub>2</sub></b>: UV-irradiated mushrooms, fortified plant foods."),
    B("The <b>major source</b> (~90%) for most people is <b>endogenous skin synthesis</b> by sunlight exposure."),
]

story.append(H("3. Activation (Metabolic Steps)"))
story.append(P("Vitamin D requires two successive hydroxylation steps to become biologically active:"))
steps = [
    ["Step", "Site", "Reaction", "Enzyme"],
    ["1st Hydroxylation", "Liver", "Vitamin D → 25-hydroxyvitamin D\n[25(OH)D₃ = Calcidiol]", "25-hydroxylase (CYP2R1/CYP27A1)"],
    ["2nd Hydroxylation", "Kidney (proximal tubule)", "25(OH)D₃ → 1,25(OH)₂D₃\n[Calcitriol — active form]", "1α-hydroxylase (CYP27B1)\nStimulated by PTH, low Ca²⁺, low Pi"],
    ["Inactivation", "Kidney / Peripheral", "Calcitriol → 24,25(OH)₂D₃\n(inactive)", "24-hydroxylase (CYP24A1)\nInhibited by PTH"],
]
t = Table(steps, colWidths=[3*cm, 3.5*cm, 5.5*cm, 4.5*cm])
t.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1565c0')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 8.5),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e8eaf6'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
]))
story.append(t)
story.append(SP(6))
story.append(P("<b>Regulation of 1α-hydroxylase:</b> Stimulated by PTH, hypocalcaemia, hypophosphataemia, prolactin and growth hormone. Inhibited by calcitriol itself (negative feedback), FGF-23 and hyperphosphataemia."))

story.append(H("4. Biochemical Functions"))
story += [
    B("<b>Calcium & Phosphate homeostasis:</b> Calcitriol binds intracellular vitamin D receptor (VDR) → acts as a nuclear transcription factor → upregulates calbindin (Ca²⁺-binding protein), TRPV6 and PMCA in intestine → increases intestinal Ca²⁺ and Pi absorption."),
    B("<b>Bone mineralisation:</b> Promotes osteoblast activity and production of osteocalcin, osteopontin and collagen type I; stimulates bone resorption at high doses (mobilises Ca²⁺)."),
    B("<b>Renal reabsorption:</b> Increases Ca²⁺ and phosphate reabsorption in renal tubules in concert with PTH."),
    B("<b>Muscle function:</b> VDR in skeletal muscle → maintains muscle strength; deficiency causes proximal myopathy."),
    B("<b>Immune modulation:</b> Promotes innate immunity (macrophage function, defensin production); suppresses over-activation of adaptive immunity (reduces Th1/Th17, promotes Treg)."),
    B("<b>Cell differentiation:</b> Inhibits proliferation and promotes differentiation of various cell types; important in cancer prevention research."),
    B("<b>Parathyroid gland:</b> Calcitriol suppresses PTH gene transcription (negative feedback)."),
]

story.append(H("5. Deficiency Manifestations"))
story.append(P("<b>In Children — Rickets:</b>"))
story += [
    B("Bone softening and deformity: bow legs (genu varum), knock-knees (genu valgum), Harrison's sulcus"),
    B("Craniotabes (softening of skull bones), frontal bossing, delayed fontanelle closure"),
    B("Rachitic rosary — beading of costochondral junctions"),
    B("Dental enamel hypoplasia, delayed dentition"),
    B("Growth retardation, hypocalcaemic tetany, muscle weakness"),
]
story.append(P("<b>In Adults — Osteomalacia:</b>"))
story += [
    B("Bone pain (especially lower back, hips, thighs), tenderness on pressure"),
    B("Pseudofractures (Looser zones) on X-ray"),
    B("Proximal muscle weakness, waddling gait"),
    B("Hypocalcaemia → tetany, paraesthesia, positive Chvostek's and Trousseau's signs"),
    B("Elevated alkaline phosphatase, low serum 25(OH)D (<20 ng/mL)"),
]
story.append(P("<b>Other:</b> Increased susceptibility to infections, possible links with autoimmune disease, depression, and certain cancers."))
story.append(SP(8))

# ════════════════════════════════════════════════════════════════════════════
#  QUESTION 3 — REASONING (15 Marks)
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(H("QUESTION 3 (Reasoning Questions — 15 Marks)", q_heading_style))
story.append(HR())

# 3.1
story.append(H("3.1 Why is mitochondrion called the powerhouse of the cell? Draw a labelled diagram."))
story.append(P(
    "The mitochondrion is called the <b>powerhouse of the cell</b> because it is the primary site of <b>ATP synthesis</b> via oxidative phosphorylation. It is responsible for generating ~30–32 ATP molecules per glucose molecule — far more than glycolysis (2 ATP) or the TCA cycle alone."
))
story.append(P("<b>Reasons in detail:</b>"))
story += [
    B("Houses the <b>TCA cycle</b> (Krebs cycle) in the matrix → produces NADH and FADH₂ (electron carriers)."),
    B("Contains the <b>Electron Transport Chain (ETC)</b> on the inner mitochondrial membrane (Complexes I–IV) → creates a proton (H⁺) gradient."),
    B("ATP synthase (Complex V / F₀F₁-ATPase) uses the proton gradient to phosphorylate ADP → ATP (chemiosmosis, Mitchell's hypothesis)."),
    B("Site of <b>β-oxidation</b> of fatty acids → generates additional NADH/FADH₂."),
    B("Generates ~36–38 ATP per glucose in aerobic conditions vs only 2 ATP in anaerobic glycolysis."),
]

# ASCII-art diagram
story.append(P("<b>Labelled Diagram of Mitochondrion:</b>"))
diagram_text = """
┌──────────────────────────────────────────────────────┐
│                  MITOCHONDRION                        │
│  ┌─────────────────────────────────────────────────┐ │
│  │  Outer Mitochondrial Membrane                   │ │
│  │  (contains porins — freely permeable to small   │ │
│  │   molecules)                                     │ │
│  │  ┌───────────────────────────────────────────┐  │ │
│  │  │  Intermembrane Space                      │  │ │
│  │  │  (site of H⁺ accumulation — ETC pump)     │  │ │
│  │  │  ┌─────────────────────────────────────┐  │  │ │
│  │  │  │  Inner Mitochondrial Membrane       │  │  │ │
│  │  │  │  (cristae — highly folded)          │  │  │ │
│  │  │  │  Contains: Complex I, II, III, IV   │  │  │ │
│  │  │  │  and ATP Synthase (Complex V)        │  │  │ │
│  │  │  │  ┌───────────────────────────────┐  │  │  │ │
│  │  │  │  │  MATRIX                       │  │  │  │ │
│  │  │  │  │  • TCA cycle enzymes          │  │  │  │ │
│  │  │  │  │  • β-oxidation enzymes        │  │  │  │ │
│  │  │  │  │  • Mitochondrial DNA (mtDNA)  │  │  │  │ │
│  │  │  │  │  • Ribosomes (mitoribosomes)  │  │  │  │ │
│  │  │  │  └───────────────────────────────┘  │  │  │ │
│  │  │  └─────────────────────────────────────┘  │  │ │
│  │  └───────────────────────────────────────────┘  │ │
│  └─────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────┘
"""
story.append(Paragraph(f'<font name="Courier" size="7">{diagram_text.replace(chr(10), "<br/>")}</font>',
    ParagraphStyle('Diag', parent=styles['Normal'], leftIndent=5, spaceAfter=6, leading=10, fontName='Courier', fontSize=7)))

story.append(SP(6))

# 3.2
story.append(H("3.2 Protein precipitates at isoelectric point — why are proteins least soluble at their isoelectric pH?"))
story.append(P(
    "The <b>isoelectric point (pI)</b> is the pH at which a protein has <b>zero net charge</b> — the number of positive charges (protonated amino groups, –NH₃⁺) equals the number of negative charges (deprotonated carboxyl groups, –COO⁻)."
))
story.append(P("<b>Mechanism of reduced solubility at pI:</b>"))
story += [
    B("In aqueous solution, charged proteins are surrounded by a <b>hydration shell</b> (water molecules oriented around charges) and have <b>electrostatic repulsion</b> between molecules — both forces keep them in solution."),
    B("At pI, net charge = 0, so <b>electrostatic repulsion disappears</b>. Protein–protein attractive forces (van der Waals, hydrophobic interactions) are no longer overcome by repulsion."),
    B("The <b>hydration shell decreases</b> because there are fewer ionic groups to attract water molecules."),
    B("Proteins aggregate and <b>precipitate</b> (isoelectric precipitation)."),
]
story.append(P(
    "This property is used industrially (e.g., casein precipitation from milk at pH 4.6) and in clinical labs (protein electrophoresis interpretation)."
))
story.append(SP(4))

# 3.3
story.append(H("3.3 Why is ATP yield from FADH₂ less than from NADH?"))
story.append(P(
    "The difference lies in <b>where electrons enter the Electron Transport Chain (ETC)</b>:"
))
rows = [
    ["Feature", "NADH", "FADH₂"],
    ["Entry point into ETC", "Complex I (NADH dehydrogenase)", "Complex II (Succinate dehydrogenase)"],
    ["Complexes bypassed", "None", "Complex I"],
    ["Protons pumped across inner membrane", "~10 H⁺ (via Complexes I, III, IV)", "~6 H⁺ (via Complexes III, IV only)"],
    ["ATP produced (P/O ratio)", "~2.5 ATP", "~1.5 ATP"],
]
t2 = Table(rows, colWidths=[5.5*cm, 5*cm, 5*cm])
t2.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1b5e20')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 9),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e8f5e9'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 4),
    ('BOTTOMPADDING', (0,0), (-1,-1), 4),
]))
story.append(t2)
story.append(SP(4))
story.append(P(
    "<b>Conclusion:</b> NADH donates electrons at Complex I, generating a larger proton gradient (pumping through 3 complexes). FADH₂ donates electrons directly to coenzyme Q at Complex II, bypassing Complex I, so fewer protons are pumped — resulting in ~1 fewer ATP (~1.5 vs ~2.5 per modern chemiosmotic calculations)."
))
story.append(SP(4))

# 3.4
story.append(H("3.4 High IgG in newborns despite immature immune system"))
story.append(P(
    "Newborns have an <b>immature adaptive immune system</b> — they cannot yet synthesise significant amounts of immunoglobulins themselves. Yet, serum IgG levels in a newborn are actually <b>equal to or higher than maternal levels</b>. This is explained by:"
))
story += [
    B("<b>Transplacental transfer (passive immunity):</b> IgG is the <b>only immunoglobulin</b> that crosses the placenta via the <b>FcRn receptor (neonatal Fc receptor)</b> on syncytiotrophoblast cells. This is an active, receptor-mediated, energy-dependent transport."),
    B("Transfer begins from ~16 weeks gestation and accelerates in the 3rd trimester — at term, neonatal IgG levels can exceed maternal levels (~110% of maternal)."),
    B("This maternal IgG provides protection against many infections for the first <b>3–6 months</b> of life (e.g., measles, tetanus, polio), during which the baby's own immune system matures."),
    B("IgM, IgA, IgE and IgD do NOT cross the placenta."),
    B("<b>Breast milk</b> provides secretory IgA (sIgA) which protects mucosal surfaces."),
]
story.append(P(
    "After birth, maternal IgG is gradually catabolised (~23-day half-life) and reaches a physiological trough (<b>nadir</b>) around 3–6 months, after which the infant's own IgG production takes over."
))
story.append(SP(4))

# 3.5
story.append(H("3.5 Why does high fever cause metabolic disturbances at the enzymatic level?"))
story.append(P(
    "Enzymes are protein catalysts that are exquisitely sensitive to temperature. High fever (e.g., >40°C) disrupts enzymatic activity by:"
))
story += [
    B("<b>Protein denaturation:</b> Excessive heat breaks non-covalent bonds (hydrogen bonds, hydrophobic interactions, van der Waals forces, ionic bonds) that maintain the enzyme's 3D (tertiary) structure. The active site changes shape → substrate can no longer bind → loss of catalytic activity."),
    B("<b>Altered Q₁₀ effect:</b> Each 10°C rise approximately doubles reaction rate (Q₁₀ ≈ 2). Initially, a moderate fever slightly increases metabolic rate. But beyond the optimal temperature (~37°C), the rate falls precipitously due to denaturation."),
    B("<b>Disruption of coenzyme/cofactor binding:</b> Heat can disrupt metal ion coordination and coenzyme (NAD⁺, FAD, PLP) binding, further impairing enzyme function."),
    B("<b>Allosteric effects:</b> Regulatory enzymes (e.g., key metabolic enzymes like phosphofructokinase, pyruvate kinase) are particularly susceptible — high fever distorts their allosteric binding sites."),
    B("<b>Widespread metabolic consequences:</b> ATP synthesis falls, TCA cycle is impaired, protein synthesis is disrupted, oxidative stress increases — collectively causing altered consciousness, organ dysfunction and potentially fatal multi-organ failure at temperatures above 41–42°C."),
]
story.append(SP(8))

# ════════════════════════════════════════════════════════════════════════════
#  QUESTION 4 — SHORT NOTES APPLIED (20 Marks)
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(H("QUESTION 4 (Short Notes — Applied Aspects — 20 Marks)", q_heading_style))
story.append(HR())

# 4.1 Jaundice
story.append(H("4.1 Jaundice"))
story.append(P(
    "<b>Definition:</b> Jaundice (icterus) is the yellow discolouration of skin, sclerae and mucous membranes due to deposition of bilirubin when serum bilirubin exceeds <b>~2 mg/dL</b> (normal: 0.2–1.0 mg/dL)."
))
story.append(P("<b>Normal Bilirubin Metabolism:</b>"))
story += [
    B("RBC destruction → haemoglobin → haem → biliverdin → <b>unconjugated (indirect) bilirubin</b> (fat-soluble, bound to albumin)"),
    B("Transported to liver → conjugated with glucuronic acid by UDP-glucuronosyltransferase → <b>conjugated (direct) bilirubin</b> (water-soluble)"),
    B("Excreted in bile → intestine → urobilinogen → excreted in stool (stercobilin) and urine (urobilin)"),
]

story.append(P("<b>Types of Jaundice:</b>"))
j_rows = [
    ["Type", "Cause", "Raised Bilirubin", "Urine", "Stool"],
    ["Pre-hepatic\n(Haemolytic)", "Excessive RBC\ndestruction", "Unconjugated\n(indirect)", "Urobilinogen ↑\nNo bilirubin", "Dark\n(stercobilin ↑)"],
    ["Hepatic\n(Hepatocellular)", "Hepatocyte\ndamage (hepatitis,\ncirrhosis)", "Both", "Bilirubin ↑\nUrobilinogen ↑", "Pale"],
    ["Post-hepatic\n(Obstructive)", "Bile duct\nobstruction\n(stone, tumour)", "Conjugated\n(direct)", "Bilirubin ↑\nNo urobilinogen\n(dark urine)", "Pale/clay\ncoloured"],
]
tj = Table(j_rows, colWidths=[3*cm, 3.5*cm, 3.5*cm, 3*cm, 2.5*cm])
tj.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#4a148c')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 8),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f3e5f5'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(tj)
story.append(SP(4))
story.append(P("<b>Special types:</b> Neonatal jaundice (physiological — immature UDP-glucuronosyltransferase), Crigler-Najjar syndrome, Dubin-Johnson syndrome, Gilbert syndrome."))
story.append(SP(6))

# 4.2 Isoenzymes
story.append(H("4.2 Isoenzymes and Their Diagnostic Importance"))
story.append(P(
    "<b>Definition:</b> Isoenzymes (isozymes) are multiple molecular forms of the same enzyme that catalyse the <b>same chemical reaction</b> but differ in their <b>amino acid sequence, physical/chemical properties, kinetics and tissue distribution</b>. They arise from different genes or post-translational modifications."
))
story.append(P("<b>Examples and Diagnostic Importance:</b>"))
iso_rows = [
    ["Enzyme", "Isoforms", "Tissue Specificity", "Clinical Use"],
    ["Creatine Kinase (CK)", "CK-MM\nCK-MB\nCK-BB", "Skeletal muscle\nHeart\nBrain", "CK-MB↑ in AMI (acute MI)\nBaseline <5% of total CK"],
    ["Lactate Dehydrogenase (LDH)", "LDH-1\nLDH-2\nLDH-3,4,5", "Heart/RBC\nHeart/RBC\nLiver/Skeletal", "LDH-1>LDH-2 ('flip')\nindicates MI or haemolysis"],
    ["Alkaline Phosphatase (ALP)", "Liver, Bone,\nIntestinal,\nPlacental", "Various tissues", "ALP ↑ in liver/bone\ndisease; fractionation\ndistinguishes source"],
    ["Amylase", "Salivary (S)\nPancreatic (P)", "Parotid gland\nPancreas", "Pancreatic amylase\n↑↑ in acute pancreatitis"],
    ["Troponin I/T", "Cardiac cTnI,\ncTnT", "Specific to cardiac\nmyocytes", "Gold standard\nbiomarker for AMI"],
]
ti = Table(iso_rows, colWidths=[3*cm, 3*cm, 3.5*cm, 4.5*cm])
ti.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#e65100')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 8),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#fff3e0'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(ti)
story.append(SP(4))
story.append(P("<b>Why isoenzymes matter diagnostically:</b> By measuring specific isoforms, clinicians can identify <b>which organ is damaged</b> even when total enzyme levels overlap between conditions."))
story.append(SP(6))

# 4.3 Nutritional case — Marasmus
story.append(H("4.3 Clinical Case: 1-year-old Malnourished Child"))
story.append(P("<b>(a) Most Likely Diagnosis:</b>"))
story.append(P(
    "<b>Marasmus</b> — a form of severe acute malnutrition (SAM) due to <b>total caloric (energy) deficiency</b>, occurring in a child weaned early and fed inadequate diluted rice porridge (low in both protein and calories)."
))
story.append(P("<b>(b) Explanation of the Condition:</b>"))
story += [
    B("<b>Definition:</b> Marasmus is severe malnutrition characterised by extreme wasting of body fat and muscle due to prolonged <b>caloric and protein deficiency</b>. It mainly affects children under 2 years."),
    B("<b>Pathophysiology:</b> Inadequate caloric intake → body catabolises fat stores (adipose tissue) and then skeletal muscle proteins for gluconeogenesis and energy → extreme wasting. Insulin levels are very low; glucagon, cortisol and GH are elevated → further muscle catabolism."),
    B("<b>Clinical features:</b> Severe muscle wasting ('skin and bones' appearance), visible ribs, prominent bones, sunken eyes (dehydration/fat loss), dry wrinkled skin, <b>no oedema</b> (distinguishes from kwashiorkor), apathy and weakness, 'old man face' appearance (loss of buccal fat pad)."),
    B("<b>Biochemistry:</b> Low blood glucose, low serum proteins (less severe than kwashiorkor), low insulin, high cortisol/glucagon, negative nitrogen balance, impaired immune function."),
    B("<b>Management:</b> WHO 10-step protocol — treat hypoglycaemia, hypothermia, dehydration; prevent/treat infection; correct electrolyte deficiencies (K⁺, Mg²⁺, Zn²⁺); initiate cautious re-feeding with F-75 formula (75 kcal/100mL), then transition to F-100 or ready-to-use therapeutic food (RUTF)."),
    B("<b>Marasmus vs Kwashiorkor:</b> Marasmus — low calories AND protein; no oedema. Kwashiorkor — mainly protein deficiency; oedema, skin changes, depigmented hair, fatty liver."),
]
story.append(SP(6))

# 4.4 Genetic Code
story.append(H("4.4 Genetic Code"))
story.append(P(
    "The <b>genetic code</b> is the set of rules by which information encoded in the nucleotide sequence of mRNA is translated into the amino acid sequence of a protein."
))
story.append(P("<b>Key properties of the genetic code:</b>"))
story += [
    B("<b>Triplet code (codon):</b> Each amino acid is specified by a sequence of <b>3 consecutive nucleotides</b> (codon). With 4 bases, 4³ = 64 possible codons."),
    B("<b>Degeneracy (redundancy):</b> Most amino acids are coded by <b>more than one codon</b> (synonymous codons). E.g., Leucine has 6 codons. Only Met (AUG) and Trp (UGG) have a single codon. This protects against the effects of point mutations."),
    B("<b>Non-overlapping:</b> Each nucleotide is read only once; codons do not share nucleotides."),
    B("<b>Non-punctuated (commaless):</b> No nucleotide gaps between codons; read continuously from a fixed starting point."),
    B("<b>Universal:</b> The same code is used by <b>virtually all organisms</b> — from bacteria to humans (minor exceptions in mitochondria and some protozoa)."),
    B("<b>Start codon:</b> AUG codes for methionine and signals the start of translation."),
    B("<b>Stop codons (termination):</b> UAA ('ochre'), UAG ('amber'), UGA ('opal/umber') — do not code for any amino acid."),
    B("<b>Wobble hypothesis (Crick):</b> The 3rd base of the codon (3' position) can pair with non-standard bases in the tRNA anticodon — allows one tRNA to recognise multiple synonymous codons."),
    B("<b>Directionality:</b> Read 5' → 3' on mRNA."),
]
story.append(SP(8))

# ════════════════════════════════════════════════════════════════════════════
#  QUESTION 5 — SHORT NOTES (15 Marks)
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(H("QUESTION 5 (Short Notes — 15 Marks)", q_heading_style))
story.append(HR())

# 5.1 Biologically important free nucleotides
story.append(H("5.1 Biologically Important Free Nucleotides"))
story.append(P(
    "Free nucleotides are nucleotides that exist unincorporated into nucleic acid chains. They serve multiple essential biological roles:"
))
nuc_rows = [
    ["Nucleotide", "Full Name", "Biological Importance"],
    ["ATP\n(adenosine 5'-triphosphate)", "Adenosine\ntriphosphate", "Universal energy currency of the cell. High-energy phosphoanhydride bonds (ΔG° = −30.5 kJ/mol). Powers muscle contraction, active transport, biosynthesis, signal transduction."],
    ["GTP\n(guanosine 5'-triphosphate)", "Guanosine\ntriphosphate", "Energy for protein synthesis (elongation, translocation). Required by G-proteins (signal transduction, tubulin polymerisation). Used in gluconeogenesis (PEPCK reaction)."],
    ["cAMP\n(3',5'-cyclic AMP)", "Cyclic AMP", "Second messenger. Activates Protein Kinase A (PKA). Mediates actions of adrenaline, glucagon. Produced by adenylyl cyclase from ATP."],
    ["cGMP\n(3',5'-cyclic GMP)", "Cyclic GMP", "Second messenger. Activates PKG. Mediates NO (nitric oxide) signalling → vasodilation (sildenafil target). Phototransduction in retinal rods."],
    ["NAD⁺/NADH", "Nicotinamide\nadenine dinucleotide", "Major electron carrier in catabolic reactions (glycolysis, TCA cycle, β-oxidation). NADH feeds electrons into ETC for ATP synthesis."],
    ["NADP⁺/NADPH", "Nicotinamide adenine\ndinucleotide phosphate", "Electron carrier in anabolic (biosynthetic) reactions. Required for fatty acid synthesis, cholesterol synthesis, and the pentose phosphate pathway (antioxidant via glutathione reductase)."],
    ["FAD/FADH₂\n(FMN/FMNH₂)", "Flavin adenine\ndinucleotide", "Electron carrier in TCA cycle (succinate dehydrogenase) and β-oxidation. Feeds electrons into ETC at Complex II. Also involved in folate metabolism, oxidative deamination (MAO)."],
    ["CoA-SH", "Coenzyme A", "Nucleotide-derived cofactor (contains 3',5'-ADP moiety). Carrier of acyl groups. Central role in fatty acid metabolism, TCA cycle (acetyl-CoA), amino acid catabolism."],
    ["UTP\n(uridine triphosphate)", "Uridine\ntriphosphate", "Substrate for glycogenesis (UDP-glucose formation → glycogen synthesis). Active form of sugars for glycoprotein synthesis."],
    ["CTP\n(cytidine triphosphate)", "Cytidine\ntriphosphate", "Activation of phospholipids (CDP-diacylglycerol) in phospholipid synthesis. Also a substrate for RNA synthesis."],
]
tn = Table(nuc_rows, colWidths=[3.5*cm, 3*cm, 9*cm])
tn.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#006064')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 7.5),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e0f7fa'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(tn)
story.append(SP(8))

# 5.2 Urea Cycle
story.append(H("5.2 Urea Cycle: Steps and Regulation"))
story.append(P(
    "The <b>urea cycle</b> (ornithine cycle or Krebs-Henseleit cycle) is the metabolic pathway that converts toxic <b>ammonium (NH₄⁺)</b> — generated from amino acid catabolism — into the non-toxic, water-soluble waste product <b>urea</b>, which is excreted in urine. It occurs primarily in <b>hepatocytes</b> (liver), spanning both the <b>mitochondria and cytosol</b>."
))

story.append(P("<b>Steps of the Urea Cycle:</b>"))
urea_steps = [
    ["Step", "Location", "Reaction", "Enzyme"],
    ["1", "Mitochondria", "NH₄⁺ + CO₂ + 2ATP → Carbamoyl phosphate", "Carbamoyl phosphate synthetase I (CPS I) — Rate-limiting step"],
    ["2", "Mitochondria", "Carbamoyl phosphate + Ornithine → Citrulline", "Ornithine transcarbamylase (OTC)"],
    ["3", "Cytosol", "Citrulline + Aspartate + ATP → Argininosuccinate", "Argininosuccinate synthetase"],
    ["4", "Cytosol", "Argininosuccinate → Arginine + Fumarate", "Argininosuccinate lyase (argininosuccinase)"],
    ["5", "Cytosol", "Arginine + H₂O → Ornithine + Urea", "Arginase"],
]
tu = Table(urea_steps, colWidths=[1*cm, 2.5*cm, 5.5*cm, 5.5*cm])
tu.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1a237e')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 8.5),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e8eaf6'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(tu)
story.append(SP(4))

story.append(P("<b>Regulation of the Urea Cycle:</b>"))
story += [
    B("<b>Short-term (allosteric):</b> CPS I (the rate-limiting enzyme) is <b>allosterically activated by N-acetylglutamate (NAG)</b>. NAG is synthesised from acetyl-CoA and glutamate by NAG synthase, which is activated by arginine."),
    B("<b>Long-term (induction):</b> High-protein diet → increased amino acid catabolism → more NH₃ → upregulation of all urea cycle enzymes (especially CPS I and arginase) by transcriptional induction."),
    B("<b>Arginine as regulator:</b> Arginine activates NAG synthase → more NAG → stimulates CPS I → increases urea cycle flux."),
    B("<b>Energy requirement:</b> The cycle requires 4 high-energy bonds per urea produced (3 ATP hydrolysed: 2 in step 1, 1 in step 3)."),
    B("<b>Link to TCA cycle:</b> Fumarate produced in step 4 enters the TCA cycle (aspartate-argininosuccinate shunt)."),
]
story.append(P("<b>Clinical relevance:</b> Urea cycle enzyme deficiencies (e.g., OTC deficiency — X-linked, most common) cause hyperammonaemia, leading to encephalopathy, vomiting, and coma, especially in neonates."))
story.append(SP(8))

# 5.3 Lac Operon
story.append(H("5.3 Lac Operon Model of Gene Regulation in Prokaryotes"))
story.append(P(
    "The <b>lac operon</b> is a classic model of <b>inducible negative gene regulation</b> in E. coli, first proposed by <b>Jacob and Monod (1961)</b>. It controls the expression of genes required for lactose metabolism."
))

story.append(P("<b>Components of the Lac Operon:</b>"))
story += [
    B("<b>Regulatory gene (lacI):</b> Encodes the lac repressor protein (constitutively expressed)."),
    B("<b>Promoter (P):</b> RNA polymerase binding site — also contains the CRP/CAP binding site."),
    B("<b>Operator (O):</b> DNA sequence where repressor binds to block transcription."),
    B("<b>Structural genes:</b> lacZ (β-galactosidase — cleaves lactose to glucose + galactose), lacY (permease — transports lactose into cell), lacA (transacetylase — minor role)."),
]

story.append(P("<b>Mechanism of Regulation:</b>"))
story.append(P("<u>When lactose is ABSENT (glucose present):</u>"))
story += [
    B("Lac repressor protein binds tightly to the operator → RNA polymerase cannot proceed → <b>transcription blocked</b>."),
]
story.append(P("<u>When lactose is PRESENT (glucose absent):</u>"))
story += [
    B("Lactose is converted to <b>allolactose</b> (by residual β-galactosidase) → allolactose is the <b>inducer</b>."),
    B("Allolactose binds the lac repressor → conformational change → repressor dissociates from operator → RNA polymerase can transcribe lacZ, lacY, lacA → <b>operon is induced</b>."),
]

story.append(P("<b>Catabolite Repression (Positive Control):</b>"))
story += [
    B("When glucose is present, cAMP levels are <b>low</b> (glucose inhibits adenylyl cyclase) → CAP (catabolite activator protein / CRP) cannot bind → low level transcription even if lactose is present."),
    B("When glucose is absent, cAMP rises → cAMP binds CAP/CRP → CAP-cAMP complex binds upstream promoter → enhances RNA polymerase binding → <b>high-level transcription</b>."),
    B("This ensures glucose is preferentially used over lactose — called <b>catabolite repression</b> or the <b>glucose effect</b>."),
]
story.append(P("<b>Significance:</b> The lac operon is the foundation of molecular biology understanding of gene regulation; analogous operons (trp, ara) regulate other biosynthetic/catabolic pathways. The concept underpins recombinant DNA technology (IPTG induction of cloned genes)."))
story.append(SP(8))

# ════════════════════════════════════════════════════════════════════════════
#  QUESTION 6 — SHORT NOTES (20 Marks)
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
story.append(H("QUESTION 6 (Short Notes — 20 Marks)", q_heading_style))
story.append(HR())

# 6.1 Collagen
story.append(H("6.1 Collagen"))
story.append(P(
    "Collagen is the most abundant protein in the human body (~30% of total protein), forming the structural scaffold of connective tissues."
))
story.append(P("<b>Structure:</b>"))
story += [
    B("Basic structural unit: <b>tropocollagen</b> — a triple helix of three polypeptide alpha (α) chains wound around each other in a right-handed superhelix (~300 nm long, ~1.5 nm wide)."),
    B("<b>Repeating tripeptide sequence: (Gly-X-Y)n</b> — Glycine at every 3rd position (essential — its small side chain fits the inner helix); X is often Proline; Y is often 4-Hydroxyproline."),
    B("The triple helix is stabilised by <b>hydrogen bonds</b> between chains and by the rings of proline/hydroxyproline (restrict rotation)."),
    B("Tropocollagen molecules pack in a <b>quarter-stagger array</b> → microfibrils → fibrils → fibres."),
    B("<b>Cross-linking</b> by lysyl oxidase (extracellular) between lysine/hydroxylysine residues → provides tensile strength."),
]

story.append(P("<b>Synthesis (intracellular → extracellular):</b>"))
story += [
    B("Transcription → pre-pro-α chains → signal peptide removal (pre → pro-α chains in ER)"),
    B("Hydroxylation of Pro (by prolyl hydroxylase, requires Vitamin C) and Lys (by lysyl hydroxylase) in ER"),
    B("Glycosylation of hydroxylysine residues in ER/Golgi"),
    B("Triple helix formation (procollagen) → secreted"),
    B("Procollagen peptidase cleaves N- and C-terminal propeptides → tropocollagen → self-assembly → cross-linking by lysyl oxidase"),
]

story.append(P("<b>Types and locations (selected):</b>"))
col_rows = [
    ["Type", "Chain", "Location / Function"],
    ["Type I", "α1, α2", "Skin, bone, tendon, dentin, fascia — most abundant (90%)"],
    ["Type II", "α1 (homotrimer)", "Cartilage, vitreous humour — resists compression"],
    ["Type III", "α1 (homotrimer)", "Skin, blood vessels, uterus — reticular fibres"],
    ["Type IV", "α1-α6", "Basement membranes — forms a mesh/network"],
    ["Type VII", "α1", "Anchoring fibrils at dermo-epidermal junction"],
]
tc = Table(col_rows, colWidths=[2.5*cm, 3*cm, 10*cm])
tc.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#37474f')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 8.5),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#eceff1'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(tc)
story.append(SP(4))
story.append(P("<b>Disorders:</b> Scurvy (Vit. C deficiency → impaired hydroxylation → weak collagen → bleeding gums, poor wound healing); Osteogenesis imperfecta (mutations in Type I collagen genes → brittle bones); Ehlers-Danlos syndrome (collagen cross-linking defects → hyperextensible skin and joints); Marfan syndrome (fibrillin-1 mutation — associated connective tissue disorder)."))
story.append(SP(6))

# 6.2 Qualities of a good doctor
story.append(H("6.2 Qualities of a Good Doctor"))
story.append(P(
    "A good doctor embodies the highest standards of <b>medical competence, ethical conduct and human compassion</b>. The key qualities include:"
))
q_rows = [
    ["Domain", "Quality", "Description"],
    ["Clinical", "Knowledge & Skills", "Up-to-date medical knowledge, clinical reasoning, diagnostic accuracy, practical skills and commitment to lifelong learning (CME)."],
    ["Clinical", "Clinical Judgment", "Ability to synthesise information, weigh risks/benefits and make sound decisions under uncertainty."],
    ["Ethical", "Integrity & Honesty", "Truthful communication with patients and colleagues; acknowledgement of uncertainty; not overstating competence."],
    ["Ethical", "Confidentiality", "Respect for patient privacy; adherence to professional codes (MCI/NMC guidelines)."],
    ["Ethical", "Beneficence & Non-maleficence", "Always acting in the patient's best interest; avoiding unnecessary harm."],
    ["Interpersonal", "Empathy & Compassion", "Ability to understand and share the patient's feelings; treating patients as whole persons, not just diseases."],
    ["Interpersonal", "Communication", "Clear, jargon-free explanation to patients and families; active listening; breaking bad news sensitively."],
    ["Professional", "Responsibility & Accountability", "Punctuality, reliability, willingness to refer when beyond competence."],
    ["Professional", "Team Work", "Effective collaboration with nurses, paramedics and other specialists; humble leadership."],
    ["Social", "Cultural Sensitivity", "Awareness of and respect for diverse cultural, religious and socioeconomic backgrounds of patients."],
]
tq = Table(q_rows, colWidths=[2.5*cm, 3.5*cm, 9.5*cm])
tq.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#1b5e20')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 8),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#e8f5e9'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(tq)
story.append(SP(6))

# 6.3 Structure and Function of DNA
story.append(H("6.3 Structure and Function of DNA"))
story.append(P("<b>Structure — Watson-Crick Double Helix (1953):</b>"))
story += [
    B("<b>Two anti-parallel polynucleotide strands</b> wound around a common central axis in a <b>right-handed double helix</b>."),
    B("<b>Sugar-phosphate backbone</b> on the outside (hydrophilic); <b>nitrogenous bases face inward</b> and pair with each other."),
    B("<b>Base pairing (Chargaff's rules):</b> Adenine (A) pairs with Thymine (T) via 2 hydrogen bonds; Guanine (G) pairs with Cytosine (C) via 3 hydrogen bonds. Therefore A=T and G≡C."),
    B("Helix parameters (B-form, physiological): pitch = 3.4 nm; 10 bp per turn; rise per bp = 0.34 nm; diameter = 2 nm."),
    B("<b>Major and minor grooves</b> on the helix surface — sites for protein binding (transcription factors, restriction enzymes)."),
    B("<b>Other forms:</b> A-DNA (dehydrated, right-handed, 11 bp/turn), Z-DNA (left-handed, 12 bp/turn, seen in regions of active transcription)."),
]
story.append(P("<b>Levels of DNA compaction in eukaryotes:</b>"))
story += [
    B("DNA + histone octamer (H2A, H2B, H3, H4 × 2) → <b>nucleosome</b> ('beads on a string') — ~10 nm fibre"),
    B("Nucleosome + H1 → 30 nm solenoid/chromatin fibre"),
    B("Loop domains → 300 nm fibre → 700 nm → <b>condensed chromosome</b> (1400 nm) during mitosis"),
]
story.append(P("<b>Functions of DNA:</b>"))
story += [
    B("<b>Storage of genetic information:</b> Encodes all proteins and functional RNAs; base sequence carries the genetic code."),
    B("<b>Replication:</b> Semi-conservative replication (Meselson-Stahl) — each strand serves as a template for a new complementary strand; ensures faithful transmission of genetic information to daughter cells."),
    B("<b>Transcription:</b> Template for RNA synthesis (mRNA, tRNA, rRNA, miRNA, snRNA) by RNA polymerase."),
    B("<b>Regulation:</b> Contains regulatory elements (promoters, enhancers, silencers) that control gene expression."),
    B("<b>Recombination and repair:</b> Maintains genome integrity; DNA repair mechanisms (BER, NER, MMR, DSBR) correct mutations."),
    B("<b>Evolution:</b> Mutations in DNA provide the raw material for natural selection and evolution."),
]
story.append(SP(6))

# 6.4 Factors affecting enzyme activity
story.append(H("6.4 Factors Affecting Enzyme Activity"))
story.append(P(
    "Enzyme activity is defined as the rate of conversion of substrate to product per unit time per unit of enzyme. Multiple factors modulate this activity:"
))

fa_data = [
    ["Factor", "Effect on Enzyme Activity"],
    ["Substrate Concentration [S]",
     "Activity ↑ with [S] until Vmax is reached (Michaelis-Menten kinetics). Km = [S] at half-Vmax; low Km = high affinity. At very high [S], substrate inhibition may occur."],
    ["Temperature",
     "Activity ↑ with temperature (doubles per 10°C rise, Q₁₀ ≈ 2) up to the optimal (~37°C for human enzymes). Above optimal → denaturation → activity falls. Clinical note: fever, cold storage of samples affect enzyme assays."],
    ["pH",
     "Each enzyme has an optimal pH (e.g., pepsin: pH 2; trypsin: pH 8; most intracellular: pH 7.4). Deviations cause ionisation changes in active site residues → altered substrate binding or catalysis."],
    ["Enzyme Concentration [E]",
     "Activity directly proportional to [E] at non-limiting [S]. Basis for enzyme assays."],
    ["Inhibitors",
     "Competitive inhibitors bind active site reversibly (↑ apparent Km, same Vmax; overcome by ↑[S]). Non-competitive bind allosteric site (↓ Vmax, same Km). Irreversible inhibitors covalently modify active site (e.g., organophosphates → acetylcholinesterase)."],
    ["Activators & Cofactors",
     "Metal ions (Mg²⁺ for kinases, Zn²⁺ for carbonic anhydrase) and coenzymes (NAD⁺, FAD, PLP, CoA) are required for activity. Ca²⁺ activates many enzymes indirectly via calmodulin."],
    ["Allosteric Regulation",
     "Binding of effector at allosteric site changes conformation → sigmoidal kinetics (Hill equation). Positive effectors ↑ activity; negative effectors ↓ activity. Key in feedback inhibition of metabolic pathways (e.g., ATP inhibits phosphofructokinase)."],
    ["Covalent Modification",
     "Phosphorylation/dephosphorylation by kinases/phosphatases rapidly switches enzymes on/off (e.g., glycogen phosphorylase, hormone-sensitive lipase)."],
    ["Product Concentration",
     "Accumulation of product inhibits the reaction (product inhibition) — a form of feedback regulation."],
    ["Water Activity / Solvent",
     "Many enzymes require an aqueous environment. Organic solvents or detergents can denature or alter activity."],
]
tfa = Table(fa_data, colWidths=[4.5*cm, 11.5*cm])
tfa.setStyle(TableStyle([
    ('BACKGROUND', (0,0), (-1,0), colors.HexColor('#880e4f')),
    ('TEXTCOLOR', (0,0), (-1,0), colors.white),
    ('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
    ('FONTSIZE', (0,0), (-1,-1), 8),
    ('GRID', (0,0), (-1,-1), 0.4, colors.grey),
    ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#fce4ec'), colors.white]),
    ('VALIGN', (0,0), (-1,-1), 'TOP'),
    ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3),
]))
story.append(tfa)

story.append(SP(8))
story.append(HR())
story.append(P(
    "<i>— End of Answer Key — Krishna Institute of Medical Sciences, Biochemistry Dept., July 2026 —</i>",
    ParagraphStyle('Footer', parent=styles['Normal'], fontSize=8, alignment=TA_CENTER,
                   textColor=colors.grey, spaceAfter=0)
))

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

cd /tmp/workspace/biochemistry-exam && python generate_pdf.py 2>&1

Running Command

ls -lh /tmp/workspace/biochemistry-exam/Biochemistry_Exam_Answers.pdf

Your PDF is ready! Here's the download link:

Biochemistry Exam Answers

PDF Document · PDF


Here's a summary of what's covered in the PDF for each question:
Q2 — Vitamin D (Long Essay, 10 Marks) Chemistry (secosteroid structure, D₂ vs D₃), dietary sources, two-step activation pathway (liver → 25-OH-D₃; kidney → 1,25(OH)₂D₃/calcitriol), regulation of 1α-hydroxylase, biochemical functions (Ca²⁺/Pi absorption, bone mineralisation, immune modulation), and deficiency manifestations (Rickets in children with bow legs/craniotabes/rachitic rosary; Osteomalacia in adults with Looser zones/myopathy).
Q3 — Reasoning Questions (15 Marks)
  1. Mitochondria as powerhouse — TCA cycle, ETC, ATP synthase/chemiosmosis; includes a labelled ASCII diagram.
  2. Isoelectric point — zero net charge removes electrostatic repulsion and hydration shell → protein aggregation.
  3. FADH₂ vs NADH ATP yield — FADH₂ enters at Complex II, bypasses Complex I → only ~6H⁺ pumped vs ~10H⁺ for NADH → 1.5 vs 2.5 ATP.
  4. High IgG in newborns — transplacental FcRn-mediated passive transfer of maternal IgG.
  5. Fever and enzyme disruption — denaturation of tertiary structure, loss of active site geometry, disrupted allosteric regulation.
Q4 — Applied Short Notes (20 Marks)
  1. Jaundice — types table (pre-hepatic/hepatic/post-hepatic) with bilirubin fractions, urine and stool findings.
  2. Isoenzymes — CK-MB, LDH flip, ALP fractionation, amylase, troponin; diagnostic applications.
  3. Case — Marasmus (diagnosis + pathophysiology + management per WHO protocol).
  4. Genetic Code — triplet, degenerate, non-overlapping, universal, wobble hypothesis, start/stop codons.
Q5 — Short Notes (15 Marks)
  1. Biologically important free nucleotides — ATP, GTP, cAMP, cGMP, NAD⁺/NADPH, FAD, CoA, UTP, CTP in a full table.
  2. Urea cycle — all 5 steps with enzymes and locations; regulation by N-acetylglutamate and high-protein diet.
  3. Lac operon — components, negative control, allolactose as inducer, catabolite repression via cAMP-CAP.
Q6 — Short Notes (20 Marks)
  1. Collagen — (Gly-X-Y)n structure, synthesis steps (hydroxylation requiring Vit. C, cross-linking), Types I–VII, disorders.
  2. Qualities of a good doctor — table covering clinical, ethical, interpersonal, professional and social domains.
  3. DNA structure and function — Watson-Crick double helix, base pairing, levels of compaction, all major functions.
  4. Factors affecting enzyme activity — table covering [S], temperature, pH, inhibitors, cofactors, allosteric regulation, covalent modification.
This is a shared conversation. Sign in to Orris to start your own chat.