give me 3rd year bsc cardiac technology paper 1 and paper 2
3rd year BSc Cardiac Technology paper 1 paper 2 syllabus question papers
BSc Cardiac Technology 3rd year previous year question papers PDF
https://university.examsavvy.com/2013/01/the-mgr-medical-uni…
| Section | Type | Marks |
|---|---|---|
| Section A | 2 Long Essays (10 marks each) | 20 marks |
| Section B | 7 Short Notes (5 marks each) | 35 marks |
| Section C | 10 Very Short Answers (2 marks each) | 20 marks |
| Total | 75 marks |
give me previous year questions
https://university.examsavvy.com/2013/01/the-mgr-medical-uni…
MGRMU BSc Cardiac Technology 3rd year Paper 1 Cardiac Catheterization previous year questions site:scribd.com OR site:firstranker.com
give me previous year question bank in mgr university
MGR University BSc Cardiac Technology 3rd year question bank cardiac catheterization 2013 2014 2015 2016 2017 2018
https://www.scribd.com/document/863984038/801508
| Topic | Appears in |
|---|---|
| BMV / Inoue balloon technique | Almost every year |
| PTCA / Primary PCI | Almost every year |
| IABP - mechanism and indications | Almost every year |
| Cardiac output - Fick method | Almost every year |
| Gorlin formula / Valve area | Almost every year |
| ASD device closure | Frequently |
| Coronary angiography views | Frequently |
| Permanent pacemaker | Frequently |
| Contrast media reactions | Frequently |
| Heparin in cath lab | Frequently |
Create a study guide PDF summarizing key cardiac catheterization topics and paper2
mkdir -p /tmp/workspace/cardiac-study-guide && ls /tmp/workspace/cardiac-study-guide/
~/cardiac-study-guide/create_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import mm, cm
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 import FrameBreak
OUTPUT = "/tmp/workspace/cardiac-study-guide/BSc_Cardiac_Technology_3rdYear_StudyGuide.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm,
leftMargin=1.8*cm,
topMargin=2*cm,
bottomMargin=2*cm
)
# ── Colour palette ──────────────────────────────────────────────
DARK_BLUE = colors.HexColor("#0A2D5E")
MED_BLUE = colors.HexColor("#1565C0")
LIGHT_BLUE = colors.HexColor("#E3F2FD")
ACCENT_RED = colors.HexColor("#C62828")
ACCENT_GOLD = colors.HexColor("#F9A825")
SECTION_BG = colors.HexColor("#EEF4FB")
TABLE_HDR = colors.HexColor("#1565C0")
TABLE_ALT = colors.HexColor("#F5F9FF")
GREEN = colors.HexColor("#2E7D32")
GREEN_LIGHT = colors.HexColor("#E8F5E9")
styles = getSampleStyleSheet()
# ── Custom styles ────────────────────────────────────────────────
def S(name, **kw):
return ParagraphStyle(name, **kw)
cover_title = S("CoverTitle", fontSize=26, textColor=colors.white,
alignment=TA_CENTER, fontName="Helvetica-Bold", leading=32)
cover_sub = S("CoverSub", fontSize=14, textColor=colors.white,
alignment=TA_CENTER, fontName="Helvetica", leading=20)
cover_small = S("CoverSmall", fontSize=10, textColor=colors.HexColor("#BBDEFB"),
alignment=TA_CENTER, fontName="Helvetica")
ch_title = S("ChTitle", fontSize=18, textColor=DARK_BLUE,
fontName="Helvetica-Bold", spaceBefore=10, spaceAfter=4, leading=22)
sec_title = S("SecTitle", fontSize=13, textColor=colors.white,
fontName="Helvetica-Bold", leading=16)
topic_title = S("TopicTitle", fontSize=11, textColor=MED_BLUE,
fontName="Helvetica-Bold", spaceBefore=8, spaceAfter=2)
body = S("Body", fontSize=9.5, leading=14, fontName="Helvetica",
textColor=colors.HexColor("#212121"), spaceAfter=2)
bullet_s = S("Bullet", fontSize=9.5, leading=13, fontName="Helvetica",
leftIndent=14, firstLineIndent=-10, textColor=colors.HexColor("#212121"))
note_s = S("Note", fontSize=9, leading=12, fontName="Helvetica-Oblique",
textColor=colors.HexColor("#5D4037"), backColor=colors.HexColor("#FFF8E1"),
borderPadding=(4,6,4,6))
imp_s = S("Imp", fontSize=9.5, leading=13, fontName="Helvetica-Bold",
textColor=ACCENT_RED)
tbl_hdr_s = S("TblHdr", fontSize=9, fontName="Helvetica-Bold",
textColor=colors.white, alignment=TA_CENTER)
tbl_cell_s = S("TblCell", fontSize=9, fontName="Helvetica", leading=12,
textColor=colors.HexColor("#212121"))
tbl_cell_c = S("TblCellC", fontSize=9, fontName="Helvetica", leading=12,
textColor=colors.HexColor("#212121"), alignment=TA_CENTER)
def B(text): return f"<b>{text}</b>"
def I(text): return f"<i>{text}</i>"
def C(text, color="#C62828"): return f'<font color="{color}">{text}</font>'
def bul(text): return Paragraph(f"• {text}", bullet_s)
def bod(text): return Paragraph(text, body)
def sp(h=4): return Spacer(1, h)
def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#BDBDBD"), spaceAfter=4, spaceBefore=4)
def section_banner(text, bg=MED_BLUE):
data = [[Paragraph(text, sec_title)]]
t = Table(data, colWidths=["100%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS",(0,0), (-1,-1), [4,4,4,4]),
]))
return [sp(6), t, sp(6)]
def info_box(title, items, bg=SECTION_BG, title_color=MED_BLUE):
content = [Paragraph(f'<font color="{title_color.hexval() if hasattr(title_color,"hexval") else "#1565C0"}"><b>{title}</b></font>', body)]
for item in items:
content.append(bul(item))
data = [[content]]
t = Table(data, colWidths=["100%"])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 10),
("BOX", (0,0), (-1,-1), 0.8, MED_BLUE),
]))
return [t, sp(6)]
def two_col_table(headers, rows, col_widths=None):
if col_widths is None:
col_widths = [90*mm, 80*mm]
data = [[Paragraph(h, tbl_hdr_s) for h in headers]]
for i, row in enumerate(rows):
bg = TABLE_ALT if i % 2 == 0 else colors.white
data.append([Paragraph(str(c), tbl_cell_s) for c in row])
t = Table(data, colWidths=col_widths)
style = [
("BACKGROUND", (0,0), (-1,0), TABLE_HDR),
("TEXTCOLOR", (0,0), (-1,0), colors.white),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROWBACKGROUNDS",(0,1), (-1,-1), [TABLE_ALT, colors.white]),
("BOX", (0,0), (-1,-1), 0.8, MED_BLUE),
("INNERGRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CFD8DC")),
("VALIGN", (0,0), (-1,-1), "TOP"),
]
t.setStyle(TableStyle(style))
return [t, sp(6)]
# ════════════════════════════════════════════════════════════════
# BUILD STORY
# ════════════════════════════════════════════════════════════════
story = []
# ── COVER PAGE ───────────────────────────────────────────────────
cover_data = [[
Paragraph("BSc CARDIAC TECHNOLOGY", cover_title),
sp(8),
Paragraph("3rd Year — Complete Study Guide", cover_sub),
sp(6),
Paragraph("Paper I: Cardiac Catheterization Laboratory — Basics", cover_sub),
Paragraph("Paper II: Cardiac Catheterization Laboratory — Advanced", cover_sub),
sp(16),
Paragraph("Tamil Nadu Dr. MGR Medical University", cover_small),
Paragraph("Exam-Focused Notes | Question Bank Aligned", cover_small),
sp(8),
Paragraph("Prepared for University Examinations 2024–2025", cover_small),
]]
cover_tbl = Table([[cover_data[0]]], colWidths=["100%"])
cover_tbl.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 40),
("BOTTOMPADDING", (0,0), (-1,-1), 40),
("LEFTPADDING", (0,0), (-1,-1), 20),
("RIGHTPADDING", (0,0), (-1,-1), 20),
]))
story.append(cover_tbl)
story.append(PageBreak())
# ── TABLE OF CONTENTS ────────────────────────────────────────────
story += section_banner("TABLE OF CONTENTS", DARK_BLUE)
toc_rows = [
["PAPER I — CARDIAC CATHETERIZATION BASICS", ""],
["1. Introduction & Overview", "3"],
["2. Anatomy of Coronary Arteries", "3"],
["3. Cardiac Catheterization Technique", "4"],
["4. Hemodynamic Measurements", "5"],
["5. Normal Hemodynamic Values", "6"],
["6. Cardiac Output Measurement", "6"],
["7. Coronary Angiography", "7"],
["8. Contrast Media & Radiation Safety", "8"],
["9. Shunt Detection (Qp:Qs)", "9"],
["PAPER II — CARDIAC CATHETERIZATION ADVANCED", ""],
["10. PCI / PTCA", "10"],
["11. Coronary Stents", "11"],
["12. Balloon Mitral Valvotomy (BMV)", "12"],
["13. Structural Heart Disease Interventions", "13"],
["14. Electrophysiology Study & Ablation", "14"],
["15. Pacemakers & ICD", "15"],
["16. Intra-Aortic Balloon Pump (IABP)", "16"],
["17. Pharmacology in Cath Lab", "17"],
["18. High-Yield MCQ / Short Answer Bank", "18"],
]
toc_data = []
for r in toc_rows:
if r[1] == "":
toc_data.append([Paragraph(B(r[0]), imp_s), Paragraph("", tbl_cell_c)])
else:
toc_data.append([Paragraph(r[0], tbl_cell_s), Paragraph(r[1], tbl_cell_c)])
t = Table(toc_data, colWidths=[145*mm, 20*mm])
t.setStyle(TableStyle([
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROWBACKGROUNDS",(0,0), (-1,-1), [colors.white, TABLE_ALT]),
("BOX", (0,0), (-1,-1), 0.5, MED_BLUE),
("INNERGRID", (0,0), (-1,-1), 0.2, colors.HexColor("#E0E0E0")),
]))
story += [t, PageBreak()]
# ════════════════════════════════════════════════════════════════
# PAPER I
# ════════════════════════════════════════════════════════════════
story += section_banner("PAPER I — CARDIAC CATHETERIZATION LABORATORY: BASICS", DARK_BLUE)
# 1. INTRODUCTION
story.append(Paragraph("1. Introduction & Overview", ch_title))
story += info_box("What is Cardiac Catheterization?", [
"Invasive diagnostic procedure — thin flexible tube (catheter) inserted into heart chambers and vessels",
"Provides hemodynamic data, angiographic images, and enables interventional procedures",
"Gold standard for diagnosing coronary artery disease (CAD) and structural heart disease",
])
story += two_col_table(
["Indications", "Contraindications"],
[
["Known/suspected CAD — chest pain, STEMI, NSTEMI", "Active GI bleeding"],
["Valvular heart disease assessment", "Severe contrast allergy (relative)"],
["Congenital heart disease evaluation", "Renal failure (relative)"],
["Pre-operative cardiac assessment", "Uncontrolled coagulopathy"],
["Heart failure — cause evaluation", "Uncontrolled hypertension"],
["Post cardiac surgery evaluation", "Pregnancy (relative — radiation risk)"],
],
col_widths=[88*mm, 82*mm]
)
# 2. CORONARY ANATOMY
story.append(Paragraph("2. Anatomy of Coronary Arteries", ch_title))
story.append(bod("The two main coronary arteries arise from the aortic sinuses just above the aortic valve."))
story += two_col_table(
["Left Coronary Artery (LCA)", "Right Coronary Artery (RCA)"],
[
["Arises from left coronary sinus", "Arises from right coronary sinus"],
["Left Main (LMCA) — 1–2 cm long", "Runs in right AV groove"],
["Divides into LAD and LCX", "Gives SA nodal artery (60%)"],
["LAD → supplies anterior LV, anterior IVS, apex", "RCA → RV, inferior LV, posterior IVS"],
["LCX → lateral wall of LV", "Gives PDA in right dominant (85%)"],
],
col_widths=[88*mm, 82*mm]
)
story += info_box("Coronary Dominance (Important for Exams)", [
"Right dominant (85%): PDA arises from RCA",
"Left dominant (8%): PDA arises from LCX",
"Co-dominant (7%): both supply PDA territory",
C("PDA = Posterior Descending Artery — supplies inferior wall and posterior IVS"),
])
story.append(Paragraph(B("Standard Angiographic Views"), topic_title))
rows = [
["LAO 45°", "Separates LM, LAD, LCX — good for bifurcation"],
["RAO 30°", "LAD foreshortened; LCX marginal branches"],
["RAO Cranial (RAO 30° + Cran 20°)", "Best view for LAD mid and distal"],
["LAO Cranial (Spider view)", "LM bifurcation — gold standard"],
["RAO Caudal (LAO 45° + Caud 25°)", "LCX and OM branches"],
["PA Cranial", "LAD proximal and mid segments"],
["LAO 45° for RCA", "Best overall RCA view"],
["RAO 30° for RCA", "PDA and PLB origins"],
]
story += two_col_table(["View", "What It Shows"], rows, col_widths=[75*mm, 95*mm])
# 3. CATHETERIZATION TECHNIQUE
story.append(Paragraph("3. Cardiac Catheterization Technique", ch_title))
story.append(Paragraph(B("Access Sites"), topic_title))
story += two_col_table(
["Femoral Approach (Judkins)", "Radial Approach (Transradial)"],
[
["Common femoral artery puncture", "Radial artery at wrist"],
["Seldinger technique used", "Allen's test done first"],
["Larger sheaths possible", "Smaller sheaths (5–6 Fr)"],
["Hemostasis by manual compression", "Radial band compression"],
["Risk: retroperitoneal hematoma", "Risk: radial artery spasm/occlusion"],
["Bed rest 4–6 hours post-procedure", "Patient ambulant immediately"],
[C("Preferred in: hemodynamic instability"), C("Preferred in: obese patients, coagulopathy")],
],
col_widths=[88*mm, 82*mm]
)
story.append(Paragraph(B("Seldinger Technique — Steps"), topic_title))
steps = [
"1. Arterial puncture with 18G needle at 45° angle",
"2. Insert J-tip guidewire through needle",
"3. Remove needle, leave guidewire in vessel",
"4. Nick skin with scalpel, dilate tract",
"5. Advance arterial sheath over guidewire",
"6. Remove dilator and guidewire, sheath in place",
"7. Flush sheath with heparinized saline",
]
for s in steps:
story.append(bul(s))
story.append(sp(6))
story.append(Paragraph(B("Catheters Used in Cath Lab"), topic_title))
rows = [
["Judkins Left (JL 3.5/4/5)", "Left coronary angiography — femoral approach"],
["Judkins Right (JR 4)", "Right coronary angiography — femoral approach"],
["Amplatz Left/Right", "Anomalous origins; bypass grafts"],
["Pigtail catheter", "LV angiogram, aortogram"],
["Multipurpose catheter", "Right heart cath, ventriculography"],
["Swan-Ganz catheter", "Right heart cath, PCWP measurement"],
["Berman catheter", "Balloon-tipped; right heart cath"],
["EBU / XB guide catheter", "PCI — extra backup support"],
]
story += two_col_table(["Catheter", "Use"], rows, col_widths=[70*mm, 100*mm])
story.append(Paragraph(B("Complications of Cardiac Catheterization"), topic_title))
comp_rows = [
["Vascular", "Hematoma, pseudoaneurysm, AV fistula, retroperitoneal bleed"],
["Cardiac", "MI, arrhythmia, cardiac perforation, tamponade"],
["Neurological", "Stroke/TIA (0.1%)"],
["Renal", "Contrast nephropathy"],
["Allergic", "Contrast reaction — urticaria to anaphylaxis"],
["Other", "Air embolism, catheter kinking, death (<0.1%)"],
]
story += two_col_table(["Category", "Complications"], comp_rows, col_widths=[40*mm, 130*mm])
# 4. HEMODYNAMICS
story.append(Paragraph("4. Hemodynamic Measurements", ch_title))
story += info_box("Key Hemodynamic Formulas (Must Know for Exams)", [
C("Cardiac Output (Fick) = O₂ consumption / (AO O₂ content − MV O₂ content)", "#1565C0"),
C("Cardiac Index = Cardiac Output / BSA [Normal: 2.5–4.0 L/min/m²]", "#1565C0"),
C("SVR = (MAP − RAP) × 80 / CO [Normal: 800–1200 dynes·s·cm⁻⁵]", "#1565C0"),
C("PVR = (mPAP − PCWP) × 80 / CO [Normal: 20–120 dynes·s·cm⁻⁵]", "#1565C0"),
C("Gorlin MVA = CO / (44.3 × HR × DFP × √ΔP mean) [Normal MVA: 4–6 cm²]", "#1565C0"),
C("Gorlin AVA = CO / (44.3 × HR × SET × √ΔP mean) [Normal AVA: 2.5–3.5 cm²]", "#1565C0"),
])
story.append(Paragraph(B("Valve Area Assessment by Gorlin Formula"), topic_title))
story.append(bod("The Gorlin formula calculates valve orifice area from the pressure gradient and flow across the valve:"))
rows = [
["Mitral Stenosis", "MVA < 1.5 cm²", "MVA < 1.0 cm²", "MVA < 1.0 cm² with symptoms"],
["Aortic Stenosis", "AVA < 1.5 cm²", "AVA < 1.0 cm²", "AVA < 0.6 cm² (very severe)"],
]
t_data = [[Paragraph(h, tbl_hdr_s) for h in ["Lesion", "Moderate", "Severe", "Critical"]]]
for r in rows:
t_data.append([Paragraph(c, tbl_cell_s) for c in r])
t = Table(t_data, colWidths=[40*mm, 47*mm, 47*mm, 36*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TABLE_HDR),
("ROWBACKGROUNDS", (0,1), (-1,-1), [TABLE_ALT, colors.white]),
("BOX", (0,0), (-1,-1), 0.8, MED_BLUE),
("INNERGRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CFD8DC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 5),
]))
story += [t, sp(6)]
# 5. NORMAL VALUES
story.append(Paragraph("5. Normal Hemodynamic Values", ch_title))
rows = [
["Right Atrium (RA)", "0–8 mmHg (mean)", "↑ in TR, RV failure, constrictive pericarditis"],
["Right Ventricle (RV)", "15–30 / 0–8 mmHg", "↑ RVP in pulmonary hypertension"],
["Pulmonary Artery (PA)", "15–30 / 4–12 mmHg", "↑ in pulmonary HTN"],
["PA Mean (mPAP)", "< 25 mmHg", "≥ 25 mmHg = pulmonary hypertension"],
["PCWP (Wedge)", "4–12 mmHg", "↑ in LV failure, MS"],
["Left Atrium (LA)", "4–12 mmHg (mean)", "↑ in MS, MR"],
["Left Ventricle (LV systolic)", "100–140 mmHg", "↑ in AS, HTN"],
["LVEDP", "4–12 mmHg", "↑ in LV failure (>18 = severe)"],
["Aorta (systolic/diastolic)", "100–140 / 60–90 mmHg", "↑ in HTN"],
["Cardiac Output (CO)", "4–8 L/min", "↓ in heart failure"],
["Cardiac Index (CI)", "2.5–4.0 L/min/m²", "< 2.2 = cardiogenic shock"],
]
story += two_col_table(
["Chamber / Parameter", "Normal Value", "Clinical Significance"],
rows,
col_widths=[52*mm, 38*mm, 80*mm]
)
# 6. CARDIAC OUTPUT
story.append(Paragraph("6. Cardiac Output Measurement", ch_title))
story.append(Paragraph(B("Fick Method"), topic_title))
story.append(bod("Based on the principle that oxygen consumed per minute = CO × arteriovenous O₂ difference."))
story += info_box("Fick Method — Steps", [
"Measure O₂ consumption (assumed: 125 mL O₂/min/m² or measured by expired gas analysis)",
"Sample blood from pulmonary artery (mixed venous) and aorta (arterial)",
"Calculate O₂ content: Hb × 1.34 × SaO₂ × 10",
"CO = O₂ consumption (mL/min) ÷ A-V O₂ difference (mL/L)",
C("Example: O₂ consumption = 250 mL/min; Arterial O₂ = 190 mL/L; Venous O₂ = 140 mL/L → CO = 250/50 = 5 L/min"),
])
story.append(Paragraph(B("Thermodilution Method"), topic_title))
story += info_box("Thermodilution Method", [
"Cold saline (10 mL at 0°C or room temp) injected into RA port of Swan-Ganz catheter",
"Thermistor in PA detects temperature change over time",
"CO = computed from area under temperature-time curve (Stewart-Hamilton equation)",
"Normal: 3 measurements averaged",
C("Advantage: bedside, quick, no blood sampling; Disadvantage: errors with TR, low CO states"),
])
story.append(PageBreak())
# 7. CORONARY ANGIOGRAPHY
story.append(Paragraph("7. Coronary Angiography", ch_title))
story.append(Paragraph(B("TIMI Flow Grading"), topic_title))
rows = [
["TIMI 0", "No perfusion — no contrast flow beyond obstruction"],
["TIMI 1", "Penetration without perfusion — contrast passes but does not fill distal vessel"],
["TIMI 2", "Partial perfusion — contrast fills distal vessel but more slowly than normal"],
["TIMI 3", C("Complete perfusion — normal flow and washout"), ],
]
story += two_col_table(["Grade", "Description"], rows, col_widths=[25*mm, 145*mm])
story.append(Paragraph(B("CAD Severity Grading"), topic_title))
rows = [
["Minimal", "< 50% luminal diameter stenosis"],
["Moderate", "50–69% stenosis"],
["Severe", C("≥ 70% stenosis — hemodynamically significant")],
["Critical", "≥ 90% stenosis"],
["Total occlusion", "100% occlusion (CTO)"],
]
story += two_col_table(["Grade", "Definition"], rows, col_widths=[40*mm, 130*mm])
story += info_box("Left Main (LMCA) Disease — High Priority", [
"LMCA stenosis ≥ 50% is significant",
"Equivalent to triple vessel disease",
C("Traditionally treated with CABG; PCI now acceptable in selected patients (EXCEL, NOBLE trials)"),
])
# 8. CONTRAST AND RADIATION
story.append(Paragraph("8. Contrast Media & Radiation Safety", ch_title))
story += two_col_table(
["Ionic (High Osmolar)", "Non-Ionic (Low Osmolar) — Preferred"],
[
["Higher osmolality (1500–2000 mOsm/kg)", "Lower osmolality (500–900 mOsm/kg)"],
["More adverse reactions", "Fewer adverse reactions"],
["Cheaper", "More expensive"],
["Examples: Diatrizoate (Urografin)", "Examples: Iohexol (Omnipaque), Iopamidol"],
["Causes more pain on injection", "Less pain; preferred in high-risk patients"],
],
col_widths=[88*mm, 82*mm]
)
story.append(Paragraph(B("Contrast Reactions"), topic_title))
rows = [
["Mild", "Nausea, flushing, urticaria", "Observation, antihistamine"],
["Moderate", "Bronchospasm, hypotension", "Adrenaline 0.3 mg IM, O₂, IV fluids"],
["Severe", C("Anaphylaxis, laryngeal edema, cardiac arrest"), C("Adrenaline 1:1000 IV, CPR if needed")],
]
story += two_col_table(["Severity", "Manifestations", "Management"], rows, col_widths=[25*mm, 75*mm, 70*mm])
story.append(Paragraph(B("Radiation Safety — ALARA Principle"), topic_title))
story += info_box("ALARA = As Low As Reasonably Achievable", [
"Minimize time of exposure",
"Maximize distance from radiation source (intensity ∝ 1/distance²)",
"Use shielding: lead apron (0.5 mm Pb), thyroid shield, lead glasses",
"Collimate the beam — restrict field size",
"Use pulsed fluoroscopy rather than continuous",
"Dose units: Gray (Gy) = absorbed dose; Sievert (Sv) = effective dose",
C("Annual occupational limit: 20 mSv/year (ICRP recommendation)"),
])
# 9. SHUNT DETECTION
story.append(Paragraph("9. Shunt Detection — Oximetry Run & Qp:Qs", ch_title))
story.append(bod("An oximetry run is performed by sampling blood from multiple chambers to detect step-ups in O₂ saturation."))
story += info_box("Step-up Locations and Significance", [
"Step-up in RA → ASD (atrial level shunt)",
"Step-up in RV → VSD (ventricular level shunt)",
"Step-up in PA → PDA (great vessel level shunt)",
C("Significant step-up = >7% in RA, >5% in RV, >5% in PA"),
])
story += info_box("Qp:Qs Calculation", [
"Qp:Qs = (Ao SaO₂ − MV O₂) / (PV O₂ − PA O₂)",
"Qp:Qs = 1:1 → No shunt",
"Qp:Qs > 1.5:1 → Significant L→R shunt (intervention considered)",
C("Qp:Qs > 2:1 → Definite surgical/device closure indication"),
])
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════
# PAPER II
# ════════════════════════════════════════════════════════════════
story += section_banner("PAPER II — CARDIAC CATHETERIZATION LABORATORY: ADVANCED", DARK_BLUE)
# 10. PCI
story.append(Paragraph("10. Percutaneous Coronary Intervention (PCI / PTCA)", ch_title))
story += info_box("Indications for PCI", [
"Primary PCI: STEMI — door-to-balloon time < 90 minutes",
"Elective PCI: stable angina with ≥70% stenosis on angiography",
"NSTEMI/UA: high-risk patients within 24–72 hours",
"FFR-guided PCI: FFR ≤ 0.80 = hemodynamically significant",
])
story.append(Paragraph(B("PCI Procedure — Steps"), topic_title))
steps = [
"1. Arterial access (radial or femoral) + sheath insertion",
"2. Administer heparin (70–100 U/kg IV) — target ACT 250–350 seconds",
"3. Engage coronary ostium with guide catheter (6–7 Fr)",
"4. Cross the lesion with 0.014\" coronary guidewire",
"5. Pre-dilate with balloon catheter (if needed)",
"6. Size and deploy stent (balloon-to-artery ratio 1.1:1)",
"7. Post-dilate with non-compliant balloon (optional)",
"8. Check final angiogram — confirm TIMI 3 flow",
C("9. Remove guidewire and guide catheter; close access site"),
]
for s in steps:
story.append(bul(s))
story.append(sp(6))
story.append(Paragraph(B("PCI Complications"), topic_title))
rows = [
["Acute closure", "Dissection, thrombus — treat with stent"],
["No-reflow", "Microvascular dysfunction — adenosine, verapamil IC"],
["Coronary perforation", "Wire or balloon injury — covered stent, pericardiocentesis"],
["Side branch occlusion", "Jailing of branch — kissing balloon technique"],
["Stent thrombosis", "Acute (<24h), subacute (1–30d), late (>30d) — aspirin + DAPT"],
["Contrast nephropathy", "Creatinine rise >0.5 mg/dL at 48h — hydration, minimize contrast"],
]
story += two_col_table(["Complication", "Management"], rows, col_widths=[55*mm, 115*mm])
# 11. STENTS
story.append(Paragraph("11. Coronary Stents", ch_title))
story += two_col_table(
["Bare Metal Stent (BMS)", "Drug-Eluting Stent (DES)"],
[
["Metal scaffold only", "Metal + polymer + antiproliferative drug"],
["Higher restenosis: 20–30%", C("Lower restenosis: 5–10%")],
["DAPT for 1 month", "DAPT for 6–12 months minimum"],
["Use in: high bleeding risk, non-compliance", "Use in: most routine PCI"],
["Examples: Multi-Link, Driver", "Examples: Taxus (paclitaxel), Cypher (sirolimus), Xience (everolimus)"],
],
col_widths=[88*mm, 82*mm]
)
story += info_box("Stent Sizing Rule", [
"Stent diameter = reference vessel diameter (1:1 ratio)",
"Balloon-to-artery ratio for post-dilation: 1.0–1.1:1",
"Stent length should cover entire lesion + 1–2 mm on each end",
C("Over-sizing causes dissection; under-sizing causes stent thrombosis"),
])
story.append(Paragraph(B("Intravascular Imaging"), topic_title))
story += two_col_table(
["IVUS (Intravascular Ultrasound)", "OCT (Optical Coherence Tomography)"],
[
["Sound waves — 40 MHz", "Near-infrared light"],
["Penetrates deeper (10 mm)", "Shallower penetration (1–2 mm)"],
["Images plaque burden and vessel wall", "Higher resolution — 10–15 μm"],
["Can be used in calcified lesions", "Best for stent apposition, dissection"],
["Does not need contrast flush", "Needs contrast flush to clear blood"],
],
col_widths=[88*mm, 82*mm]
)
story += info_box("FFR (Fractional Flow Reserve)", [
"Ratio of distal to proximal coronary pressure during maximal hyperemia (adenosine)",
C("FFR ≤ 0.80 = hemodynamically significant → PCI indicated"),
"FFR > 0.80 = defer PCI — medical management",
"Reduces unnecessary stenting (FAME trial evidence)",
])
# 12. BMV
story.append(Paragraph("12. Balloon Mitral Valvotomy (BMV)", ch_title))
story += info_box("Indications for BMV", [
"Symptomatic MS with MVA ≤ 1.5 cm² (NYHA class II–IV)",
"Favorable valve morphology (Wilkins score ≤ 8)",
"Absence of left atrial thrombus (confirmed by TEE)",
"Absent or mild MR (≤ grade 2)",
C("Pregnancy with severe MS — BMV is procedure of choice"),
])
story.append(Paragraph(B("Wilkins Score (Echocardiographic Scoring)"), topic_title))
rows = [
["Leaflet mobility", "1 (excellent) to 4 (restricted)", ""],
["Leaflet thickening", "1 (thin) to 4 (severely thick)", ""],
["Leaflet calcification","1 (no calcium) to 4 (extensive)", ""],
["Subvalvular disease", "1 (minimal) to 4 (extensive)", ""],
["Total Score", C("≤ 8 = favorable for BMV"), C("≥ 9 = poor outcome, consider surgery")],
]
story += two_col_table(["Parameter", "Score", ""], rows, col_widths=[65*mm, 70*mm, 35*mm])
story.append(Paragraph(B("Inoue Balloon Technique — Steps"), topic_title))
steps = [
"1. Transseptal puncture at fossa ovalis (Brockenbrough needle)",
"2. Advance dilator and Inoue balloon catheter across the septum",
"3. Position balloon across mitral valve",
"4. Inflate distal balloon first (locks in position at valve)",
"5. Inflate proximal then middle portion — stepwise dilation",
"6. Rapid deflation; balloon crosses back to LA",
"7. Check result: gradient, MVA by Gorlin formula",
C("8. Target MVA ≥ 1.5 cm² and gradient < 5 mmHg"),
]
for s in steps:
story.append(bul(s))
story.append(sp(6))
story.append(Paragraph(B("Complications of BMV"), topic_title))
for c in ["Severe MR (5–10%) — leaflet tear", "Cardiac tamponade — transseptal perforation",
"Systemic embolism — thrombus dislodgement", "Residual ASD — transseptal puncture",
"Restenosis — long-term (10–20% at 5 years)"]:
story.append(bul(c))
story.append(sp(6))
# 13. STRUCTURAL INTERVENTIONS
story.append(Paragraph("13. Structural Heart Disease Interventions", ch_title))
story.append(Paragraph(B("ASD Device Closure"), topic_title))
story += info_box("ASD Device Closure — Key Points", [
"Indicated when Qp:Qs > 1.5:1 and defect is secundum type",
"Amplatzer Septal Occluder (ASO) is most widely used device",
"Requires adequate rim of tissue around defect (≥ 5 mm)",
"TEE guidance during procedure; closure confirmed by echo",
C("Contraindicated: sinus venosus ASD, primum ASD, inadequate rims"),
])
story.append(Paragraph(B("PDA Device Closure"), topic_title))
story += info_box("PDA Device Closure — Key Points", [
"Amplatzer Duct Occluder (ADO) — most common device",
"Approach: venous (femoral vein) or arterial",
"Coil closure for small PDAs (< 3 mm)",
"Result: complete closure confirmed by angiogram at 10 minutes",
])
story.append(Paragraph(B("TAVI / TAVR Overview"), topic_title))
story += info_box("Transcatheter Aortic Valve Implantation", [
"For severe AS in inoperable or high-surgical-risk patients",
"Approach: transfemoral (preferred), transapical, transaortic",
"Devices: Edwards SAPIEN, Medtronic CoreValve",
"Valve deployed within native calcified aortic valve",
C("PARTNER trials showed TAVI non-inferior to surgery in high-risk patients"),
])
# 14. ELECTROPHYSIOLOGY
story.append(Paragraph("14. Electrophysiology Study (EPS) & Ablation", ch_title))
story += info_box("EPS Setup", [
"Catheters placed via femoral veins (usually 3–4 catheters)",
"Positions: High RA (HRA), Bundle of His (HBE), Right Ventricle (RV), Coronary Sinus (CS)",
"Multi-channel recording system — records intracardiac electrograms",
"Programmable electrical stimulator used to induce arrhythmias",
])
story += two_col_table(
["Arrhythmia", "EPS Findings", "Ablation Target"],
[
["AVNRT (most common SVT)", "Dual AV node physiology; jump during PES", "Slow pathway in Koch's triangle"],
["AVRT (WPW syndrome)", "Short PR, delta wave; accessory pathway", "Accessory pathway (mitral or tricuspid annulus)"],
["Atrial Flutter", "Reentry circuit in right atrium", "Cavo-tricuspid isthmus (CTI)"],
["VT (ischemic)", "Sustained VT inducible; scar-related", "VT circuit in peri-infarct scar"],
],
col_widths=[45*mm, 65*mm, 60*mm]
)
story += info_box("Radiofrequency Ablation (RFA)", [
"Delivers RF energy (350–750 kHz) via ablation catheter tip",
"Resistive heating → tissue necrosis at 50–70°C",
"Catheter tip temperature monitored to avoid char formation",
C("WPW ablation: success rate ~95%; recurrence ~5%"),
])
# 15. PACEMAKERS AND ICD
story.append(Paragraph("15. Pacemakers & ICD", ch_title))
story.append(Paragraph(B("Pacemaker Modes — NBG Code"), topic_title))
rows = [
["VVI", "Ventricular paced; ventricular sensed; inhibited", "AF with bradycardia; simple bradycardia"],
["AAI", "Atrial paced; atrial sensed; inhibited", "Sick sinus syndrome with intact AV node"],
["DDD", C("Dual paced + sensed; tracks both chambers"), C("Complete heart block — most physiological")],
["VOO", "Asynchronous ventricular pacing — no sensing", "Emergency pacing"],
["CRT (BiV)", "Both ventricles paced simultaneously", "Heart failure with LBBB, QRS > 150 ms"],
]
story += two_col_table(["Mode", "Description", "Indication"], rows, col_widths=[18*mm, 82*mm, 70*mm])
story.append(Paragraph(B("ICD (Implantable Cardioverter Defibrillator)"), topic_title))
story += info_box("ICD Indications", [
"Secondary prevention: survivors of VF or hemodynamically unstable VT",
"Primary prevention: EF ≤ 35% on optimal medical therapy (MADIT-II, SCD-HeFT)",
"Inherited channelopathies: LQTS, Brugada, ARVD, HCM with risk factors",
C("ICD delivers: ATP (anti-tachycardia pacing) → cardioversion → defibrillation"),
])
story.append(Paragraph(B("Pacemaker Complications"), topic_title))
for c in ["Lead displacement (early)",
"Pneumothorax — subclavian vein approach",
"Pacemaker pocket hematoma",
"Lead perforation → tamponade",
"Pacemaker syndrome (VVI) — AV dyssynchrony → ↓CO",
"Twiddler's syndrome — patient rotates generator",
C("Pacemaker-mediated tachycardia (PMT) — retrograde VA conduction in DDD")]:
story.append(bul(c))
story.append(sp(6))
# 16. IABP
story.append(Paragraph("16. Intra-Aortic Balloon Pump (IABP)", ch_title))
story += info_box("Mechanism of IABP", [
"Balloon (25–40 mL) placed in descending thoracic aorta (below left subclavian, above renal arteries)",
C("Inflates during diastole → increases diastolic pressure → augments coronary perfusion"),
C("Deflates just before systole → reduces afterload → reduces LV workload (reduces O₂ demand)"),
"Triggered by ECG (R-wave) or arterial pressure waveform",
"Net effect: increases cardiac output by 10–20%",
])
story += two_col_table(
["Indications", "Contraindications"],
[
["Cardiogenic shock", "Severe aortic regurgitation"],
["Acute STEMI with hemodynamic instability", "Aortic dissection / aneurysm"],
["Refractory unstable angina", "Severe peripheral arterial disease"],
["High-risk PCI support", "Uncontrolled coagulopathy"],
["Bridge to LVAD or heart transplant", "Bilateral femoral artery disease"],
],
col_widths=[88*mm, 82*mm]
)
story += info_box("IABP Timing", [
"Inflation: at dicrotic notch of arterial waveform (aortic valve closure)",
"Deflation: just before systole (before next QRS complex)",
C("Early inflation → increases afterload (harmful); Late inflation → reduced augmentation"),
C("Early deflation → reduced diastolic augmentation; Late deflation → increases afterload"),
"Ratio: 1:1 (every beat), 1:2, 1:3 used for weaning",
])
# 17. PHARMACOLOGY
story.append(Paragraph("17. Pharmacology in the Cath Lab", ch_title))
story += two_col_table(
["Drug", "Use in Cath Lab", "Key Points"],
[
["Heparin (UFH)", "Anticoagulation during PCI", "70–100 U/kg IV; ACT target 250–350s; reversal: protamine"],
["Bivalirudin", "Alternative anticoagulant", "Direct thrombin inhibitor; less bleeding vs heparin"],
["Aspirin", "Antiplatelet — pre/post PCI", "Loading dose 300 mg; maintenance 75–100 mg/day lifelong"],
["Clopidogrel", "P2Y12 inhibitor — DAPT with aspirin", "Loading 300–600 mg; maintenance 75 mg/day"],
["Ticagrelor", "Stronger P2Y12 inhibitor", "Loading 180 mg; reversible; preferred in ACS"],
["Prasugrel", "Strongest P2Y12 inhibitor", "Loading 60 mg; avoid in prior TIA/stroke"],
["Abciximab", "GPIIb/IIIa inhibitor", "Used in high-thrombus burden PCI"],
["Adenosine", "FFR measurement; no-reflow", "Intracoronary 100–200 μg bolus"],
["Nitroglycerine", "Prevent/treat coronary spasm", "IC 100–200 μg bolus during angiography"],
["Verapamil (IC)", "No-reflow treatment", "100–200 μg IC; slows HR"],
["Atropine", "Vagal reaction during cath", "0.6–1.2 mg IV for bradycardia/hypotension"],
["Adrenaline", "Cardiac arrest; anaphylaxis", "1 mg IV for cardiac arrest; 0.3 mg IM for anaphylaxis"],
],
col_widths=[28*mm, 55*mm, 87*mm]
)
story.append(PageBreak())
# 18. HIGH YIELD QUESTION BANK
story += section_banner("18. HIGH-YIELD QUESTION BANK (MGR University Pattern)", DARK_BLUE)
story.append(Paragraph("PAPER I — Frequently Asked Long Essay Questions", ch_title))
long_q_p1 = [
"1. Describe the technique of left heart catheterization. Add a note on complications and their management.",
"2. Describe the technique of right heart catheterization. What are the normal pressures recorded in each cardiac chamber and great vessel?",
"3. Explain the Fick principle. How is cardiac output measured using the Fick method? Give a worked example.",
"4. Describe the Gorlin formula. How is mitral valve area and aortic valve area calculated?",
"5. Describe the hemodynamic assessment of mitral stenosis. Draw and explain the pressure tracings of LA and LV.",
"6. Describe the anatomy of coronary arteries and the standard angiographic views for left and right coronary angiography.",
"7. Describe the radial artery approach for cardiac catheterization. Compare radial versus femoral approach.",
"8. Classify contrast media. What are the adverse reactions and their management?",
"9. Explain shunt detection in congenital heart disease. How is Qp:Qs calculated and what does it signify?",
"10. Describe radiation safety in the cath lab. What is the ALARA principle?",
]
for q in long_q_p1:
story.append(bul(q))
story.append(sp(6))
story.append(Paragraph("PAPER I — Short Notes (5 Marks Each)", ch_title))
sn_p1 = [
"Seldinger technique", "Judkins catheters (JL and JR)", "Pigtail catheter — uses",
"TIMI flow grading", "PCWP and LVEDP — normal values and significance",
"Thermodilution method of cardiac output", "SVR and PVR — formulae and normal values",
"Gorlin formula", "Cardiac dominance", "Oximetry run",
"Types of contrast media", "ALARA principle", "Normal hemodynamic values (table)",
"Femoral artery puncture — technique and complications",
"Coronary angiographic views — LAO, RAO, cranial, caudal",
]
for item in sn_p1:
story.append(bul(item))
story.append(sp(6))
story.append(Paragraph("PAPER II — Frequently Asked Long Essay Questions", ch_title))
long_q_p2 = [
"1. Describe the technique of PTCA/PCI. What are the complications and their management?",
"2. Classify coronary stents. Compare bare metal stents with drug-eluting stents.",
"3. Describe the technique of Balloon Mitral Valvotomy (BMV) using the Inoue balloon. Indications, contraindications and complications.",
"4. Describe the Wilkins score. How is the suitability of a patient for BMV assessed?",
"5. Describe the technique of ASD device closure. What devices are used?",
"6. Describe the technique of EPS. What catheters are used and where are they placed?",
"7. Describe RFA for WPW syndrome. How is the accessory pathway identified and ablated?",
"8. Describe the indications and procedure of permanent pacemaker implantation. What are the modes of pacing?",
"9. Describe the mechanism, indications, and contraindications of IABP. How is timing optimized?",
"10. Describe the indications for ICD implantation. How does an ICD function?",
"11. Describe antiplatelet therapy in PCI. What is the role of aspirin, clopidogrel, and GPIIb/IIIa inhibitors?",
"12. Describe heparin pharmacology. How is it used and monitored in the cath lab?",
]
for q in long_q_p2:
story.append(bul(q))
story.append(sp(6))
story.append(Paragraph("PAPER II — Short Notes (5 Marks Each)", ch_title))
sn_p2 = [
"Drug-eluting stents vs bare metal stents", "IVUS — principle and uses",
"FFR — principle, cut-off value, clinical use", "No-reflow phenomenon — causes and management",
"Inoue balloon catheter", "Wilkins score", "Amplatzer septal occluder",
"Pacemaker modes — VVI, DDD, CRT", "ICD — indications and function",
"Pacemaker syndrome", "TAVI / TAVR — overview", "IABP — timing and counterpulsation",
"Heparin — dose, ACT monitoring, reversal", "Antiplatelet therapy in ACS/PCI",
"Management of cardiac arrest in cath lab", "Temporary pacemaker — indications and insertion",
"WPW syndrome — ECG features and ablation", "AV nodal reentrant tachycardia (AVNRT)",
]
for item in sn_p2:
story.append(bul(item))
story.append(sp(6))
story.append(Paragraph("Very Short Answer Bank — Paper I & II (2 Marks Each)", ch_title))
vsa_rows = [
("What is Gorlin formula?", "Calculates valve area from flow and pressure gradient"),
("Normal LVEDP", "4–12 mmHg; >18 mmHg = severe LV dysfunction"),
("Normal PA systolic pressure", "15–30 mmHg"),
("Define cardiac index", "CO / BSA; Normal 2.5–4.0 L/min/m²"),
("What is PCWP?", "Pulmonary capillary wedge pressure; reflects LVEDP; Normal 4–12 mmHg"),
("What is TIMI grade 3?", "Complete perfusion — normal flow and washout in distal vessel"),
("Name two non-ionic contrast agents", "Iohexol (Omnipaque), Iopamidol (Isovue)"),
("What is Seldinger technique?", "Needle → guidewire → dilator → sheath insertion technique"),
("What is FFR cut-off for PCI?", "FFR ≤ 0.80 = hemodynamically significant lesion"),
("What is IABP ratio?", "1:1 = assists every beat; 1:2, 1:3 used for weaning"),
("Define door-to-balloon time", "Time from patient arrival at ED to balloon inflation in STEMI; target < 90 min"),
("What is ACT? Normal in PCI?", "Activated Clotting Time; target 250–350 seconds during PCI"),
("What is Inoue balloon?", "Specially designed balloon for BMV; distal, then proximal, then waist inflation"),
("What is Wilkins score?", "Echo score for MS valve morphology; ≤8 = suitable for BMV"),
("What is WPW syndrome?", "Accessory pathway → pre-excitation; short PR + delta wave on ECG"),
("What is pacemaker syndrome?", "Retrograde VA conduction in VVI mode → AV dyssynchrony → reduced CO"),
("Name two DES examples", "Taxus (paclitaxel), Xience (everolimus)"),
("What is no-reflow?", "Absent distal flow despite patent epicardial vessel → microvascular dysfunction"),
("What is Qp:Qs?", "Pulmonary:systemic flow ratio; >1.5:1 = significant L→R shunt"),
("What is coronary dominance?", "Which artery gives PDA; right dominant in 85% of population"),
]
vsa_data = [[Paragraph(B("Question"), tbl_hdr_s), Paragraph(B("Answer"), tbl_hdr_s)]]
for q, a in vsa_rows:
vsa_data.append([Paragraph(q, tbl_cell_s), Paragraph(a, tbl_cell_s)])
t = Table(vsa_data, colWidths=[85*mm, 85*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TABLE_HDR),
("ROWBACKGROUNDS",(0,1), (-1,-1), [TABLE_ALT, colors.white]),
("BOX", (0,0), (-1,-1), 0.8, MED_BLUE),
("INNERGRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CFD8DC")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story += [t, sp(8)]
# LAST PAGE — PRIORITY TABLE
story.append(PageBreak())
story += section_banner("EXAM PRIORITY SUMMARY — MOST REPEATED TOPICS", ACCENT_RED)
priority_rows = [
["BMV / Inoue Balloon Technique", "Paper II", "★★★★★", "Almost every year"],
["PTCA / Primary PCI Technique", "Paper II", "★★★★★", "Almost every year"],
["IABP — Mechanism & Indications", "Paper II", "★★★★★", "Almost every year"],
["Cardiac Output — Fick Method", "Paper I", "★★★★★", "Almost every year"],
["Gorlin Formula / Valve Area", "Paper I", "★★★★★", "Almost every year"],
["ASD Device Closure", "Paper II", "★★★★☆", "Very frequent"],
["Coronary Angiography Views", "Paper I", "★★★★☆", "Very frequent"],
["Permanent Pacemaker Modes", "Paper II", "★★★★☆", "Very frequent"],
["Contrast Media & Reactions", "Paper I", "★★★★☆", "Very frequent"],
["Heparin in Cath Lab", "Paper II", "★★★★☆", "Very frequent"],
["EPS Setup & RFA Ablation", "Paper II", "★★★☆☆", "Frequent"],
["Normal Hemodynamic Values", "Paper I", "★★★☆☆", "Frequent"],
["FFR — Principle & Cut-off", "Paper II", "★★★☆☆", "Frequent"],
["Shunt Detection — Qp:Qs", "Paper I", "★★★☆☆", "Frequent"],
["Radiation Safety / ALARA", "Paper I", "★★★☆☆", "Frequent"],
]
prio_data = [[Paragraph(B(h), tbl_hdr_s) for h in ["Topic", "Paper", "Priority", "Frequency"]]]
for r in priority_rows:
prio_data.append([Paragraph(c, tbl_cell_s) for c in r])
t = Table(prio_data, colWidths=[82*mm, 18*mm, 26*mm, 44*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), ACCENT_RED),
("ROWBACKGROUNDS",(0,1), (-1,-1), [GREEN_LIGHT, colors.white]),
("BOX", (0,0), (-1,-1), 0.8, ACCENT_RED),
("INNERGRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CFD8DC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story += [t, sp(12)]
story.append(Paragraph(
"Study Tip: Focus on long essay topics marked ★★★★★ first — these carry 10 marks each "
"and appear almost every year. Then revise short notes and ensure all VSA answers (2 marks each) "
"are memorized precisely. Normal values, formulae, and classification tables appear repeatedly "
"in Section C.",
note_s
))
# ── BUILD PDF ────────────────────────────────────────────────────
doc.build(story)
print("PDF created at:", OUTPUT)
cd /tmp/workspace/cardiac-study-guide && python create_pdf.py
python3 -c "from pypdf import PdfReader; r = PdfReader('/tmp/workspace/cardiac-study-guide/BSc_Cardiac_Technology_3rdYear_StudyGuide.pdf'); print(f'Pages: {len(r.pages)}'); import os; print(f'Size: {os.path.getsize(\"/tmp/workspace/cardiac-study-guide/BSc_Cardiac_Technology_3rdYear_StudyGuide.pdf\") // 1024} KB')"
BSc Cardiac Technology 3rdYear StudyGuide
PDF Document · PDF