Hi
I am preparing for neet 2027
All
| Subject | Priority Class 12 Topics to Start |
|---|---|
| Biology | Reproduction, Genetics & Evolution, Biology in Human Welfare |
| Chemistry | Electrochemistry, Chemical Kinetics, Coordination Compounds, Organic (Amines, Biomolecules) |
| Physics | Electrostatics, Current Electricity, Magnetic Effects, Optics |
Ok
I have exam of these topics
| Subject | Topic |
|---|---|
| Physics | Units and Dimensions |
| Chemistry | Mole Concept and Atomic Structure |
| Biology (Botany) | Cell - The Unit of Life, Cell Cycle and Division (upto Mitosis) |
| Biology (Zoology) | Breathing and Exchange of Gases |
All
| Day | Focus |
|---|---|
| Today (June 29) | Cell - Unit of Life (read + revise organelles) |
| June 30 | Cell Cycle + Mitosis (stages with diagrams) |
| July 1 | Breathing & Exchange of Gases |
| July 2 | Mole Concept + Atomic Structure |
| July 3 | Units & Dimensions + solve PYQs for all topics |
| July 4 | Full mock revision + weak areas |
| July 5 | TEST DAY - quick morning revision |
All in pdf so that I can take print outโฆ
mkdir -p /home/daytona/workspace/neet-revision && ls /home/daytona/workspace/neet-revision/
~/neet-revision/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_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
OUTPUT = "/home/daytona/workspace/neet-revision/NEET_Revision_Guide.pdf"
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
rightMargin=1.8*cm, leftMargin=1.8*cm,
topMargin=1.8*cm, bottomMargin=1.8*cm,
title="NEET 2027 - Minor Test Revision Guide",
author="Orris AI"
)
W, H = A4
styles = getSampleStyleSheet()
# Custom styles
def make_style(name, parent='Normal', **kwargs):
s = ParagraphStyle(name, parent=styles[parent], **kwargs)
return s
cover_title = make_style('CoverTitle', fontSize=26, fontName='Helvetica-Bold',
textColor=colors.HexColor('#1a237e'), alignment=TA_CENTER,
spaceAfter=8)
cover_sub = make_style('CoverSub', fontSize=14, fontName='Helvetica',
textColor=colors.HexColor('#37474f'), alignment=TA_CENTER, spaceAfter=6)
cover_info = make_style('CoverInfo', fontSize=12, fontName='Helvetica',
textColor=colors.HexColor('#e65100'), alignment=TA_CENTER, spaceAfter=4)
sec_title = make_style('SecTitle', fontSize=16, fontName='Helvetica-Bold',
textColor=colors.white, alignment=TA_LEFT, spaceAfter=4,
spaceBefore=12, leftIndent=6)
sub_title = make_style('SubTitle', fontSize=13, fontName='Helvetica-Bold',
textColor=colors.HexColor('#1a237e'), spaceAfter=4, spaceBefore=8)
sub2_title = make_style('Sub2Title', fontSize=11, fontName='Helvetica-Bold',
textColor=colors.HexColor('#37474f'), spaceAfter=3, spaceBefore=6)
body = make_style('Body', fontSize=9.5, leading=14, spaceAfter=3)
bullet = make_style('Bullet', fontSize=9.5, leading=14, leftIndent=14,
bulletIndent=4, spaceAfter=2)
note_style = make_style('Note', fontSize=9, fontName='Helvetica-Oblique',
textColor=colors.HexColor('#b71c1c'), leftIndent=10,
borderPad=4, spaceAfter=4)
# Table style helper
def plain_table(data, col_widths, header_color='#1a237e', alt_row=True):
t = Table(data, colWidths=col_widths, repeatRows=1)
style_cmds = [
('BACKGROUND', (0,0), (-1,0), colors.HexColor(header_color)),
('TEXTCOLOR', (0,0), (-1,0), colors.white),
('FONTNAME', (0,0), (-1,0), 'Helvetica-Bold'),
('FONTSIZE', (0,0), (-1,0), 9),
('FONTSIZE', (0,1), (-1,-1), 9),
('FONTNAME', (0,1), (-1,-1), 'Helvetica'),
('ROWBACKGROUNDS', (0,1), (-1,-1), [colors.HexColor('#f5f5f5'), colors.white] if alt_row else [colors.white]),
('GRID', (0,0), (-1,-1), 0.4, colors.HexColor('#bdbdbd')),
('VALIGN', (0,0), (-1,-1), 'MIDDLE'),
('TOPPADDING', (0,0), (-1,-1), 4),
('BOTTOMPADDING', (0,0), (-1,-1), 4),
('LEFTPADDING', (0,0), (-1,-1), 6),
('RIGHTPADDING', (0,0), (-1,-1), 6),
('ALIGN', (0,0), (-1,-1), 'LEFT'),
]
t.setStyle(TableStyle(style_cmds))
return t
def section_header(text, color='#1a237e'):
"""Colored section header block."""
data = [[Paragraph(text, sec_title)]]
t = Table(data, colWidths=[W - 3.6*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), colors.HexColor(color)),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 8),
]))
return t
def tip_box(text, bg='#fff8e1', border='#f9a825'):
data = [[Paragraph(text, make_style('TipInner', fontSize=9, fontName='Helvetica-Oblique',
textColor=colors.HexColor('#4e342e'), leading=13))]]
t = Table(data, colWidths=[W - 3.6*cm])
t.setStyle(TableStyle([
('BACKGROUND', (0,0), (-1,-1), colors.HexColor(bg)),
('BOX', (0,0), (-1,-1), 1, colors.HexColor(border)),
('TOPPADDING', (0,0), (-1,-1), 6),
('BOTTOMPADDING', (0,0), (-1,-1), 6),
('LEFTPADDING', (0,0), (-1,-1), 10),
]))
return t
story = []
# โโโ COVER PAGE โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(Spacer(1, 2*cm))
story.append(Paragraph("NEET 2027", cover_title))
story.append(Paragraph("Minor Test - Complete Revision Guide", cover_sub))
story.append(Spacer(1, 0.4*cm))
story.append(HRFlowable(width="80%", thickness=2, color=colors.HexColor('#1a237e'), hAlign='CENTER'))
story.append(Spacer(1, 0.4*cm))
story.append(Paragraph("TEST DATE: 5th July 2026 (Sunday) | 2:00 PM - 5:00 PM", cover_info))
story.append(Paragraph("EUROSE BATCH - Pre Medical Session 2026-27", cover_sub))
story.append(Spacer(1, 1.2*cm))
# syllabus table on cover
syl_data = [
['Subject', 'Topics'],
['Physics', 'Units and Dimensions'],
['Chemistry', 'Mole Concept & Atomic Structure'],
['Biology - Botany', 'Cell: Unit of Life | Cell Cycle & Mitosis'],
['Biology - Zoology', 'Breathing and Exchange of Gases'],
]
syl_t = plain_table(syl_data, [5*cm, 11*cm], header_color='#37474f')
story.append(syl_t)
story.append(Spacer(1, 0.8*cm))
study_data = [
['Day', 'Focus Area'],
['Today (June 29)', 'Cell - Unit of Life (organelles & structure)'],
['June 30', 'Cell Cycle + Mitosis (stages with diagrams)'],
['July 1', 'Breathing & Exchange of Gases'],
['July 2', 'Mole Concept + Atomic Structure'],
['July 3', 'Units & Dimensions + PYQ practice all topics'],
['July 4', 'Full mock revision + weak areas'],
['July 5 (TEST DAY)', 'Quick morning revision only'],
]
study_t = plain_table(study_data, [5*cm, 11*cm], header_color='#2e7d32')
story.append(Paragraph("6-Day Study Plan", sub_title))
story.append(study_t)
story.append(PageBreak())
# โโโ PHYSICS โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(section_header("โก PHYSICS - Units and Dimensions", '#1565c0'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Fundamental SI Units", sub_title))
si_data = [
['Quantity', 'SI Unit', 'Symbol'],
['Length', 'Metre', 'm'],
['Mass', 'Kilogram', 'kg'],
['Time', 'Second', 's'],
['Electric Current', 'Ampere', 'A'],
['Temperature', 'Kelvin', 'K'],
['Luminous Intensity', 'Candela', 'cd'],
['Amount of Substance', 'Mole', 'mol'],
]
story.append(plain_table(si_data, [6*cm, 6*cm, 4*cm], header_color='#1565c0'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Supplementary Units", sub2_title))
story.append(Paragraph("โข Plane angle โ radian (rad)", bullet))
story.append(Paragraph("โข Solid angle โ steradian (sr)", bullet))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Important Derived Units & Dimensions", sub_title))
dim_data = [
['Quantity', 'Formula', 'Dimensions'],
['Force', 'ma', '[MLTโปยฒ]'],
['Work / Energy', 'Fd', '[MLยฒTโปยฒ]'],
['Power', 'W/t', '[MLยฒTโปยณ]'],
['Pressure', 'F/A', '[MLโปยนTโปยฒ]'],
['Velocity', 'd/t', '[LTโปยน]'],
['Acceleration', 'v/t', '[LTโปยฒ]'],
['Momentum', 'mv', '[MLTโปยน]'],
['Density', 'm/V', '[MLโปยณ]'],
['Frequency', '1/t', '[Tโปยน]'],
['Charge', 'It', '[AT]'],
['Voltage', 'W/q', '[MLยฒTโปยณAโปยน]'],
]
story.append(plain_table(dim_data, [5.5*cm, 4.5*cm, 6*cm], header_color='#1565c0'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Quantities with Same Dimensions", sub_title))
same_dim = [
['Dimensions', 'Quantities'],
['[MLยฒTโปยฒ]', 'Work, Energy, Torque'],
['[Tโปยน]', 'Frequency, Angular velocity, Decay constant'],
['[MLTโปยน]', 'Impulse, Momentum'],
['[MLโปยนTโปยฒ]', 'Stress, Pressure, Elastic modulus'],
]
story.append(plain_table(same_dim, [6*cm, 10*cm], header_color='#1565c0'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Rules for Significant Figures", sub_title))
for s in [
"1. All non-zero digits are significant.",
"2. Zeros <b>between</b> non-zero digits are significant. (e.g., 1007 โ 4 sig figs)",
"3. <b>Leading</b> zeros are NOT significant. (e.g., 0.007 โ 1 sig fig)",
"4. <b>Trailing</b> zeros after decimal ARE significant. (e.g., 1.500 โ 4 sig figs)",
]:
story.append(Paragraph(s, bullet))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Uses of Dimensional Analysis", sub_title))
for s in [
"1. Check correctness of an equation (dimensions must balance on both sides).",
"2. Derive relations between physical quantities.",
"3. Convert units from one system to another.",
]:
story.append(Paragraph(s, bullet))
story.append(Spacer(1, 0.2*cm))
story.append(tip_box("NEET TIP: Dimensional analysis CANNOT determine dimensionless constants (2, ฯ, ยฝ) and CANNOT check equations involving addition or subtraction."))
story.append(PageBreak())
# โโโ CHEMISTRY โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(section_header("โ๏ธ CHEMISTRY - Mole Concept & Atomic Structure", '#4a148c'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("PART A: MOLE CONCEPT", sub_title))
story.append(Paragraph("1 mole = <b>6.022 ร 10ยฒยณ</b> particles (Avogadro's number). "
"1 mole of any gas at STP = <b>22.4 L</b>. "
"Molar mass = mass of 1 mole in grams.", body))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Key Formulas", sub2_title))
mol_data = [
['Formula', 'Expression'],
['Moles (from mass)', 'n = mass (g) / Molar mass'],
['Moles (from particles)', 'n = N / Nโ'],
['Moles of gas at STP', 'n = Volume (L) / 22.4'],
['Molarity (M)', 'Moles of solute / Volume of solution (L)'],
['Molality (m)', 'Moles of solute / Mass of solvent (kg)'],
['Mole fraction', 'nโ / (nโ + n_b)'],
['% by mass', '(mass of solute / mass of solution) ร 100'],
]
story.append(plain_table(mol_data, [7*cm, 9*cm], header_color='#4a148c'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Empirical vs Molecular Formula", sub2_title))
story.append(Paragraph("โข <b>Empirical formula</b> = simplest whole number ratio of atoms.", bullet))
story.append(Paragraph("โข <b>Molecular formula</b> = actual number of atoms.", bullet))
story.append(Paragraph("โข Molecular formula = n ร Empirical formula where n = Molecular mass / Empirical formula mass", bullet))
story.append(Spacer(1, 0.2*cm))
story.append(tip_box("POAC (Principle of Atom Conservation): Atoms of each element are conserved in a reaction. Very useful for mole calculations without balancing equations."))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("PART B: ATOMIC STRUCTURE", sub_title))
story.append(Paragraph("Discovery Timeline", sub2_title))
disc_data = [
['Discovery', 'Scientist', 'Key Point'],
['Electron', 'J.J. Thomson', 'Cathode ray experiment; e/m ratio measured'],
['Proton', 'Goldstein', 'Anode rays (canal rays)'],
['Neutron', 'Chadwick', 'Bombardment of Be with ฮฑ-particles'],
['Nucleus', 'Rutherford', 'Gold foil (ฮฑ-scattering) experiment'],
]
story.append(plain_table(disc_data, [4*cm, 4.5*cm, 7.5*cm], header_color='#4a148c'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Bohr's Model (Hydrogen-like atoms)", sub2_title))
story.append(Paragraph("โข Electrons in fixed circular orbits (shells); energy is quantized.", bullet))
story.append(Paragraph("โข Energy: E_n = โ13.6 / nยฒ eV Radius: r_n = 0.529 ร nยฒ ร
(for H)", bullet))
story.append(Paragraph("โข Absorbs energy โ jumps to higher orbit. Releases energy โ falls to lower orbit.", bullet))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Spectral Series of Hydrogen", sub2_title))
spec_data = [
['Series', 'Transition to Shell', 'Region'],
['Lyman', 'n = 1', 'Ultraviolet (UV)'],
['Balmer', 'n = 2', 'Visible'],
['Paschen', 'n = 3', 'Infrared (IR)'],
['Brackett', 'n = 4', 'Infrared (IR)'],
['Pfund', 'n = 5', 'Infrared (IR)'],
]
story.append(plain_table(spec_data, [5*cm, 5.5*cm, 5.5*cm], header_color='#4a148c'))
story.append(tip_box("Memory Trick: \"Let Bright People Be Positive\" โ Lyman, Balmer, Paschen, Brackett, Pfund"))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Quantum Numbers", sub2_title))
qn_data = [
['Quantum Number', 'Symbol', 'Values', 'Describes'],
['Principal', 'n', '1, 2, 3...', 'Shell / Energy level'],
['Azimuthal', 'l', '0 to (nโ1)', 'Subshell (s, p, d, f)'],
['Magnetic', 'mโ', 'โl to +l', 'Orbital orientation'],
['Spin', 'mโ', '+ยฝ or โยฝ', 'Direction of electron spin'],
]
story.append(plain_table(qn_data, [4*cm, 2.5*cm, 4*cm, 5.5*cm], header_color='#4a148c'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Electronic Configuration Rules", sub2_title))
for s in [
"<b>Aufbau Principle</b>: Fill lowest energy orbitals first.",
"<b>Pauli Exclusion Principle</b>: No two electrons have same 4 quantum numbers; max 2 electrons per orbital.",
"<b>Hund's Rule</b>: One electron in each orbital of same subshell before pairing (maximum multiplicity).",
]:
story.append(Paragraph("โข " + s, bullet))
story.append(Paragraph("Filling order: 1s < 2s < 2p < 3s < 3p < 4s < 3d < 4p < 5s < 4d...", body))
story.append(Spacer(1, 0.2*cm))
story.append(tip_box("de Broglie: ฮป = h/mv (wave nature of matter) | Heisenberg: ฮx ยท ฮp โฅ h/4ฯ (position & momentum cannot both be exact)"))
story.append(PageBreak())
# โโโ BIOLOGY BOTANY โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(section_header("๐ฟ BIOLOGY (BOTANY) - Cell: Unit of Life + Cell Cycle & Mitosis", '#1b5e20'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("PART A: CELL - THE UNIT OF LIFE", sub_title))
story.append(Paragraph("Cell Theory", sub2_title))
story.append(Paragraph("Proposed by <b>Schleiden</b> (plants) and <b>Schwann</b> (animals); Virchow added:", body))
for s in [
"All living organisms are made of cells.",
"Cell is the basic structural and functional unit of life.",
"All cells arise from pre-existing cells โ <i>\"Omnis cellula e cellula\"</i> (Virchow).",
]:
story.append(Paragraph("โข " + s, bullet))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Prokaryotic vs Eukaryotic Cell", sub2_title))
prok_data = [
['Feature', 'Prokaryotic', 'Eukaryotic'],
['Nucleus', 'Absent (nucleoid)', 'Present (membrane-bound)'],
['Size', '1โ10 ยตm', '10โ100 ยตm'],
['Membrane-bound organelles', 'Absent', 'Present'],
['Ribosomes', '70S (50S + 30S)', '80S (60S + 40S)'],
['Cell wall', 'Peptidoglycan (bacteria)', 'Cellulose (plants); absent in animals'],
['Examples', 'Bacteria, Cyanobacteria', 'Plant, Animal, Fungal cells'],
]
story.append(plain_table(prok_data, [5*cm, 5.5*cm, 5.5*cm], header_color='#1b5e20'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Cell Organelles - Quick Reference", sub_title))
org_data = [
['Organelle', 'Key Function', 'Special Feature'],
['Cell membrane', 'Selectively permeable barrier', 'Fluid mosaic model (Singer & Nicolson, 1972)'],
['Cell wall', 'Protection, shape', 'Cellulose (plants); chitin (fungi)'],
['Nucleus', 'Control centre, heredity', 'Double membrane; nuclear pores'],
['Mitochondria', 'ATP production (respiration)', 'Own DNA & ribosomes; double membrane'],
['Chloroplast', 'Photosynthesis', 'Own DNA; double membrane; plants only'],
['Rough ER', 'Protein synthesis & transport', 'Has ribosomes on surface'],
['Smooth ER', 'Lipid synthesis, detox', 'No ribosomes'],
['Golgi Body', 'Secretion, modification', '"Post office of cell"; forms lysosomes'],
['Lysosomes', 'Intracellular digestion', '"Suicidal bags" (de Duve)'],
['Ribosomes', 'Protein synthesis', '70S prokaryotes; 80S eukaryotes'],
['Vacuoles', 'Storage, turgor pressure', 'Large central vacuole in plants'],
['Centrosome', 'Cell division', 'Absent in higher plants'],
['Peroxisomes', 'Oxidative reactions', 'Break down HโOโ'],
]
story.append(plain_table(org_data, [3.5*cm, 5*cm, 7.5*cm], header_color='#1b5e20'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Nucleus", sub2_title))
for s in [
"<b>Nuclear envelope</b>: double membrane with pores for RNA/protein transport.",
"<b>Nucleolus</b>: site of rRNA synthesis.",
"<b>Chromatin</b>: DNA + histone proteins.",
"<b>Euchromatin</b>: loosely packed, transcriptionally active.",
"<b>Heterochromatin</b>: densely packed, transcriptionally inactive.",
]:
story.append(Paragraph("โข " + s, bullet))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("PART B: CELL CYCLE & MITOSIS", sub_title))
story.append(Paragraph("Cell Cycle Phases", sub2_title))
cc_data = [
['Phase', 'What Happens'],
['G1 (Gap 1)', 'Cell grows; proteins synthesized; organelles increase in number'],
['S (Synthesis)', 'DNA replication occurs (2N DNA content โ 4N)'],
['G2 (Gap 2)', 'Further growth; preparation for division; proteins for mitosis made'],
['M (Mitosis)', 'Actual nuclear and cell division'],
['G0', 'Quiescent phase; cells exit cycle temporarily (e.g., nerve cells)'],
]
story.append(plain_table(cc_data, [4*cm, 12*cm], header_color='#1b5e20'))
story.append(Paragraph("G1 + S + G2 = <b>Interphase</b> (longest phase of cell cycle). DNA replication occurs in S phase.", body))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Stages of Mitosis (PMAT)", sub_title))
mit_data = [
['Stage', 'Key Events'],
['Prophase', 'Chromatin condenses into chromosomes; nucleolus disappears; spindle forms; nuclear envelope breaks down'],
['Metaphase', 'Chromosomes align at metaphase plate (equatorial plane); spindle attaches at centromere (kinetochore). BEST stage for karyotyping.'],
['Anaphase', 'Centromeres split; sister chromatids pulled to opposite poles; cell elongates; V/J/L chromosome shapes'],
['Telophase', 'Chromosomes reach poles; nuclear envelope reforms; nucleolus reappears; chromosomes decondense'],
['Cytokinesis', 'Animal cells: cleavage furrow (centripetal - inward). Plant cells: cell plate (centrifugal - outward from center)'],
]
story.append(plain_table(mit_data, [3.5*cm, 12.5*cm], header_color='#1b5e20'))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("Significance of Mitosis", sub2_title))
for s in [
"Growth and repair of body tissues.",
"Maintains chromosome number (2N โ 2N); daughter cells genetically identical to parent.",
"Asexual reproduction in lower organisms.",
]:
story.append(Paragraph("โข " + s, bullet))
story.append(tip_box("Memory: PMAT = Prophase โ Metaphase โ Anaphase โ Telophase | Metaphase = best stage for karyotyping | Cytokinesis: cleavage furrow (animal), cell plate (plant)"))
story.append(PageBreak())
# โโโ BIOLOGY ZOOLOGY โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
story.append(section_header("๐ซ BIOLOGY (ZOOLOGY) - Breathing and Exchange of Gases", '#b71c1c'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Respiratory Organs in Animals", sub2_title))
resp_data = [
['Animal Group', 'Respiratory Organ'],
['Insects', 'Tracheal system'],
['Fish', 'Gills'],
['Amphibians', 'Skin + Lungs'],
['Birds & Mammals', 'Lungs'],
]
story.append(plain_table(resp_data, [7*cm, 9*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Pathway of Air", sub_title))
story.append(Paragraph("Nostrils โ Nasal cavity โ Pharynx โ Larynx โ Trachea โ Bronchi โ Bronchioles โ <b>Alveoli</b>", body))
story.append(Spacer(1, 0.1*cm))
for s in [
"<b>Trachea</b>: C-shaped cartilage rings; keeps airway open.",
"<b>Epiglottis</b>: prevents food from entering trachea.",
"<b>Alveoli</b>: actual site of gas exchange; ~300 million in humans; covered by capillary network and surfactant.",
"Right lung = 3 lobes; Left lung = 2 lobes (heart takes space on left).",
"<b>Pleura</b>: double membrane covering lungs; pleural fluid reduces friction.",
]:
story.append(Paragraph("โข " + s, bullet))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Mechanism of Breathing", sub_title))
mech_data = [
['Phase', 'Diaphragm', 'Intercostal muscles', 'Thoracic volume', 'Pressure', 'Air'],
['Inspiration\n(Breathing in)', 'Contracts\n(moves down)', 'External muscles contract\n(ribs up & out)', 'Increases', 'Decreases', 'Rushes IN'],
['Expiration\n(Breathing out)', 'Relaxes\n(moves up)', 'Internal muscles contract\n(ribs down & in)', 'Decreases', 'Increases', 'Pushed OUT'],
]
story.append(plain_table(mech_data, [2.5*cm, 3*cm, 4*cm, 2.8*cm, 2.5*cm, 2.2*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Respiratory Volumes & Capacities (IMPORTANT for MCQs)", sub_title))
vol_data = [
['Volume / Capacity', 'Approx. Value', 'Definition'],
['Tidal Volume (TV)', '~500 mL', 'Air moved in a normal breath'],
['IRV (Inspiratory Reserve)', '~2500โ3000 mL', 'Extra air forcefully inhaled above TV'],
['ERV (Expiratory Reserve)', '~1000โ1100 mL', 'Extra air forcefully exhaled below TV'],
['Residual Volume (RV)', '~1100โ1200 mL', 'Air remaining after maximum expiration'],
['Inspiratory Capacity (IC)', '~3500 mL', 'TV + IRV'],
['Functional Residual Capacity (FRC)', '~2300 mL', 'ERV + RV'],
['Vital Capacity (VC)', '~4600 mL', 'TV + IRV + ERV'],
['Total Lung Capacity (TLC)', '~5800 mL', 'VC + RV'],
]
story.append(plain_table(vol_data, [4.5*cm, 3*cm, 8.5*cm], header_color='#b71c1c'))
story.append(tip_box("KEY: RV (Residual Volume) can NEVER be expired โ always remains in the lungs."))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Exchange of Gases - Partial Pressures", sub_title))
pp_data = [
['Gas', 'Alveolar Air', 'Deoxygenated Blood', 'Oxygenated Blood'],
['pOโ', '104 mmHg', '40 mmHg', '95 mmHg'],
['pCOโ', '40 mmHg', '45 mmHg', '40 mmHg'],
]
story.append(plain_table(pp_data, [4*cm, 4*cm, 4.5*cm, 3.5*cm], header_color='#b71c1c'))
story.append(Paragraph("Gas exchange occurs by <b>simple diffusion</b> along pressure gradients at the alveolar surface.", body))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Transport of Gases", sub_title))
transport_data = [
['Gas', 'Form', 'Percentage'],
['Oโ', 'As oxyhaemoglobin (Hb + Oโ)', '97%'],
['Oโ', 'Dissolved in plasma', '3%'],
['COโ', 'As bicarbonate ions (HCOโโป) in plasma', '70%'],
['COโ', 'As carbaminohaemoglobin (COโ + Hb)', '20โ25%'],
['COโ', 'Dissolved in plasma', '7%'],
]
story.append(plain_table(transport_data, [2.5*cm, 9.5*cm, 4*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("โข 1 Hb carries <b>4 Oโ molecules</b> (4 haem groups).", bullet))
story.append(Paragraph("โข <b>Bohr Effect</b>: decrease in pH (more COโ) โ Hb releases Oโ more readily.", bullet))
story.append(Paragraph("โข <b>Chloride Shift (Hamburger Shift)</b>: HCOโโป moves out of RBC โ Clโป moves in to maintain electrical neutrality.", bullet))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Regulation of Respiration", sub2_title))
story.append(Paragraph("โข <b>Respiratory rhythm centre</b>: medulla oblongata (primary control).", bullet))
story.append(Paragraph("โข <b>Pneumotaxic centre</b>: in pons; moderates respiratory rate.", bullet))
story.append(Paragraph("โข COโ levels (NOT Oโ) primarily regulate breathing rate.", bullet))
story.append(Paragraph("โข Chemoreceptors in <b>aortic arch</b> and <b>carotid body</b> detect pCOโ and pH changes.", bullet))
story.append(Spacer(1, 0.3*cm))
story.append(Paragraph("Respiratory Disorders", sub2_title))
dis_data = [
['Disorder', 'Key Feature'],
['Asthma', 'Inflammation of bronchioles; wheezing; reversible'],
['Emphysema', 'Destruction of alveolar walls (caused by smoking); barrel chest; irreversible'],
['Pneumonia', 'Alveoli filled with fluid (bacterial or viral infection)'],
['Silicosis', 'Occupational lung disease from silica dust exposure'],
['Asbestosis', 'Occupational lung disease from asbestos fibre inhalation'],
]
story.append(plain_table(dis_data, [4*cm, 12*cm], header_color='#b71c1c'))
story.append(Spacer(1, 0.5*cm))
story.append(HRFlowable(width="100%", thickness=1, color=colors.HexColor('#bdbdbd')))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("All the best for your test on 5th July 2026! | Prepared with Orris AI", make_style('Footer', fontSize=8, textColor=colors.grey, alignment=TA_CENTER)))
# โโโ BUILD โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
doc.build(story)
print(f"PDF saved to: {OUTPUT}")
cd /home/daytona/workspace/neet-revision && python generate_pdf.py
NEET Revision Guide
PDF Document ยท PDF