Describe anatomy heart and applied aspects in relation to Forensic Medicine (Winter 2011) - Describe the blood supply and nerve supply of heart. Describe role of disruption in blood supply in relation to sudden natural death giving example. (Winter 2012) -Blood supply, Pathophysiology of atherosclerotic CAD. How will you co relate progress of the disease with cause of death at autopsy (Summer 2017) -Anatomical course of coronary arteries. Post mortem findings of MI and state its MLI (2021) -Gross and microscopic appearance of recent MI (May/June 2010) write these long answers with diagrams I can draw for md forensic medicine exam
coronary artery anatomy blood supply heart diagram

This stylized anatomical illustration depicts a human heart in an anterior view, emphasizing its gross external morphology and coronary vasculature. The organ exhibits its characteristic ovoid shape with superiorly positioned great vessels, including cross-sectional views of the aorta and pulmonary trunk. The surface anatomy highlights the intricate branching patterns of the coronary arteries and veins, demonstrating their distribution across the myocardium toward the apex. The image uses an artistic, high-contrast color palette of green, blue, and yellow to delineate anatomical boundaries and the etched texture of the cardiac tissue. Educationally, the diagram serves to illustrate the relationship between the major cardiac chambers and the superficial vascular network, particularly in the context of cardiovascular health and hemodynamic pressures. The visualization emphasizes the complexity of the organ's blood supply, which is critical for understanding conditions like hypertension and coronary artery disease.

This clinical photograph of a formalin-fixed human heart cadaver specimen illustrates a Type V anatomical variation of the coronary arterial supply to the atrioventricular (AV) node. The image displays the inferior aspect of the heart, focusing on the inferior pyramidal space. Key vessels are labeled: the circumflex branch of the left coronary artery (LCxA), the atrioventricular nodal branch (AVNb), and the inferior interventricular branch (IVb). In this specific anatomical configuration, the AVNb is seen as a distinct, thinner vessel with a pale-yellow appearance originating directly from the LCxA, which has a larger diameter and more prominent reddish-brown coloration. The IVb is positioned inferiorly, and the AVNb acts as a connecting vessel between the LCxA and the distal myocardial structures. A small schematic inset in the bottom right corner provides a simplified diagram of this branching pattern. This material is significant for cardiovascular anatomy and surgical planning, demonstrating the variability of coronary dominance and blood supply to the cardiac conduction system.

Educational medical diagram and diagnostic imagery illustrating left ventricular (LV) segmentation and coronary artery distribution based on 2015 ASE guidelines. The graphic includes an anatomical heart illustration, schematic apical views, and corresponding echocardiographic frames. The anatomical diagram color-codes the Right Coronary Artery (RCA, blue), Left Anterior Descending artery (LAD, green), and Circumflex artery (CX, pink), with striped patterns indicating overlapping territories. Three schematic diagrams represent standard echocardiographic planes: Apical Four-Chamber (A4C), Apical Two-Chamber (A2C), and Apical Long-Axis (ALX), mapping coronary blood supply to specific LV myocardial segments. Below these, three transthoracic echocardiogram frames demonstrate automated segmentation masks: Region A (apical, anterior, and anteroseptal walls) in green, Region F (inferior and inferoseptal walls) in orange, and Region L (anterolateral and inferolateral walls) in purple. This visual resource is designed to teach the correlation between coronary anatomy and regional wall motion territories in cardiac imaging.

This clinical photograph of a formalin-fixed human heart specimen demonstrates a Type IV anatomical variation of the coronary arterial supply. The image focuses on the inferior pyramidal space, showing the Right Coronary Artery (RCA) and its distal branches. Key anatomical structures labeled include the RCA, the Inferior Interventricular Branch (IVb), and a duplicated Atrioventricular Nodal Branch (AVNb). The AVNb exhibits a distinct pale, yellowish-beige color and smooth texture compared to the deeper reddish-brown, striated appearance of the RCA and IVb. The duplicated AVNb originates from the RCA in close proximity to the origin of the IVb, illustrating a specific branching pattern relevant to cardiac electrophysiology and surgical anatomy. A schematic diagram in the lower right corner provides a simplified representation of the Type IV branching configuration. The specimen highlights developmental arterial variations that are clinically significant for procedures involving the AV node or during coronary revascularization.
myocardial infarction gross microscopic pathology autopsy

This composite image illustrates the macroscopic and microscopic pathology of a fatal myocardial infarction. Panel A shows an in situ autopsy view of the pericardial cavity filled with dark, clotted blood (hemopericardium), secondary to a left ventricular rupture (white arrows). Panels B and C provide gross views of the excised heart, highlighting a transmural rupture at the apex of the left ventricle with surrounding hemorrhage and necrotic tissue discoloration. Panel D is a low-power histopathological image (H&E stain) of the myocardium near the rupture, showing coagulative necrosis, hemorrhage, and early fibroblast proliferation. Panel E shows a macroscopic cross-section of the left anterior descending (LAD) coronary artery with near-total luminal occlusion. Panel F presents a corresponding H&E-stained micrographic cross-section of the LAD, demonstrating a complex atherosclerotic plaque with rupture, significant luminal narrowing, and areas of calcification. These findings collectively demonstrate a clinical sequence of coronary occlusion leading to transmural infarction and subsequent lethal cardiac tamponade.

Gross autopsy photograph of a fixed human heart in cross-section, illustrating healed myocardial infarction involving the posterior and lateral left ventricular walls. The specimen demonstrates biventricular concentric hypertrophy with robust thickening of the left and right ventricles. The posterior papillary muscle shows scar tissue consistent with prior ischemic injury. The coronary arteries reveal atherosclerotic stenoses affecting the right coronary artery and the left coronary artery’s anterior interventricular branch (LAD), concordant with ischemic heart disease. Myocardial fibrosis replaces necrotic myocardium in infarcted regions, producing firm, pale areas against darker viable myocardium. The overall morphology supports a history of long-standing hypertensive cardiomyopathy with accompanying valvular insufficiency of the tricuspid and mitral valves, contributing to chronic hemodynamic burden. The image highlights key pathology: postinfarction scarring, papillary muscle involvement, and hypertrophic remodeling, which together predispose to functional mitral/tricuspid regurgitation and heart failure. This specimen is valuable for teaching gross anatomy, correlating macroscopic changes with coronary distribution and prior infarct patterns. Clinically, findings correlate with past hypertension, ischemic heart disease, and valvular disease; with autopsy context aiding diagnosis confirmation, research of myocardial remodeling, and education in cardiovascular pathology.

This clinical photograph displays a gross pathology heart specimen from an autopsy, illustrating an acute subendocardial-myocardial infarction. The heart is shown in a coronal dissection, revealing the internal ventricular architecture and myocardial wall. A clear demarcation is visible: the superior/basal portion of the myocardium exhibits a bright red, smooth, and glistening appearance, while the inferior and subendocardial regions transition to a darker, dusky red hue with a more granular and roughened texture. This color and textural shift corresponds to areas of myocardial necrosis and hemorrhage, likely related to systemic stressors such as heat stroke. Key anatomical features include the trabeculae carneae of the ventricular walls and the papillary muscles. A metric scale is present in the upper-right corner for size reference. This image is an educational tool for pathology students to identify gross macroscopic changes associated with myocardial ischemia and infarction in a clinical forensic context.

This composite educational image presents two gross pathology specimens from a clinical autopsy. Panel (a) displays transverse cross-sections of the heart, specifically the ventricles. Red arrows indicate extensive areas of acute myocardial infarction characterized by dark, congested, and hemorrhagic zones alongside pale, ischemic tissue involving the right ventricle and the interventricular septum. Panel (b) shows a coronal section of the brain. A red circle highlights a localized area of acute cerebral infarction. This region exhibits structural disruption and a subtle grayish-tan discoloration compared to the surrounding healthy gray and white matter. The clinical context for these findings is systemic gas embolism (GE) leading to simultaneous multi-organ vascular obstruction and subsequent infarction. The image demonstrates the catastrophic consequences of arterial air embolism on high-demand metabolic tissues like the myocardium and cerebral parenchyma, serving as an advanced resource for pathology and emergency medicine education.
atherosclerotic plaque rupture thrombus coronary artery pathology

Gross pathology photograph from an autopsy showing the heart with acute coronary occlusion. Anatomical site: right coronary artery (RCA) with heavy atherosclerotic disease and a mural thrombus occluding the lumen. Plaque morphology is lipid-rich, irregular, and yellow-brown with possible calcification. The overlying thrombus is dark reddish-brown, adherent to the plaque, and partially fills the arterial lumen, producing abrupt cessation of distal flow. Associated myocardial tissue may show early signs of infarction, such as pallor or edema in the distribution supplied by the RCA. Imaging modality and technique: macroscopic gross pathology image, en-face view of the epicardial artery from autopsy; not a radiologic study and not stained. Pathophysiology: sudden plaque rupture with superimposed mural thrombosis causing acute myocardial infarction (AMI) and death within 72 hours. Clinical correlation: this lesion represents a classic mechanism of fatal coronary artery disease, leading to hemodynamic compromise and ventricular dysfunction. Diagnostic significance: demonstrates the chain of events from atherosclerotic plaque disruption to occlusive thrombosis and myocardial necrosis, illustrating the basis for sudden cardiac death in CAD. Differential considerations include plaque rupture with thrombosis, coronary vasospasm, embolic occlusion, and multivessel atherosclerosis. Educational value: aids understanding of MI pathogenesis, coronary thrombosis, and autopsy-based cardiovascular pathology.

This is a light microscopic histopathology image of a human left anterior descending (LAD) coronary artery segment from autopsy. The specimen shows an atherosclerotic plaque with rupture of the fibrous cap and overlying luminal thrombosis, resulting in near-complete occlusion of the arterial lumen over approximately 1.0 cm. The arterial wall reveals intimal thickening with a lipid-rich necrotic core, cholesterol clefts, and inflammatory cells. The ruptured plaque exposes subendothelial thrombogenic material, provoking platelet aggregation and formation of an occlusive red thrombus that markedly narrows the lumen. The thrombus appears organized with layered eosinophilic material and fibrin, consistent with thrombotic components seen in acute coronary syndromes. The surrounding media may show early degenerative changes typical of atherosclerosis. This lesion corresponds to a fatal acute myocardial infarction in a patient with a history of ischemic heart disease and prior CAD. Clinically, the finding supports sudden cardiac death due to acute coronary occlusion from plaque rupture. The image emphasizes the pathophysiology of myocardial infarction: plaque instability, thrombosis, rapid flow limitation, and myocardial ischemia. It provides a classic autopsy correlate for education, teaching, and research on coronary atherosclerosis, plaque rupture, thrombosis, and sudden death. This histology image is ideal for autopsy teaching and cardiac pathology research.

Imaging modality: Histopathology - light microscopy of an intact coronary arterial cross-section, stained with H&E. Specimen location: Left anterior descending coronary artery (LAD), proximal to mid-segment, from an adult male with known ischemic heart disease who died suddenly. Observed features: atherosclerotic plaque rupture with overlying luminal thrombosis; the lumen is nearly occluded over a 1.0 cm segment. The plaque shows a lipid-rich necrotic core and a thin, disrupted fibrous cap; the intima is thickened with yellowish plaque. The thrombus is adherent to the plaque rupture site and extends into the lumen, composed of platelets, fibrin, erythrocytes; the arterial wall demonstrates media degeneration and intimal atherosclerosis. The overall morphology is consistent with acute coronary thrombosis leading to myocardial ischemia and sudden death; histology may reveal early myocardial changes if present elsewhere. Diagnostic significance: this pattern explains sudden cardiac death due to acute myocardial infarction from an occlusive coronary thrombus following plaque rupture; differential considerations include spontaneous coronary dissection, vasospastic occlusion, or embolic events; clinical correlation with ischemic heart disease history supports the infarction mechanism. This image is valuable for education on pathophysiology of plaque rupture, thrombus formation, and fatal acute coronary syndrome; relevant to cardiology, pathology, and medical education.
heart anatomy nerve supply autonomic cardiac innervation

This medical anatomical diagram illustrates the autonomic innervation of the human heart, detailing both the parasympathetic and sympathetic pathways. The parasympathetic pathway is represented by a purple line originating from the medulla oblongata within the brainstem; these preganglionic fibers travel via the vagus nerve to synapse at the cardiac fat pads (ganglionated plexi) located on the epicardial surface. The sympathetic pathway is depicted in green, showing the circuit from the spinal cord to the paravertebral ganglia. From these ganglia, postganglionic sympathetic fibers project to the base of the heart and distribute into the myocardium. Key anatomical structures labeled include the medulla oblongata, cardiac fat pads, spinal cord, and paravertebral ganglia. The diagram serves as an educational tool for understanding the neural regulation of cardiac performance, specifically the origin and trajectory of autonomic fibers that modulate heart rate and contractility.

This medical illustration depicts the Autonomic Nervous System (ANS) pathways connecting the brainstem to the heart. A sagittal section of the human brain shows the medulla oblongata as the origin for both parasympathetic and sympathetic innervation. The Vagus nerve (parasympathetic), color-coded in purple, is shown descending from the brainstem to the heart, where it branches to innervate the atria and ventricles; text annotations indicate its role in decreasing heart rate. The sympathetic cardiac nerves, color-coded in red, originate from the same region and follow a parallel descending path, branching across the cardiac tissue; text labels specify their role in increasing both heart rate and the force of contraction. The diagram illustrates the functional antagonism between the two branches of the ANS in cardiac regulation, highlighting the primary innervation sites at the sinoatrial node, atrioventricular node, and the myocardium.

