Act like a topper Make a perfect answer for 10 marks on both cardiac cycle and cardiac output for uni exam in simple point wise manner extract every definition, strategies and approach only add flow chart or easy mnemonic if required only in pdf format don't add tables please
mkdir -p /tmp/workspace/cardiac-answers && ls /tmp/workspace/cardiac-answers/
~/cardiac-answers/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm
from reportlab.lib import colors
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, HRFlowable, ListFlowable, ListItem
)
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
OUTPUT_PATH = "/tmp/workspace/cardiac-answers/Cardiac_Cycle_and_Cardiac_Output.pdf"
doc = SimpleDocTemplate(
OUTPUT_PATH,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2*cm,
bottomMargin=2*cm,
)
styles = getSampleStyleSheet()
# --- Custom Styles ---
title_style = ParagraphStyle(
"MainTitle",
parent=styles["Heading1"],
fontSize=17,
textColor=colors.HexColor("#1a237e"),
spaceAfter=4,
spaceBefore=0,
alignment=TA_CENTER,
fontName="Helvetica-Bold",
)
subtitle_style = ParagraphStyle(
"SubTitle",
parent=styles["Normal"],
fontSize=10,
textColor=colors.HexColor("#555555"),
spaceAfter=10,
alignment=TA_CENTER,
fontName="Helvetica",
)
q_title_style = ParagraphStyle(
"QuestionTitle",
parent=styles["Heading1"],
fontSize=13,
textColor=colors.white,
spaceAfter=0,
spaceBefore=0,
leftIndent=8,
fontName="Helvetica-Bold",
backColor=colors.HexColor("#1a237e"),
borderPad=6,
)
section_style = ParagraphStyle(
"SectionHead",
parent=styles["Heading2"],
fontSize=11,
textColor=colors.HexColor("#0d47a1"),
spaceBefore=10,
spaceAfter=2,
fontName="Helvetica-Bold",
borderPad=0,
)
subsection_style = ParagraphStyle(
"SubSection",
parent=styles["Heading3"],
fontSize=10.5,
textColor=colors.HexColor("#1565c0"),
spaceBefore=7,
spaceAfter=1,
fontName="Helvetica-Bold",
)
body_style = ParagraphStyle(
"Body",
parent=styles["Normal"],
fontSize=10,
textColor=colors.HexColor("#212121"),
spaceAfter=2,
spaceBefore=0,
leading=15,
fontName="Helvetica",
)
bullet_style = ParagraphStyle(
"Bullet",
parent=styles["Normal"],
fontSize=10,
textColor=colors.HexColor("#212121"),
spaceAfter=2,
spaceBefore=0,
leading=15,
leftIndent=14,
bulletIndent=4,
fontName="Helvetica",
)
def_style = ParagraphStyle(
"Definition",
parent=styles["Normal"],
fontSize=10,
textColor=colors.HexColor("#212121"),
spaceAfter=3,
spaceBefore=2,
leading=15,
leftIndent=10,
fontName="Helvetica-Oblique",
backColor=colors.HexColor("#e3f2fd"),
borderPad=5,
)
mnemonic_style = ParagraphStyle(
"Mnemonic",
parent=styles["Normal"],
fontSize=10.5,
textColor=colors.HexColor("#4a148c"),
spaceAfter=3,
spaceBefore=3,
leading=16,
leftIndent=10,
fontName="Helvetica-Bold",
backColor=colors.HexColor("#f3e5f5"),
borderPad=5,
)
flowchart_style = ParagraphStyle(
"Flowchart",
parent=styles["Normal"],
fontSize=10,
textColor=colors.HexColor("#1b5e20"),
spaceAfter=2,
spaceBefore=2,
leading=16,
leftIndent=10,
fontName="Helvetica",
backColor=colors.HexColor("#e8f5e9"),
borderPad=5,
)
note_style = ParagraphStyle(
"Note",
parent=styles["Normal"],
fontSize=9.5,
textColor=colors.HexColor("#b71c1c"),
spaceAfter=2,
spaceBefore=2,
leading=14,
leftIndent=10,
fontName="Helvetica-Oblique",
)
def H1(text):
return Paragraph(f"<b>{text}</b>", q_title_style)
def H2(text):
return Paragraph(text, section_style)
def H3(text):
return Paragraph(text, subsection_style)
def B(text):
return Paragraph(f"• {text}", bullet_style)
def Def(label, text):
return Paragraph(f"<b>{label}:</b> {text}", def_style)
def Body(text):
return Paragraph(text, body_style)
def Mnemonic(text):
return Paragraph(text, mnemonic_style)
def Flowchart(text):
return Paragraph(text, flowchart_style)
def Note(text):
return Paragraph(f"<i>Note: {text}</i>", note_style)
def HR():
return HRFlowable(width="100%", thickness=0.5, color=colors.HexColor("#bbbbbb"), spaceAfter=6, spaceBefore=6)
def Space(h=6):
return Spacer(1, h)
story = []
# =========================================================
# COVER / HEADER
# =========================================================
story.append(Space(10))
story.append(Paragraph("Physiology — University Exam Answers", title_style))
story.append(Paragraph("10 Marks Each | Cardiac Cycle & Cardiac Output", subtitle_style))
story.append(HR())
story.append(Space(6))
# =========================================================
# QUESTION 1: CARDIAC CYCLE
# =========================================================
story.append(H1(" Q1. Write a detailed note on the Cardiac Cycle. [10 Marks]"))
story.append(Space(8))
# 1. Definition
story.append(H2("1. Definition"))
story.append(Def("Cardiac Cycle",
"The sequence of mechanical and electrical events that repeats with every heartbeat, "
"from the beginning of one heartbeat to the beginning of the next."))
story.append(B("Duration = 60 / Heart Rate. At 75 beats/min → 0.8 s (800 ms)."))
story.append(B("Initiated by spontaneous action potential in the sinoatrial (SA) node."))
story.append(Space(4))
# 2. Overview of Systole & Diastole
story.append(H2("2. Systole vs Diastole"))
story.append(B("<b>Systole</b> — Phase of ventricular contraction and ejection."))
story.append(B("<b>Diastole</b> — Phase of ventricular relaxation and filling."))
story.append(B("At a normal rate of 72 beats/min: systole ≈ 0.4 of the cycle; diastole ≈ 0.6."))
story.append(B("As heart rate increases, diastole shortens more than systole → risk of incomplete filling."))
story.append(Space(4))
# 3. Cardiac Valves
story.append(H2("3. Cardiac Valves — Basics"))
story.append(B("<b>AV (inlet) valves</b> — allow blood from atria → ventricles only."))
story.append(B("Right side: Tricuspid valve (3 cusps). Left side: Mitral valve (2 cusps / bicuspid)."))
story.append(B("<b>Semilunar (outlet) valves</b> — allow blood from ventricles → great arteries only."))
story.append(B("Pulmonary valve (RV → pulmonary artery); Aortic valve (LV → aorta)."))
story.append(B("All valves open when upstream pressure > downstream pressure (passive opening)."))
story.append(Space(4))
# 4. Seven Phases
story.append(H2("4. Seven Phases of the Cardiac Cycle (Costanzo Classification)"))
story.append(Mnemonic("Mnemonic — \"A Big, Rapid Ejection, Reduced, Slow, Fills\" → Atrial systole | "
"Isovolumetric Contraction | Rapid Ejection | Reduced Ejection | "
"Isovolumetric Relaxation | Rapid Filling | Slow Filling"))
story.append(Space(4))
story.append(H3("Phase A — Atrial Systole"))
story.append(B("Trigger: P wave on ECG (atrial depolarisation)."))
story.append(B("Left atrial pressure rises → 'a' wave on venous pulse."))
story.append(B("Mitral valve is open; atrial contraction pushes final ~20% of blood into ventricle."))
story.append(B("Ventricular volume rises to End-Diastolic Volume (EDV) ≈ 140 mL."))
story.append(B("Heart sound: S4 (not heard in normal adults; audible in ventricular hypertrophy)."))
story.append(Space(3))
story.append(H3("Phase B — Isovolumetric Ventricular Contraction (IVC)"))
story.append(B("Trigger: QRS complex on ECG (ventricular depolarisation)."))
story.append(B("Ventricular pressure rises rapidly; all valves are closed."))
story.append(B("Volume remains constant (isovolumetric) — no ejection yet."))
story.append(B("Mitral valve closes (upstream LV pressure > LA pressure) → <b>S1 heart sound</b>."))
story.append(B("'c' wave on venous pulse (tricuspid valve bulges back)."))
story.append(Space(3))
story.append(H3("Phase C — Rapid Ventricular Ejection"))
story.append(B("LV pressure exceeds aortic pressure → Aortic valve opens."))
story.append(B("Blood ejected rapidly; aortic pressure rises to systolic peak (~120 mmHg)."))
story.append(B("LV volume decreases sharply; LV pressure reaches maximum."))
story.append(B("ECG: peak of T wave at end of this phase."))
story.append(Space(3))
story.append(H3("Phase D — Reduced Ventricular Ejection"))
story.append(B("Ejection continues but at a slower rate."))
story.append(B("LV pressure begins to fall below aortic pressure, but aortic valve stays open momentarily."))
story.append(B("'x' descent seen on venous pulse."))
story.append(Space(3))
story.append(H3("Phase E — Isovolumetric Ventricular Relaxation (IVR)"))
story.append(B("Systole ends; ventricle relaxes → LV pressure falls below aortic pressure."))
story.append(B("Aortic valve closes → <b>S2 heart sound</b> (A2 component). Dicrotic notch on aortic pressure curve."))
story.append(B("All valves closed; volume remains constant at End-Systolic Volume (ESV) ≈ 70 mL."))
story.append(B("'v' wave builds on venous pulse (veins filling with closed tricuspid valve)."))
story.append(Space(3))
story.append(H3("Phase F — Rapid Ventricular Filling"))
story.append(B("LV pressure < LA pressure → Mitral valve opens."))
story.append(B("Blood rushes in rapidly from atrium. LV volume rises quickly."))
story.append(B("Heart sound: S3 (pathological in adults > 40 yrs — e.g., heart failure)."))
story.append(B("'y' descent on venous pulse."))
story.append(Space(3))
story.append(H3("Phase G — Slow Ventricular Filling (Diastasis)"))
story.append(B("Passive slow filling as venous return continues."))
story.append(B("Atrial and ventricular pressures nearly equalize."))
story.append(B("Ends when next atrial systole (Phase A) begins."))
story.append(Space(6))
# 5. Pressure events summary
story.append(H2("5. Key Pressure Values (Left Heart)"))
story.append(B("End-Diastolic Volume (EDV) = 140 mL (normal)."))
story.append(B("End-Systolic Volume (ESV) = 70 mL (normal)."))
story.append(B("Stroke Volume (SV) = EDV − ESV = 70 mL."))
story.append(B("Aortic systolic pressure ≈ 120 mmHg; diastolic pressure ≈ 80 mmHg."))
story.append(B("LV pressure during IVC rises from ~0 to ~80 mmHg; peaks ~120 mmHg during ejection."))
story.append(Space(4))
# 6. Heart sounds summary
story.append(H2("6. Heart Sounds — Summary"))
story.append(B("<b>S1</b> ('lub') — Closure of Mitral + Tricuspid (AV) valves; marks onset of ventricular systole."))
story.append(B("<b>S2</b> ('dub') — Closure of Aortic + Pulmonary (semilunar) valves; marks end of systole."))
story.append(B("<b>S3</b> — Rapid ventricular filling; pathological in adults (heart failure, dilated cardiomyopathy)."))
story.append(B("<b>S4</b> — Atrial contraction against a stiff/hypertrophied ventricle; always pathological."))
story.append(Space(4))
# 7. ECG correlation
story.append(H2("7. ECG Correlation"))
story.append(B("<b>P wave</b> → Atrial depolarisation → Atrial systole begins."))
story.append(B("<b>PR interval</b> → AV nodal delay (>0.1 s) — allows atrial emptying before ventricular contraction."))
story.append(B("<b>QRS complex</b> → Ventricular depolarisation → Isovolumetric contraction begins."))
story.append(B("<b>T wave</b> → Ventricular repolarisation → Relaxation phase."))
story.append(Space(4))
# 8. Flowchart
story.append(H2("8. Flowchart of the Cardiac Cycle"))
story.append(Flowchart(
"SA Node fires → P wave (ECG) → Atrial Systole (AV valves open)<br/>"
"↓<br/>"
"QRS complex → Ventricular depolarisation → IVC (all valves closed, volume constant)<br/>"
"↓<br/>"
"LV pressure > Aortic pressure → Aortic valve opens → Rapid Ejection (Phase C)<br/>"
"↓<br/>"
"Reduced Ejection (Phase D) → T wave (repolarisation)<br/>"
"↓<br/>"
"LV pressure < Aortic pressure → Aortic valve closes → S2 sound → IVR (all valves closed)<br/>"
"↓<br/>"
"LV pressure < LA pressure → Mitral valve opens → Rapid Filling (S3) → Slow Filling<br/>"
"↓<br/>"
"Next P wave → Cycle repeats"
))
story.append(Space(6))
story.append(Note("At higher heart rates, diastole shortens disproportionately, limiting ventricular filling "
"and potentially reducing stroke volume."))
story.append(HR())
story.append(Space(12))
# =========================================================
# QUESTION 2: CARDIAC OUTPUT
# =========================================================
story.append(H1(" Q2. Write a detailed note on Cardiac Output. [10 Marks]"))
story.append(Space(8))
# 1. Definition
story.append(H2("1. Definition"))
story.append(Def("Cardiac Output (CO)",
"The total volume of blood ejected by the heart per minute. "
"It equals Stroke Volume × Heart Rate."))
story.append(B("Normal CO ≈ 5,000 mL/min (5 L/min) in a 70 kg adult at rest."))
story.append(B("Based on: SV = 70 mL × HR = 72 beats/min ≈ 5040 mL/min."))
story.append(Space(3))
story.append(Def("Cardiac Index (CI)",
"Cardiac output corrected for body surface area (BSA). CI = CO / BSA. Normal = 2.5–4.0 L/min/m²."))
story.append(Space(4))
# 2. Formula
story.append(H2("2. Formula"))
story.append(Body("<b>CO = Stroke Volume (SV) × Heart Rate (HR)</b>"))
story.append(Body("<b>SV = End-Diastolic Volume (EDV) − End-Systolic Volume (ESV)</b>"))
story.append(Body("<b>Ejection Fraction (EF) = SV / EDV × 100%</b> (Normal: 55–70%)"))
story.append(Space(2))
story.append(B("Example: EDV = 140 mL, ESV = 70 mL → SV = 70 mL; HR = 75 → CO = 5250 mL/min; EF = 50%."))
story.append(Space(4))
# 3. Determinants
story.append(H2("3. Determinants of Cardiac Output"))
story.append(Body("CO is regulated by four major factors:"))
story.append(Mnemonic("Mnemonic: <b>PACH</b> → Preload | Afterload | Contractility | Heart Rate"))
story.append(Space(4))
story.append(H3("A. Preload"))
story.append(Def("Preload",
"The degree to which sarcomeres are stretched just before systole; "
"clinically measured as End-Diastolic Volume (EDV) or End-Diastolic Pressure (EDP)."))
story.append(B("Determined by: venous return, blood volume, atrial contraction."))
story.append(B("↑ Preload → ↑ EDV → ↑ SV (Frank-Starling Law)."))
story.append(B("↓ Preload (haemorrhage, dehydration) → ↓ EDV → ↓ CO."))
story.append(B("LVEDP > 20–25 mmHg → pulmonary oedema."))
story.append(Space(3))
story.append(H3("B. Afterload"))
story.append(Def("Afterload",
"The tension/resistance the ventricle must overcome to eject blood; "
"determined by aortic pressure and total peripheral resistance (TPR)."))
story.append(B("Laplace's Law: Wall tension = (Pressure × Radius) / (2 × Wall thickness)."))
story.append(B("↑ Afterload (hypertension, aortic stenosis) → ↓ SV → ↓ CO."))
story.append(B("↓ Afterload (vasodilators) → ↑ SV → ↑ CO."))
story.append(B("TPR = (MAP − CVP) / CO."))
story.append(Space(3))
story.append(H3("C. Contractility (Inotropy)"))
story.append(Def("Contractility",
"The intrinsic ability of the myocardium to generate force, "
"independent of preload and afterload. Also called inotropy."))
story.append(B("↑ Contractility (positive inotropes: adrenaline, digoxin, dopamine) → ↑ SV → ↑ CO."))
story.append(B("↓ Contractility (negative inotropes: beta-blockers, heart failure) → ↓ SV → ↓ CO."))
story.append(B("Increased contractility → ↑ Ejection Fraction at the same preload."))
story.append(Space(3))
story.append(H3("D. Heart Rate"))
story.append(B("↑ Heart rate → ↑ CO (up to a limit)."))
story.append(B("Very high HR (tachycardia) → diastole shortens → ↓ filling → ↓ SV → overall CO may fall."))
story.append(B("Controlled by: autonomic nervous system (sympathetic ↑ HR; parasympathetic ↓ HR)."))
story.append(Space(4))
# 4. Frank-Starling Law
story.append(H2("4. Frank-Starling Law of the Heart"))
story.append(Def("Frank-Starling Law",
"The stroke volume (and cardiac output) ejected by the ventricle is directly proportional "
"to the end-diastolic volume. In other words, the more the heart fills during diastole, "
"the more forcefully it contracts and the more blood it ejects in systole."))
story.append(B("Cellular basis: Increased fibre length → optimal actin-myosin overlap → stronger contraction."))
story.append(B("Ensures: CO = venous return in the steady state (input = output balance)."))
story.append(B("Positive inotropes shift the Frank-Starling curve upward (more SV for same EDV)."))
story.append(B("Negative inotropes shift the curve downward."))
story.append(Space(4))
# 5. Measurement
story.append(H2("5. Measurement of Cardiac Output"))
story.append(Space(2))
story.append(H3("A. Fick Principle (Gold Standard)"))
story.append(Def("Fick Principle",
"Cardiac output can be calculated by dividing the total oxygen consumption of the body "
"by the arterio-venous oxygen difference across the lungs."))
story.append(Body("<b>CO = O₂ Consumption / ([O₂] Pulmonary Vein − [O₂] Pulmonary Artery)</b>"))
story.append(B("Normal O₂ consumption ≈ 250 mL O₂/min."))
story.append(B("O₂ content of pulmonary venous blood ≈ 0.20 mL O₂/mL blood."))
story.append(B("O₂ content of pulmonary arterial (mixed venous) blood ≈ 0.15 mL O₂/mL blood."))
story.append(B("CO = 250 / (0.20 − 0.15) = 250 / 0.05 = <b>5000 mL/min</b>."))
story.append(B("Pulmonary arterial O₂ is sampled via a pulmonary artery catheter (right heart catheterisation)."))
story.append(Space(3))
story.append(H3("B. Thermodilution Method (Clinically Used)"))
story.append(B("Cold saline injected into right atrium; temperature change measured in pulmonary artery."))
story.append(B("CO inversely proportional to the area under the temperature-time curve."))
story.append(B("Performed via Swan-Ganz (pulmonary artery) catheter."))
story.append(Space(3))
story.append(H3("C. Echocardiography (Non-Invasive)"))
story.append(B("CO = SV × HR, where SV is measured by Doppler flow across aortic valve."))
story.append(B("Most widely used non-invasive method in clinical practice."))
story.append(Space(4))
# 6. Regulation
story.append(H2("6. Regulation of Cardiac Output"))
story.append(Space(2))
story.append(H3("A. Autonomic Nervous System"))
story.append(B("Sympathetic stimulation → ↑ HR (chronotropy) + ↑ contractility (inotropy) → ↑ CO."))
story.append(B("Parasympathetic (vagal) stimulation → ↓ HR (negative chronotropy) → ↓ CO."))
story.append(Space(2))
story.append(H3("B. Hormonal Regulation"))
story.append(B("Adrenaline (epinephrine) → ↑ HR + ↑ contractility → ↑ CO (fight-or-flight)."))
story.append(B("Thyroid hormones → ↑ CO (↑ metabolic demand, ↑ HR)."))
story.append(B("Renin-Angiotensin-Aldosterone System (RAAS) → ↑ blood volume → ↑ preload → ↑ CO."))
story.append(Space(2))
story.append(H3("C. Venous Return"))
story.append(B("In steady state, CO = Venous Return (governed by Frank-Starling Law)."))
story.append(B("Factors increasing venous return: muscle pump, respiratory pump, venoconstriction, ↑ blood volume."))
story.append(Space(4))
# 7. Exercise Response
story.append(H2("7. Cardiac Output in Exercise"))
story.append(B("CO can rise up to 6-fold during strenuous exercise (≈ 25–30 L/min in trained athletes)."))
story.append(B("Achieved by: ↑ HR (up to 170–200 bpm) + ↑ contractility via sympathetic activation."))
story.append(B("Arterial vasodilation reduces afterload, aiding ejection."))
story.append(B("Venous return increases (muscle pump) → ↑ preload → ↑ SV (Frank-Starling)."))
story.append(B("O₂ demand met partly by increased CO, partly by ↑ O₂ extraction in muscles."))
story.append(Space(4))
# 8. Flowchart
story.append(H2("8. Summary Flowchart — Factors Affecting Cardiac Output"))
story.append(Flowchart(
"↑ Venous Return → ↑ EDV → ↑ Preload → ↑ SV (Frank-Starling) → ↑ CO<br/>"
"↑ Contractility (sympathetic / inotropes) → ↑ SV → ↑ CO<br/>"
"↓ Afterload (vasodilators) → ↑ SV → ↑ CO<br/>"
"↑ Heart Rate (sympathetic) → ↑ CO [but very high HR → ↓ filling → ↓ SV → no net gain]<br/>"
"CO = SV × HR → Normal ≈ 5 L/min"
))
story.append(Space(6))
story.append(Note("Ejection fraction (EF) is a key clinical measure of ventricular contractility. "
"EF < 40% defines heart failure with reduced ejection fraction (HFrEF)."))
story.append(HR())
story.append(Space(6))
story.append(Paragraph(
"Sources: Costanzo Physiology 7e | Guyton & Hall Medical Physiology | "
"Harrison's Principles of Internal Medicine 22e | Goldman-Cecil Medicine",
ParagraphStyle("source", parent=styles["Normal"], fontSize=8,
textColor=colors.grey, alignment=TA_CENTER)
))
doc.build(story)
print(f"PDF saved to: {OUTPUT_PATH}")
cd /tmp/workspace/cardiac-answers && python generate_pdf.py
ls -lh /tmp/workspace/cardiac-answers/Cardiac_Cycle_and_Cardiac_Output.pdf
Cardiac Cycle and Cardiac Output
PDF Document · PDF