Educational medical visualization detailing cardiac sympathetic innervation in a mouse model at embryonic day E18.5. Panels A, B, and C present immunohistochemical staining images across four experimental groups: Control non-diabetic (non-DIA), Control diabetic (DIA), Hif1a conditional knockout (CKO) non-DIA, and Hif1aCKO DIA. The images utilize double labeling with Tyrosine Hydroxylase (TH, magenta), a sympathetic neuron marker, and Class III β-tubulin (TUJ1, green), a pan-neuronal marker. Row A shows a posterior view of the whole heart, Row B provides a high-magnification detail of the apex, and Row C displays an apical view. The visual evidence shows a dense, branching plexus of nerve fibers in the non-DIA Control, which becomes progressively sparse in the DIA and Hif1aCKO groups. The Hif1aCKO DIA heart exhibits the most severe denervation, with nearly complete loss of apical TH+ fibers. Panels D and E include bar graphs quantifying the density of TH+ and TUJ1+ innervation as a percentage of heart area, with statistical significance indicated by asterisks, demonstrating the synergistic negative impact of Hif1a deficiency and maternal diabetes on autonomic cardiac development.
AORTA PULMONARY TRUNK
| |
SVC----+----------+
| BASE |
[RA] | | [LA]
-------+ ATRIA +-------
| |
[RIGHT | CORONARY | [LEFT
VENTRICLE| SULCUS | VENTRICLE]
-------+-----------+-------
|
APEX (LV)
(5th ICS, MCL)
| Branch | Territory Supplied |
|---|---|
| SA nodal artery (55% of cases) | SA node |
| Right marginal artery | Right ventricular free wall |
| Posterior descending artery (PDA) - right dominant | Posterior 1/3 of IVS, inferior wall LV |
| AV nodal artery (80% from RCA) | AV node |
| Posterior left ventricular branches | Inferior LV wall |
AORTA
/ \
RCA LCA (short main stem)
| |
| LAD ---- Diagonal branches
R. marginal | (anterolateral LV)
| Septal perforators
Posterior | (IVS anterior 2/3)
descending LCx
(PDA) ------> Obtuse marginal
(right dominant) (lateral LV)


Normal artery
↓
Endothelial injury
↓
Monocyte adhesion → Foam cells → FATTY STREAK
↓
SMC migration + proliferation
↓
FIBROUS PLAQUE (fibrous cap + lipid core)
↓
Calcification, intraplaque hemorrhage
↓
COMPLICATED PLAQUE
↓
Plaque rupture → Thrombus → CORONARY OCCLUSION
↓
Myocardial Infarction


A 45-year-old businessman found dead at his desk. No witnessed collapse, no external injuries. PME shows: Heart weight 450 g, LAD shows 90% stenosis with a fresh thrombus, anterior LV wall soft and pale yellow. Microscopy: Coagulative necrosis with contraction bands and neutrophil infiltration. Cause of death: Acute MI due to atherosclerotic CAD → Ventricular fibrillation → Sudden natural death.
| Time After Onset | Gross Appearance |
|---|---|
| 0-12 hours | Usually no visible change (normal appearance). Gross normal. Tetrazolium staining (TTC) shows pale/white area. |
| 12-24 hours | Subtle pallor/pallid discoloration, slight softening, slight edema |
| 1-3 days | Pallor + yellow-tan discoloration, soft and mushy, hyperemic rim (red border of viable tissue) |
| 3-7 days | Hyperemic rim becomes prominent; center yellow/tan and soft (maximum softening); wall at risk of rupture |
| 1-2 weeks | Gelatinous, depressed, red-grey area; beginning ingrowth of granulation tissue |
| 2-8 weeks | Grey-white scar tissue replacing necrotic muscle; progressively firmer |
| >8 weeks (2 months) | Dense, fibrous, white scar (firm, contracted); wall may thin (LV remodeling) |
Acute (3 days): Healing (2 weeks): Old (8 weeks+):
[Cross section LV] [Cross section LV] [Cross section LV]
Pale/Yellow-tan center Red-grey depressed White fibrous scar
Red hyperemic rim ingrowth of granulation Thin wall, contracted
Soft/mushy tissue at edges Firm


| Time | Microscopic Findings |
|---|---|
| 0-30 min | No light microscopic changes. Only EM changes: mitochondrial swelling, glycogen depletion |
| 1-4 hours | Wavy fibers (stretching of dead myocytes by adjacent contracting viable cells); early cytoplasmic eosinophilia |
| 4-12 hours | Coagulative necrosis begins; increased eosinophilia; nuclear pyknosis; contraction band necrosis (in reperfused areas) |
| 12-24 hours | Neutrophil infiltration begins (margination); nuclear karyolysis; cytoplasm deeply eosinophilic; loss of cross-striations |
| 1-3 days | Peak neutrophil infiltration; myocytes show "ghost cells" (no nuclei, preserved outline); interstitial edema |
| 3-7 days | Neutrophils begin to die; macrophage infiltration begins; phagocytosis of dead cells (myocytolysis); tissue becomes soft (risk of rupture) |
| 1-2 weeks | Granulation tissue formation begins at margins; capillary ingrowth; fibroblast proliferation; lymphocytes |
| 2-8 weeks | Progressive fibrosis; collagen deposition replaces granulation tissue |
| >8 weeks | Dense fibrous scar (collagen type I); no viable myocytes in scar area |
0-4 hrs: 12-24 hrs: 3-7 days: 2 weeks+:
Normal nuclei Neutrophils Macrophages Granulation
↓ ↓ ↓ tissue
Wavy fibers Karyolysis Ghost cells ↓
Eosinophilia Loss of nuclei Myocytolysis Fibrous scar
| Histology | Age of Infarct |
|---|---|
| Normal / wavy fibers only | < 6-12 hours |
| Coagulative necrosis + neutrophils | 12-72 hours |
| Macrophages + phagocytosis | 3-7 days |
| Granulation tissue | 1-2 weeks |
| Fibrous scar | > 6-8 weeks |
Ia. Ventricular fibrillation
Ib. Acute myocardial infarction (anterior wall, transmural)
Ic. Occlusive coronary thrombosis superimposed on atherosclerosis
II. Hypertensive heart disease, Type 2 Diabetes Mellitus
| Stage of CAD | Pathological Finding | Clinical/Forensic Outcome |
|---|---|---|
| Fatty streak | Foam cells in intima | Subclinical; no symptoms |
| Fibrous plaque | 30-50% stenosis | Stable angina on exertion |
| Complicated plaque | >70% stenosis | Unstable angina, exertional ischemia |
| Plaque rupture + thrombus | Acute occlusion | STEMI, unstable angina |
| Complete occlusion | Transmural infarction | Fatal VF, cardiogenic shock |
| Free wall softening (day 3-5) | Maximum neutrophil infiltration | Rupture → tamponade → death |
| Old scar + aneurysm | Fibrous scar, LV aneurysm | Heart failure, thrombus, sudden arrhythmic death |
| Artery | Territory | Infarct Location | ECG Changes |
|---|---|---|---|
| LAD | Ant. LV, ant. 2/3 IVS, RBB | Anterior STEMI | V1-V4 ST elevation |
| RCA | Inf. LV, post. 1/3 IVS, AV node | Inferior STEMI | II, III, aVF |
| LCx | Lateral LV wall | Lateral STEMI | I, aVL, V5-V6 |
| RCA + RV branch | RV free wall | RV infarct | V3R-V4R |
Sources: Robbins & Cotran Pathologic Basis of Disease; Robbins & Kumar Basic Pathology; Goldman-Cecil Medicine; Braunwald's Heart Disease
Discuss Pathophysiology of Asphyxia (May/June 2009), add a note on hanging (2021) (PII 2017 sup) 2. Describe biochemical changes occurring in blood and CSF after death (May/June 2009) 3. - Describe anatomy heart and applied aspects in relation to Forensic Medicine (Winter 2011) - Describe the blood supply and nerve supply of heart. Describe role of disruption in blood supply in relation to sudden natural death giving example. (Winter 2012) -Blood supply, Pathophysiology of atherosclerotic CAD. How will you co relate progress of the disease with cause of death at autopsy (Summer 2017) -Anatomical course of coronary arteries. Post mortem findings of MI and state its MLI (2021) -Gross and microscopic appearance of recent MI (May/June 2010) 4. Define shock. Briefly describe its various types. Discuss primary shock. (May/June 2010) 5. Describe “Circle of Willis” with reference to pathology and medicolegal aspects of various intracranial haemorrhages. (Winter 2011) 6. Describe the anatomy of external genitalia of virgin grown up female. Describe different changes occurring in external genitalia due to sexual intercourse. (Winter 2012) 7. Describe blood supply of brain. Define Head Injury. Skull fractures and MLI of IC Haemorrhages. (Summer 2014) 8. Describe briefly the Autonomous Nervous System, Sudden death initiated through ANS. (May 2013) (Summer 2015) 9. ANS, Acute Neurogenic Shock (Summer 2015) 10. Discuss the role of dentistry in forensic medicine. (Summer 2015) 11. Describe the concept of Brain Stem Death in relation to THOA Act 1994. Describe the procedure and diagnosis and certification of brain stem death. (Summer 2017) (P III Winter 2019) 12. Describe DNA profiling. What are its legal, moral and social implication. (Winter 2019) 13. Discuss Pathophysiology of Starvation. (Summer 2022) 14. Discuss the medicolegal aspects of Hospital Acquired Infection. (Summer 2022)
asphyxia hanging neck ligature autopsy pathology

This forensic clinical photograph depicts the posterior aspect of the neck and head of a deceased individual during a medicolegal autopsy. The primary finding is a prominent, broad ligature mark located high on the neck, above the level of the thyroid cartilage. The mark is characterized by dark, parchment-like skin discoloration and bruising, appearing oblique and discontinuous at the back, which is a classic finding in cases of hanging where the knot creates a gap in the impression. The skin surrounding the furrow remains largely intact without significant laceration. The image illustrates the external signs of mechanical asphyxia, serving as an educational resource for forensic pathology and trauma assessment. Key features include the ligature’s width, its anatomical position relative to the laryngeal structures, and the characteristic lack of complete encirclement.

Clinical photograph from a forensic autopsy showing two views (A and B) of a ligature mark on the neck of a deceased adult. View A displays the anterior aspect of the neck, revealing a well-defined, horizontal, and incomplete ligature furrow located above the level of the thyroid cartilage. The mark is reddish-brown with a parchment-like, depressed appearance, indicating focal pressure. View B shows the lateral aspect of the neck, illustrating the oblique and ascending trajectory of the mark as it travels toward the point of suspension. The surrounding skin exhibits postmortem changes, but the mark itself is clearly demarcated and does not encircle the neck completely, a finding consistent with typical hanging. These images are used in forensic medicine to demonstrate classic external signs of mechanical asphyxia, highlighting the morphology, location, and directionality of ligature marks essential for determining the mechanism and manner of death.

This forensic clinical photograph depicts an autopsy examination of a human neck, illustrating findings consistent with suspension hanging. A prominent, dark brown, parchment-like ligature mark is visible on the right lateral aspect of the neck. The mark exhibits an oblique, upward orientation toward the mastoid region, characteristic of antemortem compression. A surgical dissection flap has been reflected to expose the underlying subcutaneous tissue and superficial fascia. This underlying tissue appears white, glistening, and yellowish, without evidence of significant subcutaneous or intramuscular hemorrhage, which is a key diagnostic feature in certain forensic assessments of ligature-related injuries. The image serves as an educational resource for forensic pathology, specifically demonstrating the external morphology of a ligature furrow and the corresponding internal examination of neck structures during a medicolegal postmortem.
Circle of Willis cerebral arteries anatomy diagram intracranial haemorrhage

A side-by-side comparison featuring an anatomical diagram (A) and a diagnostic image (B) of the intracranial cerebral vasculature. Panel A shows a 3D schematic representation of the Circle of Willis, highlighting the circular anastomosis of vessels including the Anterior Communicating Artery (ACOA), Anterior Cerebral Artery (ACAE/ACAD), and Posterior Communicating Arteries. Panel B displays a contrast-enhanced Transcranial Doppler (TCD) ultrasound obtained through the right transtemporal window. The ultrasound image utilizes power Doppler/angio mode to visualize the vascular network, with labels identifying the Middle Cerebral Artery (ACMD/ACME), Anterior Cerebral Artery (ACAE/ACAD), and Posterior Cerebral Artery (ACPD/ACPE) segments. The composite demonstrates the clinical application of contrast-enhanced ultrasound in mapping cerebral hemodynamics and verifying the patency of the collateral circulation within the Circle of Willis. This educational material is relevant for neurology and radiology specialties, focusing on neurovascular anatomy and diagnostic imaging techniques.

This composite diagnostic image illustrates intracranial vascular anatomy and cerebral perfusion dynamics in a patient with internal carotid artery (ICA) stenosis. The top row features three panels: a grayscale axial Magnetic Resonance Angiogram (MRA) showing the Circle of Willis, a schematic anatomical diagram labeling the major arteries (ACA, A2, ACo, ICA, MCA, P1, P2, BA, PCA), and a 3D-reconstructed angiogram highlighting significant asymmetry in the cerebral vasculature. The bottom row displays two axial Perfusion MRI (P-MR) maps using a colorimetric scale, where blue/green indicates lower perfusion and red/orange indicates higher perfusion. These maps compare baseline cerebral blood flow with post-Acetazolamide challenge images. Circular Regions of Interest (ROI) are marked on both cerebral hemispheres to quantify perfusion changes. The Acetazolamide-challenged map (right) demonstrates a reduction in cerebrovascular reserve in the affected hemisphere, characterized by a lack of compensatory hyperemic response compared to the contralateral side. This educational material is relevant for neuroradiology and neurology, specifically for evaluating hemodynamic compromise in patients with high-grade carotid artery occlusion.

This composite educational graphic depicts intracranial vascular anatomy and the distribution of cerebrovascular pathology. On the far left, a labeled anatomical diagram of the Circle of Willis identifies major arteries: Internal Carotid (ICA), Middle Cerebral (MCA), Anterior Cerebral (ACA), Posterior Cerebral (PCA), Basilar (BA), and Vertebral (VA) arteries. Panels A-D use simplified vascular maps to show frequency data (N=1,597): (A) Large Vessel Stenosis (>50%), (B) Large Vessel Occlusions (LVO), (C) LVO with corresponding Diffusion-Weighted Imaging (DWI) lesions, and (D) LVO without corresponding DWI lesions. The data indicates higher rates of occlusion in the MCA (14%) and VA (12%) compared to stenosis rates. Panels C and D further differentiate clinical presentations by correlating MRA findings with ischemic tissue changes on MRI. Panel E is a data table summarizing the frequency and percentage of specific LVOs categorized by the time interval from stroke onset to MRI (0-1 days, 2-13 days, and >14 days). This resource is designed for neurology and radiology students to understand the epidemiological distribution of ischemic stroke mechanisms.
DNA fingerprinting profiling gel electrophoresis forensic

This diagnostic molecular image illustrates a pulsed-field gel electrophoresis (PFGE) analysis used for the genetic fingerprinting of bacterial isolates. The gel consists of 15 lanes: two flanking control lanes (labeled 'B') containing Salmonella Braenderup H9812 DNA size standards, and 13 internal lanes (1-13) containing chromosomal DNA from Salmonella enterica serovar Virchow isolates. The image displays characteristic macrorestriction patterns consisting of multiple horizontal fluorescent bands of varying molecular weights. The visual similarity across lanes 1-13, with only minor 1-2 band differences observed in specific samples (e.g., lanes 5, 9, and 10), demonstrates a high degree of genetic relatedness or clonality among these rmtC-positive clinical isolates. This laboratory technique is essential in infectious disease epidemiology to track the transmission of antibiotic-resistant pathogens and identify potential outbreak clusters by comparing genomic patterns across different clinical and environmental sources.

This Comparison Chart illustrates the inter-run precision of a forensic DNA analysis system, specifically an automated STR (Short Tandem Repeat) profiling system. The graphic consists of three vertically stacked scatter plots, each representing a different fluorescent dye channel used in capillary electrophoresis. The x-axis lists various genetic loci and specific alleles (e.g., D3S1358, TH01, Penta E, D5S818, CSF1PO, Penta D, vWA, TPOX, FGA), while the y-axis measures the Fragment Size Standard Deviation in bases (b), ranging from 0.0 to 0.15. Across all dye channels, the standard deviation remains low and stable for shorter fragments, typically between 0.01 and 0.05 bases. A visible upward trend in standard deviation is observed for larger alleles, particularly evident in the middle and bottom plots for the Penta D and FGA loci, where values approach or exceed 0.10 bases. This data demonstrates system reproducibility and high-precision sizing across 75 independent runs on seven different instruments, ensuring reliable allelic designation within the validated sizing threshold of 0.16 bases.
ASPHYXIA
|
|----MECHANICAL (External compression / obstruction)
| |-- Hanging
| |-- Strangulation (ligature / manual)
| |-- Suffocation
| |-- Traumatic asphyxia
| |-- Drowning
|
|----ENVIRONMENTAL (Atmospheric oxygen deficiency)
| |-- Vitiated atmosphere (mines, wells)
| |-- High altitude
|
|----TOXIC (Oxygen transport/utilization failure)
|-- CO poisoning
|-- Cyanide poisoning
Obstruction to respiration
↓
Hypoxia + Hypercapnia
↓
┌────────────────┐
│ Stage 1: │ ← Stimulation phase (tachycardia, hypertension, struggle)
│ Dyspnea │
└───────┬────────┘
↓
┌────────────────┐
│ Stage 2: │ ← Excitation phase (convulsions, involuntary evacuation)
│ Convulsions │
└───────┬────────┘
↓
┌────────────────┐
│ Stage 3: │ ← Exhaustion phase (bradycardia, gasping)
│ Exhaustion │
└───────┬────────┘
↓
┌────────────────┐
│ Stage 4: │ ← Respiratory arrest
│ Apnea │
└───────┬────────┘
↓
┌────────────────┐
│ Stage 5: │ ← Cardiac arrest → DEATH
│ Death │
└────────────────┘
| Type | Description |
|---|---|
| Complete/Typical hanging | Body fully suspended, feet off ground |
| Incomplete/Partial hanging | Body partially supported (kneeling, sitting, lying); weight of head (~4-5 kg) sufficient |
| Judicial/Long-drop hanging | Sudden forceful drop; dislocation of C2-C3 (fracture of hangman); death by cervical cord transection |
| Typical hanging | Knot at back of neck; noose below chin; classical V-shaped mark |
| Atypical hanging | Knot at other positions |

Time after death:
0h 6h 12h 24h 48h 72h
|------|------|------|------|------|
K⁺ ────────────────────────────── Rising continuously
Glucose ──── ↓ rapidly → undetectable
Lactate ─────────── Rising
Na⁺ ─────────── Falling slowly
Urea ────────────────── Rising
Enzymes ─────────────────── Rising (autolysis)
| Parameter | Change | Reference Value | Use |
|---|---|---|---|
| Potassium | Rises linearly | ~7.1 + 14.1 × PMI (hrs) | Most reliable PMI marker |
| Sodium | Falls | Indicates decomposition | |
| Chloride | Falls | ||
| Glucose | Falls → zero | ||
| Urea | Rises | Parallels blood | |
| Hypoxanthine | Rises | Used in early PMI |
| Parameter | Blood | Vitreous | CSF |
|---|---|---|---|
| Potassium | Rises | Rises (most reliable) | Rises |
| Sodium | Falls | Falls | Falls |
| Glucose | Falls rapidly | Falls | Falls rapidly |
| Lactate | Rises | Rises | Rises |
| Urea | Rises | Rises | Rises |
| pH | Falls | Falls | Falls |
| Type | CO | SVR | Preload | Cause |
|---|---|---|---|---|
| Hypovolemic | ↓ | ↑ | ↓ | Hemorrhage, burns |
| Cardiogenic | ↓ | ↑ | ↑ | MI, tamponade |
| Septic (warm) | ↑ | ↓ | ↓ | Sepsis |
| Neurogenic | ↓ | ↓ | ↓ | Spinal injury |
| Anaphylactic | ↑↓ | ↓ | ↓ | Allergy |
Precipitating event (hemorrhage/sepsis/MI)
↓
Low cardiac output / low SVR
↓
Tissue hypoperfusion
↓
Anaerobic metabolism → Lactic acidosis
↓
Endothelial injury → Vasodilation → Vascular leak
↓
DIC, Organ dysfunction
↓
MODS → Death
| Reflex | Trigger | Mechanism |
|---|---|---|
| Carotid sinus reflex | Neck pressure, tight collar | Vagal → cardiac arrest |
| Diving reflex | Cold water on face | Bradycardia, apnea |
| Laryngeal reflex | Foreign body, intubation | Laryngospasm + bradycardia |
| Rectal reflex | Rectal instrumentation | Vagal → cardiac arrest |
| Ocular cardiac reflex | Eye pressure/surgery | Bradycardia |
ACA (L)---AComA---ACA (R)
| |
ICA (L) ICA (R)
| |
PComA (L) PComA (R)
| |
PCA (L)---Basilar---PCA (R)
|
Vertebrals (x2)

| Feature | EDH | SDH | SAH | ICH |
|---|---|---|---|---|
| Vessel | Mid. meningeal A | Bridging veins | Berry aneurysm | Lenticulostriate |
| Space | Epidural | Subdural | Subarachnoid | Brain parenchyma |
| Shape | Biconvex | Crescent | Basal cisterns | Irregular |
| Lucid interval | Classic | Variable | Absent | Absent |
| Cause | Trauma | Trauma/Shaking | Spontaneous/Trauma | Hypertension |
| Type | Description |
|---|---|
| Annular/Ring | Complete ring, central opening |
| Cribriform | Multiple small openings (sieve-like) |
| Septate | Opening divided by a band/septum |
| Fimbriated/Denticular | Irregular scalloped margin |
| Subseptate | Incomplete septum |
| Imperforate | No opening (pathological) - causes haematocolpos |
Mons pubis
|
[Labia Majora]
/ \
[Labia Minora] [Labia Minora]
|
[Clitoris] (prepuce above)
|
[Urethral meatus]
|
[Vaginal introitus] → [HYMEN]
| |
[Bartholin's Bartholin's
gland opening] gland opening]
|
[Posterior fourchette]
| Stage | Appearance |
|---|---|
| Intact hymen | No lacerations, smooth margin |
| Fresh laceration (0-72 hrs) | Bleeding, red, edematous, irregular |
| Recent (3-14 days) | Healing edges, organized granulation |
| Old laceration (healed) | Smooth rounded/heaped margins; remnants = carunculae myrtiformes |
SYMPATHETIC PARASYMPATHETIC
(T1-L2) (CN III, VII, IX, X / S2-S4)
| |
Paravertebral chain ganglia Terminal ganglia
| |
Norepinephrine (post) Acetylcholine (post)
| |
"Fight or Flight" "Rest and Digest"
| Reflex | Site | Result |
|---|---|---|
| Carotid sinus | Neck | Cardiac arrest |
| Oculocardiac | Eye | Bradycardia |
| Laryngeal | Larynx | Laryngospasm + arrest |
| Bezold-Jarisch | Heart | Bradycardia, hypotension |
| Diving | Nasopharynx + cold water | Bradycardia, apnea |
| Feature | Neurogenic | Hypovolemic | Septic |
|---|---|---|---|
| Heart rate | Bradycardia | Tachycardia | Tachycardia |
| Skin | Warm, pink | Cold, clammy | Warm (early) |
| SVR | ↓ | ↑ | ↓ |
| Cause | Spinal injury | Hemorrhage | Infection |
| Pupils | Dilated | Normal | Normal |
| Age Group | Method |
|---|---|
| 0-6 years | Primary dentition eruption |
| 6-13 years | Mixed dentition; permanent tooth eruption |
| 13-17 years | Third molar development |
| Adults | Gustafson's method (6 criteria) |
| Test | Stimulus | Normal Response | Absent in BSD |
|---|---|---|---|
| Pupillary reflex | Bright light | Pupil constricts | Fixed dilated pupils (no constriction) |
| Corneal reflex | Touch cornea | Blink | No blink |
| Vestibulo-ocular (caloric) | Ice cold water in ear | Eye movement toward stimulus | No eye movement |
| Oculo-cephalic reflex | Head turned | Eyes remain fixed in skull | Absent (eyes move with head) |
| Gag/cough reflex | Stimulate posterior pharynx/trachea | Gag, cough | No response |
| Facial pain response | Supraorbital pressure | Grimace | No response |
| Apnoea test | Disconnect from ventilator; allow pCO₂ to rise to >60 mmHg | Spontaneous breathing | No breathing attempt |
PRECONDITIONS MET?
↓
Test 1 - ALL reflexes absent?
↓
Wait ≥ 6 hours
↓
Test 2 - ALL reflexes absent?
↓
BRAIN STEM DEATH CONFIRMED
↓
Time of BSD = Time of LEGAL DEATH
Crime Scene Sample
↓
Extract DNA
↓
PCR Amplification (STR loci)
↓
Capillary Electrophoresis
↓
Allele Pattern (DNA Profile)
↓
Compare with suspect/database
↓
Match/No Match
↓
Probability calculation (Random match probability)
| Parameter | Change in Starvation |
|---|---|
| Blood glucose | Falls (hypoglycemia late stage) |
| Ketones | Rise (ketonemia, ketonuria) |
| Insulin | Falls |
| Glucagon | Rises |
| Free fatty acids | Rise |
| Albumin | Falls (late) → edema |
| BMR | Falls (adaptation) |
| T3/T4 | Falls (reverse T3 rises) |
| Cortisol | Rises |
| Growth hormone | Rises (anti-insulin, promotes lipolysis) |
| Type | Common Organisms |
|---|---|
| Urinary tract infection (UTI) - most common (40%) | E. coli, Klebsiella, Pseudomonas |
| Surgical site infection (SSI) | S. aureus (MRSA), E. coli |
| Pneumonia (VAP - ventilator associated) | Pseudomonas, Acinetobacter, MRSA |
| Bloodstream infection (CLABSI) | Staphylococci, Candida |
| Clostridioides difficile diarrhea | C. difficile (after antibiotics) |
| Q | Topic | Key Forensic Point |
|---|---|---|
| 1 | Asphyxia/Hanging | 5 stages; petechiae; ligature mark oblique in hanging; MLI - manner of death |
| 2 | Biochemical changes | Vitreous K⁺ most reliable; rises 1 mmol/L/hr |
| 3 | Heart anatomy/CAD/MI | LAD most common; TTC staining; histological dating of MI |
| 4 | Shock | Primary shock = bradycardia + vasovagal; diagnosis of exclusion at PM |
| 5 | Circle of Willis/ICH | Berry aneurysm at AComA; EDH = biconvex; SDH = crescent |
| 6 | Female genitalia | Hymenal laceration at 5 & 7 o'clock; carunculae = healed remnants |
| 7 | Brain/Head injury | Contre-coup; Battle's sign; raccoon eyes = basal fracture |
| 8/9 | ANS/Neurogenic shock | Neurogenic = bradycardia + warm skin; vasovagal = no PM findings |
| 10 | Forensic dentistry | Gustafson's method; DVI; bite marks; DNA from pulp |
| 11 | Brain stem death/THOA | All 6 reflexes absent + apnoea test; 4 doctors certify; THOA 1994 |
| 12 | DNA profiling | STR-PCR; CODIS 20 loci; Jeffreys 1984; Article 20(3) protection |
| 13 | Starvation | Brown atrophy of heart; gelatinous bone marrow; homicidal neglect |
| 14 | HAI/Nosocomial | Bolam test; res ipsa loquitur; blood transfusion liability; CPA 2019 |
| Q# | Topic | Exam Year |
|---|---|---|
| Q1 | Pathophysiology of Asphyxia + Note on Hanging | 2009, 2021, 2017 |
| Q2 | Biochemical changes in Blood & CSF after death | 2009 |
| Q3 | Heart anatomy, blood/nerve supply, CAD, MI | 2011-2021 (from previous session) |
| Q4 | Shock - definition, types, primary shock | 2010 |
| Q5 | Circle of Willis + Intracranial Haemorrhages | 2011 |
| Q6 | Female external genitalia + changes from intercourse | 2012 |
| Q7 | Brain blood supply + Head injury + Skull fractures + IC haemorrhages | 2014 |
| Q8/9 | ANS anatomy + Sudden death through ANS + Neurogenic shock | 2013, 2015 |
| Q10 | Role of dentistry in Forensic Medicine | 2015 |
| Q11 | Brain stem death + THOA Act 1994 | 2017, 2019 |
| Q12 | DNA profiling + legal/moral/social implications | 2019 |
| Q13 | Pathophysiology of Starvation | 2022 |
| Q14 | Medicolegal aspects of Hospital Acquired Infection | 2022 |
Sources: Robbins & Kumar Basic Pathology; Robbins, Cotran & Kumar Pathologic Basis of Disease; Sabiston Textbook of Surgery; Goldman-Cecil Medicine; Guyton & Hall Medical Physiology
I can’t view the answers
mkdir -p /tmp/workspace/forensic-medicine && ls /tmp/workspace/forensic-medicine/
~/forensic-medicine/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, Table, TableStyle, HRFlowable, PageBreak
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_JUSTIFY
OUTPUT = "/tmp/workspace/forensic-medicine/MD_Forensic_Medicine_Long_Answers.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=2*cm,
leftMargin=2*cm,
topMargin=2*cm,
bottomMargin=2*cm,
title="MD Forensic Medicine - Long Answer Bank",
author="Orris AI"
)
styles = getSampleStyleSheet()
# Custom styles
title_style = ParagraphStyle('MainTitle', parent=styles['Title'],
fontSize=18, textColor=colors.HexColor('#1a237e'),
spaceAfter=8, alignment=TA_CENTER, fontName='Helvetica-Bold')
h1_style = ParagraphStyle('H1', parent=styles['Heading1'],
fontSize=14, textColor=colors.HexColor('#b71c1c'),
spaceAfter=6, spaceBefore=14, fontName='Helvetica-Bold',
borderPad=4, backColor=colors.HexColor('#fff3e0'))
h2_style = ParagraphStyle('H2', parent=styles['Heading2'],
fontSize=12, textColor=colors.HexColor('#1565c0'),
spaceAfter=4, spaceBefore=10, fontName='Helvetica-Bold')
h3_style = ParagraphStyle('H3', parent=styles['Heading3'],
fontSize=11, textColor=colors.HexColor('#2e7d32'),
spaceAfter=3, spaceBefore=8, fontName='Helvetica-Bold')
body_style = ParagraphStyle('Body', parent=styles['Normal'],
fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY,
fontName='Helvetica')
bullet_style = ParagraphStyle('Bullet', parent=styles['Normal'],
fontSize=9.5, leading=14, leftIndent=16, spaceAfter=2,
bulletIndent=4, fontName='Helvetica')
code_style = ParagraphStyle('Code', parent=styles['Normal'],
fontSize=8.5, leading=12, fontName='Courier',
backColor=colors.HexColor('#f5f5f5'), leftIndent=10,
rightIndent=10, spaceBefore=4, spaceAfter=4,
borderColor=colors.grey, borderWidth=0.5, borderPad=5)
def b(text):
"""Bold inline"""
return f'<b>{text}</b>'
def h1(text):
return Paragraph(text, h1_style)
def h2(text):
return Paragraph(text, h2_style)
def h3(text):
return Paragraph(text, h3_style)
def p(text):
return Paragraph(text, body_style)
def bp(text):
return Paragraph(f"• {text}", bullet_style)
def code(text):
text = text.replace('&', '&').replace('<', '<').replace('>', '>')
return Paragraph(text, code_style)
def hr():
return HRFlowable(width="100%", thickness=0.5, color=colors.grey, spaceAfter=4, spaceBefore=4)
def sp(n=6):
return Spacer(1, n)
def make_table(headers, rows, col_widths=None):
data = [headers] + rows
if col_widths is None:
n = len(headers)
col_widths = [16.6*cm/n] * n
t = Table(data, colWidths=col_widths)
t.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,0), 9),
('ALIGN', (0,0), (-1,-1), 'LEFT'),
('FONTNAME', (0,1), (-1,-1), 'Helvetica'),
('FONTSIZE', (0,1), (-1,-1), 8.5),
('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#e8eaf6')]),
('GRID', (0,0), (-1,-1), 0.4, colors.grey),
('VALIGN', (0,0), (-1,-1), 'TOP'),
('TOPPADDING', (0,0), (-1,-1), 3),
('BOTTOMPADDING', (0,0), (-1,-1), 3),
('LEFTPADDING', (0,0), (-1,-1), 4),
]))
return t
story = []
# ---- COVER PAGE ----
story.append(sp(60))
story.append(Paragraph("MD FORENSIC MEDICINE", title_style))
story.append(Paragraph("Complete Long Answer Bank", ParagraphStyle('sub', parent=styles['Normal'],
fontSize=14, textColor=colors.HexColor('#37474f'), alignment=TA_CENTER, spaceAfter=6)))
story.append(sp(10))
story.append(Paragraph("Exam Years: 2009 – 2022", ParagraphStyle('sub2', parent=styles['Normal'],
fontSize=12, textColor=colors.HexColor('#78909c'), alignment=TA_CENTER)))
story.append(sp(20))
story.append(hr())
story.append(sp(10))
story.append(Paragraph("TOPICS COVERED:", ParagraphStyle('toc_title', parent=styles['Normal'],
fontSize=12, fontName='Helvetica-Bold', textColor=colors.HexColor('#1a237e'), alignment=TA_CENTER)))
story.append(sp(8))
toc_data = [
["Q1", "Pathophysiology of Asphyxia + Note on Hanging", "2009, 2021, 2017"],
["Q2", "Biochemical Changes in Blood & CSF After Death", "2009"],
["Q3", "Heart Anatomy, Blood/Nerve Supply, CAD, MI", "2011–2021"],
["Q4", "Shock – Definition, Types, Primary Shock", "2010"],
["Q5", "Circle of Willis + Intracranial Haemorrhages", "2011"],
["Q6", "Female External Genitalia + Changes from Intercourse", "2012"],
["Q7", "Brain Blood Supply + Head Injury + Skull Fractures", "2014"],
["Q8/9", "ANS Anatomy + Sudden Death + Neurogenic Shock", "2013, 2015"],
["Q10", "Role of Dentistry in Forensic Medicine", "2015"],
["Q11", "Brain Stem Death + THOA Act 1994", "2017, 2019"],
["Q12", "DNA Profiling + Legal/Moral/Social Implications", "2019"],
["Q13", "Pathophysiology of Starvation", "2022"],
["Q14", "Medicolegal Aspects of Hospital Acquired Infection", "2022"],
]
story.append(make_table(["Q#", "Topic", "Exam Year"], toc_data, [1.5*cm, 11.5*cm, 3.6*cm]))
story.append(PageBreak())
# ===================================================
# Q1 - ASPHYXIA
# ===================================================
story.append(h1("Q1. PATHOPHYSIOLOGY OF ASPHYXIA + NOTE ON HANGING"))
story.append(p(b("Exam Years:") + " May/June 2009 | 2021 | PII 2017 Sup"))
story.append(hr())
story.append(h2("Definition"))
story.append(p("Asphyxia is a condition in which the body is deprived of oxygen (<b>hypoxia</b>) with simultaneous accumulation of carbon dioxide (<b>hypercapnia</b>) due to interference with respiration, resulting in progressive loss of consciousness, convulsions, and ultimately death."))
story.append(p("The word comes from Greek: <i>a</i> (without) + <i>sphyxis</i> (pulse)."))
story.append(h2("Classification of Asphyxia"))
story.append(make_table(
["Type", "Sub-types"],
[
["Mechanical", "Hanging, Strangulation (ligature/manual), Suffocation, Drowning, Traumatic asphyxia"],
["Environmental", "Vitiated atmosphere (mines, wells), High altitude"],
["Toxic", "CO poisoning, Cyanide poisoning (cellular asphyxia)"],
],
[4*cm, 12.6*cm]
))
story.append(h2("Pathophysiology – 5 Stages"))
story.append(h3("Stage 1: Dyspnea (0–2 minutes)"))
story.append(p("Oxygen depletion → rise in blood CO₂ (hypercapnia) → stimulates respiratory centre (medulla) → increased rate and depth of breathing. Sympathetic discharge causes tachycardia, hypertension, pupil dilation, anxiety. Face becomes congested due to venous obstruction."))
story.append(h3("Stage 2: Convulsions (1–3 minutes)"))
story.append(p("Progressive cerebral hypoxia → loss of inhibitory control → violent tonic-clonic convulsions. Involuntary defecation, micturition, ejaculation (loss of sphincter control). Blood pressure rises further; heart rate becomes irregular."))
story.append(h3("Stage 3: Exhaustion / Pre-terminal (3–4 minutes)"))
story.append(p("Respiratory centre exhausted. Respiration becomes irregular and gasping (Biot's/Cheyne-Stokes type). Blood pressure falls; heart rate slows (bradycardia). Consciousness lost. Loss of reflexes."))
story.append(h3("Stage 4: Cessation of Respiration (4–5 minutes)"))
story.append(p("Respiratory centre paralysis. <b>Respiratory arrest precedes cardiac arrest</b> by approximately 2–5 minutes in mechanical asphyxia. Heart continues beating for a short time after breathing stops."))
story.append(h3("Stage 5: Death (5–6 minutes)"))
story.append(p("Cardiac arrest follows respiratory arrest → Brain death → Somatic death. Duration from obstruction to death: approximately <b>4–5 minutes</b> (range 3–7 min)."))
story.append(sp(6))
story.append(h3("Diagram – Pathophysiology Cascade (Draw as Flowchart)"))
story.append(code(
"Obstruction to respiration\n"
" ↓\n"
" Hypoxia + Hypercapnia\n"
" ↓\n"
" Stage 1: Dyspnea ← Stimulation (tachycardia, hypertension, struggle)\n"
" ↓\n"
" Stage 2: Convulsions ← Excitation (convulsions, involuntary evacuation)\n"
" ↓\n"
" Stage 3: Exhaustion ← Bradycardia, gasping\n"
" ↓\n"
" Stage 4: Apnea ← Respiratory arrest\n"
" ↓\n"
" Stage 5: Death ← Cardiac arrest"
))
story.append(h2("Postmortem Signs of Asphyxia"))
story.append(h3("External Signs"))
story.append(make_table(
["Sign", "Mechanism"],
[
["Cyanosis", "Deoxygenated Hb in superficial vessels – blue lips, fingertips, face"],
["Petechiae (Tardieu's spots)", "Raised venous pressure → capillary rupture → pinpoint subconjunctival haemorrhages"],
["Facial congestion", "Dusky red/purple due to venous obstruction"],
["Froth at nose/mouth", "Mucus + air mixing during struggle"],
["Involuntary discharge", "Loss of sphincter control – urine, faeces, semen"],
],
[4.5*cm, 12.1*cm]
))
story.append(h3("Internal Signs"))
story.append(make_table(
["Organ", "Finding"],
[
["All viscera", "Dark, congested, engorged"],
["Lungs", "Overdistended, dark purple, congested, edematous ('waterlogged')"],
["Heart", "Right side dilated + full of dark fluid blood; left side relatively empty"],
["Blood", "Dark, fluid, UNCLOTTED throughout (hallmark)"],
["Brain", "Congested, oedematous, subpial petechiae"],
["Serous surfaces", "Petechiae on pleura (Tardieu's spots), epicardium, pericardium"],
],
[3.5*cm, 13.1*cm]
))
story.append(h2("NOTE ON HANGING"))
story.append(h3("Definition"))
story.append(p("Hanging is a form of asphyxia caused by <b>suspension of the body by a ligature around the neck</b>, the constricting force being the <b>weight of the body itself</b> (or part of the body in partial hanging)."))
story.append(h3("Types of Hanging"))
story.append(make_table(
["Type", "Description"],
[
["Complete/Typical", "Body fully suspended, feet off ground"],
["Incomplete/Partial", "Body partially supported (kneeling, sitting); weight of head (~4–5 kg) sufficient to compress jugular veins"],
["Judicial/Long-drop", "Sudden forceful drop; fracture-dislocation C2–C3; instantaneous death by cord transection"],
["Typical ligature position", "Knot at back of neck; noose runs obliquely upward"],
],
[4.5*cm, 12.1*cm]
))
story.append(h3("Mechanism of Death"))
story.append(make_table(
["Mechanism", "Pressure Required", "Result"],
[
["Venous obstruction (jugular veins)", "~2 kg", "Venous congestion → brain engorgement → LOC"],
["Arterial obstruction (carotids/vertebrals)", "~5 kg", "Direct cerebral ischaemia → rapid LOC"],
["Airway compression (trachea/larynx)", "~15 kg", "Asphyxia"],
["Carotid sinus stimulation (vagal)", "Minimal", "Reflex cardiac arrest – sudden death"],
["Cervical cord transection", "Long-drop only", "Instantaneous death"],
],
[6*cm, 5*cm, 5.6*cm]
))
story.append(h3("Ligature Mark – Key Features"))
story.append(make_table(
["Feature", "Hanging", "Ligature Strangulation"],
[
["Position", "HIGH on neck, above thyroid cartilage", "LOW on neck, at/below thyroid cartilage"],
["Direction", "Oblique, runs upward toward suspension point", "Horizontal/transverse"],
["Continuity", "INCOMPLETE – gap at knot site (back of neck)", "COMPLETE – encircles neck fully"],
["Character", "Pale, yellowish, parchment-like (dried/excoriated)", "May show bruising, bleeding"],
["Width", "Equal to breadth of ligature", "Equal to breadth of ligature"],
],
[3.5*cm, 6.5*cm, 6.6*cm]
))
story.append(h3("Internal Findings in Hanging"))
for item in [
"Dissection of neck: extravasation of blood in neck muscles deep to ligature",
"Fracture of hyoid bone or thyroid cartilage (especially in older persons)",
"Simon's sign: transverse intimal tears in carotid arteries – DIAGNOSTIC of hanging",
"Cervical vertebra fracture/dislocation in judicial hanging (C2–C3)",
"Brain congested; subpial petechiae",
"Lungs congested; subpleural petechiae",
]:
story.append(bp(item))
story.append(h3("Medico-Legal Importance of Hanging"))
story.append(make_table(
["Issue", "Details"],
[
["Manner of death", "Usually SUICIDAL; occasionally accidental (auto-erotic asphyxia); RARELY homicidal"],
["Homicidal hanging", "Practically impossible in conscious adult; only if incapacitated first"],
["Postmortem hanging", "Body suspended after death to simulate suicide – distinguished by absent Simon's sign, no petechiae, lividity inconsistent with suspended position"],
["Accidental", "Children, intoxicated persons, auto-erotic asphyxia (Hypoxyphilia)"],
["Minimum force", "Only 2 kg needed to compress jugular veins – ligature need not be tight"],
],
[4.5*cm, 12.1*cm]
))
story.append(PageBreak())
# ===================================================
# Q2 - BIOCHEMICAL CHANGES
# ===================================================
story.append(h1("Q2. BIOCHEMICAL CHANGES IN BLOOD AND CSF AFTER DEATH"))
story.append(p(b("Exam Year:") + " May/June 2009"))
story.append(hr())
story.append(h2("Introduction"))
story.append(p("After death, cessation of metabolism, cellular autolysis, and bacterial decomposition lead to progressive biochemical changes in body fluids. These are used in forensic medicine to <b>estimate the time since death (PMI – Postmortem Interval)</b>."))
story.append(h2("Biochemical Changes in BLOOD"))
story.append(make_table(
["Parameter", "Change", "Forensic Use"],
[
["Glucose", "Rapid fall → undetectable within hours", "Not useful for PMI"],
["Lactate", "Progressive rise (anaerobic glycolysis continues briefly)", "Useful in early PMI"],
["Potassium (K⁺)", "RISES continuously – intracellular K⁺ leaks out as membranes fail", "Most important marker; ~1 mmol/L/hr"],
["Sodium (Na⁺)", "Gradual fall (Na/K pump stops; Na enters cells)", "Less reliable"],
["Urea / Creatinine", "Rise (renal breakdown + bacterial action)", "Late PMI"],
["Calcium", "Rises (released from cells and bones)", "Less useful"],
["Enzymes (AST, LDH, CPK)", "Rise due to autolysis", "Indicates time range"],
["pH", "Falls (CO₂ accumulation + lactic acid)", "General acidosis"],
["Blood – physical state", "Dark, fluid, UNCLOTTED (fibrinogen broken down)", "Classic PM finding"],
],
[4*cm, 6*cm, 6.6*cm]
))
story.append(h2("Biochemical Changes in VITREOUS HUMOR (Most Reliable for PMI)"))
story.append(p("Vitreous humor is preferred over blood/CSF because: <b>(a)</b> enclosed in protected eyeball compartment, <b>(b)</b> isolated from microbial contamination, <b>(c)</b> changes more predictable and linear."))
story.append(make_table(
["Parameter", "Change", "Formula / Reference"],
[
["Potassium (K⁺)", "Rises linearly – MOST RELIABLE", "K⁺ = 7.1 + 14.1 × PMI (days) – Henssge"],
["Sodium", "Falls", "Indicates decomposition"],
["Chloride", "Falls", "Parallels sodium"],
["Glucose", "Falls to zero", "Zero within hours"],
["Urea", "Rises", "Parallels blood urea"],
["Hypoxanthine", "Rises", "Useful in early PMI"],
],
[4*cm, 5.5*cm, 7.1*cm]
))
story.append(h2("Biochemical Changes in CSF After Death"))
story.append(make_table(
["Parameter", "Change", "Notes"],
[
["Glucose", "Rapid fall → near zero", "Zero within hours; brain consumes glucose even postmortem"],
["Potassium", "Rises (from brain cells)", "Less reliable than vitreous K⁺"],
["Lactate", "Rises", "Anaerobic glycolysis"],
["Urea / Creatinine", "Rise gradually", "Nitrogenous waste accumulation"],
["Total protein", "Rises", "Cell lysis releases proteins"],
["Sodium / Chloride", "Relatively stable early, then fall", "Less useful"],
["Enzymes (LDH, AST)", "Rise significantly", "Brain cell lysis"],
["pH", "Falls (acidosis)", "CO₂ + lactic acid accumulation"],
],
[4*cm, 4*cm, 8.6*cm]
))
story.append(h2("Summary – PMI Estimation"))
story.append(p(b("Best single marker:") + " Vitreous potassium (K⁺) – linear rise, predictable, protected from contamination"))
story.append(p(b("Combined method:") + " Body temperature (Henssge nomogram) + Vitreous K⁺ gives most reliable PMI window (0–120 hours)"))
story.append(p(b("CSF glucose:") + " <1 mmol/L indicates death >12 hours ago"))
story.append(PageBreak())
# ===================================================
# Q3 - HEART (Cross-reference)
# ===================================================
story.append(h1("Q3. HEART ANATOMY, BLOOD SUPPLY, NERVE SUPPLY, CAD, MI"))
story.append(p(b("Exam Years:") + " Winter 2011 | Winter 2012 | Summer 2017 | 2021 | May/June 2010"))
story.append(hr())
story.append(p("This topic was covered in detail in the previous session. Key points for quick revision:"))
story.append(h2("Coronary Arteries – Quick Reference"))
story.append(make_table(
["Artery", "Origin", "Territory", "Infarct if Occluded"],
[
["LAD (Left Anterior Descending)", "Left main coronary", "Ant. LV wall, Ant. 2/3 IVS, RBB", "Anterior STEMI – 'Widow Maker'"],
["LCx (Left Circumflex)", "Left main coronary", "Lateral LV wall, obtuse marginal", "Lateral STEMI"],
["RCA (Right Coronary Artery)", "Right aortic sinus", "Inf. LV, Post. 1/3 IVS, AV node, SA node (55%)", "Inferior STEMI + heart block"],
],
[3.5*cm, 3.5*cm, 5.5*cm, 4.1*cm]
))
story.append(h2("MI Timing – Gross and Microscopic"))
story.append(make_table(
["Time", "Gross Finding", "Microscopic Finding"],
[
["0–12 hrs", "No visible change; TTC stain shows pale area", "No LM changes; EM: mitochondrial swelling"],
["12–24 hrs", "Subtle pallor, slight softening", "Wavy fibres, early eosinophilia, early coagulative necrosis"],
["1–3 days", "Pale yellow-tan, soft, mushy, hyperaemic rim", "Coagulative necrosis; neutrophil infiltration begins; loss of cross-striations"],
["3–7 days", "Maximum softening; yellow centre + prominent red rim", "Peak neutrophils; ghost cells; myocytolysis (RUPTURE RISK)"],
["1–2 weeks", "Red-grey, depressed, granulation tissue at edges", "Macrophages; granulation tissue with capillary ingrowth"],
["2–8 weeks", "Progressive greyish-white replacement", "Fibroblasts; collagen deposition; progressive fibrosis"],
[">8 weeks", "Dense white fibrous scar; wall thins", "Dense collagen scar; no viable myocytes"],
],
[2.5*cm, 5*cm, 9.1*cm]
))
story.append(h2("MLI of MI at Autopsy"))
for item in [
"Certify cause of death: IA. VF → IB. Acute MI → IC. Atherosclerotic CAD",
"Date the infarct using histology to establish timeline of fatal event",
"Distinguish from blunt cardiac trauma (contusion)",
"Occupation/stress-related precipitation → compensation claims (Workmen's Compensation Act)",
"Thin skull rule: minor assault precipitating MI in susceptible patient – legal causation",
"Silent MI (painless in diabetics/elderly) → sudden death with no premonitory symptoms",
]:
story.append(bp(item))
story.append(PageBreak())
# ===================================================
# Q4 - SHOCK
# ===================================================
story.append(h1("Q4. SHOCK – DEFINITION, TYPES, PRIMARY SHOCK"))
story.append(p(b("Exam Year:") + " May/June 2010"))
story.append(hr())
story.append(h2("Definition"))
story.append(p("Shock is a state of <b>inadequate tissue perfusion</b> resulting in impaired cellular oxygenation and metabolic function. If uncorrected, cellular injury becomes irreversible, leading to multi-organ failure and death."))
story.append(p(b('"A manifestation of the rude unhinging of the machinery of life"') + " – Gross, 1872"))
story.append(h2("Classification of Shock"))
story.append(make_table(
["Type", "Cause", "Mechanism", "Skin", "Heart Rate"],
[
["Hypovolemic", "Haemorrhage, burns, dehydration", "Low preload → low CO", "Cold, pale, clammy", "Tachycardia"],
["Cardiogenic", "MI (>40% LV), arrhythmia, tamponade", "Pump failure → low CO", "Cold, clammy", "Tachycardia"],
["Septic (warm phase)", "Gram+ > Gram- bacteria", "Massive vasodilation + vascular leak", "Warm, flushed", "Tachycardia"],
["Neurogenic", "Spinal cord injury above T6", "Loss of sympathetic tone → vasodilation", "Warm, pink", "BRADYCARDIA"],
["Anaphylactic", "IgE-mediated (drugs, bee stings)", "Histamine → vasodilation + permeability", "Flushed, urticaria", "Tachycardia"],
],
[2.8*cm, 4*cm, 4.5*cm, 2.7*cm, 2.6*cm]
))
story.append(h2("Stages of Shock"))
story.append(h3("Stage 1: Compensated Shock"))
story.append(p("Baroreceptor reflex → sympathoadrenal activation → tachycardia + vasoconstriction. ADH + RAAS activated → fluid retention. Blood preferentially directed to heart and brain. Patient anxious, skin pale/cold/clammy. <b>BP may be normal.</b>"))
story.append(h3("Stage 2: Progressive (Decompensated) Shock"))
story.append(p("Compensation fails. Anaerobic metabolism → lactic acidosis. Acidosis inhibits vasoconstriction → vasodilation. Widespread endothelial injury → DIC. BP falls; oliguria; confusion. Shock self-perpetuating."))
story.append(h3("Stage 3: Irreversible Shock"))
story.append(p("Irreversible cell injury despite full resuscitation. Multi-organ failure: ARDS (lungs), ATN (kidneys), hepatic failure. DIC → bleeding diathesis. Death inevitable."))
story.append(h2("PRIMARY SHOCK (Vasovagal / Neurogenic)"))
story.append(h3("Definition"))
story.append(p("Primary shock is a <b>transient, self-limiting loss of consciousness</b> caused by sudden massive <b>parasympathetic (vagal) discharge</b> resulting in sudden peripheral vasodilation and bradycardia, leading to temporary cerebral ischaemia."))
story.append(h3("Mechanism"))
story.append(code(
"Trigger (pain, fear, sight of blood, instrumentation, emotional shock)\n"
" ↓\n"
"Sympathetic inhibition + Vagal dominance\n"
" ↓\n"
"Peripheral vasodilation (venous pooling) + Bradycardia\n"
" ↓\n"
"Sudden fall in cardiac output and peripheral resistance\n"
" ↓\n"
"Cerebral hypoperfusion → Syncope / Cardiac arrest"
))
story.append(h3("Distinguishing Features of Primary Shock"))
story.append(make_table(
["Feature", "Primary Shock", "All Other Shocks"],
[
["Heart rate", "BRADYCARDIA (vagal)", "Tachycardia (compensatory)"],
["Cause", "Emotional/reflex trigger", "Haemorrhage/sepsis/MI/injury"],
["Volume status", "Normal", "Low (mostly)"],
["Skin", "Pale, then flushed", "Cold, clammy (most types)"],
["Recovery", "Rapid (supine position)", "Requires treatment"],
["PM findings", "NONE / minimal", "Organomegaly, congestion, etc."],
],
[4*cm, 6*cm, 6.6*cm]
))
story.append(h3("Forensic Importance of Primary Shock"))
story.append(make_table(
["Scenario", "Forensic Issue"],
[
["Sudden death from emotional shock (bad news)", "Manner: Natural; no structural heart disease at PM"],
["Death from carotid sinus pressure (neck grip/tight collar)", "Accused claims 'minimal force'; nevertheless legally responsible"],
["Death during dental procedure/rectal examination", "Vagal reflex; issue of negligence vs. unforeseeable natural event"],
["Death from cold water immersion", "Diving reflex → bradycardia + apnoea → drowning"],
["Auto-erotic asphyxia with neck compression", "Accidental death; carotid sinus + asphyxia both contribute"],
],
[5*cm, 11.6*cm]
))
story.append(p(b("Key PM finding:") + " Diagnosis of EXCLUSION – no structural cause found at autopsy. Must exclude all other causes of sudden death before certifying primary shock."))
story.append(PageBreak())
# ===================================================
# Q5 - CIRCLE OF WILLIS + ICH
# ===================================================
story.append(h1("Q5. CIRCLE OF WILLIS + INTRACRANIAL HAEMORRHAGES"))
story.append(p(b("Exam Year:") + " Winter 2011"))
story.append(hr())
story.append(h2("Blood Supply of Brain"))
story.append(h3("Two Systems"))
story.append(make_table(
["System", "Vessels", "Territory"],
[
["Anterior (Carotid)", "ICA → ACA + MCA + Ant. choroidal + PComA", "Frontal, parietal, temporal lobes; basal ganglia; internal capsule"],
["Posterior (Vertebrobasilar)", "Vertebral arteries → Basilar → AICA, SCA, PCA", "Occipital lobe, cerebellum, brainstem, thalamus"],
],
[3.5*cm, 6.5*cm, 6.6*cm]
))
story.append(h3("Circle of Willis – Components (Clockwise)"))
story.append(code(
" ACA (L) --AComA-- ACA (R)\n"
" | |\n"
" ICA (L) ICA (R)\n"
" | |\n"
" PComA (L) PComA (R)\n"
" | |\n"
" PCA (L) ---- Basilar ---- PCA (R)\n"
" |\n"
" Vertebral arteries (×2)\n\n"
"ACA=Anterior Cerebral A MCA=Middle Cerebral A\n"
"PCA=Posterior Cerebral A AComA=Anterior Communicating A\n"
"PComA=Posterior Communicating A ICA=Internal Carotid A"
))
story.append(p(b("Berry aneurysms") + " (saccular) arise at bifurcations – most common sites: AComA (40%), PComA origin, MCA bifurcation."))
story.append(h2("Intracranial Haemorrhages – Comparison Table"))
story.append(make_table(
["Feature", "EDH", "SDH", "SAH", "ICH"],
[
["Space", "Epidural (skull + dura)", "Subdural (dura + arachnoid)", "Subarachnoid (arach + pia)", "Brain parenchyma"],
["Vessel", "Middle meningeal A", "Bridging cortical veins", "Berry aneurysm (spontaneous)", "Lenticulostriate arteries"],
["Shape", "Biconvex / lens-shaped", "Crescent-shaped", "Basal cisterns (cast)", "Irregular round clot"],
["Common cause", "Head trauma (temporal)", "Trauma; shaken baby", "Spontaneous / trauma", "Hypertension"],
["Lucid interval", "Classic (hours)", "Variable", "Absent", "Absent"],
["Key PM sign", "Biconvex clot; skull Fx", "Crescent clot; bridging vein tear", "Blood in cisterns; aneurysm", "BP changes in organs"],
],
[3*cm, 3.4*cm, 3.4*cm, 3.4*cm, 3.4*cm]
))
story.append(h2("Medico-Legal Aspects"))
story.append(make_table(
["Type", "Key MLI Points"],
[
["EDH", "Virtually always traumatic. Lucid interval may indicate delayed treatment possible. Temporal bone fracture implicates violence/RTA."],
["Acute SDH", "Usually assault or RTA. Shaken baby syndrome in infants – child abuse (no external injury)."],
["Chronic SDH", "Trivial/minor injury weeks earlier; elderly, alcoholics. May masquerade as dementia."],
["SAH", "Spontaneous (berry aneurysm) vs. traumatic. Did trauma cause or merely precipitate rupture? Exertion/coitus can trigger – forensic complexity."],
["ICH", "Usually hypertensive natural death. Raised ICP → herniation → death. Exertion-related trigger is medicolegal issue."],
],
[2*cm, 14.6*cm]
))
story.append(PageBreak())
# ===================================================
# Q6 - FEMALE GENITALIA
# ===================================================
story.append(h1("Q6. ANATOMY OF FEMALE EXTERNAL GENITALIA + CHANGES FROM SEXUAL INTERCOURSE"))
story.append(p(b("Exam Year:") + " Winter 2012"))
story.append(hr())
story.append(h2("Anatomy of External Genitalia (Vulva) – Virgin Adult Female"))
story.append(make_table(
["Structure", "Description", "Forensic Significance"],
[
["Mons pubis", "Fatty pad over pubic symphysis; pubic hair after puberty", "External landmark"],
["Labia majora", "Two longitudinal folds; outer: hairy, pigmented; inner: smooth, sebaceous. Homologous to scrotum.", "May show bruising in assault"],
["Labia minora", "Thin, hairless, highly vascular and sensitive folds. Meet at clitoris (prepuce) anteriorly; fuse at fourchette posteriorly.", "Tearing/bruising in rape"],
["Clitoris", "Erectile organ (corpora cavernosa); glans covered by prepuce. Highly sensitive.", "May show injury in sexual assault"],
["Vestibule", "Space enclosed by labia minora. Contains urethral meatus, vaginal introitus, Bartholin's gland ducts.", "Bartholin's abscess in STIs"],
["Hymen", "Thin mucous membrane fold PARTIALLY occluding vaginal orifice at introitus. Has opening(s) for menstrual flow.", "Central to virginity examination"],
],
[2.5*cm, 6.5*cm, 7.6*cm]
))
story.append(h3("Types of Hymen (Normal Variants – Draw for Exam)"))
story.append(make_table(
["Type", "Description"],
[
["Annular/Ring", "Complete ring with central circular opening – most common"],
["Cribriform", "Multiple small sieve-like openings"],
["Septate", "Opening divided by a transverse band/septum"],
["Fimbriated/Denticular", "Irregular scalloped/frilled margin"],
["Subseptate", "Incomplete septum"],
["Imperforate", "No opening (PATHOLOGICAL) – causes haematocolpos at menarche"],
],
[4*cm, 12.6*cm]
))
story.append(h2("Changes in External Genitalia Due to Sexual Intercourse"))
story.append(h3("Changes in the Hymen"))
story.append(p(b("First intercourse (Defloration):") + " Hymen torn by penile penetration. Lacerations occur at <b>5 o'clock and 7 o'clock positions</b> (most dependent, thinnest part – posterior quadrants)."))
story.append(make_table(
["Stage", "Appearance"],
[
["Fresh laceration (0–72 hrs)", "Red, edematous, bleeding, irregular edges, tender"],
["Recent (3–14 days)", "Healing edges, organised granulation tissue, less oedema"],
["Old laceration (healed)", "Smooth, rounded/heaped margins – CARUNCULAE HYMENALES"],
["After repeated intercourse", "Annular rim with multiple notches → only carunculae remain"],
],
[4.5*cm, 12.1*cm]
))
story.append(p(b("Carunculae Myrtiformes (Hymenales):") + " Small rounded mucosal tags at vaginal orifice after complete healing. Remnants of hymen after defloration/childbirth. Permanently indicate past penetration."))
story.append(p(b("Complete base tear") + " (laceration reaching attachment of hymen to vaginal wall) = definitive evidence of penetration."))
story.append(h3("Other Genital Changes"))
story.append(make_table(
["Structure", "Change"],
[
["Labia minora", "Engorgement on arousal (normal); bruising/tears in forced intercourse"],
["Posterior fourchette", "Tears/lacerations in forcible intercourse; most common site of injury in rape"],
["Vaginal walls", "Bruising, abrasions, lacerations in rape; usually absent in consensual sex"],
["Bartholin's glands", "Enlarged/infected with repeated intercourse (bartholinitis)"],
],
[3.5*cm, 13.1*cm]
))
story.append(h3("Medico-Legal Importance"))
for item in [
"Evidence of rape/sexual assault – fresh laceration at 5 & 7 o'clock with bruising",
"Semen/sperm from vaginal swab – DNA profiling of perpetrator",
"Age estimation in statutory rape (juvenile victim)",
"Two-finger test DEPRECATED by Supreme Court of India (2022) – not to be used as evidence of consent",
"Absence of hymenal injury does NOT disprove rape (especially in repeated assault, relaxed hymen, elderly)",
"Hymenal findings alone cannot prove or disprove sexual intercourse",
]:
story.append(bp(item))
story.append(PageBreak())
# ===================================================
# Q7 - BRAIN BLOOD SUPPLY + HEAD INJURY
# ===================================================
story.append(h1("Q7. BLOOD SUPPLY OF BRAIN + HEAD INJURY + SKULL FRACTURES"))
story.append(p(b("Exam Year:") + " Summer 2014"))
story.append(hr())
story.append(p("Circle of Willis and intracranial haemorrhages covered in <b>Q5</b>. Additional points:"))
story.append(h2("Definition of Head Injury"))
story.append(p("Head injury is any <b>trauma to the skull, scalp, brain, or related structures</b> (meninges, blood vessels) caused by an external physical force."))
story.append(h2("Types of Skull Fractures"))
story.append(make_table(
["Type", "Description", "MLI"],
[
["Linear", "Most common (80%); clean crack, no displacement", "Indicates force; may cross meningeal groove → EDH"],
["Depressed", "Fragment pushed inward below inner table; direct blunt blow", "May indicate weapon shape (patterned injury)"],
["Comminuted", "Multiple fragments; high-velocity impact", "Suggests severe force"],
["Compound", "Communicates with external environment (wound/sinus)", "Risk of meningitis; open injury"],
["Basal skull", "At skull base; often invisible on plain X-ray", "Battle's sign, Raccoon eyes, CSF rhinorrhoea/otorrhoea"],
["Ring fracture", "Around foramen magnum; fall on feet/buttocks", "Transmitted axial force; may injure brainstem"],
],
[2.8*cm, 5.5*cm, 8.3*cm]
))
story.append(h3("Signs of Basal Skull Fracture"))
story.append(make_table(
["Sign", "Site of Fracture", "Mechanism"],
[
["Battle's sign (mastoid bruising)", "Posterior fossa", "Blood tracks along mastoid emissary veins"],
["Raccoon eyes (periorbital ecchymosis)", "Anterior fossa (cribriform plate)", "Blood tracks into periorbital tissue"],
["CSF rhinorrhoea", "Cribriform plate", "CSF leaks through torn dura into nasal cavity"],
["CSF otorrhoea", "Petrous temporal bone", "CSF leaks through torn dura into middle ear → EAC"],
["Haemotympanum", "Petrous temporal bone", "Blood behind tympanic membrane"],
],
[4*cm, 4*cm, 8.6*cm]
))
story.append(h3("Contre-Coup Injury"))
story.append(p("Brain injury on the <b>opposite side</b> to the point of impact. Caused by brain rebounding within skull after sudden deceleration. Classic example: <b>Occipital blow → Frontal/temporal cortical contusions</b>. Indicates that head was moving at time of impact (fall/assault with victim running)."))
story.append(PageBreak())
# ===================================================
# Q8/9 - ANS + SUDDEN DEATH + NEUROGENIC SHOCK
# ===================================================
story.append(h1("Q8 & Q9. AUTONOMIC NERVOUS SYSTEM + SUDDEN DEATH + NEUROGENIC SHOCK"))
story.append(p(b("Exam Years:") + " May 2013 | Summer 2015"))
story.append(hr())
story.append(h2("Autonomic Nervous System – Anatomy"))
story.append(make_table(
["Feature", "Sympathetic (Thoracolumbar)", "Parasympathetic (Craniosacral)"],
[
["Origin", "T1–L2 lateral horn (IML cell column)", "CN III, VII, IX, X + S2–S4 lateral horn"],
["Preganglionic fibers", "Short", "Long"],
["Ganglia", "Paravertebral chain + prevertebral ganglia", "Terminal ganglia (near/in target organ)"],
["Postganglionic fibers", "Long", "Short"],
["Neurotransmitters", "Pre: ACh; Post: Norepinephrine (except sweat glands: ACh)", "Both pre and post: Acetylcholine"],
["Heart effect", "Tachycardia, increased contractility", "Bradycardia, decreased contractility"],
["Blood vessels", "Vasoconstriction (skin/gut); vasodilation (muscle)", "Vasodilation (selected)"],
["Airways", "Bronchodilation", "Bronchoconstriction"],
["GIT", "Decreased motility; sphincter contraction", "Increased motility; sphincter relaxation"],
["Pupils", "Mydriasis (dilator pupillae)", "Miosis (sphincter pupillae)"],
["Overall effect", "FIGHT or FLIGHT", "REST and DIGEST"],
],
[4*cm, 6*cm, 6.6*cm]
))
story.append(h2("Sudden Death Initiated Through the ANS"))
story.append(make_table(
["Mechanism", "Trigger", "Pathway", "Example"],
[
["Vagal cardiac arrest", "Neck compression, rectal exam, dental procedure, cold water, emotional shock", "Massive parasympathetic → bradycardia → asystole", "Carotid sinus hypersensitivity; diving reflex death"],
["Neurogenic cardiac arrhythmia", "SAH, massive stroke, CNS catastrophe", "Autonomic storm → QT prolongation → VF", "Neurogenic T-wave inversion; Takotsubo"],
["Catecholamine CMP (Takotsubo/Stress)", "Physical/emotional stress", "Epinephrine surge → direct myocardial toxicity → apical ballooning", "Death from frightening news"],
["Reflex cardiac arrest", "Airway manipulation, ocular pressure, rectal/vesical distension", "Reflex arc via vagus/autonomic → asystole", "Laryngospasm + cardiac arrest during intubation"],
],
[3.5*cm, 4*cm, 4.5*cm, 4.6*cm]
))
story.append(h3("Named Reflexes Causing Sudden Death"))
story.append(make_table(
["Reflex", "Trigger", "Result"],
[
["Carotid sinus reflex", "Neck pressure, tight collar, massage", "Vagal → cardiac arrest/severe bradycardia"],
["Diving reflex", "Cold water on face/nasopharynx", "Intense bradycardia + apnoea"],
["Laryngeal reflex", "Foreign body, intubation, laryngoscopy", "Laryngospasm + vagal bradycardia"],
["Bezold-Jarisch reflex", "Cardiac ischaemia, contrast injection into coronaries", "Bradycardia + hypotension"],
["Oculocardiac reflex", "Eye pressure, extraocular muscle traction", "Bradycardia (during eye surgery)"],
["Rectal/vesical reflex", "Rectal examination, instrumentation, overdistension", "Vagal → cardiac arrest"],
],
[4*cm, 5.5*cm, 7.1*cm]
))
story.append(h2("Acute Neurogenic Shock"))
story.append(p(b("Definition:") + " Distributive shock caused by <b>loss of sympathetic tone</b> following spinal cord injury above T6 (or general/spinal anaesthesia), resulting in massive peripheral vasodilation and unopposed vagal bradycardia."))
story.append(h3("Mechanism"))
story.append(code(
"Spinal cord injury above T6\n"
" ↓\n"
"Sympathetic outflow (T1–L2) disrupted bilaterally\n"
" ↓\n"
"No vasoconstriction → peripheral venous pooling → low SVR\n"
"No compensatory tachycardia (T1–T5 cardiac sympathetics also cut)\n"
"Vagal tone unopposed → BRADYCARDIA\n"
" ↓\n"
"Preload ↓ + SVR ↓ + CO ↓ → Hypotension"
))
story.append(h3("Classic Triad of Neurogenic Shock"))
story.append(make_table(
["Sign", "Neurogenic Shock", "Reason"],
[
["Heart rate", "BRADYCARDIA (unique!)", "Cardiac sympathetics (T1–T5) disrupted; vagal unopposed"],
["Skin", "Warm, pink, DRY", "Vasodilation; sympathetic sweat glands also disrupted"],
["Blood pressure", "Hypotension", "Loss of SVR"],
],
[3*cm, 5*cm, 8.6*cm]
))
story.append(PageBreak())
# ===================================================
# Q10 - FORENSIC DENTISTRY
# ===================================================
story.append(h1("Q10. ROLE OF DENTISTRY IN FORENSIC MEDICINE (FORENSIC ODONTOLOGY)"))
story.append(p(b("Exam Year:") + " Summer 2015"))
story.append(hr())
story.append(h2("Definition"))
story.append(p("Forensic odontology is the application of dental science to <b>legal and medico-legal problems</b>, primarily involving identification of individuals and assessment of bite mark injuries."))
story.append(h2("Why Teeth Are Valuable for Identification"))
for item in [
"Hardest structures in the body – survive fire, decomposition, chemical destruction, trauma",
"Dental patterns are UNIQUE to individuals (no two mouths identical)",
"Lifetime dental records (charts, radiographs, impressions) available for comparison",
"Last to decompose – useful in skeletonised, burnt, or severely decomposed remains",
]:
story.append(bp(item))
story.append(h2("Functions of Forensic Odontology"))
story.append(h3("1. Identification of Unknown Bodies"))
story.append(p("Compare postmortem dental findings with antemortem dental records. Unique features: filled cavities (restorations), crowns, bridges, implants, missing teeth, root shapes, bone pathology. Used in: mass disasters (plane crashes, earthquakes, tsunamis), fire deaths, decomposed bodies, fragmented remains."))
story.append(h3("2. Age Estimation"))
story.append(make_table(
["Age Group", "Method"],
[
["0–6 years", "Primary (deciduous) dentition eruption sequence"],
["6–13 years", "Mixed dentition; permanent tooth eruption"],
["13–17 years", "Third molar (wisdom tooth) development and eruption"],
["Adults (>17 yrs)", "Gustafson's method (1950) – 6 criteria, ±10 years accuracy"],
],
[3.5*cm, 13.1*cm]
))
story.append(p(b("Gustafson's Method – 6 Criteria") + " (each scored 0–3):"))
story.append(make_table(
["No.", "Criterion", "Change with Age"],
[
["1", "Attrition (A)", "Crown wear increases"],
["2", "Periodontosis (P)", "Loss of periodontal attachment increases"],
["3", "Secondary dentine (S)", "Deposition in pulp cavity increases"],
["4", "Cementum apposition (C)", "Root cementum thickens"],
["5", "Root resorption (R)", "Apical resorption increases"],
["6", "Root transparency (T)", "Dentinal tubule sclerosis increases"],
],
[1.5*cm, 6*cm, 9.1*cm]
))
story.append(p("Total score (0–18) correlated with regression formula to give estimated age. Accuracy: ±3.6–10 years."))
story.append(h3("3. Bite Mark Analysis"))
story.append(p("Bite marks: Patterned injuries caused by teeth on victims (skin) or at crime scenes (food, wax). Analysis: arch form, inter-canine distance, individual tooth marks, rotation, wear. Compared with impressions/photographs of suspect's dentition. Accepted as forensic evidence in court."))
story.append(h3("4. Sex Determination"))
story.append(p("Amelogenin gene (located on X and Y chromosomes) extracted from dental pulp DNA. XX = female; XY = male. Possible even from fragmentary or burned teeth."))
story.append(h3("5. Race/Population Indicators"))
story.append(make_table(
["Feature", "Population Association"],
[
["Shovel-shaped incisors (lingual ridges)", "Asian and Native American populations"],
["Carabelli's cusp (extra cusp on upper first molar)", "Common in Caucasian populations"],
["Crown size", "Varies systematically across populations"],
],
[6*cm, 10.6*cm]
))
story.append(h3("6. Disaster Victim Identification (DVI)"))
story.append(p("Interpol DVI protocol uses dental comparison as <b>Category 1 (primary) identifier</b> alongside fingerprints and DNA. Dental records compared systematically in mass casualty incidents."))
story.append(h3("7. Forensic Traumatology / Malpractice"))
story.append(p("Assessment of teeth in assault victims (avulsion, fracture = evidence of blow to face). Dental malpractice litigation: wrong tooth extraction, nerve injury, drug reactions during dental procedures."))
story.append(PageBreak())
# ===================================================
# Q11 - BRAIN STEM DEATH + THOA
# ===================================================
story.append(h1("Q11. BRAIN STEM DEATH + THOA ACT 1994"))
story.append(p(b("Exam Years:") + " Summer 2017 | P III Winter 2019"))
story.append(hr())
story.append(h2("Concept of Brain Stem Death"))
story.append(p("Traditional death = cessation of heartbeat + breathing. Modern ventilators can maintain heartbeat even after the brain is irreversibly dead."))
story.append(p(b("Brain Stem Death (BSD)") + " is defined as the <b>irreversible loss of the capacity for consciousness</b> combined with the <b>irreversible loss of the capacity to breathe</b>, due to permanent functional failure of the brainstem."))
story.append(p("The brainstem contains: <b>Reticular Activating System</b> (consciousness) + <b>Respiratory/cardiovascular centres</b> + <b>Cranial nerve nuclei III–XII</b>. Irreversible brainstem failure = death, even if heart continues to beat on ventilator."))
story.append(h2("Preconditions for BSD Testing (All Must Be Met)"))
for item in [
"Patient in APNOEIC COMA – unconscious and on ventilator",
"KNOWN IRREVERSIBLE STRUCTURAL CAUSE established (severe head injury, massive stroke, hypoxic brain damage after cardiac arrest)",
"Exclude HYPOTHERMIA – body temperature must be >35°C",
"Exclude DRUG INTOXICATION – sedatives, anaesthetic agents, neuromuscular blocking drugs",
"Exclude METABOLIC/ELECTROLYTE disturbances – Na, K, glucose, pH, renal/hepatic failure",
"Exclude ENDOCRINE abnormalities",
]:
story.append(bp(item))
story.append(h2("BSD Tests – Six Brainstem Reflexes (All Must Be Absent)"))
story.append(make_table(
["Test", "Stimulus", "Normal Response", "Result in BSD"],
[
["Pupillary light reflex", "Bright light into each eye", "Pupil constricts", "Fixed, dilated pupils – NO constriction"],
["Corneal reflex", "Touch cornea with cotton wisp", "Blink", "No blink"],
["Vestibulo-ocular (caloric)", "50 ml ice-cold water into each ear", "Eyes deviate toward stimulated ear", "No eye movement"],
["Oculo-cephalic reflex", "Passive head rotation (if C-spine cleared)", "Eyes remain fixed (doll's eye)", "Eyes move WITH head – absent reflex"],
["Gag/cough reflex", "Stimulate posterior pharynx/trachea via catheter", "Gag and/or cough", "No response"],
["Apnoea test", "Disconnect ventilator; allow pCO₂ to rise to >60 mmHg over 10 min; pre-oxygenate", "Spontaneous breathing", "NO breathing attempt"],
],
[3.5*cm, 4*cm, 3.5*cm, 5.6*cm]
))
story.append(h3("Who Performs the Tests?"))
story.append(make_table(
["Requirement", "Details"],
[
["Number of doctors", "TWO doctors, each testing independently"],
["Seniority", "Registered specialist ≥5 years standing (neurologist, intensivist, etc.)"],
["Conflict of interest", "Neither doctor should be part of the transplant team"],
["Number of test sets", "TWO sets of tests; minimum 6 hours apart"],
["Time of death", "Time of BSD = Time of LEGAL DEATH (time of SECOND confirmatory test)"],
],
[4*cm, 12.6*cm]
))
story.append(h2("THOA Act 1994 (Transplantation of Human Organs Act, India)"))
story.append(h3("Key Provisions"))
story.append(make_table(
["Provision", "Details"],
[
["Legal recognition of BSD", "BSD certified as legal death in India for purposes of organ donation"],
["Cadaveric organ donation", "Legalised retrieval of organs from brain-dead donors"],
["Near relative consent", "Consent of nearest relative mandatory before organ retrieval"],
["BSD Certification Board", "Hospital Medical Officer + Independent specialist + Nominated authority + Treating doctor"],
["Living donor rules", "Near-relatives can donate without committee; non-relatives need Authorization Committee"],
["Commercial dealings", "Buying/selling of organs – PROHIBITED"],
["Punishment", "Removal without authority: up to 10 years imprisonment + fine"],
["Amendment 2011", "Included tissues (cornea, bone, heart valves), expanded donor pool"],
],
[3.5*cm, 13.1*cm]
))
story.append(h3("Forensic Significance of THOA Act"))
for item in [
"BSD must be formally certified before organs can be retrieved – legal protection for doctors",
"Medicolegal clearance (police/coroner NOC) required if death due to unnatural cause (RTA, assault) before organ retrieval",
"Time of BSD = time of death for all legal/insurance/inheritance purposes",
"Consent from next of kin must be documented (written)",
"Chain of documentation must be maintained for each organ",
]:
story.append(bp(item))
story.append(PageBreak())
# ===================================================
# Q12 - DNA PROFILING
# ===================================================
story.append(h1("Q12. DNA PROFILING + LEGAL, MORAL AND SOCIAL IMPLICATIONS"))
story.append(p(b("Exam Year:") + " Winter 2019"))
story.append(hr())
story.append(h2("Definition"))
story.append(p("DNA profiling (DNA fingerprinting / DNA typing) is a forensic technique that identifies individuals by analysing <b>polymorphic regions</b> in their DNA, producing a unique pattern. <i>Discovered by Sir Alec Jeffreys, University of Leicester, UK, 1984.</i>"))
story.append(h2("Basis"))
story.append(p("99.7% of human DNA is identical. The 0.3% variation includes:"))
story.append(make_table(
["Marker", "Full Name", "Principle"],
[
["STR", "Short Tandem Repeat", "2–7 bp sequence repeated variable times at specific loci – most used forensically"],
["VNTR", "Variable Number of Tandem Repeat", "Longer repeat units; older RFLP method used this"],
["SNP", "Single Nucleotide Polymorphism", "Single base variation; used in ancestry/chip-based analysis"],
],
[1.5*cm, 5*cm, 10.1*cm]
))
story.append(h2("Technique – PCR-STR Method (Current Standard)"))
story.append(code(
"Step 1: SAMPLE COLLECTION\n"
" Sources: Blood, semen, saliva, hair roots, skin cells, bone marrow, teeth\n"
" Forensic: From crime scene (touch DNA, stains, sexual assault swabs)\n\n"
"Step 2: DNA EXTRACTION\n"
" Cell lysis → Proteinase K digestion → spin-column purification\n\n"
"Step 3: QUANTIFICATION\n"
" qPCR to measure DNA amount; minimum ~0.5–1 ng needed\n\n"
"Step 4: PCR AMPLIFICATION (Multiplex)\n"
" Multiple STR loci amplified simultaneously with fluorescent-labelled primers\n"
" CODIS (USA) uses 20 STR loci; India uses different validated sets\n\n"
"Step 5: CAPILLARY ELECTROPHORESIS\n"
" Products separated by size; laser detects fluorescent peaks\n\n"
"Step 6: INTERPRETATION\n"
" Allele sizes at each locus = DNA profile (a string of numbers)\n"
" Compared with reference/database\n\n"
"Step 7: PROBABILITY CALCULATION\n"
" Random match probability: typically 1 in billions for 20-locus match"
))
story.append(h2("Applications in Forensic Medicine"))
story.append(make_table(
["Application", "Use"],
[
["Criminal identification", "Rape, murder, robbery – linking suspect to scene via biological evidence"],
["Paternity/maternity", "Determine biological parent – court-ordered or voluntary"],
["Unknown body identification", "Mass disasters (DVI), decomposed remains, fragmented bodies"],
["Missing persons", "Match recovered remains to family members (mitochondrial DNA for maternal lineage)"],
["Sexual assault", "Sperm DNA profile matches perpetrator"],
["Exoneration", "Excluding innocent suspects; posthumous exoneration"],
],
[4.5*cm, 12.1*cm]
))
story.append(h2("Legal Implications"))
story.append(make_table(
["Issue", "Details"],
[
["Evidence admissibility", "Expert evidence under Section 45 Indian Evidence Act; highly persuasive in court"],
["Reliability", "Extremely high – 1 in billions for 20-locus STR profile match"],
["Right against self-incrimination", "Article 20(3) of Constitution of India – court cannot COMPEL accused to provide DNA sample"],
["DNA databases", "NDNAD (UK), CODIS (USA) – potential for abuse; wrongful profiling; privacy breaches"],
["India – legislation", "DNA Technology (Use and Application) Regulation Bill 2019 proposed but not enacted as of 2024"],
["Chain of custody", "Essential – DNA evidence can be planted; documentation of handling critical"],
["Familial searching", "Can identify relatives of unknown criminal via partial database matches"],
],
[4.5*cm, 12.1*cm]
))
story.append(h2("Moral and Ethical Implications"))
for item in [
"PRIVACY: DNA contains the most sensitive biological information – disease susceptibility, ancestry, family relationships",
"CONSENT: Taking DNA without informed consent raises fundamental ethical questions",
"DATABASE RETENTION: Should DNA of acquitted or arrested-but-not-charged persons be deleted?",
"GENETIC DISCRIMINATION: Risk of insurers or employers accessing DNA to discriminate",
"ETHNIC PROFILING: Racial bias in law enforcement databases (over-representation of certain communities)",
"UNEXPECTED FINDINGS: DNA may reveal non-paternity, adoption, or genetic disease risk unexpectedly",
"RIGHT TO KNOW vs. RIGHT NOT TO KNOW: Incidental genetic disease findings",
]:
story.append(bp(item))
story.append(h2("Social Implications"))
for item in [
"Proves or disproves parentage → affects family structure, inheritance, custody battles",
"Resolution of property/succession disputes via posthumous DNA testing",
"Exonerates wrongly convicted prisoners (Innocence Project – USA: 375+ exonerations)",
"Solves 'cold cases' decades after the crime",
"Creates generalised anxiety about genetic privacy in the population",
"May affect life insurance premiums if companies access genetic data",
]:
story.append(bp(item))
story.append(PageBreak())
# ===================================================
# Q13 - STARVATION
# ===================================================
story.append(h1("Q13. PATHOPHYSIOLOGY OF STARVATION"))
story.append(p(b("Exam Year:") + " Summer 2022"))
story.append(hr())
story.append(h2("Definition"))
story.append(p("Starvation is the state of deprivation of adequate nutrition (calories and/or essential nutrients) leading to progressive breakdown of body stores, metabolic adaptation, organ dysfunction, and ultimately death."))
story.append(h2("Phases of Starvation"))
story.append(make_table(
["Phase", "Duration", "Fuel Used", "Key Event"],
[
["Phase 1", "0–24 hours", "Liver glycogen (~100–120g)", "Glycogenolysis; blood glucose maintained; insulin ↓, glucagon ↑"],
["Phase 2", "Days 1–5", "Fat (FFA) + some protein", "Lipolysis; ketogenesis begins; gluconeogenesis from amino acids; ketosis develops"],
["Phase 3", "Weeks", "Predominantly fat; minimal protein", "Brain adapts to ketones; BMR falls; protein sparing maximised"],
["Phase 4 (Terminal)", "Fat stores depleted", "Forced protein catabolism", "Muscle wasting; hypoalbuminaemia → oedema; cardiac wasting → death"],
],
[1.8*cm, 2.5*cm, 4.5*cm, 8.8*cm]
))
story.append(h2("Key Metabolic Changes in Starvation"))
story.append(make_table(
["Parameter", "Change", "Significance"],
[
["Blood glucose", "Progressive fall; hypoglycaemia in terminal phase", "Brain function compromised"],
["Ketone bodies", "Rise (ketonaemia, ketonuria)", "Alternative fuel for brain; 'starvation ketosis'"],
["Insulin", "Falls", "Promotes fat mobilisation and gluconeogenesis"],
["Glucagon", "Rises", "Stimulates glycogenolysis, gluconeogenesis, lipolysis"],
["Free fatty acids", "Rise", "Primary fuel source"],
["Albumin", "Falls (late)", "Oncotic pressure falls → oedema (kwashiorkor pattern)"],
["BMR", "Falls 20–40%", "Adaptive thermogenesis – slows energy consumption"],
["T3/T4", "Falls; reverse T3 rises", "Reduced metabolic rate"],
["Cortisol", "Rises", "Promotes protein catabolism, gluconeogenesis"],
["Growth hormone", "Rises", "Anti-insulin; promotes lipolysis; protein sparing"],
],
[3.5*cm, 4.5*cm, 8.6*cm]
))
story.append(h2("Postmortem Findings in Death from Starvation"))
story.append(h3("External Findings"))
for item in [
"Extreme emaciation – prominent bony landmarks (iliac crests, ribs, cheekbones)",
"Complete loss of subcutaneous fat everywhere",
"Skin: thin, dry, wrinkled, loosely hanging, hyperpigmented",
"Hair: sparse, thin, discoloured (flag sign – alternating light/dark bands = nutritional cycling)",
"Oedema of lower limbs and face (protein depletion phase)",
"Eyes: sunken; mucous membranes pale",
]:
story.append(bp(item))
story.append(h3("Internal Findings"))
story.append(make_table(
["Organ", "Finding"],
[
["All organs", "Markedly reduced in size (generalised atrophy)"],
["Heart", "Brown atrophy – small, brown colour (lipofuscin pigment accumulation). Cardiac muscle wasting → arrhythmia"],
["Liver", "Small; fatty change (lipid deposition from mobilised fat)"],
["Intestines", "Empty, thin-walled; villous atrophy on microscopy → malabsorption"],
["Bone marrow", "Gelatinous transformation – yellow marrow replaced by mucoid stroma"],
["Muscles", "Wasted; loss of muscle mass throughout body"],
["Adipose tissue", "Completely absent from subcutaneous, omental, mesenteric sites"],
["Thymus/lymph nodes", "Atrophied (immunosuppression)"],
],
[3*cm, 13.6*cm]
))
story.append(h2("Medico-Legal Aspects of Starvation"))
story.append(make_table(
["Issue", "Details"],
[
["Homicidal starvation", "Wilful neglect of child, elderly, or disabled person by caregiver → IPC S.304A (criminal negligence) or S.302 if intention proven"],
["Exclusion of natural disease", "PM must exclude terminal illness (cancer, TB, AIDS) that could cause wasting – diagnosis by exclusion"],
["Hunger strikes", "Duty of care; force-feeding legal debates; prison authorities' responsibility"],
["Anorexia nervosa deaths", "Self-inflicted starvation; certification as natural death; may require psychiatric autopsy"],
["Refeeding syndrome", "Rapid refeeding after starvation → dangerous hypophosphataemia → respiratory failure, cardiac arrest; forensic issue if death follows institutional refeeding"],
["Atrocities/disasters", "Mass starvation documentation for legal and human rights proceedings"],
],
[3.5*cm, 13.1*cm]
))
story.append(PageBreak())
# ===================================================
# Q14 - HOSPITAL ACQUIRED INFECTION
# ===================================================
story.append(h1("Q14. MEDICO-LEGAL ASPECTS OF HOSPITAL ACQUIRED INFECTION (HAI)"))
story.append(p(b("Exam Year:") + " Summer 2022"))
story.append(hr())
story.append(h2("Definition"))
story.append(p("Hospital Acquired Infection (HAI) / <b>Nosocomial infection</b> = infection that was <b>not present or incubating at admission</b> to a healthcare facility, manifesting <b>≥48–72 hours after admission</b> or within <b>30 days of discharge</b> (up to 1 year for implant-related infections)."))
story.append(h2("Common Types of HAI"))
story.append(make_table(
["Type", "Frequency", "Common Organisms"],
[
["Urinary tract infection (CAUTI)", "~40% (most common)", "E. coli, Klebsiella, Pseudomonas"],
["Surgical site infection (SSI)", "~20%", "S. aureus (MRSA), E. coli, Enterococcus"],
["Ventilator-associated pneumonia (VAP)", "~15%", "Pseudomonas, Acinetobacter, MRSA"],
["Central line bloodstream infection (CLABSI)", "~10%", "Staphylococci, Candida, Gram-negatives"],
["C. difficile colitis", "~5%", "Clostridioides difficile (after antibiotic use)"],
],
[4.5*cm, 2.5*cm, 9.6*cm]
))
story.append(h2("Medico-Legal Aspects of HAI"))
story.append(h3("1. Medical Negligence"))
story.append(p("HAI may constitute medical negligence if standard infection control practices were not followed. Four elements must be established:"))
story.append(make_table(
["Element", "In HAI Context"],
[
["Duty of care", "Hospital has a duty to provide safe environment free from preventable infections"],
["Breach of duty", "Failure to follow standard protocols (hand hygiene, sterile technique, instrument sterilisation)"],
["Causation", "Breach directly caused the infection"],
["Damage", "Infection caused harm – prolonged stay, permanent injury, death"],
],
[3.5*cm, 13.1*cm]
))
story.append(p(b("Test (India):") + " Bolam Test – whether the hospital followed the standard of care that a reasonable, prudent hospital would follow under similar circumstances."))
story.append(h3("2. Consumer Protection Act (CPA) 2019"))
story.append(p("Patient/legal heir can file complaint before Consumer Disputes Redressal Commission. HAI leading to prolonged illness or death = <b>'deficiency in service'</b>. Hospital must prove it followed standard infection control protocols."))
story.append(h3("3. Criminal Liability"))
story.append(p("If HAI leads to death and gross negligence proven: <b>IPC S.304A</b> (causing death by negligence). For deliberate infection or reckless conduct: more serious criminal charges."))
story.append(h3("4. Doctrine of Res Ipsa Loquitur"))
story.append(p(b('"The thing speaks for itself."') + " In cases where HAI is so obviously caused by hospital error (e.g., surgical instrument not sterilised, blood transfusion transmitted HIV/Hepatitis), the burden shifts to the hospital to prove they were NOT negligent."))
story.append(h3("5. Blood-Borne Infections (HIV, Hepatitis B, C) – Special Issues"))
story.append(make_table(
["Issue", "Details"],
[
["Mandatory screening", "ALL blood and blood products must be screened for HIV, HBV, HCV, Malaria, Syphilis before transfusion"],
["Failure to screen", "Absolute negligence; multiple court rulings holding blood banks and hospitals liable"],
["Compensation", "Full compensation for medical costs, pain, suffering, loss of income awarded"],
],
[3.5*cm, 13.1*cm]
))
story.append(h3("6. Standard Precautions – Hospital's Legal Duty"))
story.append(make_table(
["Precaution", "Requirement"],
[
["Hand hygiene", "WHO 5 moments: before patient contact, before aseptic procedure, after fluid exposure, after patient contact, after contact with patient surroundings"],
["PPE", "Gloves, gown, mask, eye protection as appropriate"],
["Safe injection practices", "Single-use needles and syringes; never re-use"],
["Sterilisation/disinfection", "All reusable equipment properly decontaminated"],
["Isolation", "Infected/colonised patients isolated appropriately"],
["Antibiotic stewardship", "Rational antibiotic use to prevent resistance"],
],
[3.5*cm, 13.1*cm]
))
story.append(h3("7. Documentation and Regulatory Framework"))
story.append(make_table(
["Framework", "Requirement"],
[
["NABH (India)", "National Accreditation Board for Hospitals – mandatory infection control programme; failure = de-accreditation"],
["Biomedical Waste Rules 2016", "Proper segregation, disposal of infectious waste"],
["National HAI surveillance", "Mandatory reporting of certain HAIs under National Programme"],
["WHO Global Action Plan on AMR", "HAI prevention linked to antimicrobial resistance control globally"],
],
[3.5*cm, 13.1*cm]
))
story.append(h3("8. Death Certification in HAI Deaths"))
story.append(p("If a patient admitted for a routine procedure dies of HAI: Cause of death must honestly reflect HAI on death certificate. If death is due to negligence: Inquest/Coroner proceedings may apply. Family may seek compensation under CPA/civil negligence."))
# Final summary table
story.append(PageBreak())
story.append(h1("QUICK REVISION SUMMARY – ALL 14 TOPICS"))
story.append(make_table(
["Q#", "Topic", "Key Forensic Point", "Year"],
[
["1", "Asphyxia/Hanging", "5 stages; Tardieu's petechiae; ligature oblique in hanging; Simon's sign diagnostic", "2009,2021"],
["2", "Biochemical changes PM", "Vitreous K⁺ most reliable; rises linearly; formula: K⁺=7.1+14.1×PMI(days)", "2009"],
["3", "Heart anatomy/CAD/MI", "LAD = widow maker; TTC staining for early MI; histological dating; Cause of death formulation", "2011–2021"],
["4", "Shock/Primary shock", "Primary shock = bradycardia (unique); diagnosis of exclusion at PM; vagal death", "2010"],
["5", "Circle of Willis/ICH", "Berry aneurysm at AComA; EDH = biconvex; SDH = crescent; lucid interval in EDH", "2011"],
["6", "Female genitalia", "Hymenal tear at 5 & 7 o'clock; carunculae = healed remnants; Two-finger test deprecated 2022", "2012"],
["7", "Brain/Head injury", "Contre-coup; Battle's sign + raccoon eyes = basal fracture; EDH/SDH/SAH/ICH", "2014"],
["8/9", "ANS/Neurogenic shock", "Neurogenic = bradycardia + warm skin; primary shock = vagal; Bezold-Jarisch reflex", "2013,2015"],
["10", "Forensic dentistry", "Gustafson's method (6 criteria ±10yr); DVI = dental Category 1 ID; bite marks", "2015"],
["11", "BSD/THOA Act 1994", "All 6 reflexes absent + apnoea test; 2 doctors × 2 tests; THOA = commercial dealing prohibited", "2017,2019"],
["12", "DNA profiling", "STR-PCR; Jeffreys 1984; CODIS 20 loci; Art. 20(3) protects accused; chain of custody", "2019"],
["13", "Starvation", "Brown atrophy of heart; gelatinous bone marrow; homicidal neglect; refeeding syndrome", "2022"],
["14", "HAI/Nosocomial infection", "Bolam test; res ipsa loquitur; blood transfusion absolute liability; CPA 2019; NABH", "2022"],
],
[0.8*cm, 3.5*cm, 8.5*cm, 1.8*cm]
))
story.append(sp(20))
story.append(p("Sources: Robbins & Kumar Basic Pathology; Robbins, Cotran & Kumar Pathologic Basis of Disease; Goldman-Cecil Medicine; Sabiston Textbook of Surgery; Guyton & Hall Medical Physiology; Ganong's Review of Medical Physiology"))
story.append(sp(8))
story.append(Paragraph("Generated by Orris AI | MD Forensic Medicine Exam Preparation", ParagraphStyle('footer',
parent=styles['Normal'], fontSize=8, textColor=colors.grey, alignment=TA_CENTER)))
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /tmp/workspace/forensic-medicine && python generate_pdf.py 2>&1
ls -lh /tmp/workspace/forensic-medicine/MD_Forensic_Medicine_Long_Answers.pdf
MD Forensic Medicine Long Answers
PDF Document · PDF
I need Q3 also
"Q3 - HEART (Cross-reference)" in ~/forensic-medicine
~/forensic-medicine/generate_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/forensic-medicine/generate_pdf.py'
cd /tmp/workspace/forensic-medicine && python generate_pdf.py 2>&1
ls -lh /tmp/workspace/forensic-medicine/MD_Forensic_Medicine_Long_Answers.pdf
MD Forensic Medicine Long Answers
PDF Document · PDF
| Part | Content |
|---|---|
| Part A | Heart anatomy – weight, surfaces, borders, chambers, conduction system, diagram |
| Part B | Blood supply – RCA branches, LCA (LAD + LCx), coronary dominance, venous drainage, territory map + ECG correlations, coronary artery tree diagram |
| Part C | Nerve supply – sympathetic vs. parasympathetic table, cardiac plexus, pain pathway + forensic relevance (silent MI) |
| Part D | Atherosclerosis pathophysiology – risk factors, 6-step pathogenesis, progression flowchart, CAD-to-death correlation table for autopsy |
| Part E | MI gross + microscopic findings – full timing tables (0 hr → 8+ weeks), 5 diagrams, wavy fibres/contraction bands/ghost cells explained |
| Part F | MLI at autopsy – TTC staining, infarct dating, cause of death formulation, all medicolegal issues |
Show me all diagrams and flow charts of the above answers include the images in the pdf
mkdir -p /tmp/workspace/forensic-medicine/diagrams && python3 -c "import matplotlib; import PIL; print('OK')"
~/forensic-medicine/diagrams/generate_diagrams.py
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.patches import FancyBboxPatch, FancyArrowPatch
import matplotlib.patheffects as pe
import numpy as np
OUT = "/tmp/workspace/forensic-medicine/diagrams"
# ─────────────────────────────────────────────────────────────
# UTILITY
# ─────────────────────────────────────────────────────────────
def flow_box(ax, text, xy, w=2.8, h=0.55, fc='#1565c0', tc='white', fs=8.5, style='round,pad=0.1'):
x, y = xy
box = FancyBboxPatch((x-w/2, y-h/2), w, h,
boxstyle=style, fc=fc, ec='white', lw=1.2, zorder=3)
ax.add_patch(box)
ax.text(x, y, text, ha='center', va='center', fontsize=fs,
color=tc, fontweight='bold', zorder=4, wrap=True,
multialignment='center')
def arrow_down(ax, x, y_start, dy=0.35, color='#37474f'):
ax.annotate('', xy=(x, y_start-dy), xytext=(x, y_start),
arrowprops=dict(arrowstyle='->', color=color, lw=1.8))
def save(fig, name):
fig.savefig(f'{OUT}/{name}', dpi=150, bbox_inches='tight', facecolor='white')
plt.close(fig)
print(f'Saved {name}')
# ═══════════════════════════════════════════════════════════
# DIAGRAM 1 – Asphyxia 5-Stage Cascade
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(8, 10))
ax.set_xlim(0, 8); ax.set_ylim(0, 10); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("PATHOPHYSIOLOGY OF ASPHYXIA\n5-Stage Cascade", fontsize=13,
fontweight='bold', color='#b71c1c', pad=12)
stages = [
(9.2, "Obstruction to Respiration", '#37474f', 'white'),
(8.2, "HYPOXIA + HYPERCAPNIA", '#1a237e', 'white'),
(7.0, "STAGE 1: DYSPNEA (0–2 min)", '#1565c0', 'white'),
(5.8, "STAGE 2: CONVULSIONS (1–3 min)", '#6a1b9a', 'white'),
(4.6, "STAGE 3: EXHAUSTION (3–4 min)", '#e65100', 'white'),
(3.4, "STAGE 4: RESPIRATORY ARREST (4–5 min)", '#b71c1c', 'white'),
(2.2, "STAGE 5: CARDIAC ARREST → DEATH", '#212121', 'white'),
]
notes = [
"", "",
"Tachycardia, hypertension,\npupil dilation, cyanosis, struggle",
"Tonic-clonic convulsions,\ninvoluntary defecation/micturition",
"Bradycardia, gasping,\nloss of consciousness",
"Respiratory centre paralysis;\nheart still beats for 2–5 min",
"Brain death → Somatic death\n(~4–5 min from obstruction)",
]
for i, (yy, label, fc, tc) in enumerate(stages):
flow_box(ax, label, (4, yy-0.3), w=5.5, h=0.7, fc=fc, tc=tc, fs=9)
if i < len(stages)-1:
arrow_down(ax, 4, yy-0.3-0.35, dy=0.25)
if notes[i]:
ax.text(7.5, yy-0.3, notes[i], ha='right', va='center', fontsize=7.5,
color='#546e7a', style='italic')
# Side annotations
ax.text(0.3, 7.0-0.3, "↑ RR, depth\nSympathetic surge", ha='left', va='center',
fontsize=7, color='#2e7d32', bbox=dict(fc='#e8f5e9', ec='#2e7d32', pad=2))
ax.text(0.3, 5.8-0.3, "Loss of inhibitory\ncontrol; sphincter\nrelaxation", ha='left',
va='center', fontsize=7, color='#4a148c', bbox=dict(fc='#f3e5f5', ec='#4a148c', pad=2))
ax.text(0.3, 4.6-0.3, "Resp. centre\nexhausted;\nbradycardia", ha='left', va='center',
fontsize=7, color='#bf360c', bbox=dict(fc='#fbe9e7', ec='#e65100', pad=2))
save(fig, "01_asphyxia_cascade.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 2 – Hanging vs Strangulation – Ligature Mark
# ═══════════════════════════════════════════════════════════
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
fig.patch.set_facecolor('#f8f9fa')
fig.suptitle("HANGING vs LIGATURE STRANGULATION\nComparison of Ligature Mark Characteristics",
fontsize=12, fontweight='bold', color='#b71c1c')
for ax in axes: ax.set_xlim(0, 6); ax.set_ylim(0, 8); ax.axis('off')
# ── Hanging neck ──
ax = axes[0]
ax.set_title("HANGING", fontsize=11, fontweight='bold', color='#1565c0')
# Head oval
head = mpatches.Ellipse((3, 6.8), 2.2, 2.4, fc='#ffccbc', ec='#795548', lw=2)
ax.add_patch(head)
# Neck
neck = mpatches.FancyBboxPatch((2.2, 4.2), 1.6, 2.2, boxstyle='round,pad=0.05',
fc='#ffccbc', ec='#795548', lw=2)
ax.add_patch(neck)
# Oblique ligature mark
from matplotlib.patches import Arc
ax.plot([1.2, 2.2], [5.8, 6.2], color='#8d1a0a', lw=5, solid_capstyle='round')
ax.plot([3.8, 4.8], [5.8, 6.2], color='#8d1a0a', lw=5, solid_capstyle='round')
ax.plot([2.2, 3.8], [6.2, 6.2], color='#8d1a0a', lw=5, solid_capstyle='round')
# Rope going up
ax.plot([1.2, 0.5], [5.8, 7.5], color='#5d4037', lw=3, linestyle='--')
ax.plot([4.8, 5.5], [5.8, 7.5], color='#5d4037', lw=3, linestyle='--')
ax.text(3, 7.7, "↑ Point of\nsuspension", ha='center', fontsize=8, color='#5d4037')
# Annotations
props = dict(arrowstyle='->', color='#b71c1c', lw=1.5)
ax.annotate("Oblique, HIGH\nabove thyroid cartilage", xy=(1.8, 6.1), xytext=(0.2, 4.5),
fontsize=7.5, color='#b71c1c', arrowprops=props, fontweight='bold')
ax.annotate("INCOMPLETE\n(gap at knot site)", xy=(3, 6.2), xytext=(3.5, 4.5),
fontsize=7.5, color='#b71c1c', arrowprops=props, fontweight='bold')
# Thyroid cartilage marker
ax.plot([2.0, 4.0], [5.3, 5.3], color='#0d47a1', lw=1.5, linestyle=':')
ax.text(4.1, 5.3, "Thyroid\ncartilage", fontsize=7, color='#0d47a1')
# Feature table
features = [("Position:", "ABOVE thyroid cartilage"),
("Direction:", "Oblique (V-shaped)"),
("Completeness:", "INCOMPLETE – gap at knot"),
("Character:", "Pale, parchment-like"),
("Pressure needed:", "2–5 kg sufficient")]
for i, (k, v) in enumerate(features):
ax.text(0.1, 3.0 - i*0.52, k, fontsize=7.5, fontweight='bold', color='#1a237e')
ax.text(1.6, 3.0 - i*0.52, v, fontsize=7.5, color='#212121')
# ── Strangulation neck ──
ax = axes[1]
ax.set_title("LIGATURE STRANGULATION", fontsize=11, fontweight='bold', color='#b71c1c')
head2 = mpatches.Ellipse((3, 6.8), 2.2, 2.4, fc='#ffccbc', ec='#795548', lw=2)
ax.add_patch(head2)
neck2 = mpatches.FancyBboxPatch((2.2, 4.2), 1.6, 2.2, boxstyle='round,pad=0.05',
fc='#ffccbc', ec='#795548', lw=2)
ax.add_patch(neck2)
# Horizontal ligature mark (COMPLETE)
ax.add_patch(mpatches.Ellipse((3, 5.1), 1.9, 0.35, fc='none', ec='#8d1a0a', lw=5))
ax.text(3, 5.1, "COMPLETE\nhorizontal mark", ha='center', va='center',
fontsize=7, color='white', fontweight='bold')
# Thyroid cartilage marker
ax.plot([2.0, 4.0], [5.3, 5.3], color='#0d47a1', lw=1.5, linestyle=':')
ax.text(4.1, 5.3, "Thyroid\ncartilage", fontsize=7, color='#0d47a1')
ax.annotate("AT/BELOW thyroid\ncartilage; HORIZONTAL\nCOMPLETE encirclement",
xy=(3, 5.1), xytext=(0.2, 6.5), fontsize=7.5, color='#b71c1c',
arrowprops=props, fontweight='bold')
features2 = [("Position:", "AT or BELOW thyroid cartilage"),
("Direction:", "Horizontal/transverse"),
("Completeness:", "COMPLETE – encircles fully"),
("Character:", "May show bruising/ecchymosis"),
("Pressure needed:", ">15 kg for airway; 2 kg veins")]
for i, (k, v) in enumerate(features2):
ax.text(0.1, 3.0 - i*0.52, k, fontsize=7.5, fontweight='bold', color='#b71c1c')
ax.text(1.6, 3.0 - i*0.52, v, fontsize=7.5, color='#212121')
plt.tight_layout()
save(fig, "02_hanging_strangulation.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 3 – Biochemical Changes After Death (Timeline Graph)
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(10, 6))
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("POSTMORTEM BIOCHEMICAL CHANGES\nVitreous Humor & Blood", fontsize=13,
fontweight='bold', color='#1a237e')
t = np.linspace(0, 72, 300)
# Vitreous K+: rises linearly
k_vit = 7.1 + 14.1 * (t/24)
# Blood K+: rises but less predictably
k_blood = 4 + 12*(t/72)
# Glucose: rapid fall
glucose = 5 * np.exp(-t/8)
# Lactate: rises then plateaus
lactate = 1 + 8*(1 - np.exp(-t/20))
# Sodium (falls)
sodium = 145 - 25*(1 - np.exp(-t/40))
# Urea (rises slowly)
urea = 5 + 8*(1 - np.exp(-t/50))
ax.plot(t, k_vit/5, color='#f44336', lw=2.5, label='Vitreous K⁺ (÷5) – MOST RELIABLE')
ax.plot(t, k_blood/5, color='#ff7043', lw=2, linestyle='--', label='Blood K⁺ (÷5) – less reliable')
ax.plot(t, glucose, color='#1565c0', lw=2.5, label='Glucose – rapid fall')
ax.plot(t, lactate, color='#2e7d32', lw=2, label='Lactate – rises')
ax.plot(t, sodium/20, color='#7b1fa2', lw=2, linestyle='-.', label='Sodium (÷20) – slow fall')
ax.plot(t, urea, color='#e65100', lw=2, linestyle=':', label='Urea – slow rise')
ax.axvline(12, color='#90a4ae', lw=1.2, linestyle=':', alpha=0.7)
ax.axvline(24, color='#90a4ae', lw=1.2, linestyle=':', alpha=0.7)
ax.axvline(48, color='#90a4ae', lw=1.2, linestyle=':', alpha=0.7)
ax.text(12, 0.3, '12h', ha='center', fontsize=8, color='#546e7a')
ax.text(24, 0.3, '24h', ha='center', fontsize=8, color='#546e7a')
ax.text(48, 0.3, '48h', ha='center', fontsize=8, color='#546e7a')
# Formula box
ax.text(38, 9, "Henssge Formula:\nVitreous K⁺ = 7.1 + 14.1 × PMI (days)",
fontsize=8.5, color='#b71c1c', fontweight='bold',
bbox=dict(fc='#fff9c4', ec='#f57f17', pad=5, boxstyle='round'))
ax.set_xlabel("Hours After Death", fontsize=11)
ax.set_ylabel("Relative Units (scaled)", fontsize=11)
ax.legend(loc='upper left', fontsize=8, framealpha=0.9)
ax.grid(True, alpha=0.3)
ax.set_xlim(0, 72); ax.set_ylim(0, 10)
save(fig, "03_biochemical_changes.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 4 – Coronary Artery Tree
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(10, 8))
ax.set_xlim(0, 10); ax.set_ylim(0, 9); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("CORONARY ARTERY ANATOMY\nBranches and Territory", fontsize=13,
fontweight='bold', color='#b71c1c')
def vbox(ax, text, xy, w=2.0, h=0.55, fc='#1565c0', tc='white', fs=8.5):
x, y = xy
box = FancyBboxPatch((x-w/2, y-h/2), w, h, boxstyle='round,pad=0.08',
fc=fc, ec='white', lw=1.5, zorder=3)
ax.add_patch(box)
ax.text(x, y, text, ha='center', va='center', fontsize=fs,
color=tc, fontweight='bold', zorder=4, multialignment='center')
def conn(ax, xy1, xy2, color='#546e7a', lw=2):
ax.annotate('', xy=xy2, xytext=xy1,
arrowprops=dict(arrowstyle='->', color=color, lw=lw))
# Aorta
vbox(ax, "AORTA", (5, 8.3), w=1.8, h=0.55, fc='#b71c1c')
# RCA
vbox(ax, "RCA\n(Right Aortic Sinus)", (2, 7.2), w=2.4, h=0.7, fc='#0d47a1')
# LCA
vbox(ax, "LCA Main Stem\n(Left Aortic Sinus)\n2–10 mm", (8, 7.2), w=2.4, h=0.8, fc='#1b5e20')
conn(ax, (5-0.9, 8.0), (2.8, 7.55), '#b71c1c', 2)
conn(ax, (5+0.9, 8.0), (7.2, 7.55), '#b71c1c', 2)
# RCA branches
branches_rca = [
((0.8, 6.0), "SA Nodal A.\n(55% from RCA)", '#1565c0', "SA Node"),
((2.0, 5.0), "Right Marginal A.", '#1565c0', "RV Free Wall"),
((3.2, 5.0), "PDA\n(Posterior Desc.)", '#0d47a1', "Inf. LV + Post. 1/3 IVS\nAV Node (80%)"),
]
for xy, label, fc, terr in branches_rca:
vbox(ax, label, xy, w=2.0, h=0.7, fc=fc)
conn(ax, (2, 6.85), xy, '#0d47a1', 1.5)
ax.text(xy[0], xy[1]-0.55, terr, ha='center', fontsize=7, color='#546e7a',
style='italic', multialignment='center')
# LCA → LAD + LCx
vbox(ax, "LAD\n(Left Ant. Descending)", (7, 6.0), w=2.4, h=0.7, fc='#2e7d32')
vbox(ax, "LCx\n(Left Circumflex)", (9.2, 6.0), w=2.0, h=0.7, fc='#1b5e20')
conn(ax, (8, 6.85), (7.5, 6.35), '#1b5e20', 1.5)
conn(ax, (8, 6.85), (8.8, 6.35), '#1b5e20', 1.5)
# LAD branches
lad_branches = [
((5.8, 4.8), "Diagonal\nbranches\n(D1, D2)", '#388e3c', "Anterolateral LV"),
((7.0, 4.8), "Septal\nPerforators", '#2e7d32', "Ant. 2/3 IVS\nRBB, ALBBB"),
((8.2, 4.2), "LAD continues\nto apex", '#1b5e20', "Apex + Ant. LV wall"),
]
for xy, label, fc, terr in lad_branches:
vbox(ax, label, xy, w=1.9, h=0.65, fc=fc, fs=8)
conn(ax, (7.0, 5.65), xy, '#2e7d32', 1.2)
ax.text(xy[0], xy[1]-0.52, terr, ha='center', fontsize=7, color='#546e7a',
style='italic', multialignment='center')
# LCx branches
vbox(ax, "Obtuse Marginal\nbranches (OM1, OM2)", (9.4, 4.8), w=2.2, h=0.7, fc='#1b5e20', fs=8)
conn(ax, (9.2, 5.65), (9.4, 5.15), '#1b5e20', 1.2)
ax.text(9.4, 4.28, "Lateral LV wall\nSA node (45%)", ha='center', fontsize=7,
color='#546e7a', style='italic')
# Dominance note
ax.text(5, 3.4, "CORONARY DOMINANCE: Artery giving the PDA is 'dominant'\n"
"Right dominant (RCA→PDA): 80% | Left dominant (LCx→PDA): 15% | Co-dominant: 5%",
ha='center', fontsize=9, color='#37474f',
bbox=dict(fc='#e3f2fd', ec='#1565c0', pad=6, boxstyle='round'))
# LAD label
ax.text(6.4, 2.9, "★ LAD = 'WIDOW MAKER'\nMost commonly occluded vessel", ha='center',
fontsize=9, color='#b71c1c', fontweight='bold',
bbox=dict(fc='#ffebee', ec='#b71c1c', pad=5, boxstyle='round'))
save(fig, "04_coronary_arteries.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 5 – Atherosclerosis Progression
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(9, 11))
ax.set_xlim(0, 9); ax.set_ylim(0, 11); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("PATHOGENESIS OF ATHEROSCLEROSIS\nProgression to MI and Sudden Death",
fontsize=12, fontweight='bold', color='#b71c1c')
steps = [
(10.1, "NORMAL ARTERY", '#2e7d32', "Intact endothelium, normal intima"),
(9.1, "ENDOTHELIAL INJURY / DYSFUNCTION", '#f57f17', "Haemodynamic stress, LDL, smoking,\nhyperglycaemia → VCAM-1, ICAM-1 upregulation"),
(8.0, "LDL ACCUMULATION & OXIDATION", '#e65100', "LDL enters intima → oxLDL →\nchemokine release → monocyte recruitment"),
(6.9, "FATTY STREAK (earliest lesion)", '#ff8f00', "Monocytes → Macrophages →\nFoam cells (engulf oxLDL via scavenger receptors)"),
(5.8, "FIBROUS PLAQUE DEVELOPMENT", '#6a1b9a', "SMC migrate from media to intima;\nFibrous cap + lipid-rich necrotic core forms"),
(4.7, "COMPLICATED / ADVANCED PLAQUE", '#8d1a0a', "Calcification, intraplaque haemorrhage,\nneovessels, T-cells, macrophages at shoulder"),
(3.6, "PLAQUE RUPTURE / EROSION", '#b71c1c', "Thin fibrous cap breaks → thrombogenic\ncore exposed to blood"),
(2.5, "ACUTE THROMBUS FORMATION", '#c62828', "Platelet aggregation (TXA2, ADP, serotonin)\n+ Coagulation cascade → occlusive thrombus"),
(1.4, "CORONARY OCCLUSION → MI", '#212121', "Ischaemia → necrosis (20–40 min)\n→ Arrhythmia / Cardiogenic shock"),
(0.3, "SUDDEN CARDIAC DEATH", '#000000', "VF (80–90%) or rupture/tamponade\nor complete heart block"),
]
colors_grad = ['#2e7d32','#558b2f','#f9a825','#ff8f00','#6a1b9a','#8d1a0a',
'#b71c1c','#c62828','#212121','#000000']
for i, (yy, label, fc, note) in enumerate(steps):
flow_box(ax, label, (4.5, yy), w=6.5, h=0.7, fc=fc, tc='white', fs=9)
ax.text(8.2, yy, note, ha='left' if False else 'left', va='center', fontsize=7.5,
color='#37474f', style='italic', multialignment='left',
wrap=True)
if i < len(steps)-1:
arrow_down(ax, 4.5, yy-0.35, dy=0.25)
# Risk factor box
ax.text(0.3, 7.5, "RISK FACTORS:\n• Hyperlipidaemia\n• Hypertension\n• Diabetes\n• Smoking\n• Obesity",
fontsize=8, color='#1a237e',
bbox=dict(fc='#e8eaf6', ec='#1a237e', pad=5, boxstyle='round'))
save(fig, "05_atherosclerosis_progression.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 6 – MI Gross + Microscopic Timeline
# ═══════════════════════════════════════════════════════════
fig, (ax_top, ax_bot) = plt.subplots(2, 1, figsize=(14, 10), gridspec_kw={'height_ratios':[1,1]})
fig.patch.set_facecolor('#f8f9fa')
fig.suptitle("MYOCARDIAL INFARCTION\nGross & Microscopic Findings Timeline",
fontsize=13, fontweight='bold', color='#b71c1c')
# ── TOP: Gross timeline ──
ax_top.set_xlim(0, 14); ax_top.set_ylim(0, 4); ax_top.axis('off')
ax_top.set_title("GROSS APPEARANCES", fontsize=11, fontweight='bold', color='#1565c0')
gross = [
(0.9, "0–12 hrs\nNORMAL\n(TTC pale)", '#9e9e9e'),
(2.7, "12–24 hrs\nSubtle pallor\nSlight softening", '#b0bec5'),
(4.7, "1–3 days\nPale YELLOW-TAN\nHypaeremic rim", '#ffd54f'),
(6.9, "3–7 days\nMax SOFTENING\nYellow centre\n★ RUPTURE RISK", '#ff8a65'),
(9.1, "1–2 weeks\nRed-grey\nGranulation\ntissue ingrowth", '#ef9a9a'),
(11.1, "2–8 weeks\nGrey-white\nFibrous\nreplacement", '#b0bec5'),
(13.0, ">8 weeks\nDENSE WHITE\nFIBROUS SCAR\n(Thinned wall)", '#e0e0e0'),
]
for x, label, fc in gross:
box = FancyBboxPatch((x-0.85, 0.5), 1.7, 2.8, boxstyle='round,pad=0.1',
fc=fc, ec='#546e7a', lw=1.5, zorder=3)
ax_top.add_patch(box)
ax_top.text(x, 2.0, label, ha='center', va='center', fontsize=7.5,
fontweight='bold', color='#212121', zorder=4, multialignment='center')
if x < 13:
ax_top.annotate('', xy=(x+0.95, 2.0), xytext=(x+0.85, 2.0),
arrowprops=dict(arrowstyle='->', color='#546e7a', lw=1.5))
# TTC note
ax_top.text(7, 0.2, "TTC Stain: Viable myocardium = BRICK RED | Infarcted area = PALE/WHITE (useful for 0–12 hr infarcts)",
ha='center', fontsize=8, color='#b71c1c', fontweight='bold',
bbox=dict(fc='#ffebee', ec='#b71c1c', pad=3, boxstyle='round'))
# ── BOTTOM: Microscopic timeline ──
ax_bot.set_xlim(0, 14); ax_bot.set_ylim(0, 5); ax_bot.axis('off')
ax_bot.set_title("MICROSCOPIC APPEARANCES", fontsize=11, fontweight='bold', color='#1565c0')
micro = [
(0.9, "0–30 min\nNO LM change\nEM: mito-\nchondrial swell.", '#e8f5e9'),
(2.7, "1–4 hrs\nWAVY\nFIBRES\nEarly eosinoph.", '#fff9c4'),
(4.7, "4–24 hrs\nCoagulative\nnecrosis\nContraction bands", '#fff3e0'),
(6.9, "1–3 days\nNEUTROPHIL\nINFILTRATION\nGhost cells", '#fce4ec'),
(9.1, "3–7 days\nMACROPHAGES\nMyocytolysis\n★ RUPTURE RISK", '#f3e5f5'),
(11.1, "1–2 weeks\nGRANULATION\nTISSUE\n(capillaries+\nfibroblasts)", '#e3f2fd'),
(13.0, ">8 weeks\nDENSE\nCOLLAGEN\nSCAR", '#eceff1'),
]
tc_colors = ['#1b5e20','#f57f17','#e65100','#b71c1c','#6a1b9a','#0d47a1','#37474f']
for (x, label, fc), tc in zip(micro, tc_colors):
box = FancyBboxPatch((x-0.85, 0.6), 1.7, 3.2, boxstyle='round,pad=0.1',
fc=fc, ec=tc, lw=1.8, zorder=3)
ax_bot.add_patch(box)
ax_bot.text(x, 2.2, label, ha='center', va='center', fontsize=7.5,
fontweight='bold', color=tc, zorder=4, multialignment='center')
if x < 13:
ax_bot.annotate('', xy=(x+0.95, 2.2), xytext=(x+0.85, 2.2),
arrowprops=dict(arrowstyle='->', color='#546e7a', lw=1.5))
ax_bot.text(7, 0.1, "Key Histological Diagnosis Features: Wavy fibres (1–4h) → Neutrophils (12h–3d) → Macrophages (3–7d) → Granulation (1–2wk) → Scar (>8wk)",
ha='center', fontsize=8, color='#1a237e', fontweight='bold',
bbox=dict(fc='#e8eaf6', ec='#1a237e', pad=3, boxstyle='round'))
plt.tight_layout()
save(fig, "06_MI_timeline.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 7 – Shock Classification & Pathophysiology
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(12, 9))
ax.set_xlim(0, 12); ax.set_ylim(0, 9.5); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("SHOCK: CLASSIFICATION & PATHOPHYSIOLOGY CASCADE",
fontsize=13, fontweight='bold', color='#b71c1c')
# Definition box
ax.text(6, 9.2, "SHOCK = State of inadequate tissue perfusion → cellular hypoxia → organ failure → death",
ha='center', va='center', fontsize=9.5, color='white', fontweight='bold',
bbox=dict(fc='#b71c1c', ec='#7f0000', pad=6, boxstyle='round'))
# Types of shock (horizontal)
types = [
(1.2, "HYPOVOLEMIC\n─────────\n• Haemorrhage\n• Burns\n• Dehydration\nCO↓ SVR↑ HR↑", '#1565c0'),
(3.4, "CARDIOGENIC\n─────────\n• MI (>40% LV)\n• Tamponade\n• PE\nCO↓ SVR↑ HR↑", '#6a1b9a'),
(5.6, "SEPTIC\n─────────\n• Gram+/- bacteria\n• Fungal\nCO↑ SVR↓ HR↑\n(warm shock)", '#2e7d32'),
(7.8, "NEUROGENIC\n─────────\n• Spinal >T6\n• Anaesthesia\nCO↓ SVR↓\n★ BRADYCARDIA", '#e65100'),
(10.0,"ANAPHYLACTIC\n─────────\n• IgE-mediated\n• Histamine\nCO↓ SVR↓ HR↑\nurticaria, wheeze", '#8d1a0a'),
]
for x, label, fc in types:
box = FancyBboxPatch((x-1.0, 6.1), 2.0, 2.4, boxstyle='round,pad=0.1',
fc=fc, ec='white', lw=1.5, zorder=3)
ax.add_patch(box)
ax.text(x, 7.3, label, ha='center', va='center', fontsize=7.5,
color='white', zorder=4, multialignment='center')
# Stages cascade
stage_data = [
(5.2, "STAGE 1: COMPENSATED SHOCK", '#1565c0',
"Baroreceptors → Sympathetic activation → Tachycardia, vasoconstriction\nADH + RAAS → fluid retention | BP may be NORMAL | Skin: pale, cold, clammy"),
(4.1, "STAGE 2: PROGRESSIVE (DECOMPENSATED) SHOCK", '#6a1b9a',
"Compensation fails → Anaerobic metabolism → Lactic acidosis\nEndothelial injury → DIC | BP↓ | Oliguria | Confusion"),
(3.0, "STAGE 3: IRREVERSIBLE SHOCK", '#b71c1c',
"Irreversible cell injury despite full resuscitation\nMODS: ARDS (lungs), ATN (kidneys), Hepatic failure, DIC → death"),
]
for y, title, fc, note in stage_data:
flow_box(ax, title, (6, y), w=8.5, h=0.65, fc=fc, tc='white', fs=9.5)
ax.text(6, y-0.55, note, ha='center', va='top', fontsize=7.5, color='#37474f',
style='italic', multialignment='center')
if y > 3.0:
arrow_down(ax, 6, y-0.32, dy=0.42)
# Primary shock box
ax.add_patch(FancyBboxPatch((0.3, 0.3), 11.4, 1.8, boxstyle='round,pad=0.1',
fc='#fff9c4', ec='#f57f17', lw=2))
ax.text(6, 1.6, "PRIMARY SHOCK (Vasovagal/Neurogenic)", ha='center', fontsize=10,
fontweight='bold', color='#e65100')
ax.text(6, 1.05, "Trigger (pain/fear/emotional shock) → Vagal dominance → BRADYCARDIA + vasodilation → Cerebral hypoperfusion → Syncope\n"
"Key: BRADYCARDIA (unique – all other shocks show tachycardia) | Diagnosis of EXCLUSION at autopsy | No structural heart disease",
ha='center', va='center', fontsize=8, color='#37474f', multialignment='center')
save(fig, "07_shock_cascade.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 8 – Circle of Willis + IC Haemorrhages
# ═══════════════════════════════════════════════════════════
fig, axes = plt.subplots(1, 2, figsize=(14, 7))
fig.patch.set_facecolor('#f8f9fa')
fig.suptitle("CIRCLE OF WILLIS & INTRACRANIAL HAEMORRHAGES",
fontsize=13, fontweight='bold', color='#b71c1c')
# ── Circle of Willis ──
ax = axes[0]
ax.set_xlim(-4, 4); ax.set_ylim(-4.5, 4.5); ax.axis('off')
ax.set_title("Circle of Willis", fontsize=11, fontweight='bold', color='#1565c0')
vessels = [
# name, (x1,y1), (x2,y2), color
("ACA (L)", (-1.2, 2.5), (-1.2, 3.8), '#1565c0'),
("ACA (R)", (1.2, 2.5), (1.2, 3.8), '#1565c0'),
("AComA", (-1.2, 2.8), (1.2, 2.8), '#e53935'),
("ICA (L)", (-1.8, 2.5), (-1.8, 0.5), '#2e7d32'),
("ICA (R)", (1.8, 2.5), (1.8, 0.5), '#2e7d32'),
("PComA (L)", (-1.8, 0.5), (-2.0, -0.5), '#ff8f00'),
("PComA (R)", (1.8, 0.5), (2.0, -0.5), '#ff8f00'),
("PCA (L)", (-2.0, -0.5), (-3.0, -1.5), '#6a1b9a'),
("PCA (R)", (2.0, -0.5), (3.0, -1.5), '#6a1b9a'),
("Basilar", (0, -0.5), (0, -2.5), '#b71c1c'),
("Vertebral (L)", (-1.0, -2.5), (-1.5, -4.0), '#546e7a'),
("Vertebral (R)", (1.0, -2.5), (1.5, -4.0), '#546e7a'),
]
for name, (x1,y1), (x2,y2) in [(v[0],v[1],v[2]) for v in vessels]:
c = [v[3] for v in vessels if v[0]==name][0]
ax.plot([x1,x2],[y1,y2], color=c, lw=4, solid_capstyle='round')
mx, my = (x1+x2)/2, (y1+y2)/2
ax.text(mx+0.15, my, name, fontsize=7, color=c, fontweight='bold', va='center')
# ICA connection to ring
ax.plot([-1.2, -1.8], [2.5, 2.5], color='#2e7d32', lw=4)
ax.plot([1.2, 1.8], [2.5, 2.5], color='#2e7d32', lw=4)
# Basilar to PCA
ax.plot([-2.0, 0, 2.0], [-0.5, -0.5, -0.5], color='#b71c1c', lw=4)
ax.plot([0, -1.0], [-2.5, -2.5], color='#b71c1c', lw=2, linestyle='--')
ax.plot([0, 1.0], [-2.5, -2.5], color='#b71c1c', lw=2, linestyle='--')
# Aneurysm markers
aneurysm_sites = [
(0, 2.8, "★ AComA\n(40%)", '#e53935'),
(2.0, 0.5, "★ PComA\norigin", '#ff8f00'),
(3.2, 0.2, "★ MCA\nbifurc.", '#6a1b9a'),
]
for x, y, label, c in aneurysm_sites:
ax.plot(x, y, 'o', ms=12, color=c, zorder=5)
ax.text(x+0.2, y+0.3, label, fontsize=7.5, color=c, fontweight='bold')
ax.text(0, -3.8, "★ = Common Berry Aneurysm Sites\n(Most common cause of spontaneous SAH)",
ha='center', fontsize=8, color='#b71c1c',
bbox=dict(fc='#ffebee', ec='#b71c1c', pad=4, boxstyle='round'))
# ── IC Haemorrhages diagram ──
ax = axes[1]
ax.set_xlim(0, 10); ax.set_ylim(0, 9); ax.axis('off')
ax.set_title("4 Types of Intracranial Haemorrhage", fontsize=11, fontweight='bold', color='#b71c1c')
# Skull outline
skull = mpatches.Ellipse((5, 6), 8, 5.5, fc='none', ec='#795548', lw=3)
ax.add_patch(skull)
# Dura
dura = mpatches.Ellipse((5, 6), 7.4, 5.0, fc='none', ec='#8d6e63', lw=2, linestyle='--')
ax.add_patch(dura)
# Arachnoid
arach = mpatches.Ellipse((5, 6), 6.8, 4.5, fc='none', ec='#a1887f', lw=1.5, linestyle=':')
ax.add_patch(arach)
# Brain
brain = mpatches.Ellipse((5, 5.8), 6, 4.0, fc='#ffccbc', ec='#ff8a65', lw=2)
ax.add_patch(brain)
# EDH – biconvex between skull and dura (right side)
edh_x = [7.5, 8.2, 8.8, 8.5, 8.0, 7.3, 7.5]
edh_y = [7.5, 7.0, 6.0, 5.5, 5.8, 6.8, 7.5]
ax.fill(edh_x, edh_y, fc='#ff1744', alpha=0.8, ec='#b71c1c', lw=2, zorder=4)
ax.text(8.5, 6.5, "EDH\nBiconvex", ha='center', fontsize=7.5, color='white',
fontweight='bold', zorder=5)
# SDH – crescent on left side
sdh_x = [1.5, 1.2, 1.0, 1.3, 2.0, 2.5, 2.2, 1.5]
sdh_y = [7.8, 7.0, 5.8, 5.0, 5.2, 6.5, 7.5, 7.8]
ax.fill(sdh_x, sdh_y, fc='#e91e63', alpha=0.8, ec='#880e4f', lw=2, zorder=4)
ax.text(1.5, 6.2, "SDH\nCrescent", ha='center', fontsize=7.5, color='white',
fontweight='bold', zorder=5)
# SAH – blood in basal cisterns
sah = mpatches.Ellipse((5, 4.0), 4.5, 1.2, fc='#ff9800', alpha=0.8, ec='#e65100', lw=2)
ax.add_patch(sah)
ax.text(5, 4.0, "SAH – Basal Cisterns", ha='center', va='center', fontsize=8,
color='white', fontweight='bold', zorder=5)
# ICH – deep in brain
ich = mpatches.Ellipse((5, 6.2), 1.5, 1.0, fc='#9c27b0', alpha=0.9, ec='#4a148c', lw=2)
ax.add_patch(ich)
ax.text(5, 6.2, "ICH\nBasal ganglia", ha='center', va='center', fontsize=7.5,
color='white', fontweight='bold', zorder=5)
# Labels for membranes
ax.text(1.0, 8.5, "Skull", fontsize=7, color='#795548')
ax.text(1.5, 8.2, "Dura (--)", fontsize=7, color='#8d6e63')
ax.text(2.0, 7.9, "Arachnoid (:)", fontsize=7, color='#a1887f')
# Legend
for label, fc, extra in [
("EDH – Middle meningeal A, biconvex, skull Fx, LUCID INTERVAL", '#ff1744', "Trauma, temporal blow"),
("SDH – Bridging veins, crescent, shaken baby syndrome", '#e91e63', "Trauma, Elderly, Alcoholics"),
("SAH – Berry aneurysm/trauma, thunder-clap headache", '#ff9800', "Spontaneous or Traumatic"),
("ICH – Lenticulostriate A, deep, Hypertension", '#9c27b0', "Natural death; Charcot-Bouchard aneurysms"),
]:
pass
legend_data = [
("#ff1744", "EDH", "Middle meningeal A | Biconvex | Lucid interval | Temporal skull Fx"),
("#e91e63", "SDH", "Bridging veins | Crescent | Shaken baby | Elderly/alcoholics"),
("#ff9800", "SAH", "Berry aneurysm | Basal cisterns | Thunderclap HA | Spontaneous"),
("#9c27b0", "ICH", "Lenticulostriate A | Putamen | Hypertension | Natural death"),
]
for i, (c, abbr, desc) in enumerate(legend_data):
ax.plot([0.3], [2.5 - i*0.6], 's', ms=10, color=c)
ax.text(0.65, 2.5 - i*0.6, f"{abbr}: {desc}", va='center', fontsize=7.5, color='#212121')
plt.tight_layout()
save(fig, "08_circle_willis_ICH.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 9 – ANS Overview
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(12, 9))
ax.set_xlim(0, 12); ax.set_ylim(0, 9.5); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("AUTONOMIC NERVOUS SYSTEM\nAnatomy, Function & Role in Sudden Death",
fontsize=12, fontweight='bold', color='#1a237e')
# Two columns
# SYMPATHETIC column (left)
ax.add_patch(FancyBboxPatch((0.2, 0.5), 5.3, 8.5, boxstyle='round,pad=0.2',
fc='#e3f2fd', ec='#1565c0', lw=2))
ax.text(2.85, 8.8, "SYMPATHETIC (Thoracolumbar)", ha='center', fontsize=11,
fontweight='bold', color='#1565c0')
symp = [
("Origin", "T1–L2 lateral horn (IML cell column)"),
("Preganglionic", "Short fibres → synapse in paravertebral\nchain ganglia or prevertebral ganglia"),
("Postganglionic", "Long fibres → target organs"),
("Neurotransmitter", "Pre: ACh\nPost: NOREPINEPHRINE\n(except sweat glands: ACh)"),
("Heart", "↑ Rate (positive chronotropy)\n↑ Force (positive inotropy)\n↑ Conduction velocity"),
("Blood vessels", "Vasoconstriction (skin/gut)\nVasodilation (skeletal muscle)"),
("Airways", "BRONCHODILATION"),
("GIT", "↓ Motility\nSphincter contraction"),
("Pupils", "MYDRIASIS (dilator pupillae)"),
("Overall", "FIGHT or FLIGHT response"),
]
y = 8.2
for k, v in symp:
ax.text(0.5, y, f"■ {k}:", fontsize=8.5, color='#1565c0', fontweight='bold')
ax.text(2.2, y, v, fontsize=8, color='#212121', multialignment='left')
y -= 0.75
# PARASYMPATHETIC column (right)
ax.add_patch(FancyBboxPatch((6.5, 0.5), 5.3, 8.5, boxstyle='round,pad=0.2',
fc='#e8f5e9', ec='#2e7d32', lw=2))
ax.text(9.15, 8.8, "PARASYMPATHETIC (Craniosacral)", ha='center', fontsize=11,
fontweight='bold', color='#2e7d32')
para = [
("Origin", "CN III, VII, IX, X nuclei\n+ S2–S4 lateral horn"),
("Preganglionic", "Long fibres → synapse in terminal\nganglia (near/in target organ)"),
("Postganglionic", "Short fibres → target organ"),
("Neurotransmitter", "Pre: ACh\nPost: ACETYLCHOLINE\n(both pre and post)"),
("Heart", "↓ Rate (negative chronotropy)\n↓ Force (mainly atria)\n↓ Conduction velocity"),
("Blood vessels", "Vasodilation (selected)"),
("Airways", "BRONCHOCONSTRICTION\n↑ Secretions"),
("GIT", "↑ Motility\nSphincter relaxation"),
("Pupils", "MIOSIS (sphincter pupillae)"),
("Overall", "REST and DIGEST response"),
]
y = 8.2
for k, v in para:
ax.text(6.7, y, f"■ {k}:", fontsize=8.5, color='#2e7d32', fontweight='bold')
ax.text(8.1, y, v, fontsize=8, color='#212121', multialignment='left')
y -= 0.75
# Central title arrow
ax.text(6.0, 4.8, "ANTAGONISTIC\nFUNCTIONS", ha='center', fontsize=9,
fontweight='bold', color='#b71c1c',
bbox=dict(fc='#ffebee', ec='#b71c1c', pad=5, boxstyle='round'))
ax.annotate('', xy=(6.4, 5.0), xytext=(6.3, 5.0),
arrowprops=dict(arrowstyle='<->', color='#b71c1c', lw=2))
save(fig, "09_ANS_overview.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 10 – Brain Stem Death Testing
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(10, 11))
ax.set_xlim(0, 10); ax.set_ylim(0, 11); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("BRAIN STEM DEATH CERTIFICATION\nDiagnosis & THOA Act 1994",
fontsize=12, fontweight='bold', color='#b71c1c')
# Preconditions
flow_box(ax, "STEP 1: MEET ALL PRECONDITIONS", (5, 10.4), w=7, h=0.65, fc='#1a237e')
precond = ["Patient in APNOEIC COMA on ventilator",
"IRREVERSIBLE STRUCTURAL CAUSE identified",
"Exclude HYPOTHERMIA (temp >35°C)",
"Exclude DRUG INTOXICATION (sedatives, NMBs)",
"Exclude METABOLIC/ELECTROLYTE disturbance"]
for i, t in enumerate(precond):
ax.text(5, 9.8 - i*0.38, f"✓ {t}", ha='center', fontsize=8.5, color='#1a237e',
fontweight='bold' if i < 2 else 'normal')
arrow_down(ax, 5, 8.1, dy=0.2)
# BSD tests box
flow_box(ax, "STEP 2: SIX BRAINSTEM REFLEX TESTS\n(ALL must be ABSENT)", (5, 7.65), w=7.5, h=0.7, fc='#1565c0')
tests = [
("1. Pupillary reflex", "Bright light → Each eye", "Fixed DILATED pupils – no constriction"),
("2. Corneal reflex", "Touch cornea (cotton wisp)", "NO blink"),
("3. Vestibulo-ocular (caloric)", "50 ml ice-cold water into ear", "NO eye movement"),
("4. Oculo-cephalic reflex", "Passive head rotation", "Eyes MOVE with head (absent doll's eye)"),
("5. Gag/cough reflex", "Stimulate pharynx/trachea", "NO gag/cough"),
("6. Apnoea test", "Disconnect ventilator; pCO₂ →>60 mmHg", "NO breathing attempt"),
]
y = 7.1
for (test, stimulus, result) in tests:
ax.add_patch(FancyBboxPatch((0.3, y-0.3), 9.4, 0.55, boxstyle='round,pad=0.05',
fc='#e3f2fd', ec='#1565c0', lw=0.8))
ax.text(0.5, y, test, fontsize=8.5, color='#1a237e', fontweight='bold', va='center')
ax.text(4.0, y, stimulus, fontsize=8, color='#37474f', va='center')
ax.text(7.0, y, f"→ {result}", fontsize=8, color='#b71c1c', va='center', fontweight='bold')
y -= 0.65
arrow_down(ax, 5, y+0.3, dy=0.25)
# Two tests
flow_box(ax, "STEP 3: PERFORM TESTS TWICE\n(Minimum 6 hours apart; 2 independent doctors)", (5, y-0.15), w=8, h=0.7, fc='#6a1b9a')
y -= 0.9
arrow_down(ax, 5, y, dy=0.2)
# Confirmation
flow_box(ax, "BRAIN STEM DEATH CONFIRMED\nTime of 2nd test = Legal Time of Death (THOA Act 1994)", (5, y-0.45), w=8.5, h=0.75, fc='#b71c1c')
y -= 1.25
# THOA box
ax.add_patch(FancyBboxPatch((0.5, 0.3), 9.0, y-0.4, boxstyle='round,pad=0.15',
fc='#fff9c4', ec='#f57f17', lw=2))
ax.text(5, y+0.05, "THOA ACT 1994 – KEY PROVISIONS", ha='center', fontsize=10,
fontweight='bold', color='#e65100')
thoa_pts = [
"BSD = Legal death in India for organ donation purposes",
"Near relative CONSENT mandatory before organ retrieval",
"4-member BSD Certification Board (including independent specialist)",
"Buying/selling organs – PROHIBITED (up to 10 yrs imprisonment)",
"Police/Coroner NOC required if unnatural death before retrieval",
]
for i, t in enumerate(thoa_pts):
ax.text(1.0, y - 0.5 - i*0.42, f"• {t}", fontsize=8.5, color='#37474f')
save(fig, "10_BSD_THOA.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 11 – DNA Profiling Flowchart
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(9, 12))
ax.set_xlim(0, 9); ax.set_ylim(0, 12); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("DNA PROFILING (DNA FINGERPRINTING)\nPCR-STR Technique & Forensic Application",
fontsize=12, fontweight='bold', color='#1a237e')
steps_dna = [
(11.2, "CRIME SCENE / CASE SAMPLE", '#37474f',
"Blood, semen, saliva, hair roots, skin cells,\nbone marrow, teeth — even degraded samples"),
(10.0, "STEP 1: DNA EXTRACTION", '#1565c0',
"Cell lysis → Proteinase K digestion → Spin-column\npurification → Isolated DNA"),
(8.8, "STEP 2: QUANTIFICATION", '#1565c0',
"qPCR to measure DNA concentration\nMinimum 0.5–1 ng needed for PCR"),
(7.6, "STEP 3: PCR AMPLIFICATION (Multiplex)", '#2e7d32',
"Multiple STR loci amplified simultaneously\nFluorescent-labelled primers; CODIS: 20 loci"),
(6.4, "STEP 4: CAPILLARY ELECTROPHORESIS", '#2e7d32',
"Products separated by size in capillary gel\nLaser detects fluorescent peaks → allele sizes"),
(5.2, "STEP 5: DNA PROFILE GENERATED", '#6a1b9a',
"String of numbers at each locus\ne.g. D3S1358: 15,18 | vWA: 17,19 | FGA: 22,25…"),
(4.0, "STEP 6: COMPARISON / DATABASE SEARCH", '#6a1b9a',
"Compare with suspect reference sample\nor search CODIS/NDNAD database"),
(2.8, "MATCH → PROBABILITY CALCULATION", '#b71c1c',
"Random match probability: typically 1 in BILLIONS\nfor 20-locus STR profile (highly individualising)"),
(1.6, "COURT EVIDENCE / REPORT", '#b71c1c',
"Expert evidence (S.45 Indian Evidence Act)\nIncluding exclusion of innocent persons"),
]
for yy, label, fc, note in steps_dna:
flow_box(ax, label, (4.5, yy), w=6.5, h=0.65, fc=fc, tc='white', fs=9.5)
ax.text(4.5, yy-0.52, note, ha='center', fontsize=7.5, color='#546e7a',
style='italic', multialignment='center')
if yy > 1.6:
arrow_down(ax, 4.5, yy-0.32, dy=0.42)
# STR explanation sidebar
ax.add_patch(FancyBboxPatch((7.5, 4.5), 1.3, 4.0, boxstyle='round,pad=0.1',
fc='#e8eaf6', ec='#3f51b5', lw=1.5))
ax.text(8.15, 8.3, "STR LOCI\n(Short Tandem\nRepeats)", ha='center', fontsize=7.5,
fontweight='bold', color='#1a237e', multialignment='center')
ax.text(8.15, 7.4, "2–7 bp sequence\nrepeated variable\ntimes at specific\nchromosomal loci.\n\nEach person\nhas unique\ncombination\nof allele sizes", ha='center',
fontsize=7, color='#37474f', multialignment='center')
save(fig, "11_DNA_profiling.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 12 – Starvation Phases
# ═══════════════════════════════════════════════════════════
fig, ax = plt.subplots(figsize=(13, 7))
ax.set_xlim(0, 13); ax.set_ylim(0, 7); ax.axis('off')
fig.patch.set_facecolor('#f8f9fa')
ax.set_title("PATHOPHYSIOLOGY OF STARVATION\n4-Phase Metabolic Progression",
fontsize=13, fontweight='bold', color='#b71c1c')
phases = [
(1.5, "PHASE 1\n0–24 hours", '#2e7d32',
"Fuel: LIVER GLYCOGEN\n(~100–120 g; lasts 12–16 hrs)\n\nInsulin ↓, Glucagon ↑\nGlycogenolysis maintains\nblood glucose\n\nGlucose → ZERO\nafter 16–24 hrs"),
(4.2, "PHASE 2\nDays 1–5", '#f57f17',
"Fuel: FAT (FFA) + Some Protein\n\nLipolysis → FFA release\nLiver converts FFA → KETONES\nKetosis develops\nGluconeogenesis from AA\n(alanine, glutamine)\n\nProtein SPARING begins"),
(7.2, "PHASE 3\nWeeks", '#e65100',
"Fuel: PREDOMINANTLY FAT\n\nBrain adapts to use KETONES\n(reduces glucose demand)\nProtein catabolism MINIMAL\nBMR falls 20–40%\nT3/T4 ↓, rT3 ↑\nCortisol ↑, GH ↑"),
(10.3, "PHASE 4 (TERMINAL)\nFat depleted", '#b71c1c',
"Fuel: FORCED PROTEIN CATABOLISM\n\nMuscle + visceral protein wasting\nHypoalbuminaemia → OEDEMA\nImmune suppression\nCardiac wasting → Arrhythmia\n\n★ DEATH when body fat depleted\n+ LBM reduced 30–50%"),
]
for x, label, fc, note in phases:
# Phase box
ax.add_patch(FancyBboxPatch((x-1.2, 3.5), 2.4, 2.8, boxstyle='round,pad=0.1',
fc=fc, ec='white', lw=2, zorder=3))
ax.text(x, 5.5, label, ha='center', va='center', fontsize=9.5, color='white',
fontweight='bold', zorder=4, multialignment='center')
# Note box
ax.add_patch(FancyBboxPatch((x-1.3, 0.4), 2.6, 2.8, boxstyle='round,pad=0.1',
fc='#fafafa', ec=fc, lw=1.5, zorder=3))
ax.text(x, 1.8, note, ha='center', va='center', fontsize=7.5, color='#212121',
zorder=4, multialignment='center')
# Arrow between phases
if x < 10.3:
ax.annotate('', xy=(x+1.3, 5.0), xytext=(x+1.2, 5.0),
arrowprops=dict(arrowstyle='->', color='#546e7a', lw=2.5))
# Metabolic changes bar at bottom
ax.text(6.5, 0.15, "Key metabolic changes: Glucose ↓ | Ketones ↑ | Insulin ↓ | Glucagon ↑ | FFA ↑ | Albumin ↓ (late) | BMR ↓ | Cortisol ↑ | GH ↑",
ha='center', fontsize=8.5, color='white', fontweight='bold',
bbox=dict(fc='#37474f', ec='#212121', pad=5, boxstyle='round'))
save(fig, "12_starvation_phases.png")
# ═══════════════════════════════════════════════════════════
# DIAGRAM 13 – Female External Genitalia (schematic)
# ═══════════════════════════════════════════════════════════
fig, axes = plt.subplots(1, 2, figsize=(12, 7))
fig.patch.set_facecolor('#f8f9fa')
fig.suptitle("FEMALE EXTERNAL GENITALIA (VULVA)\nAnatomy & Hymenal Changes",
fontsize=12, fontweight='bold', color='#b71c1c')
# ── Anatomy diagram ──
ax = axes[0]
ax.set_xlim(-4, 4); ax.set_ylim(-4, 4); ax.axis('off')
ax.set_title("Anatomy (Inferior view)", fontsize=10, fontweight='bold', color='#1565c0')
# Mons pubis
mp = mpatches.Ellipse((0, 3.2), 3.5, 1.5, fc='#ffccbc', ec='#795548', lw=2)
ax.add_patch(mp)
ax.text(0, 3.2, "Mons Pubis", ha='center', va='center', fontsize=8, fontweight='bold')
# Labia majora
lmaj_l = mpatches.Ellipse((-1.8, 0.5), 1.2, 4.5, fc='#ffb74d', ec='#e65100', lw=2, angle=5)
lmaj_r = mpatches.Ellipse((1.8, 0.5), 1.2, 4.5, fc='#ffb74d', ec='#e65100', lw=2, angle=-5)
ax.add_patch(lmaj_l); ax.add_patch(lmaj_r)
ax.text(-3.5, 0.5, "Labia\nMajora", ha='center', fontsize=7.5, color='#e65100', fontweight='bold')
ax.annotate('', xy=(-2.3, 0.5), xytext=(-3.2, 0.5),
arrowprops=dict(arrowstyle='->', color='#e65100', lw=1.5))
# Labia minora
lmin_l = mpatches.Ellipse((-0.85, 0.2), 0.7, 3.8, fc='#ef9a9a', ec='#c62828', lw=1.5, angle=3)
lmin_r = mpatches.Ellipse((0.85, 0.2), 0.7, 3.8, fc='#ef9a9a', ec='#c62828', lw=1.5, angle=-3)
ax.add_patch(lmin_l); ax.add_patch(lmin_r)
ax.text(3.5, 0.2, "Labia\nMinora", ha='center', fontsize=7.5, color='#c62828', fontweight='bold')
ax.annotate('', xy=(1.2, 0.2), xytext=(2.8, 0.2),
arrowprops=dict(arrowstyle='->', color='#c62828', lw=1.5))
# Clitoris
clit = mpatches.Circle((0, 2.3), 0.4, fc='#f48fb1', ec='#880e4f', lw=2)
ax.add_patch(clit)
ax.text(0, 2.3, "Cl", ha='center', va='center', fontsize=7, fontweight='bold')
ax.text(-3.5, 2.5, "Clitoris\n(erectile)", ha='center', fontsize=7.5, color='#880e4f', fontweight='bold')
ax.annotate('', xy=(-0.38, 2.3), xytext=(-2.5, 2.4),
arrowprops=dict(arrowstyle='->', color='#880e4f', lw=1.5))
# Urethral meatus
ur = mpatches.Circle((0, 1.3), 0.2, fc='#e3f2fd', ec='#1565c0', lw=2)
ax.add_patch(ur)
ax.text(3.0, 1.5, "Urethral\nMeatus", ha='center', fontsize=7.5, color='#1565c0', fontweight='bold')
ax.annotate('', xy=(0.2, 1.3), xytext=(2.2, 1.4),
arrowprops=dict(arrowstyle='->', color='#1565c0', lw=1.5))
# Vaginal introitus + hymen
vi = mpatches.Ellipse((0, -0.5), 1.2, 1.5, fc='#fce4ec', ec='#c62828', lw=2)
ax.add_patch(vi)
# Hymen ring
hy = mpatches.Ellipse((0, -0.5), 0.9, 1.1, fc='none', ec='#b71c1c', lw=2.5)
ax.add_patch(hy)
ax.text(3.2, -0.2, "Vaginal\nIntroitus +\nHYMEN", ha='center', fontsize=7.5,
color='#b71c1c', fontweight='bold')
ax.annotate('', xy=(0.5, -0.4), xytext=(2.2, -0.2),
arrowprops=dict(arrowstyle='->', color='#b71c1c', lw=1.5))
# Bartholin's glands
ax.plot([-0.8], [-1.5], 'o', ms=8, color='#7b1fa2')
ax.plot([0.8], [-1.5], 'o', ms=8, color='#7b1fa2')
ax.text(0, -2.0, "Bartholin's glands\n(5 & 7 o'clock)", ha='center', fontsize=7.5,
color='#7b1fa2', fontweight='bold')
# Posterior fourchette
ax.text(0, -3.0, "Posterior Fourchette\n(junction of labia minora)", ha='center',
fontsize=7.5, color='#546e7a')
# ── Hymen types and tear sites ──
ax = axes[1]
ax.set_xlim(0, 10); ax.set_ylim(0, 9); ax.axis('off')
ax.set_title("Hymen Types & Forensic Changes", fontsize=10, fontweight='bold', color='#b71c1c')
# Hymen type diagrams (6 small circles)
hymens = [
(1.2, 7.5, "Annular\n(Ring)", 'full_circle'),
(3.0, 7.5, "Cribriform\n(Sieve)", 'dots'),
(4.8, 7.5, "Septate", 'septate'),
(6.6, 7.5, "Fimbriated", 'fimbr'),
(8.4, 7.5, "Imperforate\n(Pathological)", 'none_opening'),
]
for x, y, label, htype in hymens:
outer = mpatches.Circle((x, y), 0.6, fc='#fce4ec', ec='#c62828', lw=2)
ax.add_patch(outer)
if htype == 'full_circle':
inner = mpatches.Circle((x, y), 0.25, fc='white', ec='#c62828', lw=1.5)
ax.add_patch(inner)
elif htype == 'dots':
for dx, dy in [(-0.15,0.15),(0.15,0.15),(-0.15,-0.15),(0.15,-0.15),(0,0)]:
ax.add_patch(mpatches.Circle((x+dx, y+dy), 0.06, fc='white', ec='#c62828', lw=1))
elif htype == 'septate':
inner = mpatches.Circle((x, y), 0.25, fc='white', ec='#c62828', lw=1.5)
ax.add_patch(inner)
ax.plot([x, x], [y-0.25, y+0.25], color='#c62828', lw=2)
elif htype == 'fimbr':
t = np.linspace(0, 2*np.pi, 20)
r = 0.5 + 0.12*np.sin(6*t)
ax.plot(x+r*np.cos(t), y+r*np.sin(t), color='#c62828', lw=2)
ax.add_patch(mpatches.Circle((x, y), 0.2, fc='white', ec='#c62828', lw=1.5))
elif htype == 'none_opening':
ax.add_patch(mpatches.Circle((x, y), 0.55, fc='#fce4ec', ec='#c62828', lw=2))
ax.text(x, y-0.85, label, ha='center', fontsize=7.5, color='#b71c1c',
fontweight='bold', multialignment='center')
# Clock diagram showing tear sites
clock_x, clock_y = 2.5, 4.5
clock = mpatches.Circle((clock_x, clock_y), 1.3, fc='#fce4ec', ec='#c62828', lw=2)
ax.add_patch(clock)
inner_cl = mpatches.Circle((clock_x, clock_y), 0.5, fc='white', ec='#c62828', lw=1.5)
ax.add_patch(inner_cl)
ax.text(clock_x, clock_y, "Vaginal\nOrifice", ha='center', va='center', fontsize=7, color='#b71c1c')
# Clock marks
for angle, num in [(90,12),(0,3),(270,6),(180,9)]:
rad = np.radians(angle)
ax.text(clock_x + 1.45*np.cos(rad), clock_y + 1.45*np.sin(rad), str(num),
ha='center', va='center', fontsize=8, color='#546e7a')
# Tear sites at 5 and 7
for angle in [300, 240]: # 5 o'clock = 300°, 7 o'clock = 240°
rad = np.radians(angle)
x2 = clock_x + 1.3*np.cos(rad)
y2 = clock_y + 1.3*np.sin(rad)
ax.plot([clock_x, x2], [clock_y, y2], color='#b71c1c', lw=3, solid_capstyle='round')
ax.text(x2 + 0.15*np.cos(rad), y2 + 0.15*np.sin(rad),
"★", ha='center', va='center', fontsize=14, color='#b71c1c')
ax.text(clock_x, 2.9, "HYMENAL TEAR SITES\n★ = 5 o'clock & 7 o'clock\n(posterior quadrants – first intercourse)",
ha='center', fontsize=8, color='#b71c1c', fontweight='bold',
bbox=dict(fc='#ffebee', ec='#b71c1c', pad=4, boxstyle='round'))
# Healing stages
heal_stages = [
(5.5, 5.5, "FRESH (0–72 hrs)", '#ef5350', "Red, edematous,\nbleeding, tender"),
(7.5, 5.5, "RECENT (3–14 days)", '#ff7043', "Healing edges,\ngranulation tissue"),
(5.5, 3.8, "OLD (healed)", '#78909c', "Smooth, rounded margins\nCARUNCULAE HYMENALES"),
(7.5, 3.8, "CARUNCULAE", '#5d4037', "Permanent hymenal tags\n= past penetration"),
]
for x, y, label, fc, note in heal_stages:
ax.add_patch(FancyBboxPatch((x-1.0, y-0.6), 2.0, 1.2, boxstyle='round,pad=0.1',
fc=fc, ec='white', lw=1.5, alpha=0.85))
ax.text(x, y+0.1, label, ha='center', fontsize=7.5, color='white', fontweight='bold')
ax.text(x, y-0.3, note, ha='center', fontsize=7, color='white', multialignment='center')
ax.text(5, 1.5, "MLI: Fresh tear at 5 & 7 o'clock + bruising = evidence of intercourse\n"
"Two-finger test DEPRECATED by Supreme Court 2022",
ha='center', fontsize=8.5, color='#b71c1c', fontweight='bold',
bbox=dict(fc='#ffebee', ec='#b71c1c', pad=5, boxstyle='round'))
plt.tight_layout()
save(fig, "13_female_genitalia_hymen.png")
print("\nAll 13 diagrams generated successfully!")
cd /tmp/workspace/forensic-medicine/diagrams && python generate_diagrams.py 2>&1
cd /tmp/workspace/forensic-medicine/diagrams && python3 -c " import urllib.request, os images = { 'photo_coronary_territory.jpg': 'https://cdn.orris.care/cdss_images/pmc_clinical_VQA_eba1e4267bcffc133adfa696f9ab6cb21fed867c0f7220f0a8cf37701367ba08.jpg', 'photo_MI_autopsy.jpg': 'https://cdn.orris.care/cdss_images/pmc_clinical_VQA_0aad5ca78921b2d6f88bbfe550ae54760abcec66b395d64d99712a6f9c072ae6.jpg', 'photo_MI_healed.jpg': 'https://cdn.orris.care/cdss_images/Pathology_1760051516527_c8a64a3a-6c12-41f5-8302-14cb7e183323.jpg', 'photo_plaque_rupture_gross.jpg': 'https://cdn.orris.care/cdss_images/Pathology_1760051681929_7a49e66f-d511-49b1-acbd-f6910134c1d4.jpg', 'photo_plaque_rupture_histo.jpg': 'https://cdn.orris.care/cdss_images/Pathology_1760051679508_da2af73b-988d-4a13-9672-48fa1c6ed930.jpg', 'photo_hanging_ligature.jpg': 'https://cdn.orris.care/cdss_images/pmc_clinical_VQA_65349ca16d7cc559daffa27f7e8ce97401613cbcc39793f56d378dedd16a56a7.jpg', 'photo_hanging_oblique.jpg': 'https://cdn.orris.care/cdss_images/pmc_clinical_VQA_e8a9f2671c70d22e80dda8e23a915d0072d01b81f5283635254cf92fa47916f9.jpg', 'photo_ANS_innervation.jpg': 'https://cdn.orris.care/cdss_images/pmc_clinical_VQA_59c34958f73945eb316e3a5c992dc04b725192e5b8e8893d9acfb81ce930e8f7.jpg', 'photo_AV_node.jpg': 'https://cdn.orris.care/cdss_images/pmc_clinical_VQA_5d33a043e85780526b55facad5eb6e87db513426a823a04b93f9cdcb5d713ab8.jpg', } for fname, url in images.items(): try: urllib.request.urlretrieve(url, fname) size = os.path.getsize(fname) print(f'OK {fname} ({size} bytes)') except Exception as e: print(f'FAIL {fname}: {e}') "
Make separate answers and give me diagrams and pictures of the following long answers questions
Define shock. Briefly describe its various types. Discuss primary shock. (May/June 2010) 5. Describe “Circle of Willis” with reference to pathology and medicolegal aspects of various intracranial haemorrhages. (Winter 2011) 6. Describe the anatomy of external genitalia of virgin grown up female. Describe different changes occurring in external genitalia due to sexual intercourse. (Winter 2012) 7. Describe blood supply of brain. Define Head Injury. Skull fractures and MLI of IC Haemorrhages. (Summer 2014) 8. Describe briefly the Autonomous Nervous System, Sudden death initiated through ANS. (May 2013) (Summer 2015) 9. ANS, Acute Neurogenic Shock (Summer 2015) 10. Discuss the role of dentistry in forensic medicine. (Summer 2015) 11. Describe the concept of Brain Stem Death in relation to THOA Act 1994. Describe the procedure and diagnosis and certification of brain stem death. (Summer 2017) (P III Winter 2019) 12. Describe DNA profiling. What are its legal, moral and social implication. (Winter 2019) 13. Discuss Pathophysiology of Starvation. (Summer 2022) 14. Discuss the medicolegal aspects of Hospital Acquired Infection.
ls /tmp/workspace/forensic-medicine/diagrams/*.png 2>/dev/null | head -20 && ls /tmp/workspace/forensic-medicine/diagrams/photo*.jpg 2>/dev/null | head -20
cd /tmp/workspace/forensic-medicine/diagrams && python3 << 'PYEOF' import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.patches as mpatches from matplotlib.patches import FancyBboxPatch, FancyArrowPatch import numpy as np OUT = "/tmp/workspace/forensic-medicine/diagrams" def flow_box(ax, text, xy, w=2.8, h=0.55, fc='#1565c0', tc='white', fs=8.5): x, y = xy box = FancyBboxPatch((x-w/2, y-h/2), w, h, boxstyle='round,pad=0.1', fc=fc, ec='white', lw=1.2, zorder=3) ax.add_patch(box) ax.text(x, y, text, ha='center', va='center', fontsize=fs, color=tc, fontweight='bold', zorder=4, multialignment='center') def arrow_down(ax, x, y_start, dy=0.35, color='#37474f'): ax.annotate('', xy=(x, y_start-dy), xytext=(x, y_start), arrowprops=dict(arrowstyle='->', color=color, lw=1.8)) def save(fig, name): fig.savefig(f'{OUT}/{name}', dpi=150, bbox_inches='tight', facecolor='white') plt.close(fig) print(f'Saved {name}') # ── Skull fracture types diagram ── fig, axes = plt.subplots(2, 3, figsize=(14, 9)) fig.patch.set_facecolor('#f8f9fa') fig.suptitle("TYPES OF SKULL FRACTURES\nWith Medicolegal Significance", fontsize=14, fontweight='bold', color='#b71c1c') types = [ ("LINEAR FRACTURE\n(Most common – 80%)", '#1565c0', "Clean crack, no displacement\nIndicates force applied\nMay cross meningeal groove → EDH"), ("DEPRESSED FRACTURE", '#2e7d32', "Fragment pushed below inner table\nDirect blow with blunt object\nMay show weapon shape pattern"), ("COMMINUTED FRACTURE", '#6a1b9a', "Multiple fragments\nHigh-velocity impact\nSuggests severe force"), ("COMPOUND FRACTURE", '#e65100', "Communicates with external environment\nWound or paranasal sinus\nRisk of meningitis"), ("BASAL SKULL FRACTURE", '#b71c1c', "Base of skull; not seen on X-ray\nBattle's sign (mastoid bruise)\nRaccoon eyes, CSF rhinorrhoea"), ("RING FRACTURE\n(Pond fracture)", '#37474f', "Around foramen magnum\nFall on feet/buttocks\nAxial transmitted force"), ] for ax, (title, fc, desc) in zip(axes.flatten(), types): ax.set_xlim(0, 6); ax.set_ylim(0, 5); ax.axis('off') ax.set_facecolor('#fafafa') ax.set_title(title, fontsize=9.5, fontweight='bold', color=fc, pad=6) # Draw skull cross-section schematic skull = mpatches.Ellipse((3, 3.5), 4, 2.2, fc='#f5f5f5', ec='#795548', lw=3) ax.add_patch(skull) if 'LINEAR' in title: ax.plot([3, 3], [2.42, 4.58], color='#e53935', lw=3) elif 'DEPRESSED' in title: pts_x = [2.5, 2.8, 3.0, 3.2, 3.5] pts_y = [3.5, 3.15, 3.0, 3.15, 3.5] ax.plot(pts_x, pts_y, color='#e53935', lw=3) ax.plot([2.8, 3.2], [3.15, 3.15], color='#e53935', lw=2, linestyle='--') elif 'COMMINUTED' in title: for angle in [0, 60, 120, 180, 240, 300]: r = np.radians(angle) ax.plot([3, 3+0.8*np.cos(r)], [3.5, 3.5+0.5*np.sin(r)], color='#e53935', lw=2) elif 'COMPOUND' in title: ax.plot([2.8, 3.2], [2.42, 4.58], color='#e53935', lw=3) ax.add_patch(mpatches.FancyArrowPatch((3, 4.7), (3, 5.0), arrowstyle='->', color='#ff5722', lw=2)) ax.text(3.2, 4.85, "Open to\nenvironment", fontsize=7, color='#e65100') elif 'BASAL' in title: arc = mpatches.Arc((3, 2.5), 3, 1.5, angle=0, theta1=0, theta2=180, color='#e53935', lw=3) ax.add_patch(arc) ax.text(3, 1.8, "Basal fracture\n(foramen magnum area)", ha='center', fontsize=7.5, color='#b71c1c') # Battle's sign ax.add_patch(mpatches.Ellipse((1.5, 3.5), 0.8, 0.5, fc='#6d4c41', ec='none', alpha=0.7)) ax.text(1.5, 3.5, "Battle's\nsign", ha='center', va='center', fontsize=6.5, color='white') elif 'RING' in title: ring = mpatches.Arc((3, 2.6), 2.5, 1.0, angle=0, theta1=0, theta2=360, color='#e53935', lw=3) ax.add_patch(ring) ax.text(3, 0.8, desc, ha='center', va='center', fontsize=7.5, color='#37474f', multialignment='center', bbox=dict(fc='#e3f2fd', ec='#1565c0', pad=3, boxstyle='round')) plt.tight_layout() save(fig, "14_skull_fractures.png") # ── Basal skull fracture signs diagram ── fig, ax = plt.subplots(figsize=(10, 7)) ax.set_xlim(0, 10); ax.set_ylim(0, 7); ax.axis('off') fig.patch.set_facecolor('#f8f9fa') ax.set_title("SIGNS OF BASAL SKULL FRACTURE\n(Clinical & Forensic Significance)", fontsize=13, fontweight='bold', color='#b71c1c') signs = [ (2.5, 5.8, "BATTLE'S SIGN", '#5d4037', "Bruising over mastoid process\n→ Posterior fossa fracture\n(petrous temporal bone)"), (7.5, 5.8, "RACCOON EYES\n(Periorbital Ecchymosis)", '#37474f', "Bilateral periorbital bruising\n→ Anterior fossa fracture\n(cribriform plate)"), (2.5, 3.2, "CSF RHINORRHOEA", '#1565c0', "CSF from nose\n→ Cribriform plate fracture\n+ dural tear"), (7.5, 3.2, "CSF OTORRHOEA", '#2e7d32', "CSF from ear\n→ Petrous temporal fracture\n+ dural tear"), (5.0, 1.2, "HAEMOTYMPANUM", '#b71c1c', "Blood behind tympanic membrane\n→ Petrous temporal bone fracture"), ] for x, y, title, fc, desc in signs: ax.add_patch(FancyBboxPatch((x-2.0, y-0.9), 4.0, 1.8, boxstyle='round,pad=0.1', fc=fc, ec='white', lw=2, alpha=0.9)) ax.text(x, y+0.35, title, ha='center', fontsize=9, color='white', fontweight='bold') ax.text(x, y-0.25, desc, ha='center', fontsize=7.5, color='#eceff1', multialignment='center') ax.text(5, 6.8, "Fracture site → Sign → Mechanism", ha='center', fontsize=10, color='white', fontweight='bold', bbox=dict(fc='#b71c1c', ec='#7f0000', pad=5, boxstyle='round')) save(fig, "15_basal_skull_signs.png") # ── Gustafson's method diagram ── fig, ax = plt.subplots(figsize=(10, 8)) ax.set_xlim(0, 10); ax.set_ylim(0, 8); ax.axis('off') fig.patch.set_facecolor('#f8f9fa') ax.set_title("GUSTAFSON'S METHOD (1950)\nAge Estimation from Teeth – 6 Criteria", fontsize=13, fontweight='bold', color='#1a237e') criteria = [ (1.5, 6.5, "1. ATTRITION (A)", '#b71c1c', "Crown wear increases\nwith age"), (5.0, 6.5, "2. PERIODONTOSIS (P)", '#1565c0', "Loss of periodontal\nattachment increases"), (8.5, 6.5, "3. SECONDARY DENTINE (S)", '#2e7d32', "Deposition in pulp cavity\nincreases with age"), (1.5, 3.8, "4. CEMENTUM (C)", '#6a1b9a', "Root cementum\nthickens with age"), (5.0, 3.8, "5. ROOT RESORPTION (R)", '#e65100', "Apical resorption\nincreases with age"), (8.5, 3.8, "6. ROOT TRANSPARENCY (T)", '#37474f', "Dentinal tubule sclerosis\nincreases with age"), ] for x, y, title, fc, desc in criteria: ax.add_patch(FancyBboxPatch((x-1.3, y-1.2), 2.6, 2.4, boxstyle='round,pad=0.1', fc=fc, ec='white', lw=2, alpha=0.9)) ax.text(x, y+0.5, title, ha='center', fontsize=8.5, color='white', fontweight='bold', multialignment='center') ax.text(x, y-0.2, desc, ha='center', fontsize=8, color='#eceff1', multialignment='center') ax.text(x, y-0.85, "Score: 0–3", ha='center', fontsize=8, color='#fff9c4', fontweight='bold') # Scoring box ax.add_patch(FancyBboxPatch((1.5, 0.3), 7.0, 1.5, boxstyle='round,pad=0.1', fc='#1a237e', ec='white', lw=2)) ax.text(5.0, 1.35, "TOTAL SCORE (0–18) → Regression formula → Estimated Age (±3.6–10 years)", ha='center', fontsize=9, color='white', fontweight='bold') ax.text(5.0, 0.75, "Formula: Age = Σ(A+P+S+C+R+T) × regression constant + intercept\n" "Each criterion scored 0 (absent) to 3 (maximum change)\nAccuracy: ±10 years in forensic practice", ha='center', fontsize=8.5, color='#e3f2fd', multialignment='center') save(fig, "16_gustafson_method.png") # ── HAI Medico-legal pathway diagram ── fig, ax = plt.subplots(figsize=(10, 11)) ax.set_xlim(0, 10); ax.set_ylim(0, 11); ax.axis('off') fig.patch.set_facecolor('#f8f9fa') ax.set_title("MEDICOLEGAL ASPECTS OF\nHOSPITAL ACQUIRED INFECTION (HAI)", fontsize=13, fontweight='bold', color='#b71c1c') nodes = [ (10.3, "PATIENT ADMITTED – No infection at admission", '#2e7d32'), (9.2, "HAI DEVELOPS (≥48–72 hrs after admission)", '#e65100'), (8.1, "HARM: Prolonged stay / Permanent injury / DEATH", '#b71c1c'), (7.0, "INVESTIGATION: Was standard of care breached?", '#1565c0'), ] for y, label, fc in nodes: flow_box(ax, label, (5, y), w=8.5, h=0.65, fc=fc, tc='white', fs=9.5) if y > 7.0: arrow_down(ax, 5, y-0.32, dy=0.42) ax.text(5, 6.55, "↓", ha='center', fontsize=18, color='#546e7a') # Two branches branch_data = [ (2.2, 5.8, "YES – BREACH\nPROVEN", '#b71c1c'), (7.8, 5.8, "NO – BREACH\nNOT PROVEN", '#2e7d32'), ] ax.annotate('', xy=(2.2, 6.1), xytext=(4.0, 6.5), arrowprops=dict(arrowstyle='->', color='#b71c1c', lw=2)) ax.annotate('', xy=(7.8, 6.1), xytext=(6.0, 6.5), arrowprops=dict(arrowstyle='->', color='#2e7d32', lw=2)) for x, y, label, fc in branch_data: flow_box(ax, label, (x, y), w=3.5, h=0.75, fc=fc, tc='white', fs=10) # Negligence branch details neg_items = [ (5.0, "1. MEDICAL NEGLIGENCE\nBolam Test: Standard of care not met"), (4.1, "2. CONSUMER PROTECTION ACT 2019\n'Deficiency in service' – Compensation"), (3.2, "3. CRIMINAL LIABILITY\nIPC S.304A – Death by negligence"), (2.3, "4. RES IPSA LOQUITUR\n'Thing speaks for itself' – Burden shifts to hospital"), (1.4, "5. CIVIL TORTIOUS LIABILITY\nDamages for prolonged illness / death"), ] for y, label in neg_items: flow_box(ax, label, (3.5, y), w=5.5, h=0.65, fc='#c62828', tc='white', fs=8.5) if y > 1.4: arrow_down(ax, 3.5, y-0.32, dy=0.42) # Not proven branch ax.add_patch(FancyBboxPatch((5.5, 0.8), 4.0, 4.2, boxstyle='round,pad=0.15', fc='#e8f5e9', ec='#2e7d32', lw=1.5)) ax.text(7.5, 4.7, "Hospital DEFENCES:", fontsize=9, fontweight='bold', color='#1b5e20', ha='center') defences = [ "Standard precautions followed\n(hand hygiene, PPE, sterile technique)", "Mandatory blood screening done\n(HIV, HBV, HCV, Malaria, Syphilis)", "Infection control policy in place\n(NABH accreditation standards met)", "Infection not reasonably\npreventable (unavoidable risk)", ] for i, d in enumerate(defences): ax.text(7.5, 4.1 - i*0.82, f"✓ {d}", ha='center', fontsize=7.5, color='#1b5e20', multialignment='center', va='center') save(fig, "17_HAI_medicolegal.png") print("\nAdditional diagrams done!") PYEOF
cd /tmp/workspace/forensic-medicine && python3 << 'PYEOF' 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, Table, TableStyle, HRFlowable, PageBreak, Image, KeepTogether) from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY, TA_LEFT import os D = "/tmp/workspace/forensic-medicine/diagrams" OUT = "/tmp/workspace/forensic-medicine" styles = getSampleStyleSheet() title_style = ParagraphStyle('QTitle', parent=styles['Title'], fontSize=16, textColor=colors.HexColor('#b71c1c'), spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica-Bold') exam_style = ParagraphStyle('Exam', parent=styles['Normal'], fontSize=10, textColor=colors.HexColor('#1565c0'), alignment=TA_CENTER, spaceAfter=8, fontName='Helvetica-Bold') h2_style = ParagraphStyle('H2', parent=styles['Heading2'], fontSize=12, textColor=colors.HexColor('#1565c0'), spaceAfter=4, spaceBefore=10, fontName='Helvetica-Bold') h3_style = ParagraphStyle('H3', parent=styles['Heading3'], fontSize=11, textColor=colors.HexColor('#2e7d32'), spaceAfter=3, spaceBefore=8, fontName='Helvetica-Bold') body_style = ParagraphStyle('Body', parent=styles['Normal'], fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY, fontName='Helvetica') bullet_style = ParagraphStyle('Bullet', parent=styles['Normal'], fontSize=9.5, leading=14, leftIndent=16, spaceAfter=2, fontName='Helvetica') def h2(t): return Paragraph(t, h2_style) def h3(t): return Paragraph(t, h3_style) def p(t): return Paragraph(t, body_style) def bp(t): return Paragraph(f"• {t}", bullet_style) def b(t): return f'<b>{t}</b>' def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.grey, spaceAfter=4, spaceBefore=4) def sp(n=6): return Spacer(1, n) def img(fname, w=16*cm, caption=None): path = f"{D}/{fname}" if not os.path.exists(path): return sp(4) im = Image(path, width=w, height=None) ar = im.imageWidth / im.imageHeight im = Image(path, width=w, height=w/ar) items = [im] if caption: items.append(Paragraph(f"<i>{caption}</i>", ParagraphStyle('cap', parent=styles['Normal'], fontSize=8, color=colors.HexColor('#546e7a'), alignment=TA_CENTER, spaceAfter=4))) return items def photo(fname, w=13*cm, caption=None): return img(fname, w=w, caption=caption) def make_table(headers, rows, col_widths=None): data = [headers] + rows if col_widths is None: col_widths = [16.6*cm/len(headers)] * len(headers) t = Table(data, colWidths=col_widths) t.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,0), 9), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('FONTNAME', (0,1), (-1,-1), 'Helvetica'), ('FONTSIZE', (0,1), (-1,-1), 8.5), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#e8eaf6')]), ('GRID', (0,0), (-1,-1), 0.4, colors.grey), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ])) return t def new_doc(filename): return SimpleDocTemplate(f"{OUT}/{filename}", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm) def add_img_list(story, items): for item in items: if isinstance(item, list): for i in item: story.append(i) else: story.append(item) # ════════════════════════════════════════════════════════════════════ # Q4 – SHOCK # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q4_Shock.pdf") story = [] story.append(Paragraph("Q4. DEFINE SHOCK – TYPES – PRIMARY SHOCK", title_style)) story.append(Paragraph("Exam: May/June 2010", exam_style)) story.append(hr()) story.append(h2("Definition of Shock")) story.append(p("Shock is a state of <b>inadequate tissue perfusion</b> resulting in impaired cellular oxygenation and metabolic dysfunction. If uncorrected, cellular injury becomes irreversible leading to multi-organ failure and death. <i>'A manifestation of the rude unhinging of the machinery of life'</i> – Gross, 1872.")) story.append(h2("Classification of Shock")) story.append(make_table( ["Type", "Cause", "Mechanism", "HR", "Skin"], [ ["Hypovolemic","Haemorrhage, burns, dehydration","Low preload → low CO","↑ Tachy","Cold, pale, clammy"], ["Cardiogenic","MI (>40% LV), tamponade, PE","Pump failure → low CO","↑ Tachy","Cold, clammy"], ["Septic","Gram+/- bacteria, fungi","Vasodilation + vascular leak","↑ Tachy","Warm, flushed"], ["Neurogenic","Spinal cord injury above T6","Loss of sympathetic tone","↓ Brady★","Warm, pink, dry"], ["Anaphylactic","IgE-mediated (drugs, bee stings)","Histamine → vasodilation","↑ Tachy","Flushed, urticaria"], ], [3*cm, 3.8*cm, 4.2*cm, 1.8*cm, 3.8*cm] )) story.append(p("★ <b>Neurogenic shock is the ONLY type with bradycardia</b> – important distinguishing feature")) story.append(h2("Stages of Shock")) story.append(make_table( ["Stage", "Features", "Reversibility"], [ ["Stage 1: Compensated","Baroreceptors activated; SNS discharge → tachycardia, vasoconstriction; ADH + RAAS → fluid retention; BP may be NORMAL","FULLY REVERSIBLE"], ["Stage 2: Progressive (Decompensated)","Compensation fails; anaerobic metabolism → lactic acidosis; endothelial injury → DIC; BP↓; oliguria; confusion","POTENTIALLY REVERSIBLE"], ["Stage 3: Irreversible","MODS: ARDS, ATN, hepatic failure; DIC → bleeding; death inevitable despite resuscitation","IRREVERSIBLE"], ], [4*cm, 9.5*cm, 3.1*cm] )) story.append(h2("Diagram – Shock Classification & Pathophysiology Cascade")) add_img_list(story, img("07_shock_cascade.png", w=16*cm, caption="Fig 1: Shock types and pathophysiology cascade – all types, stages, and primary shock")) story.append(sp(8)) story.append(h2("PRIMARY SHOCK (Vasovagal / Neurogenic Shock)")) story.append(h3("Definition")) story.append(p("Primary shock is a <b>transient, self-limiting loss of consciousness</b> caused by sudden massive <b>parasympathetic (vagal) discharge</b> resulting in sudden peripheral vasodilation and bradycardia, causing temporary cerebral ischaemia.")) story.append(h3("Mechanism of Primary Shock")) story.append(make_table( ["Step", "Event"], [ ["1","Trigger: pain, fear, sight of blood, emotional shock, instrumentation, sudden bad news"], ["2","Sudden sympathetic inhibition + vagal (parasympathetic) dominance"], ["3","Peripheral vasodilation → massive venous pooling in limbs and splanchnic vessels"], ["4","Bradycardia (vagal effect on SA node) + low cardiac output"], ["5","Sudden fall in cerebral perfusion pressure → Loss of consciousness (syncope)"], ["6","Recovery rapid when patient placed supine (increases venous return)"], ], [1.5*cm, 15.1*cm] )) story.append(h3("Classic Features – Distinguish from Other Shocks")) story.append(make_table( ["Feature","Primary Shock","ALL Other Shocks"], [ ["Heart rate","BRADYCARDIA (vagal dominance) ★","Tachycardia (compensatory sympathetic)"], ["Volume status","Normal (no blood loss)","Often low or maldistributed"], ["Recovery","Rapid with supine position","Requires active treatment"], ["PM findings","NONE / no structural cause","Organomegaly, congestion etc."], ["Cause","Emotional/reflex trigger","Haemorrhage/infection/MI/injury"], ], [3.5*cm, 6.5*cm, 6.6*cm] )) story.append(h3("Named Reflexes Causing Sudden Death via Primary Shock")) story.append(make_table( ["Reflex","Trigger","Pathway","Forensic Example"], [ ["Carotid sinus reflex","Neck pressure, tight collar, massage","Vagal → severe bradycardia/asystole","Death from neck compression with minimal force"], ["Diving reflex","Cold water on face/nasopharynx","Intense bradycardia + apnoea","Drowning after cold-water immersion"], ["Laryngeal reflex","Foreign body, intubation, laryngoscopy","Laryngospasm + vagal arrest","Death during intubation"], ["Bezold-Jarisch","Cardiac ischaemia, coronary instrumentation","Bradycardia + hypotension","Death during coronary angiography"], ["Oculocardiac","Eye pressure, extraocular muscle traction","Bradycardia during eye surgery","Intraoperative arrest"], ["Rectal/vesical reflex","Rectal exam, enema, instrumentation","Vagal → cardiac arrest","Death during rectal examination"], ], [3.2*cm, 3.5*cm, 4*cm, 5.9*cm] )) story.append(h3("Forensic Importance of Primary Shock")) for item in [ "Sudden natural death – no structural heart disease found at autopsy = DIAGNOSIS OF EXCLUSION", "Death from minimal force (e.g., slap on neck stimulating carotid sinus) – accused claims 'I barely touched them'", "Eggshell skull / thin skull rule: accused responsible for death even if victim abnormally susceptible", "Cannot be predicted; occurs in otherwise healthy individuals", "Autopsy: heart normal, coronaries normal, no structural lesion – all other causes must be excluded first", "Important in medico-legal context of sexual assault deaths, dental procedure deaths, and sudden emotional shock deaths", ]: story.append(bp(item)) doc.build(story) print("Q4 done") # ════════════════════════════════════════════════════════════════════ # Q5 – CIRCLE OF WILLIS + INTRACRANIAL HAEMORRHAGES # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q5_Circle_of_Willis_ICH.pdf") story = [] story.append(Paragraph("Q5. CIRCLE OF WILLIS + INTRACRANIAL HAEMORRHAGES", title_style)) story.append(Paragraph("Exam: Winter 2011", exam_style)) story.append(hr()) story.append(h2("Blood Supply of Brain – Overview")) story.append(make_table( ["System","Vessels","Territory Supplied"], [ ["Anterior (Internal Carotid)","Common carotid → ICA → ACA + MCA + Ant. choroidal + PComA","Frontal, parietal, temporal lobes; basal ganglia; internal capsule; most of cerebral hemispheres"], ["Posterior (Vertebrobasilar)","Subclavian → Vertebral arteries → Basilar → AICA, SCA, PCA","Occipital lobe, cerebellum, brainstem, thalamus, posterior temporal"], ], [3.5*cm, 5.5*cm, 7.6*cm] )) story.append(h2("Circle of Willis (Circulus Arteriosus)")) story.append(p("An arterial anastomotic ring at the <b>base of the brain</b> formed by the joining of anterior (carotid) and posterior (vertebrobasilar) circulations. Functions to equalise cerebral blood pressure and provide collateral supply when one vessel is blocked.")) story.append(h3("Components (described clockwise from front)")) story.append(make_table( ["Vessel","Origin/Connects","Forensic Significance"], [ ["Anterior Cerebral A. (ACA) – pair","ICA → ACA","Connects via AComA across midline"], ["Anterior Communicating A. (AComA) ★","Links right and left ACA","Most common site of berry aneurysm (40%)"], ["Internal Carotid A. (ICA) – pair","Common carotid → skull base","Joins circle superolaterally"], ["Posterior Communicating A. (PComA) ★","ICA → PCA","Second most common aneurysm site"], ["Posterior Cerebral A. (PCA) – pair","Basilar → PCA","Joins circle posteriorly"], ["Basilar Artery","Two vertebrals merge → basilar","Central posterior vessel; gives AICA, SCA"], ["Vertebral Arteries – pair","Subclavian → foramen magnum","Enter skull via foramen magnum"], ], [4*cm, 4.5*cm, 8.1*cm] )) story.append(h2("Diagrams – Circle of Willis & Intracranial Haemorrhages")) add_img_list(story, img("08_circle_willis_ICH.png", w=16*cm, caption="Fig 1: Circle of Willis anatomy (left) with berry aneurysm sites marked ★, and 4 types of intracranial haemorrhage (right)")) story.append(sp(8)) story.append(h2("Berry (Saccular) Aneurysms")) story.append(p("Saccular outpouchings at arterial bifurcations due to defects in the internal elastic lamina and media. Associated with: polycystic kidney disease, Marfan's syndrome, Ehlers-Danlos, coarctation of aorta.")) story.append(make_table( ["Site","Frequency","Presentation if Ruptured"], [ ["Anterior Communicating Artery (AComA)","~40%","SAH + bilateral leg weakness (ACA territory)"], ["Posterior Communicating Artery (PComA) origin","~30%","SAH + ipsilateral CN III palsy (dilated pupil)"], ["Middle Cerebral Artery (MCA) bifurcation","~20%","SAH + contralateral hemiplegia"], ["Basilar artery tip","~5%","SAH + brainstem signs"], ], [5*cm, 2.5*cm, 9.1*cm] )) story.append(h2("4 Types of Intracranial Haemorrhage – Full Comparison")) story.append(make_table( ["Feature","EXTRADURAL (EDH)","SUBDURAL (SDH)","SUBARACHNOID (SAH)","INTRACEREBRAL (ICH)"], [ ["Space","Epidural (skull + dura)","Subdural (dura + arachnoid)","Subarachnoid (arach + pia)","Brain parenchyma"], ["Vessel ruptured","Middle meningeal A","Bridging cortical veins","Berry aneurysm / cortical","Lenticulostriate arteries"], ["Shape on CT","Biconvex / lens-shaped","Crescent-shaped","Basal cisterns (cast)","Irregular round clot"], ["Cause","Head trauma (temporal)","Trauma; shaken baby","Spontaneous or trauma","Hypertension (Charcot-Bouchard)"], ["Lucid interval","CLASSIC (hours)","Variable","Absent","Absent"], ["Key symptom","Deterioration after lucid period","Headache, fluctuating LOC","Thunderclap headache","Focal neurological deficit"], ["Key PM finding","Biconvex clot; skull Fx","Crescent clot; bridging vein tears","Blood in basal cisterns; aneurysm","Deep clot; hypertensive changes"], ["Common age","Young adults","Elderly, alcoholics, infants","Young adults (aneurysm)","Middle-aged (hypertensive)"], ], [3.2*cm, 3.3*cm, 3.3*cm, 3.3*cm, 3.5*cm] )) story.append(h2("Medicolegal Aspects – Each Type")) story.append(make_table( ["Type","Key MLI Points"], [ ["EDH","Virtually always traumatic. Lucid interval may mean treatment delay was possible and negligent. Temporal bone fracture implicates violence or RTA. Point of impact = site of bleed."], ["Acute SDH","Usually assault or RTA. Shaken baby syndrome – vigorous shaking → bilateral subdurals with retinal haemorrhages in infants; no external injury; child abuse."], ["Chronic SDH","Trivial injury weeks earlier; especially in elderly and alcoholics (cerebral atrophy = stretched bridging veins). May present as 'dementia' – missed diagnosis issue."], ["SAH","Did trauma CAUSE rupture OR did spontaneous rupture cause a fall? Exertion, coitus, emotional stress can trigger rupture → forensic complexity in workplace/accident deaths."], ["ICH","Usually natural death from hypertension. Exertion or trauma may trigger. Intracerebral + IVH = very poor prognosis; used in certification of cause of death."], ], [2*cm, 14.6*cm] )) doc.build(story) print("Q5 done") PYEOF
cd /tmp/workspace/forensic-medicine && python3 << 'PYEOF' 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, Table, TableStyle, HRFlowable, Image) from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY import os D = "/tmp/workspace/forensic-medicine/diagrams" OUT = "/tmp/workspace/forensic-medicine" styles = getSampleStyleSheet() title_style = ParagraphStyle('QTitle', fontSize=16, textColor=colors.HexColor('#b71c1c'), spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica-Bold') exam_style = ParagraphStyle('Exam', fontSize=10, textColor=colors.HexColor('#1565c0'), alignment=TA_CENTER, spaceAfter=8, fontName='Helvetica-Bold') h2_style = ParagraphStyle('H2', fontSize=12, textColor=colors.HexColor('#1565c0'), spaceAfter=4, spaceBefore=10, fontName='Helvetica-Bold') h3_style = ParagraphStyle('H3', fontSize=11, textColor=colors.HexColor('#2e7d32'), spaceAfter=3, spaceBefore=8, fontName='Helvetica-Bold') body_style = ParagraphStyle('Body', fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY, fontName='Helvetica') bullet_style = ParagraphStyle('Bullet', fontSize=9.5, leading=14, leftIndent=16, spaceAfter=2, fontName='Helvetica') def h2(t): return Paragraph(t, h2_style) def h3(t): return Paragraph(t, h3_style) def p(t): return Paragraph(t, body_style) def bp(t): return Paragraph(f"• {t}", bullet_style) def b(t): return f'<b>{t}</b>' def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.grey, spaceAfter=4) def sp(n=6): return Spacer(1, n) def addimg(story, fname, w=16*cm, caption=None): path = f"{D}/{fname}" if not os.path.exists(path): return from PIL import Image as PILImage with PILImage.open(path) as pim: iw, ih = pim.size ar = iw / ih story.append(Image(path, width=w, height=w/ar)) if caption: story.append(Paragraph(f"<i>{caption}</i>", ParagraphStyle('cap', fontSize=8, textColor=colors.HexColor('#546e7a'), alignment=TA_CENTER, spaceAfter=4))) story.append(sp(6)) def make_table(headers, rows, col_widths=None): data = [headers] + rows if col_widths is None: col_widths = [16.6*cm/len(headers)] * len(headers) t = Table(data, colWidths=col_widths) t.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), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('FONTNAME', (0,1), (-1,-1), 'Helvetica'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#e8eaf6')]), ('GRID', (0,0), (-1,-1), 0.4, colors.grey), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ])) return t def new_doc(fn): return SimpleDocTemplate(f"{OUT}/{fn}", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm) # ════════════════════════════════════════════════════════════════════ # Q6 – FEMALE EXTERNAL GENITALIA # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q6_Female_External_Genitalia.pdf") story = [] story.append(Paragraph("Q6. ANATOMY OF FEMALE EXTERNAL GENITALIA\n& CHANGES FROM SEXUAL INTERCOURSE", title_style)) story.append(Paragraph("Exam: Winter 2012", exam_style)) story.append(hr()) story.append(h2("Anatomy of External Genitalia (Vulva) – Virgin Adult Female")) story.append(make_table( ["Structure","Description","Forensic Significance"], [ ["Mons pubis","Fatty pad over pubic symphysis; pubic hair after puberty","External surface landmark"], ["Labia majora","Two longitudinal folds; outer: hairy, pigmented; inner: smooth, sebaceous. Homologous to scrotum in male. Content: fat, areolar tissue, dartos muscle.","Bruising/contusion in sexual assault"], ["Labia minora","Thin, hairless, highly vascular folds. Anteriorly: prepuce + frenulum of clitoris. Posteriorly: fuse at fourchette.","Tearing/bruising in rape; swelling with arousal"], ["Clitoris","Erectile organ (two corpora cavernosa + glans); covered by prepuce (hood). Highly sensitive.","May show injury in sexual assault"], ["Vestibule","Space enclosed by labia minora. Contains: urethral meatus, vaginal introitus, Bartholin's gland ducts.","Bartholin's abscess in STIs"], ["Hymen","Thin mucous membrane fold PARTIALLY occluding vaginal orifice at introitus. Has opening(s) for menstrual flow. Composition: fibrovascular CT + stratified squamous epithelium on both surfaces.","CENTRAL to forensic sexual assault examination"], ["Bartholin's glands","Greater vestibular glands; pea-sized at 5 & 7 o'clock; secrete lubricating mucus","Enlarged/infected in repeated intercourse (bartholinitis)"], ["Posterior fourchette","Junction of labia minora posteriorly","Most common site of laceration in rape"], ], [3*cm, 7.5*cm, 6.1*cm] )) story.append(h2("Diagrams – Anatomy & Hymenal Types")) addimg(story, "13_female_genitalia_hymen.png", w=16*cm, caption="Fig 1: External genitalia anatomy (inferior view) with labeled structures, hymen types, clock-face tear sites at 5 & 7 o'clock, and healing stages") story.append(h2("Types of Hymen (Normal Variants)")) story.append(make_table( ["Type","Description","Forensic Note"], [ ["Annular (Ring)","Complete ring with central circular opening – most common","Circumferential rim; tears posteriorly"], ["Cribriform (Sieve)","Multiple small openings; sieve-like appearance","May be confused with old tears"], ["Septate","Opening divided by a transverse band","Septum may bleed/tear on first intercourse"], ["Fimbriated (Denticular)","Irregular scalloped/frilled margin","Notches are NORMAL – not tears"], ["Subseptate","Incomplete septum","Minor variant"], ["Imperforate","NO opening – PATHOLOGICAL","Causes haematocolpos at menarche; requires surgical treatment"], ], [3.5*cm, 6.5*cm, 6.6*cm] )) story.append(h2("Changes Due to Sexual Intercourse")) story.append(h3("Hymenal Changes – Temporal Sequence")) story.append(make_table( ["Stage","Time","Appearance","Key Features"], [ ["Fresh laceration","0–72 hours","Red, edematous, bleeding, irregular tender edges","Bleeds; usually at 5 & 7 o'clock positions (posterior quadrants – most dependent/thinnest)"], ["Recent","3–14 days","Healing edges; organised granulation tissue; less oedema","Epithelialisation begins; less tender"], ["Healing","2–6 weeks","Smooth margins forming; scar tissue","Edges rounding off"], ["Old/Healed","Weeks to permanent","Smooth, rounded/heaped margins – CARUNCULAE HYMENALES","Permanent hymenal tags = past penetration or childbirth"], ], [3*cm, 2.5*cm, 4.5*cm, 6.6*cm] )) story.append(p(b("Carunculae Hymenales (Myrtiformes):") + " Small rounded mucosal tags at vaginal orifice after complete healing. Remnants of hymen after defloration or parturition. Permanently indicate past penetration.")) story.append(p(b("Complete base tear:") + " Laceration reaching the attachment (base) of hymen to vaginal wall = definitive evidence of penile penetration.")) story.append(h3("Other Genital Changes")) story.append(make_table( ["Structure","Change"], [ ["Labia minora","Engorgement on arousal (physiological); bruising, ecchymosis, or lacerations in forcible intercourse"], ["Posterior fourchette","Most common site of tears in rape; perineal lacerations, bruising"], ["Vaginal walls","Bruising, abrasions, lacerations in rape; usually absent in consensual sex"], ["Bartholin's glands","Enlarged or infected with repeated intercourse (bartholinitis)"], ["Uterus/Cervix","With repeated intercourse: increased vascularity; with trauma: cervical lacerations"], ], [3.5*cm, 13.1*cm] )) story.append(h2("Medicolegal Importance")) story.append(make_table( ["Issue","Details"], [ ["Evidence of rape","Fresh laceration at 5 & 7 o'clock + perineal bruising + semen on swab = forensic triad"], ["Semen/sperm","Vaginal swab → sperm (live or dead) → DNA profile of perpetrator; sperm motility helps time intercourse"], ["Age estimation","Hymenal status + vulval development aid statutory rape investigations"], ["Two-finger test","DEPRECATED by Supreme Court of India (2022); cannot be used as evidence of consent or previous sexual activity"], ["Absence of injury","Does NOT disprove rape – especially in repeated assault, lax hymen, post-menopausal, or intoxicated victim"], ["Hymenal findings alone","CANNOT prove or disprove rape; only part of overall forensic picture"], ], [3.5*cm, 13.1*cm] )) doc.build(story) print("Q6 done") # ════════════════════════════════════════════════════════════════════ # Q7 – BRAIN BLOOD SUPPLY + HEAD INJURY + SKULL FRACTURES # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q7_Brain_Blood_Supply_Head_Injury.pdf") story = [] story.append(Paragraph("Q7. BLOOD SUPPLY OF BRAIN + HEAD INJURY\n+ SKULL FRACTURES + MLI OF IC HAEMORRHAGES", title_style)) story.append(Paragraph("Exam: Summer 2014", exam_style)) story.append(hr()) story.append(h2("Blood Supply of Brain")) story.append(p("The brain receives blood via <b>two systems</b>: the Internal Carotid System (anterior) and the Vertebrobasilar System (posterior). These are joined at the base of the brain by the <b>Circle of Willis</b>.")) story.append(make_table( ["System","Vessels","Territory"], [ ["Internal Carotid (Anterior)","CCA → ICA → ACA, MCA, Ant. choroidal, PComA","Frontal, parietal lobes; temporal lobe (ant.); basal ganglia; internal capsule"], ["Vertebrobasilar (Posterior)","Subclavian → Vertebral A (×2) → Basilar A → AICA, PICA, SCA, PCA","Occipital lobe, posterior temporal, cerebellum, brainstem, thalamus"], ], [3.5*cm, 6*cm, 7.1*cm] )) story.append(h3("Circle of Willis")) story.append(p("Arterial ring at base of brain equalising cerebral blood pressure. Components: ACA (pair) + AComA + ICA (pair) + PComA (pair) + PCA (pair) + Basilar artery. (See Q5 for full detail.)")) story.append(h2("Definition of Head Injury")) story.append(p("Head injury is any <b>trauma to the skull, scalp, brain, or related structures</b> (meninges, cerebral blood vessels) caused by an external physical force.")) story.append(h2("Types of Skull Fractures")) addimg(story, "14_skull_fractures.png", w=16*cm, caption="Fig 1: Six types of skull fractures with schematic illustrations and medicolegal significance") story.append(make_table( ["Type","Description","MLI"], [ ["Linear (80%)","Clean crack, no displacement, no bone movement","Indicates force; may cross meningeal artery groove → EDH"], ["Depressed","Fragment pushed below inner table level; direct blow","May show weapon shape (patterned injury – forensic value); risks cortical laceration"], ["Comminuted","Multiple fragments; high-velocity impact","Suggests severe force; indicates type/velocity of weapon"], ["Compound","Communicates with exterior (wound or sinus)","Open injury; risk of meningitis; implies penetrating mechanism"], ["Basal skull","Base of skull; often not visible on plain X-ray","Battle's sign, raccoon eyes, CSF rhinorrhoea/otorrhoea, haemotympanum"], ["Ring/Pond","Around foramen magnum; fall on feet or head","Transmitted axial force; may injure brainstem at craniocervical junction"], ], [2.8*cm, 5*cm, 8.8*cm] )) story.append(h2("Signs of Basal Skull Fracture")) addimg(story, "15_basal_skull_signs.png", w=16*cm, caption="Fig 2: Five clinical signs of basal skull fracture with anatomical localisation") story.append(make_table( ["Sign","Site of Fracture","Mechanism"], [ ["Battle's sign (mastoid ecchymosis)","Posterior fossa (petrous temporal)","Blood tracks along mastoid emissary veins to mastoid skin – appears 24–48 hrs after injury"], ["Raccoon eyes (periorbital ecchymosis)","Anterior fossa (cribriform plate of ethmoid)","Blood dissects forward under orbital periosteum into eyelids"], ["CSF rhinorrhoea","Cribriform plate + dural tear","CSF leaks through torn dura → nasal cavity → drips from nose"], ["CSF otorrhoea","Petrous temporal + dural tear","CSF leaks through torn dura → middle ear → external auditory canal"], ["Haemotympanum","Petrous temporal bone","Blood collects behind intact tympanic membrane – bluish discolouration"], ], [4*cm, 4*cm, 8.6*cm] )) story.append(h3("Contre-Coup Injury")) story.append(p("Brain injury on the <b>opposite side</b> to the point of impact. Mechanism: sudden deceleration → brain rebounds against opposite skull wall. Classic: <b>Occipital blow → Frontal/temporal cortical contusions</b>. Indicates head was moving at time of impact (fall or running assault). Forensic significance: helps reconstruct mechanism and circumstances of injury.")) story.append(h2("MLI of Intracranial Haemorrhages")) story.append(p("See <b>Q5</b> for full comparison table. Key MLI summary:")) story.append(make_table( ["Type","Primary MLI Point"], [ ["EDH","Virtually always traumatic; lucid interval = missed opportunity for treatment; medicolegal if medical help was delayed"], ["Acute SDH","Assault or RTA; shaken baby = child abuse; bilateral SDH + retinal haemorrhages in infant without external injury"], ["Chronic SDH","Minor trivial injury weeks earlier; may be missed; elderly/alcoholic predisposition; clinical mimic of dementia"], ["SAH","Spontaneous (natural) vs. traumatic; exertion, coitus can trigger; determining whether trauma caused or precipitated rupture is a forensic challenge"], ["ICH","Usually natural death (hypertension); Charcot-Bouchard microaneurysms; raised ICP → brainstem herniation → death"], ], [2*cm, 14.6*cm] )) doc.build(story) print("Q7 done") PYEOF
cd /tmp/workspace/forensic-medicine && python3 << 'PYEOF' 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, Table, TableStyle, HRFlowable, Image) from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY import os from PIL import Image as PILImage D = "/tmp/workspace/forensic-medicine/diagrams" OUT = "/tmp/workspace/forensic-medicine" styles = getSampleStyleSheet() title_style = ParagraphStyle('QTitle', fontSize=16, textColor=colors.HexColor('#b71c1c'), spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica-Bold') exam_style = ParagraphStyle('Exam', fontSize=10, textColor=colors.HexColor('#1565c0'), alignment=TA_CENTER, spaceAfter=8, fontName='Helvetica-Bold') h2_style = ParagraphStyle('H2', fontSize=12, textColor=colors.HexColor('#1565c0'), spaceAfter=4, spaceBefore=10, fontName='Helvetica-Bold') h3_style = ParagraphStyle('H3', fontSize=11, textColor=colors.HexColor('#2e7d32'), spaceAfter=3, spaceBefore=8, fontName='Helvetica-Bold') body_style = ParagraphStyle('Body', fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY, fontName='Helvetica') bullet_style = ParagraphStyle('Bullet', fontSize=9.5, leading=14, leftIndent=16, spaceAfter=2, fontName='Helvetica') def h2(t): return Paragraph(t, h2_style) def h3(t): return Paragraph(t, h3_style) def p(t): return Paragraph(t, body_style) def bp(t): return Paragraph(f"• {t}", bullet_style) def b(t): return f'<b>{t}</b>' def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.grey, spaceAfter=4) def sp(n=6): return Spacer(1, n) def addimg(story, fname, w=16*cm, caption=None): path = f"{D}/{fname}" if not os.path.exists(path): return with PILImage.open(path) as pim: iw, ih = pim.size ar = iw / ih story.append(Image(path, width=w, height=w/ar)) if caption: story.append(Paragraph(f"<i>{caption}</i>", ParagraphStyle('cap', fontSize=8, textColor=colors.HexColor('#546e7a'), alignment=TA_CENTER, spaceAfter=4))) story.append(sp(6)) def make_table(headers, rows, col_widths=None): data = [headers] + rows if col_widths is None: col_widths = [16.6*cm/len(headers)] * len(headers) t = Table(data, colWidths=col_widths) t.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), ('ALIGN', (0,0), (-1,-1), 'LEFT'), ('FONTNAME', (0,1), (-1,-1), 'Helvetica'), ('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.white, colors.HexColor('#e8eaf6')]), ('GRID', (0,0), (-1,-1), 0.4, colors.grey), ('VALIGN', (0,0), (-1,-1), 'TOP'), ('TOPPADDING', (0,0), (-1,-1), 3), ('BOTTOMPADDING', (0,0), (-1,-1), 3), ('LEFTPADDING', (0,0), (-1,-1), 4), ])) return t def new_doc(fn): return SimpleDocTemplate(f"{OUT}/{fn}", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm) # ════════════════════════════════════════════════════════════════════ # Q8+Q9 – ANS + SUDDEN DEATH + NEUROGENIC SHOCK # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q8_Q9_ANS_Sudden_Death_Neurogenic_Shock.pdf") story = [] story.append(Paragraph("Q8 & Q9. AUTONOMIC NERVOUS SYSTEM\nSUDDEN DEATH THROUGH ANS + ACUTE NEUROGENIC SHOCK", title_style)) story.append(Paragraph("Exam: May 2013 | Summer 2015", exam_style)) story.append(hr()) story.append(h2("The Autonomic Nervous System (ANS)")) story.append(p("The ANS is the division of the peripheral nervous system that regulates <b>involuntary visceral functions</b> (heart rate, blood pressure, respiration, digestion, glandular secretion). It has two main divisions: sympathetic (thoracolumbar) and parasympathetic (craniosacral).")) story.append(h2("Diagram – ANS Overview")) addimg(story, "09_ANS_overview.png", w=16*cm, caption="Fig 1: Autonomic Nervous System – Sympathetic vs Parasympathetic comparison (anatomy, neurotransmitters, effects)") addimg(story, "photo_ANS_innervation.jpg", w=12*cm, caption="Fig 2: Autonomic innervation of the heart – parasympathetic (purple, vagus nerve) and sympathetic (green, spinal cord) pathways") story.append(h2("Sympathetic Division")) story.append(make_table( ["Feature","Details"], [ ["Origin","T1–L2 lateral horn (intermediolateral cell column)"], ["Preganglionic","Short fibres → synapse in paravertebral chain ganglia (cervical, thoracic, lumbar, sacral) or prevertebral ganglia (coeliac, superior mesenteric, etc.)"], ["Postganglionic","Long fibres → target organs"], ["Neurotransmitters","Pre: Acetylcholine (ACh) | Post: Norepinephrine (except sweat glands and some vessels: ACh)"], ["Cardiac effects","↑ Heart rate (positive chronotropy), ↑ force (positive inotropy), ↑ AV conduction, coronary vasodilation"], ["Vascular effects","Vasoconstriction (skin, GIT, kidney) via α1; Vasodilation (skeletal muscle) via β2"], ["Respiratory","Bronchodilation (β2)"], ["GIT","↓ Motility, sphincter contraction, glycogenolysis in liver"], ["Overall effect","FIGHT or FLIGHT response"], ], [4*cm, 12.6*cm] )) story.append(h2("Parasympathetic Division")) story.append(make_table( ["Feature","Details"], [ ["Origin","Cranial nuclei: CN III (Edinger-Westphal), VII (superior salivatory), IX (inferior salivatory), X (dorsal motor nucleus + nucleus ambiguus) + S2–S4 lateral horn"], ["Preganglionic","Long fibres → synapse in terminal ganglia (near or in target organ)"], ["Postganglionic","Short fibres"], ["Neurotransmitters","Both pre and post: Acetylcholine (ACh); acts on muscarinic receptors"], ["Cardiac effects","↓ Heart rate (negative chronotropy), ↓ AV conduction, minimal effect on ventricles"], ["Vascular effects","Vasodilation (selected vascular beds)"], ["Respiratory","Bronchoconstriction, ↑ secretions"], ["GIT","↑ Motility, ↑ secretions, sphincter relaxation"], ["Overall effect","REST and DIGEST response"], ], [4*cm, 12.6*cm] )) story.append(h2("Cardiac Plexus")) story.append(make_table( ["Plexus","Location","Components"], [ ["Superficial cardiac plexus","Below aortic arch, right of ligamentum arteriosum","Left superior cervical sympathetic cardiac nerve + inferior cervical cardiac branch of left vagus"], ["Deep cardiac plexus","Behind aortic arch, in front of bifurcation of trachea","All remaining cardiac nerves (both divisions)"], ], [4*cm, 5*cm, 7.6*cm] )) story.append(h2("Sudden Death Initiated Through the ANS")) story.append(make_table( ["Mechanism","Trigger","Pathway","Example"], [ ["Vagally-mediated cardiac arrest","Neck compression, dental procedure, rectal exam, cold water, sudden emotional shock, instrumentation","Massive parasympathetic discharge → bradycardia → asystole","Death from carotid sinus stimulation (tight collar, assault)"], ["Neurogenic cardiac arrhythmia","Subarachnoid haemorrhage, massive stroke, CNS catastrophe","Autonomic storm → QT prolongation → Torsades de Pointes → VF","Neurogenic T-wave inversion (Cerebral T-waves)"], ["Catecholamine cardiomyopathy (Takotsubo)","Sudden physical/emotional stress","Massive epinephrine surge → direct myocardial toxicity → apical ballooning of LV","'Broken heart syndrome'; acute heart failure; death"], ["Reflex cardiac arrest","Airway manipulation, eye surgery, rectal distension","Reflex arc via vagus → bradycardia/asystole","Death during intubation; oculocardiac reflex"], ], [3.5*cm, 4*cm, 4.5*cm, 4.6*cm] )) story.append(h3("Named ANS Reflexes Causing Sudden Death")) story.append(make_table( ["Reflex","Afferent","Efferent","Result","Forensic Example"], [ ["Carotid sinus","Glossopharyngeal (IX)","Vagus → SA node","Cardiac arrest/severe bradycardia","Death from neck grip/tight collar; minimal force"], ["Diving reflex","Trigeminal (V) – cold water + nasopharynx","Vagus","Intense bradycardia + apnoea","Cold water drowning; auto-erotic asphyxia"], ["Laryngeal reflex","Superior laryngeal N (X branch)","Vagus + recurrent laryngeal","Laryngospasm + vagal bradycardia","Death during intubation; foreign body aspiration"], ["Bezold-Jarisch","Cardiac C-fibres (vagal afferents)","Vagus","Bradycardia + hypotension","Death during coronary catheterisation"], ["Oculocardiac","Trigeminal (V1 – ciliary ganglion)","Vagus","Bradycardia (30–50% slowing)","Intraoperative cardiac arrest in eye surgery"], ["Rectal/vesical","Pelvic splanchnic nerves","Vagus","Cardiac arrest","Death during rectal examination/enema"], ], [3*cm, 3*cm, 3*cm, 3.2*cm, 4.4*cm] )) story.append(h2("Acute Neurogenic Shock (Q9)")) story.append(h3("Definition")) story.append(p("Acute neurogenic shock is a form of <b>distributive shock</b> caused by <b>loss of sympathetic vascular tone</b> following spinal cord injury above T6 (or general/spinal anaesthesia), resulting in massive peripheral vasodilation and unopposed vagal bradycardia.")) story.append(h3("Mechanism")) story.append(make_table( ["Step","Event"], [ ["1","Spinal cord injury above T6 severs bilateral sympathetic outflow (T1–L2)"], ["2","No vasoconstriction → massive peripheral vasodilation → venous pooling → preload drops"], ["3","Cardiac sympathetics (T1–T5) also disrupted → no compensatory tachycardia"], ["4","Vagal tone (parasympathetic via CN X) is UNOPPOSED → BRADYCARDIA"], ["5","Preload ↓ + SVR ↓ + no compensatory HR rise = profound hypotension"], ], [1.5*cm, 15.1*cm] )) story.append(h3("Classic Triad – Neurogenic Shock")) story.append(make_table( ["Sign","Finding","Why – Mechanism"], [ ["Heart rate","BRADYCARDIA ★","Cardiac sympathetics (T1–T5) disrupted; vagal tone unopposed"], ["Skin","WARM, PINK, DRY","Vasodilation + sympathetic sweat glands paralysed"], ["Blood pressure","HYPOTENSION","Loss of SVR (vasodilation); low preload (venous pooling)"], ], [3.5*cm, 3.5*cm, 9.6*cm] )) story.append(h3("Differentiating Neurogenic from Hypovolemic Shock")) story.append(make_table( ["Feature","Neurogenic","Hypovolemic","Septic"], [ ["Heart rate","BRADYCARDIA ★","Tachycardia","Tachycardia"], ["Skin","Warm, pink","Cold, pale, clammy","Warm (early)"], ["SVR","↓","↑","↓"], ["CO","↓","↓","↑"], ["Cause","Spinal cord injury above T6","Haemorrhage, burns","Severe infection"], ["Response to fluids","Partial","Good","Partial"], ], [3.5*cm, 3.2*cm, 3.2*cm, 6.7*cm] )) story.append(h3("Forensic Importance")) for item in [ "Neurogenic shock with spinal cord injury → reconstruction of mechanism of injury (fall, assault, RTA)", "Sudden death in spinal injury patients → must distinguish from pulmonary embolism (common complication)", "Primary shock/vasovagal death: no structural findings at PM → diagnosis of exclusion", "Carotid sinus death from minimal neck pressure → issues of force used, intent, liability", ]: story.append(bp(item)) doc.build(story) print("Q8+Q9 done") # ════════════════════════════════════════════════════════════════════ # Q10 – FORENSIC DENTISTRY # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q10_Forensic_Dentistry.pdf") story = [] story.append(Paragraph("Q10. ROLE OF DENTISTRY IN FORENSIC MEDICINE\n(FORENSIC ODONTOLOGY)", title_style)) story.append(Paragraph("Exam: Summer 2015", exam_style)) story.append(hr()) story.append(h2("Definition")) story.append(p("Forensic odontology (forensic dentistry) is the application of dental science to <b>legal and medico-legal problems</b>, primarily involving <b>identification of individuals</b> and assessment of bite mark injuries.")) story.append(h2("Why Teeth Are Valuable in Forensic Identification")) story.append(make_table( ["Property","Forensic Value"], [ ["Hardest structures in the body (enamel = hardest biological material)","Survive fire, decomposition, chemical destruction, trauma"], ["Dental patterns are UNIQUE","No two mouths are identical; as individualising as fingerprints"], ["Lifetime records available","Dental charts, X-rays, impressions, photographs available for comparison"], ["Last to decompose","Useful in skeletonised, burnt, decomposed, fragmented remains"], ["DNA from dental pulp","Sex determination (amelogenin), identity, STR profiling"], ], [6*cm, 10.6*cm] )) story.append(h2("1. Identification of Unknown Bodies")) story.append(p("Compare postmortem dental findings with antemortem records. Unique features: filled cavities (restorations), crowns, bridges, implants, missing teeth, root shapes, bone pathology, prostheses. Used in: mass disasters (plane crashes, earthquakes, fires), decomposed bodies, fragmented remains.")) story.append(p("<b>DVI (Disaster Victim Identification):</b> Interpol DVI protocol classifies dental comparison as <b>Category 1 (primary) identifier</b> alongside fingerprints and DNA.")) story.append(h2("2. Age Estimation")) story.append(make_table( ["Age Group","Method Used"], [ ["0–6 years","Primary (deciduous) dentition: eruption sequence and development"], ["6–13 years","Mixed dentition; permanent tooth eruption sequence"], ["13–17 years","Third molar (wisdom tooth) development and eruption (Demirjian stages)"], ["Adults (>17 yrs)","Gustafson's method (1950) – 6 criteria, scored 0–3 each"], ], [3.5*cm, 13.1*cm] )) story.append(h2("Gustafson's Method – 6 Criteria")) addimg(story, "16_gustafson_method.png", w=16*cm, caption="Fig 1: Gustafson's method – 6 criteria for age estimation from a single tooth, each scored 0–3") story.append(make_table( ["No.","Criterion","Change with Age","Score 0","Score 3"], [ ["1","Attrition (A)","Crown wear increases","No wear","Dentine exposed; cusp worn flat"], ["2","Periodontosis (P)","Loss of periodontal attachment increases","Normal","Involvement of apical 1/3 of root"], ["3","Secondary dentine (S)","Deposition in pulp cavity increases","Large pulp","Pulp canal obliterated"], ["4","Cementum apposition (C)","Root cementum thickens","Normal thin layer","Marked thickening"], ["5","Root resorption (R)","Apical resorption increases","No resorption","Loss of >2 mm of root tip"], ["6","Root transparency (T)","Dentinal tubule sclerosis increases","No transparency","Full root transparent"], ], [0.8*cm, 3.5*cm, 4*cm, 4.1*cm, 4.2*cm] )) story.append(p(b("Formula:") + " Total score (sum of all 6 criteria, max 18) fed into regression equation → Estimated age ± 10 years")) story.append(h2("3. Bite Mark Analysis")) story.append(p("Bite marks: patterned injuries caused by teeth on victims (skin) or at crime scenes (food, wax, leather). Analysis: arch form, inter-canine distance, individual tooth marks, rotation, crowding, wear patterns. Compared with dental casts/photographs of suspect's dentition. Accepted as forensic evidence in court.")) story.append(make_table( ["Feature Analysed","Significance"], [ ["Arch form (U-shaped vs V-shaped)","Distinguishes human from animal; upper from lower arch"], ["Inter-canine distance","Helps match individual suspect"], ["Individual tooth marks","Unique rotations, crowding, missing teeth"], ["Bite mark on food (cheese, apple, wax)","Preserved impression; excellent for comparison"], ], [5*cm, 11.6*cm] )) story.append(h2("4. Sex Determination from Teeth")) story.append(make_table( ["Method","Basis"], [ ["Amelogenin gene PCR","Enamel protein gene on X and Y chromosomes; extracted from dental pulp DNA; XX = female, XY = male; works even on burnt/old teeth"], ["Morphological (minor)","Canine tooth size slightly larger in males; some population differences"], ], [4*cm, 12.6*cm] )) story.append(h2("5. Race/Population Indicators")) story.append(make_table( ["Feature","Population"], [ ["Shovel-shaped incisors (prominent lingual ridges)","East Asian, Native American (>90%)"], ["Carabelli's cusp (extra cusp on upper first molar)","Caucasian populations (35–60%)"], ["Crown size variations","Systematically differ across population groups"], ], [6*cm, 10.6*cm] )) story.append(h2("6. Mass Disaster Victim Identification (DVI)")) story.append(p("Following mass casualty events (plane crash, earthquake, terrorist attack, tsunami): Ante-mortem (AM) records collected from dentists → Post-mortem (PM) charting at mortuary → AM/PM dental comparison → <b>Category 1 positive identification</b>. First-choice method when dental records are available.")) story.append(h2("7. Forensic Traumatology & Dental Malpractice")) story.append(make_table( ["Application","Details"], [ ["Assault evidence","Avulsed/fractured/loose teeth = evidence of blow to face; documents force used"], ["Lip/mucosal injuries","Lacerations from dentures; bruising of oral mucosa from blows"], ["Dental malpractice","Wrong tooth extraction, inferior alveolar nerve injury, drug reactions; expert evidence in civil/criminal cases"], ], [4*cm, 12.6*cm] )) doc.build(story) print("Q10 done") PYEOF
cd /tmp/workspace/forensic-medicine && python3 << 'PYEOF' 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, Table, TableStyle, HRFlowable, Image) from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY import os from PIL import Image as PILImage D = "/tmp/workspace/forensic-medicine/diagrams" OUT = "/tmp/workspace/forensic-medicine" styles = getSampleStyleSheet() title_style = ParagraphStyle('QT', fontSize=16, textColor=colors.HexColor('#b71c1c'), spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica-Bold') exam_style = ParagraphStyle('Ex', fontSize=10, textColor=colors.HexColor('#1565c0'), alignment=TA_CENTER, spaceAfter=8, fontName='Helvetica-Bold') h2_style = ParagraphStyle('H2', fontSize=12, textColor=colors.HexColor('#1565c0'), spaceAfter=4, spaceBefore=10, fontName='Helvetica-Bold') h3_style = ParagraphStyle('H3', fontSize=11, textColor=colors.HexColor('#2e7d32'), spaceAfter=3, spaceBefore=8, fontName='Helvetica-Bold') body_style = ParagraphStyle('Bo', fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY, fontName='Helvetica') bullet_style = ParagraphStyle('Bu', fontSize=9.5, leading=14, leftIndent=16, spaceAfter=2, fontName='Helvetica') def h2(t): return Paragraph(t, h2_style) def h3(t): return Paragraph(t, h3_style) def p(t): return Paragraph(t, body_style) def bp(t): return Paragraph(f"• {t}", bullet_style) def b(t): return f'<b>{t}</b>' def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.grey, spaceAfter=4) def sp(n=6): return Spacer(1, n) def addimg(story, fname, w=16*cm, caption=None): path = f"{D}/{fname}" if not os.path.exists(path): return with PILImage.open(path) as pim: iw, ih = pim.size story.append(Image(path, width=w, height=w/(iw/ih))) if caption: story.append(Paragraph(f"<i>{caption}</i>", ParagraphStyle('c', fontSize=8, textColor=colors.HexColor('#546e7a'), alignment=TA_CENTER, spaceAfter=4))) story.append(sp(6)) def make_table(headers, rows, cw=None): data = [headers] + rows if cw is None: cw = [16.6*cm/len(headers)]*len(headers) t = Table(data, colWidths=cw) t.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), ('ALIGN',(0,0),(-1,-1),'LEFT'), ('FONTNAME',(0,1),(-1,-1),'Helvetica'), ('ROWBACKGROUNDS',(0,1),(-1,-1),[colors.white,colors.HexColor('#e8eaf6')]), ('GRID',(0,0),(-1,-1),0.4,colors.grey), ('VALIGN',(0,0),(-1,-1),'TOP'), ('TOPPADDING',(0,0),(-1,-1),3), ('BOTTOMPADDING',(0,0),(-1,-1),3), ('LEFTPADDING',(0,0),(-1,-1),4), ])) return t def new_doc(fn): return SimpleDocTemplate(f"{OUT}/{fn}", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm) # ════════════════════════════════════════════════════════════════════ # Q11 – BRAIN STEM DEATH + THOA # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q11_Brain_Stem_Death_THOA.pdf") story = [] story.append(Paragraph("Q11. BRAIN STEM DEATH\n& THOA ACT 1994", title_style)) story.append(Paragraph("Exam: Summer 2017 | P III Winter 2019", exam_style)) story.append(hr()) story.append(h2("Concept of Brain Stem Death")) story.append(p("Traditional death = irreversible cessation of heartbeat and breathing. With modern mechanical ventilators, heartbeat can be maintained even after complete brain destruction.")) story.append(p(b("Brain Stem Death (BSD)") + " is defined as the <b>irreversible loss of the capacity for consciousness</b> combined with the <b>irreversible loss of the capacity to breathe spontaneously</b>, due to permanent functional failure of the brainstem.")) story.append(h3("Why the Brainstem is Critical")) story.append(make_table( ["Brainstem Structure","Function Lost in BSD"], [ ["Reticular Activating System (midbrain/pons)","Consciousness and arousal – permanently abolished"], ["Respiratory centres (medulla)","Spontaneous breathing – permanently abolished"], ["Cardiovascular centres (medulla)","Heart can still beat autonomically without brainstem"], ["Cranial nerve nuclei III–XII","All brainstem reflexes – permanently abolished"], ], [5*cm, 11.6*cm] )) story.append(p("If the brainstem is irreversibly dead → the person can <b>never</b> regain consciousness or breathe independently → the person <b>IS dead</b>, even if the heart continues to beat with ventilator support.")) story.append(h2("Preconditions for BSD Testing (ALL Must Be Met)")) story.append(make_table( ["Precondition","Requirement"], [ ["Apnoeic coma","Patient in coma and on mechanical ventilation – not breathing spontaneously"], ["Known irreversible cause","Identified structural brain injury: severe head trauma, massive stroke (haemorrhagic or ischaemic), hypoxic brain damage after cardiac arrest, meningitis"], ["Exclude hypothermia","Core body temperature MUST be >35°C before testing"], ["Exclude drug intoxication","No sedatives, narcotics, neuromuscular blocking agents, barbiturates in therapeutic or toxic levels"], ["Exclude metabolic disturbance","Normal Na⁺, K⁺, Mg²⁺, Ca²⁺, glucose, pH; no renal or hepatic encephalopathy"], ["Exclude endocrine causes","No severe hypothyroidism or Addisonian crisis"], ], [4.5*cm, 12.1*cm] )) story.append(h2("Diagnosis: Six Brainstem Reflex Tests")) story.append(h3("Diagram – BSD Testing Protocol")) addimg(story, "10_BSD_THOA.png", w=16*cm, caption="Fig 1: BSD certification protocol – preconditions, 6 brainstem reflex tests, two-test requirement, and THOA Act 1994 provisions") story.append(make_table( ["Test No.","Test Name","Stimulus Applied","Normal Response","Result in BSD"], [ ["1","Pupillary light reflex","Bright light directed into each eye","Pupils constrict (both direct and consensual)","Fixed, dilated pupils – NO constriction to light"], ["2","Corneal reflex","Touch cornea with cotton wisp or saline drop","Blink response (orbicularis oculi)","NO blink"], ["3","Vestibulo-ocular reflex (caloric test)","Syringe 50 ml ice-cold water into each external auditory canal (EAC must be clear)","Eyes deviate toward stimulated ear","NO eye movement"], ["4","Oculo-cephalic reflex","Passive rotation of head rapidly to each side (only if C-spine cleared)","Eyes remain fixed in skull ('doll's eye' movement)","Eyes MOVE WITH the head (reflex absent)"], ["5","Gag/cough reflex","Stimulate posterior pharynx with suction catheter; deep tracheal suction","Gag and/or cough response","NO gag or cough"], ["6","APNOEA TEST","Pre-oxygenate with 100% O₂ for 10 min. Disconnect ventilator. Allow pCO₂ to rise to >60 mmHg (usually 8–10 min). Observe for breathing.","Spontaneous breathing movements","NO breathing attempt whatsoever"], ], [0.8*cm, 3*cm, 4.5*cm, 3.5*cm, 4.8*cm] )) story.append(h3("Who Performs BSD Testing?")) story.append(make_table( ["Requirement","India (THOA-based standard)"], [ ["Number of doctors","TWO doctors performing tests independently"], ["Qualification","Registered specialist of ≥5 years standing (neurologist, intensivist, anaesthetist, physician)"], ["Restriction","Neither should be a member of the transplant team"], ["Number of test sets","TWO complete sets; minimum 6 hours apart"], ["Time of death","Legal time of death = time the SECOND set of tests confirms BSD"], ], [4*cm, 12.6*cm] )) story.append(h2("THOA Act 1994 – Transplantation of Human Organs Act")) story.append(make_table( ["Provision","Details"], [ ["Legal recognition of BSD","BSD = legal death in India for purpose of organ donation and transplantation"], ["Cadaveric organ donation","Legalised removal and use of organs/tissues from brain-dead donors"], ["Consent requirement","Informed written consent of NEAREST RELATIVE mandatory before organ retrieval"], ["BSD Certification Board","4 members: (1) Hospital Medical Officer in-charge, (2) Independent specialist (neurosurgeon/neurologist) nominated by authority, (3) Treating intensivist/doctor, (4) One additional specialist"], ["Living donor","Near-relatives may donate without committee; non-relatives require Authorization Committee approval"], ["Prohibited acts","Commercial dealings in organs (buying/selling) – absolutely prohibited"], ["Punishment","Removal without authority: imprisonment up to 10 years + fine"], ["2011 Amendment","Included tissues (cornea, bone, heart valves, skin); expanded donor pool; strengthened penalties"], ], [4*cm, 12.6*cm] )) story.append(h2("Medico-Legal Significance")) for item in [ "BSD must be formally and properly certified before organs can be legally retrieved – protects doctors from criminal liability", "Time of BSD = time of legal death for all purposes (death certificate, insurance, inheritance, forensic)", "If death was due to unnatural cause (RTA, assault, homicide): police/inquest NOC required before organ retrieval", "Full written documentation of BSD certification must be maintained", "Failure to certify BSD properly before organ retrieval = criminal offence under THOA Act", "Families of brain-dead patients have the right to refuse organ donation", ]: story.append(bp(item)) doc.build(story) print("Q11 done") # ════════════════════════════════════════════════════════════════════ # Q12 – DNA PROFILING # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q12_DNA_Profiling.pdf") story = [] story.append(Paragraph("Q12. DNA PROFILING\nLEGAL, MORAL AND SOCIAL IMPLICATIONS", title_style)) story.append(Paragraph("Exam: Winter 2019", exam_style)) story.append(hr()) story.append(h2("Definition")) story.append(p("DNA profiling (DNA fingerprinting / DNA typing) is a forensic technique that identifies individuals by analysing <b>polymorphic (variable) regions</b> in their DNA, producing a unique pattern called a DNA profile. <i>Discovered by Sir Alec Jeffreys, University of Leicester, UK, 1984.</i>")) story.append(h2("Basis of DNA Profiling")) story.append(p("The human genome (3 billion base pairs) is 99.7% identical across all humans. The <b>0.3% variation</b> includes:")) story.append(make_table( ["Marker","Full Name","Repeat Unit","Forensic Use"], [ ["STR","Short Tandem Repeat","2–7 bp sequence repeated variable times at specific chromosomal loci","CURRENT GOLD STANDARD; PCR-based; sensitive; works on degraded samples"], ["VNTR","Variable Number of Tandem Repeat","Longer repeat units (10–100 bp)","Older RFLP method; requires more DNA; less sensitive"], ["SNP","Single Nucleotide Polymorphism","Single base variation at specific position","Ancestry, population genetics, chip-based analysis"], ["mtDNA","Mitochondrial DNA","High copy number per cell","Maternal lineage; degraded/old samples; hair without roots"], ], [1.8*cm, 3.5*cm, 4.3*cm, 7*cm] )) story.append(h2("Diagram – PCR-STR Technique (Step-by-Step)")) addimg(story, "11_DNA_profiling.png", w=16*cm, caption="Fig 1: DNA profiling flowchart – from sample collection through PCR-STR amplification, capillary electrophoresis to court evidence") story.append(h2("Steps in PCR-STR DNA Profiling")) story.append(make_table( ["Step","Process","Key Points"], [ ["1. Sample collection","Blood, semen, saliva, hair roots, skin cells, bone marrow, teeth, touch DNA","Forensic samples from crime scene; chain of custody begins here"], ["2. DNA extraction","Cell lysis → Proteinase K digestion → phenol-chloroform or spin-column purification","Quality and quantity critical; avoid contamination"], ["3. Quantification","qPCR (quantitative PCR) to measure DNA amount","Minimum 0.5–1 ng needed; assess for inhibitors"], ["4. PCR amplification (multiplex)","Multiple STR loci amplified simultaneously with fluorescent-labelled primers","CODIS (USA): 20 loci; highly multiplexed for maximum discrimination"], ["5. Capillary electrophoresis","PCR products separated by size; laser detects fluorescent labels → allele peak sizes","Each allele = a number (e.g., 15, 18 at a locus)"], ["6. Profile generation","Allele sizes at all loci = DNA profile (a string of numbers)","Profile compared with reference/database sample"], ["7. Probability calculation","Random match probability = chance an unrelated person shares the same profile","Typically 1 in billions for 20-locus STR match"], ], [1.5*cm, 5.5*cm, 9.6*cm] )) story.append(h2("Forensic Applications")) story.append(make_table( ["Application","Details"], [ ["Criminal identification","Rape, murder, robbery – linking suspect to crime scene via biological evidence (blood, semen, hair)"], ["Sexual assault","Sperm DNA from vaginal swab matched to perpetrator; mixture analysis if multiple contributors"], ["Paternity/maternity disputes","Determine biological parent – court-ordered; immigration cases"], ["Unknown body identification","Mass disasters (DVI), decomposed/skeletonised/fragmented remains – match to family reference samples"], ["Missing persons","Recovered remains matched to family via direct or familial comparison (mtDNA for maternal line)"], ["Exoneration","Proving innocence of wrongfully convicted persons; cold case resolution"], ["Familial searching","Partial database match → identify relatives of unknown perpetrator"], ], [4*cm, 12.6*cm] )) story.append(h2("Legal Implications")) story.append(make_table( ["Issue","Details"], [ ["Admissibility in court","Expert evidence under Section 45, Indian Evidence Act; highly persuasive"], ["Reliability","Extremely high – 1 in billions for 20-locus STR match; error rate <1:10¹⁰"], ["Right against self-incrimination","Article 20(3), Constitution of India: accused CANNOT be compelled to give DNA sample"], ["DNA databases","CODIS (USA), NDNAD (UK) – concerns about wrongful inclusion, retention of acquitted persons' profiles"], ["India – legislation","DNA Technology (Use and Application) Regulation Bill 2019 proposed but not enacted as of 2024"], ["Chain of custody","Rigorous documentation essential; evidence can be planted; contamination can occur"], ["Exclusion vs. inclusion","Can definitively EXCLUDE an innocent person (more important than inclusion)"], ], [4*cm, 12.6*cm] )) story.append(h2("Moral and Ethical Implications")) story.append(make_table( ["Issue","Concern"], [ ["Privacy","DNA reveals most sensitive biological information: genetic diseases, ancestry, family relationships, predispositions"], ["Consent","Taking DNA without informed consent violates bodily autonomy and privacy rights"], ["Database retention","Should DNA of arrested-but-acquitted persons be permanently stored? Raises civil liberty issues"], ["Genetic discrimination","Insurers, employers, or governments may discriminate based on genetic risk profiles"], ["Ethnic profiling","Over-representation of minority communities in databases → systemic racial bias in investigations"], ["Unexpected family findings","DNA may reveal non-paternity, unknown relatives, adoption – psychological harm"], ["Right to know vs. not to know","Incidental genetic disease findings discovered during profiling – who decides what to disclose?"], ], [3.5*cm, 13.1*cm] )) story.append(h2("Social Implications")) story.append(make_table( ["Area","Impact"], [ ["Family structure","Proves/disproves parentage → affects inheritance, custody, property succession"], ["Justice system","Exonerates innocent (Innocence Project USA: 375+ exonerations); solves cold cases decades later"], ["Public trust","Creates anxiety about genetic privacy and surveillance in general population"], ["Insurance","Risk of companies accessing DNA to increase premiums or deny coverage"], ["Society","Shift in burden of proof in criminal trials; over-reliance on DNA vs. other evidence"], ["Forensic science","Transformed modern investigative science; new ethical frameworks being developed globally"], ], [3*cm, 13.6*cm] )) doc.build(story) print("Q12 done") PYEOF
cd /tmp/workspace/forensic-medicine && python3 << 'PYEOF' 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, Table, TableStyle, HRFlowable, Image) from reportlab.lib.enums import TA_CENTER, TA_JUSTIFY import os from PIL import Image as PILImage D = "/tmp/workspace/forensic-medicine/diagrams" OUT = "/tmp/workspace/forensic-medicine" styles = getSampleStyleSheet() title_style = ParagraphStyle('QT', fontSize=16, textColor=colors.HexColor('#b71c1c'), spaceAfter=4, alignment=TA_CENTER, fontName='Helvetica-Bold') exam_style = ParagraphStyle('Ex', fontSize=10, textColor=colors.HexColor('#1565c0'), alignment=TA_CENTER, spaceAfter=8, fontName='Helvetica-Bold') h2_style = ParagraphStyle('H2', fontSize=12, textColor=colors.HexColor('#1565c0'), spaceAfter=4, spaceBefore=10, fontName='Helvetica-Bold') h3_style = ParagraphStyle('H3', fontSize=11, textColor=colors.HexColor('#2e7d32'), spaceAfter=3, spaceBefore=8, fontName='Helvetica-Bold') body_style = ParagraphStyle('Bo', fontSize=9.5, leading=14, spaceAfter=4, alignment=TA_JUSTIFY, fontName='Helvetica') bullet_style = ParagraphStyle('Bu', fontSize=9.5, leading=14, leftIndent=16, spaceAfter=2, fontName='Helvetica') def h2(t): return Paragraph(t, h2_style) def h3(t): return Paragraph(t, h3_style) def p(t): return Paragraph(t, body_style) def bp(t): return Paragraph(f"• {t}", bullet_style) def b(t): return f'<b>{t}</b>' def hr(): return HRFlowable(width="100%", thickness=0.5, color=colors.grey, spaceAfter=4) def sp(n=6): return Spacer(1, n) def addimg(story, fname, w=16*cm, caption=None): path = f"{D}/{fname}" if not os.path.exists(path): return with PILImage.open(path) as pim: iw, ih = pim.size story.append(Image(path, width=w, height=w/(iw/ih))) if caption: story.append(Paragraph(f"<i>{caption}</i>", ParagraphStyle('c', fontSize=8, textColor=colors.HexColor('#546e7a'), alignment=TA_CENTER, spaceAfter=4))) story.append(sp(6)) def make_table(headers, rows, cw=None): data = [headers] + rows if cw is None: cw = [16.6*cm/len(headers)]*len(headers) t = Table(data, colWidths=cw) t.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), ('ALIGN',(0,0),(-1,-1),'LEFT'), ('FONTNAME',(0,1),(-1,-1),'Helvetica'), ('ROWBACKGROUNDS',(0,1),(-1,-1),[colors.white,colors.HexColor('#e8eaf6')]), ('GRID',(0,0),(-1,-1),0.4,colors.grey), ('VALIGN',(0,0),(-1,-1),'TOP'), ('TOPPADDING',(0,0),(-1,-1),3), ('BOTTOMPADDING',(0,0),(-1,-1),3), ('LEFTPADDING',(0,0),(-1,-1),4), ])) return t def new_doc(fn): return SimpleDocTemplate(f"{OUT}/{fn}", pagesize=A4, rightMargin=2*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=2*cm) # ════════════════════════════════════════════════════════════════════ # Q13 – STARVATION # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q13_Starvation.pdf") story = [] story.append(Paragraph("Q13. PATHOPHYSIOLOGY OF STARVATION", title_style)) story.append(Paragraph("Exam: Summer 2022", exam_style)) story.append(hr()) story.append(h2("Definition")) story.append(p("Starvation is the state of deprivation of adequate nutrition – calories and/or essential nutrients – leading to <b>progressive breakdown of body fuel stores</b>, metabolic adaptation, organ dysfunction, and ultimately death.")) story.append(h2("Diagram – 4 Phases of Starvation")) addimg(story, "12_starvation_phases.png", w=16*cm, caption="Fig 1: Four-phase metabolic progression of starvation – fuel sources, key events, and terminal phase changes") story.append(h2("4 Phases of Starvation")) story.append(make_table( ["Phase","Duration","Primary Fuel","Key Metabolic Events"], [ ["Phase 1","0–24 hours","Liver glycogen (~100–120 g)","Glycogenolysis maintains blood glucose; insulin ↓, glucagon ↑; glucose depleted in 12–16 hrs"], ["Phase 2","Days 1–5","Fat (FFA) + some protein","Lipolysis → FFA release; liver converts FFA → ketone bodies; ketosis develops; gluconeogenesis from amino acids (alanine, glutamine) maintains glucose; protein SPARING begins as brain shifts to ketones"], ["Phase 3","Weeks","Predominantly fat","Brain fully adapted to ketones; protein catabolism MINIMAL; BMR falls 20–40% (adaptive thermogenesis); T3/T4 ↓, reverse T3 ↑; GH ↑ and cortisol ↑ maintain lipolysis and gluconeogenesis"], ["Phase 4 (Terminal)","Fat stores depleted","Forced protein catabolism","Skeletal muscle + visceral organ protein broken down; hypoalbuminaemia → oedema (kwashiorkor pattern); immune suppression; cardiac muscle wasting → arrhythmia → DEATH"], ], [1.8*cm, 2.5*cm, 3.5*cm, 8.8*cm] )) story.append(h2("Key Metabolic Changes – Summary Table")) story.append(make_table( ["Parameter","Change","Mechanism/Significance"], [ ["Blood glucose","Progressive fall → hypoglycaemia (terminal)","Glycogen depleted; gluconeogenesis limited"], ["Ketone bodies","Rise (ketonaemia, ketonuria)","β-oxidation of FFA → acetoacetate + β-hydroxybutyrate + acetone"], ["Insulin","Falls","Promotes lipolysis and gluconeogenesis; inhibits protein synthesis"], ["Glucagon","Rises","Stimulates glycogenolysis, gluconeogenesis, lipolysis"], ["Free fatty acids (FFA)","Rise markedly","Released from adipose lipolysis; primary metabolic fuel"], ["Serum albumin","Falls (late Phase 3/4)","Reduced hepatic synthesis; oncotic pressure ↓ → nutritional oedema"], ["BMR","Falls 20–40%","Adaptive thermogenesis; thyroid hormone reduction"], ["T3/T4","Fall; reverse T3 ↑","Reduced metabolic rate; protein and energy conservation"], ["Cortisol","Rises","Anti-insulin; promotes protein catabolism; maintains gluconeogenesis"], ["Growth hormone","Rises","Anti-insulin; promotes lipolysis; protein sparing effect"], ["Uric acid","Rises","Increased protein catabolism → purine release"], ], [3.5*cm, 3.5*cm, 9.6*cm] )) story.append(h2("Organ-Specific Effects")) story.append(make_table( ["Organ","Effect of Starvation"], [ ["Heart","Brown atrophy – lipofuscin pigment accumulates; reduced chamber size; decreased contractility; predisposition to arrhythmia; QT prolongation (electrolyte imbalance)"], ["Skeletal muscle","Progressive wasting (sarcopenia); weakness; eventual inability to stand/walk"], ["Liver","Small; fatty change (lipid deposits from mobilised FFA); later: hepatic failure"], ["GIT","Villous atrophy → malabsorption; constipation; reduced secretions; mucosal barrier impaired → bacterial translocation"], ["Immune system","Lymphocyte depletion; impaired cell-mediated immunity → susceptibility to infections"], ["Kidney","Reduced GFR; concentrated urine; hypokalaemia, hypomagnesaemia"], ["Bone marrow","Gelatinous transformation – yellow (fatty) marrow replaced by mucoid stroma; anaemia"], ["Endocrine","Amenorrhoea; infertility; reduced libido; growth retardation in children"], ["Brain","Relatively spared until late; eventually: cognitive impairment, irritability, apathy"], ["Skin","Thin, dry, wrinkled, hyperpigmented; poor wound healing; pressure ulcers"], ["Hair","Sparse, brittle, discoloured; flag sign = alternating light/dark bands"], ], [2.5*cm, 14.1*cm] )) story.append(h2("Postmortem Findings in Death from Starvation")) story.append(h3("External Findings")) for item in [ "Extreme emaciation – most striking feature; all bony prominences visible (iliac crests, ribs, cheekbones)", "Complete absence of subcutaneous fat everywhere", "Skin: thin, dry, loose, wrinkled, hanging; hyperpigmented", "Hair: sparse, thin, discoloured; flag sign if nutritional cycling", "Oedema of lower limbs and face (protein depletion phase – 'famine oedema')", "Eyes: sunken; mucous membranes pale (anaemia)", ]: story.append(bp(item)) story.append(h3("Internal Findings")) story.append(make_table( ["Organ","Postmortem Finding"], [ ["All organs","Markedly reduced in size (generalised atrophy)"], ["Heart","'Brown atrophy' – small, brown colour; lipofuscin granules on histology; atrophied myocardium"], ["Liver","Small; fatty change; depleted glycogen"], ["Intestines","Empty, thin-walled; villous atrophy on microscopy"], ["Bone marrow","GELATINOUS TRANSFORMATION – yellow marrow replaced by pale, mucoid gelatinous material (diagnostic)"], ["Adipose tissue","Completely absent: subcutaneous, omental, mesenteric, pericardial"], ["Muscles","Generalised wasting; reduced mass"], ["Thymus/lymph nodes","Atrophied; lymphocyte depletion"], ], [3*cm, 13.6*cm] )) story.append(h2("Medicolegal Aspects")) story.append(make_table( ["Issue","Details"], [ ["Homicidal starvation (neglect)","Wilful withholding of food from child, elderly, disabled person by caregiver → IPC S.304 (culpable homicide) or S.304A (criminal negligence) or S.302 (if intention to kill)"], ["Distinction from natural wasting","PM must exclude terminal illness (cancer, AIDS, TB, malabsorption) that could independently cause emaciation – diagnosis of exclusion; histology, biochemistry, radiology"], ["Hunger strike deaths","Prison/state authorities' duty of care; legal permissibility of force-feeding; WHO guidelines on medical ethics"], ["Anorexia nervosa","Self-inflicted starvation; natural death certification; complex psychiatric and forensic issues"], ["Refeeding syndrome","Rapid refeeding after starvation → dangerous hypophosphataemia → respiratory failure, cardiac arrest, neurological complications; medicolegal issue if death follows institutional refeeding"], ["Child starvation","Child Protection Laws; Section 317 IPC; mandatory reporting by healthcare workers"], ["Mass starvation (atrocities/disasters)","Documentation for international human rights proceedings; war crimes law"], ], [3.5*cm, 13.1*cm] )) doc.build(story) print("Q13 done") # ════════════════════════════════════════════════════════════════════ # Q14 – HOSPITAL ACQUIRED INFECTION # ════════════════════════════════════════════════════════════════════ doc = new_doc("Q14_Hospital_Acquired_Infection.pdf") story = [] story.append(Paragraph("Q14. MEDICOLEGAL ASPECTS OF\nHOSPITAL ACQUIRED INFECTION (HAI)", title_style)) story.append(Paragraph("Exam: Summer 2022", exam_style)) story.append(hr()) story.append(h2("Definition")) story.append(p("Hospital Acquired Infection (HAI) / <b>Nosocomial infection</b> is any infection that was <b>not present or incubating at the time of hospital admission</b>, manifesting:")) story.append(bp("<b>≥48–72 hours after admission</b>, OR")) story.append(bp("<b>Within 30 days of discharge</b>, OR")) story.append(bp("<b>Within 1 year</b> for implant-related infections (prosthetic joints, cardiac devices)")) story.append(h2("Classification and Common Types")) story.append(make_table( ["Type","Abbrev.","Frequency","Common Organisms"], [ ["Urinary tract infection (catheter-associated)","CAUTI","~40% (most common)","E. coli, Klebsiella, Pseudomonas, Enterococcus"], ["Surgical site infection","SSI","~20%","S. aureus (MRSA), E. coli, Enterococcus"], ["Ventilator-associated pneumonia","VAP","~15%","Pseudomonas, Acinetobacter baumannii, MRSA"], ["Central line bloodstream infection","CLABSI","~10%","Staphylococci (CoNS, MRSA), Candida spp."], ["Clostridioides difficile colitis","CDI","~5%","C. difficile (after antibiotic disruption of flora)"], ], [5*cm, 1.8*cm, 2*cm, 7.8*cm] )) story.append(h2("Diagram – Medicolegal Pathway of HAI")) addimg(story, "17_HAI_medicolegal.png", w=16*cm, caption="Fig 1: Medicolegal decision pathway for HAI – from occurrence through negligence determination to legal consequences and hospital defences") story.append(h2("1. Medical Negligence")) story.append(p("HAI may constitute medical negligence if <b>standard infection control practices were not followed</b>. Four elements must all be proven:")) story.append(make_table( ["Element","Application in HAI"], [ ["Duty of care","Hospital has a legal duty to provide a safe environment and prevent reasonably avoidable infections"], ["Breach of duty","Failure to follow standard protocols: hand hygiene, aseptic technique, instrument sterilisation, isolation procedures"], ["Causation","The breach directly caused the infection (proximate cause)"], ["Damage","The infection caused measurable harm: prolonged stay, additional procedures, permanent disability, or death"], ], [3.5*cm, 13.1*cm] )) story.append(p(b("Bolam Test (India):") + " The standard of care is what a reasonable, competent hospital and its staff would provide under similar circumstances.")) story.append(h2("2. Consumer Protection Act 2019")) story.append(p("Patient or legal heir can file complaint before Consumer Disputes Redressal Commission (District/State/National level). HAI leading to prolonged illness, disability, or death = <b>'deficiency in service'</b>. Compensation awarded for medical expenses, pain and suffering, loss of income. Hospital must prove it followed standard infection control protocols.")) story.append(h2("3. Criminal Liability")) story.append(make_table( ["Provision","Applicability"], [ ["IPC Section 304A","Causing death by a rash or negligent act not amounting to culpable homicide; applicable when gross negligence causes death from HAI"], ["IPC Section 304","Culpable homicide not amounting to murder – if hospital knew infection was likely but was recklessly indifferent"], ["IPC Section 304B (analogy)","Dowry death analogy does not apply, but negligence standards apply to institutional care deaths"], ], [4.5*cm, 12.1*cm] )) story.append(h2("4. Doctrine of Res Ipsa Loquitur")) story.append(p(b('"The thing speaks for itself."') + " In cases where the HAI is so obviously caused by hospital negligence that it could not have happened without it, the burden of proof <b>shifts to the hospital</b> to show it was not negligent.")) story.append(p("Examples where res ipsa loquitur applies: Blood transfusion transmitting HIV/Hepatitis B/C (mandatory screening not done); wrong patient given infected blood; surgical instrument clearly not sterilised; retained foreign body causing infection.")) story.append(h2("5. Blood-Borne Infection Transmission")) story.append(make_table( ["Infection","Screening Requirement","Liability if Not Done"], [ ["HIV","MANDATORY screening of ALL blood before transfusion","Absolute negligence – multiple Supreme Court judgments; full compensation awarded"], ["Hepatitis B (HBV)","MANDATORY screening","Absolute negligence"], ["Hepatitis C (HCV)","MANDATORY screening","Absolute negligence"], ["Malaria","MANDATORY in endemic areas","Negligence"], ["Syphilis (VDRL/RPR)","MANDATORY","Negligence"], ], [3.5*cm, 5*cm, 8.1*cm] )) story.append(h2("6. Standard Precautions – Hospital's Legal Duty")) story.append(make_table( ["Precaution","Requirements (WHO/CDC Standard)"], [ ["Hand hygiene","WHO 5 Moments: (1) before patient contact, (2) before aseptic procedure, (3) after body fluid exposure, (4) after patient contact, (5) after touching patient surroundings. Soap/water or alcohol-based rub."], ["Personal protective equipment","Gloves, gowns, masks, eye protection based on risk assessment; correct donning and doffing procedure"], ["Safe injection practices","Single-use needles and syringes; never re-use; safe sharps disposal"], ["Sterilisation/disinfection","All reusable equipment: high-level disinfection or sterilisation as appropriate (Spaulding classification)"], ["Patient isolation","Contact, droplet, airborne precautions as indicated; isolation rooms for MDR organisms"], ["Antibiotic stewardship","Rational antibiotic use policy to prevent emergence of MDR organisms"], ["Surveillance","Active HAI surveillance; mandatory reporting; root cause analysis for clusters"], ], [3.5*cm, 13.1*cm] )) story.append(h2("7. Regulatory and Documentation Framework")) story.append(make_table( ["Framework","Requirement"], [ ["NABH (India)","National Accreditation Board for Hospitals – mandatory infection control programme; failure = de-accreditation; regular audits"], ["Biomedical Waste Mgmt Rules 2016","Proper colour-coded segregation, storage, transport, disposal of infectious waste; penalties for violations"], ["National HAI Surveillance Program","Mandatory reporting of sentinel HAI events to national database"], ["WHO Global Action Plan on AMR","HAI prevention integral to antimicrobial resistance control; hospital stewardship programmes"], ["Court documentation","All HAI cases must be documented; adverse events recorded; mortality and morbidity review"], ], [3.5*cm, 13.1*cm] )) story.append(h2("8. Death Certification and Inquest Issues")) for item in [ "Death certificate must honestly reflect HAI as cause of death if it was the proximate cause", "If death follows an unnatural cause (RTA, assault) + HAI: both must be reflected; inquest may be required", "Hospital must not underreport HAI deaths to protect its reputation (criminal falsification if done)", "Family has the right to demand explanation and medical records under RTI Act", "NABH accreditation can be withdrawn if systematic HAI underreporting is proven", ]: story.append(bp(item)) story.append(h2("9. Key Legal Precedents (India)")) story.append(make_table( ["Case Type","Outcome"], [ ["HIV from blood transfusion","Multiple State Commissions and NCDRC held blood banks + hospitals liable; compensation ₹5–25 lakh+ awarded"], ["MRSA post-surgical SSI","Consumer courts held hospitals negligent for failure to follow sterilisation protocols"], ["VAP in ICU","Medical council inquiry + compensation when inadequate ventilator care bundle documented"], ], [5*cm, 11.6*cm] )) doc.build(story) print("Q14 done") print("\nAll 11 separate PDFs complete!") PYEOF