Convert this 3 day study plan into 2.5 days mind of the 28-06-2025 remember important topic give greater time
A clean, professional 2.5-day Physical Pharmacy study plan schedule table/planner. The plan covers Day 04 (Saturday 26 June 2025), Day 05 (Sunday 27 June 2025), and Day 05.5 Half Day (Sunday evening/Monday 28 June 2025 morning). Each day has Morning Session, Afternoon Session, and Evening Session blocks. Color scheme: blue header bars, yellow morning blocks, purple/lavender afternoon blocks, green evening blocks. Include important topics like Solutions, Solubilization, Ionization, Colloids, Emulsions, Suspensions, Micromeritics, Rheology, Kinetics, Stability Testing. Add IMP labels on high-priority topics. Include study tips at the bottom of each day. Clean academic planner style with clear fonts and section dividers.
| Topic | Time | Priority |
|---|---|---|
| Solutions (IMP) - Types, concentration expressions, ideal vs real solutions, Raoult's law | 60 min | βββ |
| Solubilization (IMP) - Factors affecting solubility, cosolvency, complexation, micellar solubilization | 60 min | βββ |
| Ionization - pH, pKa, Henderson-Hasselbalch equation, Buffer systems | 75 min | βββ |
| MCQs: Solutions + Solubilization + Ionization | 15 min | β |
Tip: Memorize H-H equation cold - it appears in every exam. Practice numerical pH calculations.
| Topic | Time | Priority |
|---|---|---|
| Colloids (IMP) - Lyophilic/lyophobic, Tyndall effect, zeta potential | 60 min | βββ |
| Emulsions (IMP) - O/W vs W/O, emulsifying agents, HLB system, stability | 60 min | βββ |
| Suspensions (IMP) - Flocculated vs Deflocculated, Stoke's law, stability | 50 min | βββ |
| MCQs: Colloids + Emulsions + Suspensions | 10 min | β |
Tip: Know HLB values by heart. Draw the Stoke's law formula and understand each variable.
| Topic | Time | Priority |
|---|---|---|
| Hydrolysis + Adsorption (Langmuir & Freundlich isotherms) - combined quick read | 45 min | ββ |
| Micromeritics (IMP) - Particle size, sieving, flow properties, Carr's index, angle of repose | 60 min | βββ |
| Quick formula review | 15 min | β |
| Topic | Time | Priority |
|---|---|---|
| Rheology (IMP) - Newtonian vs Non-Newtonian, viscosity, thixotropy (draw flow curve!) | 70 min | βββ |
| Rate & Order of Reaction - Zero, First, Second order kinetics | 50 min | βββ |
| Half-life calculations + Integrated rate laws | 40 min | βββ |
Tip: Draw thixotropy hysteresis loop - frequently asked as a diagram question.
| Topic | Time | Priority |
|---|---|---|
| Kinetics & Stability Testing (IMP) - Arrhenius equation, shelf life, accelerated stability studies | 75 min | βββ |
| Physicochemical Processes - Precipitation, Crystallization, Distillation methods | 45 min | ββ |
| Miscellaneous (IMP) - Drying, Filtration, Sterilization + Extraction (Maceration, Percolation, Soxhlet) | 40 min | ββ |
| Pharmacy Orientation & History - Quick skim only (low weightage) | 20 min | β |
| Topic | Time | Priority |
|---|---|---|
| Full Physical Pharmacy Revision - Colloids, Emulsions, Suspensions, Solutions | 60 min | β |
| Rheology + Kinetics quick review | 30 min | β |
| Past paper MCQ session (30-40 questions) | 60 min | β |
| Topic | Time | Priority |
|---|---|---|
| Weak areas targeted revision (identify from MCQ session) | 60 min | β |
| Formula Sheet Preparation - Stoke's law, H-H equation, Arrhenius, Rate laws, Carr's index | 45 min | βββ |
| Final MCQ round (20-25 questions across all topics) | 45 min | β |
| Last 30-min read: IMP topics only - skim headings and key points | 30 min | β |
| Formula | Topic |
|---|---|
| pH = pKa + log([Aβ»]/[HA]) | Henderson-Hasselbalch |
| v = 2rΒ²(Οβ-Οβ)g / 9Ξ· | Stoke's Law |
| k = Ae^(-Ea/RT) | Arrhenius Equation |
| tΒ½ = 0.693/k | First-order half-life |
| CI = (Οtap - Οbulk)/Οtap Γ 100 | Carr's Index |
Generate a printable PDF quick reference guide with all formulas and mnemonics
ls -la /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not founβ¦
mkdir -p /home/daytona/workspace/pharm-formula-guide
~/pharm-formula-guide/generate_guide.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfgen import canvas
from reportlab.platypus import BaseDocTemplate, PageTemplate, Frame
# ββ Colour palette βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
NAVY = colors.HexColor("#1a3a5c")
BLUE = colors.HexColor("#2563EB")
LIGHT_BLUE = colors.HexColor("#DBEAFE")
YELLOW = colors.HexColor("#FEF9C3")
YELLOW_BDR = colors.HexColor("#F59E0B")
GREEN = colors.HexColor("#D1FAE5")
GREEN_BDR = colors.HexColor("#059669")
PURPLE = colors.HexColor("#EDE9FE")
PURPLE_BDR = colors.HexColor("#7C3AED")
RED_LIGHT = colors.HexColor("#FEE2E2")
RED_BDR = colors.HexColor("#DC2626")
ORANGE = colors.HexColor("#FFF7ED")
ORANGE_BDR = colors.HexColor("#EA580C")
WHITE = colors.white
GRAY_LIGHT = colors.HexColor("#F1F5F9")
GRAY_MID = colors.HexColor("#94A3B8")
DARK_TEXT = colors.HexColor("#1E293B")
W, H = A4
# ββ Page-number callback ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def add_page_number(canvas_obj, doc):
canvas_obj.saveState()
canvas_obj.setFont("Helvetica", 8)
canvas_obj.setFillColor(GRAY_MID)
canvas_obj.drawCentredString(W / 2, 18, f"Physical Pharmacy Quick Reference | Page {doc.page}")
canvas_obj.setStrokeColor(GRAY_MID)
canvas_obj.setLineWidth(0.5)
canvas_obj.line(2*cm, 25, W - 2*cm, 25)
canvas_obj.restoreState()
# ββ Styles ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
title_style = S("Title2", fontSize=22, textColor=WHITE, alignment=TA_CENTER,
fontName="Helvetica-Bold", spaceAfter=4, leading=28)
subtitle_style = S("Subtitle2", fontSize=11, textColor=colors.HexColor("#BFDBFE"),
alignment=TA_CENTER, fontName="Helvetica", spaceAfter=2, leading=14)
section_header = S("SecHdr", fontSize=13, textColor=WHITE, alignment=TA_LEFT,
fontName="Helvetica-Bold", leading=18, leftIndent=6)
subsection_header = S("SubSecHdr", fontSize=10, textColor=NAVY,
fontName="Helvetica-Bold", leading=14, spaceAfter=2)
body = S("Body2", fontSize=9, textColor=DARK_TEXT, fontName="Helvetica",
leading=13, spaceAfter=2)
formula_style = S("Formula", fontSize=10, textColor=NAVY, fontName="Helvetica-Bold",
leading=14, spaceAfter=1)
mnemonic_style = S("Mnemonic", fontSize=9.5, textColor=colors.HexColor("#7C3AED"),
fontName="Helvetica-Bold", leading=13)
note_style = S("Note", fontSize=8.5, textColor=colors.HexColor("#374151"),
fontName="Helvetica-Oblique", leading=12)
tip_style = S("Tip", fontSize=8.5, textColor=colors.HexColor("#065F46"),
fontName="Helvetica-Bold", leading=12)
small_body = S("SmallBody", fontSize=8.5, textColor=DARK_TEXT, fontName="Helvetica",
leading=12, spaceAfter=1)
# ββ Helper builders βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def section_title(text, bg=NAVY):
data = [[Paragraph(text, section_header)]]
t = Table(data, colWidths=[W - 4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("ROUNDEDCORNERS", [6]),
("TOPPADDING", (0,0), (-1,-1), 7),
("BOTTOMPADDING",(0,0),(-1,-1), 7),
("LEFTPADDING", (0,0), (-1,-1), 10),
]))
return t
def formula_box(label, formula, notes="", bg=LIGHT_BLUE, border=BLUE):
content = [
[Paragraph(f"<b>{label}</b>", small_body),
Paragraph(f"<b>{formula}</b>", formula_style)]
]
if notes:
content.append(["", Paragraph(notes, note_style)])
t = Table(content, colWidths=[4.5*cm, W - 4*cm - 4.5*cm - 0.2*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1.2, border),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
("SPAN", (1,1), (1,-1)),
]))
return t
def mnemonic_box(title_text, items, bg=PURPLE, border=PURPLE_BDR):
rows = [[Paragraph(f"<b>{title_text}</b>", mnemonic_style), ""]]
for letter, meaning in items:
rows.append([
Paragraph(f"<b>{letter}</b>", mnemonic_style),
Paragraph(meaning, small_body)
])
t = Table(rows, colWidths=[1.8*cm, W - 4*cm - 1.8*cm - 0.2*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1.2, border),
("SPAN", (0,0), (-1,0)),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
return t
def tip_box(text, bg=GREEN, border=GREEN_BDR):
data = [[Paragraph(f"β
HIGH YIELD: {text}", tip_style)]]
t = Table(data, colWidths=[W - 4*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("BOX", (0,0), (-1,-1), 1, border),
("LEFTPADDING", (0,0), (-1,-1), 10),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
]))
return t
def two_col_table(rows_data, headers=None, col_w=None):
if col_w is None:
half = (W - 4*cm) / 2
col_w = [half, half]
data = []
if headers:
data.append([Paragraph(f"<b>{h}</b>", small_body) for h in headers])
for row in rows_data:
data.append([Paragraph(str(c), small_body) for c in row])
t = Table(data, colWidths=col_w)
style = [
("GRID", (0,0), (-1,-1), 0.5, GRAY_MID),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BACKGROUND", (0,0), (-1,0), GRAY_LIGHT),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 8.5),
]
if headers:
style.append(("BACKGROUND", (0,0), (-1,0), NAVY))
style.append(("TEXTCOLOR", (0,0), (-1,0), WHITE))
t.setStyle(TableStyle(style))
return t
SP = lambda n=6: Spacer(1, n)
HR = lambda: HRFlowable(width="100%", thickness=0.5, color=GRAY_MID, spaceAfter=4, spaceBefore=4)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BUILD STORY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story = []
# βββ COVER HEADER ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
cover_data = [[
Paragraph("Physical Pharmacy", title_style),
Paragraph("Quick Reference Guide", title_style),
Paragraph("All Formulas Β· Mnemonics Β· High-Yield Notes", subtitle_style),
Paragraph("Exam Date: 28 June 2025 | Compiled for 2.5-Day Study Sprint", subtitle_style),
]]
cover_t = Table([[
Paragraph("Physical Pharmacy", title_style)],
[Paragraph("Quick Reference Guide β Formulas & Mnemonics", subtitle_style)],
[Paragraph("Exam: 28 June 2025 | 2.5-Day Study Sprint", subtitle_style)],
], colWidths=[W - 4*cm])
cover_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 10),
("BOTTOMPADDING", (0,0), (-1,-1), 10),
("LEFTPADDING", (0,0), (-1,-1), 14),
]))
story.append(cover_t)
story.append(SP(12))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 1 β SOLUTIONS & COLLIGATIVE PROPERTIES
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("1. SOLUTIONS & COLLIGATIVE PROPERTIES", NAVY))
story.append(SP(5))
story.append(formula_box("Raoult's Law",
"P = Xsolvent Γ PΒ°solvent",
"P = vapour pressure of solution | X = mole fraction | PΒ° = pure solvent VP"))
story.append(SP(4))
story.append(formula_box("Osmotic Pressure",
"Ο = iMRT",
"i = van't Hoff factor | M = molarity | R = 0.0821 LΒ·atm/molΒ·K | T = Kelvin"))
story.append(SP(4))
story.append(formula_box("Molarity",
"M = (mass / MW) / V(L)",
"Most common concentration expression β practice calculations!"))
story.append(SP(4))
story.append(formula_box("% w/v",
"% w/v = (g of solute / 100 mL solution) Γ 100",
"Most common pharma concentration unit"))
story.append(SP(4))
story.append(mnemonic_box("Mnemonic: Colligative Properties β 'Very Bad Osmotic Force'",
[("V", "Vapour pressure lowering"),
("B", "Boiling point elevation"),
("O", "Osmotic pressure"),
("F", "Freezing point depression")]))
story.append(SP(6))
story.append(tip_box("Raoult's law deviations: positive = stronger solute-solvent interaction breaks; negative = stronger mixed interactions."))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 2 β IONIZATION & BUFFERS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("2. IONIZATION, pH & BUFFER SYSTEMS", colors.HexColor("#1D4ED8")))
story.append(SP(5))
story.append(formula_box("Henderson-Hasselbalch (Acid)",
"pH = pKa + log ( [Aβ»] / [HA] )",
"Aβ» = conjugate base | HA = weak acid | Buffer range: pKa Β± 1"))
story.append(SP(4))
story.append(formula_box("Henderson-Hasselbalch (Base)",
"pOH = pKb + log ( [BHβΊ] / [B] )",
"BHβΊ = conjugate acid | B = weak base"))
story.append(SP(4))
story.append(formula_box("pH from Strong Acid",
"pH = -log[HβΊ]",
"e.g. 0.01 M HCl β pH = -log(0.01) = 2"))
story.append(SP(4))
story.append(formula_box("pKa Relation",
"pH = pKa β 50% ionized",
"Weak acid: >50% ionized above pKa | Weak base: >50% ionized below pKa"))
story.append(SP(4))
story.append(formula_box("Buffer Capacity (Ξ²)",
"Ξ² = ΞB / ΞpH",
"Maximum buffer capacity when pH = pKa"))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Ionization of Weak Acid β 'ABHA'",
[("A", "Above pKa β more ionized (Aβ» form dominates)"),
("B", "Below pKa β less ionized (HA form dominates)"),
("H", "Henderson-Hasselbalch links pH, pKa, and ratio"),
("A", "At pKa β equal parts HA and Aβ»")]))
story.append(SP(6))
story.append(tip_box("Most tested: Calculate pH when ratio [Aβ»]/[HA] = 10 β pH = pKa + 1. Ratio = 0.1 β pH = pKa - 1."))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 3 β SOLUBILITY & SOLUBILIZATION
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("3. SOLUBILITY & SOLUBILIZATION", colors.HexColor("#065F46")))
story.append(SP(5))
story.append(formula_box("log S = f(pH)",
"log S = log Sβ + (pH - pKa) [for weak acid]",
"Sβ = intrinsic solubility (unionized form) | Solubility increases above pKa for acids"))
story.append(SP(4))
story.append(formula_box("Micellar Solubilization",
"CMC: minimum concentration for micelle formation",
"Below CMC: monomers only | Above CMC: micelles form, drug partitions inside"))
story.append(SP(4))
story.append(Paragraph("<b>Factors Affecting Solubility (IMP):</b>", subsection_header))
story.append(two_col_table([
["Temperature", "Endothermic solutes: β temp β β solubility"],
["Particle size", "β size β β solubility (Noyes-Whitney)"],
["Cosolvency", "Polar + non-polar solvent blend (e.g. EtOH + water)"],
["Complexation", "Drug + ligand complex (e.g. cyclodextrins)"],
["Salting out", "Added electrolyte reduces organic solubility"],
["pH", "Ionization increases solubility of weak acids/bases"],
], headers=["Factor", "Effect"]))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Solubilization Methods β 'CAMP'",
[("C", "Cosolvency (EtOH, PEG, glycerol)"),
("A", "Acids/Alkalis (pH adjustment)"),
("M", "Micellization (surfactants, CMC)"),
("P", "Prodrugs + Complexation (cyclodextrins)")]))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 4 β MICROMERITICS & POWDER FLOW
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("4. MICROMERITICS & POWDER FLOW", colors.HexColor("#92400E")))
story.append(SP(5))
story.append(formula_box("Carr's Compressibility Index",
"CI = [(Οtap - Οbulk) / Οtap] Γ 100",
"CI < 15% β good flow | CI 16-20% β fair | CI > 25% β poor (cohesive powder)"))
story.append(SP(4))
story.append(formula_box("Hausner Ratio",
"HR = Οtap / Οbulk",
"HR < 1.25 β good flow | HR > 1.5 β poor flow"))
story.append(SP(4))
story.append(formula_box("Angle of Repose",
"tan ΞΈ = h / r β ΞΈ = arctan(h/r)",
"ΞΈ < 25Β° β excellent flow | 25-30Β° β good | 30-40Β° β fair | >40Β° β very poor"))
story.append(SP(4))
story.append(formula_box("Specific Surface Area",
"Sv = 6 / (Ο Γ d) [for spherical particles]",
"Sv = surface area per unit volume | Smaller d β larger Sv"))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Powder Flow Tests β 'CASH'",
[("C", "Carr's Index (compressibility)"),
("A", "Angle of Repose (static friction)"),
("S", "Shear cell testing"),
("H", "Hausner Ratio (tap/bulk density)")]))
story.append(SP(6))
story.append(tip_box("Sieve sizes: smaller mesh number = larger opening. USP sieves use mesh numbers. Know: 20 mesh = 850 Β΅m, 60 mesh = 250 Β΅m."))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 5 β DISPERSED SYSTEMS (Colloids, Emulsions, Suspensions)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("5. DISPERSED SYSTEMS", colors.HexColor("#4C1D95")))
story.append(SP(5))
story.append(formula_box("Stoke's Law (Sedimentation Rate)",
"v = 2rΒ²(Οβ - Οβ)g / 9Ξ·",
"v = velocity | r = particle radius | Οβ/Οβ = densities | Ξ· = viscosity | g = gravity"))
story.append(SP(4))
story.append(formula_box("Zeta Potential",
"ΞΆ > Β±30 mV β stable colloid",
"High zeta potential = strong electrostatic repulsion = stable dispersion"))
story.append(SP(4))
story.append(formula_box("HLB Value (Griffin)",
"HLB = 20 Γ (Mh / M)",
"Mh = MW hydrophilic portion | M = total MW | HLB 8-18 β O/W | HLB 3-6 β W/O"))
story.append(SP(4))
story.append(formula_box("HLB (Davies Method)",
"HLB = 7 + Ξ£(hydrophilic group nos.) - Ξ£(lipophilic group nos.)",
"Commonly used for blending emulsifiers"))
story.append(SP(5))
story.append(Paragraph("<b>HLB Values Quick Reference (IMP):</b>", subsection_header))
story.append(two_col_table([
["3-6", "W/O emulsifier (water-in-oil)"],
["7-9", "Wetting / spreading agent"],
["8-18", "O/W emulsifier (oil-in-water)"],
["13-15", "Detergent"],
["15-18", "Solubilizer / micellar"],
], headers=["HLB Range", "Application"], col_w=[3*cm, W - 4*cm - 3*cm - 0.2*cm]))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Colloid Stability β 'ZEST'",
[("Z", "Zeta potential (electrostatic repulsion)"),
("E", "Electrolyte concentration (reduces double layer)"),
("S", "Steric stabilization (polymer coating)"),
("T", "Temperature (kinetic energy affects flocculation)")]))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Flocculated vs Deflocculated β 'FED vs DEC'",
[("F", "Flocculated: Easy to redisperse, Dose uniform, caking absent"),
("D", "Deflocculated: Elegant appearance, Caking risk, slower sedimentation")]))
story.append(SP(6))
story.append(tip_box("Stoke's law exam trick: To slow sedimentation β decrease particle size, increase viscosity, or match densities (Οβ = Οβ)."))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 6 β RHEOLOGY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("6. RHEOLOGY", colors.HexColor("#7C3AED")))
story.append(SP(5))
story.append(formula_box("Newton's Law of Viscosity",
"Ο = Ξ· Γ (dv/dr) β F/A = Ξ· Γ G",
"Ο = shear stress | Ξ· = viscosity (poise) | G = shear rate (sβ»ΒΉ) | F/A = force/area"))
story.append(SP(4))
story.append(formula_box("Fluidity",
"Ο = 1 / Ξ·",
"Reciprocal of viscosity | Units: rhe (poiseβ»ΒΉ)"))
story.append(SP(4))
story.append(formula_box("Kinematic Viscosity",
"Ξ½ = Ξ· / Ο",
"Units: Stokes (St) or cSt | Ο = density of fluid"))
story.append(SP(5))
story.append(Paragraph("<b>Flow Types Quick Reference (IMP):</b>", subsection_header))
story.append(two_col_table([
["Newtonian", "Constant viscosity regardless of shear rate (water, dilute solutions)"],
["Plastic (Bingham)","Requires yield value before flow begins (tooth paste, concentrated suspensions)"],
["Pseudoplastic", "Shear thinning β viscosity β as shear β (polymer solutions, most gels)"],
["Dilatant", "Shear thickening β viscosity β as shear β (starch suspensions)"],
["Thixotropy", "Time-dependent shear thinning β forms hysteresis loop on flow curve"],
], headers=["Flow Type", "Key Feature"], col_w=[3.5*cm, W - 4*cm - 3.5*cm - 0.2*cm]))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Non-Newtonian Flow Types β 'PPD-T'",
[("P", "Plastic β needs yield value (Bingham)"),
("P", "Pseudoplastic β shear thinning (most gels)"),
("D", "Dilatant β shear thickening (starch)"),
("-T", "Thixotropy β time-dependent, hysteresis loop")]))
story.append(SP(6))
story.append(tip_box("Draw the thixotropy curve: ascending curve (increasing shear) + descending curve (decreasing shear) = hysteresis loop. Area = degree of thixotropy."))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 7 β ADSORPTION
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("7. ADSORPTION", colors.HexColor("#B45309")))
story.append(SP(5))
story.append(formula_box("Langmuir Isotherm",
"x/m = abC / (1 + bC)",
"x/m = amount adsorbed/g adsorbent | C = conc at equilibrium | a,b = Langmuir constants\nMonolayer adsorption, finite sites"))
story.append(SP(4))
story.append(formula_box("Freundlich Isotherm",
"x/m = KC^(1/n)",
"log(x/m) = log K + (1/n) log C | Plot: log(x/m) vs log C β straight line\nMultilayer, empirical, 1/n < 1 β favourable adsorption"))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Langmuir vs Freundlich β 'LMF'",
[("L", "Langmuir: Limited (monolayer), Linear at low conc, Saturation occurs"),
("M", "Monolayer maximum defined by constant 'a'"),
("F", "Freundlich: Free multilayer, Follows power law, No saturation plateau")]))
story.append(SP(6))
story.append(tip_box("Langmuir linearized: C/(x/m) = 1/(ab) + C/a β plot C/(x/m) vs C β slope = 1/a, intercept = 1/ab"))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 8 β CHEMICAL KINETICS & STABILITY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("8. CHEMICAL KINETICS & STABILITY TESTING", colors.HexColor("#B91C1C")))
story.append(SP(5))
story.append(Paragraph("<b>Rate Laws Summary (IMP):</b>", subsection_header))
story.append(two_col_table([
["Zero Order", "-dC/dt = kβ", "C = Cβ - kβt", "tΒ½ = Cβ/2kβ", "Conc vs t β straight line"],
["First Order", "-dC/dt = kβC", "ln C = ln Cβ - kβt", "tΒ½ = 0.693/kβ", "ln Conc vs t β straight line"],
["Second Order","-dC/dt = kβCΒ²", "1/C = 1/Cβ + kβt", "tΒ½ = 1/kβCβ", "1/Conc vs t β straight line"],
], headers=["Order", "Rate Eq", "Integrated Law", "Half-Life", "Graphical Test"],
col_w=[2.2*cm, 2.8*cm, 3.5*cm, 2.5*cm, W - 4*cm - 11*cm - 0.2*cm]))
story.append(SP(5))
story.append(formula_box("Arrhenius Equation",
"k = A Β· e^(-Ea / RT)",
"A = frequency factor | Ea = activation energy (J/mol) | R = 8.314 J/molΒ·K | T = Kelvin"))
story.append(SP(4))
story.append(formula_box("Arrhenius (log form)",
"log k = log A - Ea / (2.303 RT)",
"Plot: log k vs 1/T β slope = -Ea/2.303R | Used to predict shelf life at different temps"))
story.append(SP(4))
story.append(formula_box("First-Order Half-Life",
"tΒ½ = 0.693 / k",
"Independent of initial concentration β constant tΒ½ is hallmark of first-order kinetics"))
story.append(SP(4))
story.append(formula_box("Shelf Life (tββ)",
"tββ = 0.105 / k [first order]",
"Time for drug to degrade to 90% of original potency | tββ = 0.1 Cβ/kβ for zero order"))
story.append(SP(4))
story.append(formula_box("Q10 Rule (Temperature Coefficient)",
"Q10 = k(T+10) / k(T) β 2-3 for most reactions",
"For every 10Β°C rise, rate roughly doubles | Used in accelerated stability prediction"))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Order of Reaction Identification β 'ZFL'",
[("Z", "Zero: straight line on Conc vs Time plot"),
("F", "First: straight line on ln(Conc) vs Time plot"),
("L", "Log/Second: straight line on 1/Conc vs Time plot")]))
story.append(SP(5))
story.append(mnemonic_box("Mnemonic: Arrhenius Equation β 'A-E-RT'",
[("A", "A = pre-exponential (Arrhenius) factor β collision frequency"),
("E", "Ea = activation energy β minimum energy for reaction"),
("R", "R = gas constant (8.314 J/molΒ·K)"),
("T", "T = absolute temperature in KELVIN (not Β°C!)")]))
story.append(SP(6))
story.append(tip_box("ICH Accelerated Stability: 40Β°C/75% RH for 6 months (Zone III/IV). Long-term: 25Β°C/60% RH for 12-24 months."))
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 9 β MASTER FORMULA SHEET
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("9. MASTER FORMULA SHEET β CUT & KEEP", colors.HexColor("#0F172A")))
story.append(SP(6))
master_data = [
["Henderson-Hasselbalch", "pH = pKa + log([Aβ»]/[HA])"],
["Stoke's Law", "v = 2rΒ²(Οβ-Οβ)g / 9Ξ·"],
["Arrhenius Equation", "k = AΒ·e^(-Ea/RT)"],
["1st Order Half-Life", "tΒ½ = 0.693 / k"],
["Zero Order Half-Life", "tΒ½ = Cβ / 2kβ"],
["2nd Order Half-Life", "tΒ½ = 1 / kβCβ"],
["Shelf Life (tββ) 1st", "tββ = 0.105 / k"],
["Carr's Index", "CI = [(Οtap - Οbulk)/Οtap] Γ 100"],
["Hausner Ratio", "HR = Οtap / Οbulk"],
["Raoult's Law", "P = Xsolvent Γ PΒ°solvent"],
["Osmotic Pressure", "Ο = iMRT"],
["Langmuir Isotherm", "x/m = abC / (1 + bC)"],
["Freundlich Isotherm", "x/m = KC^(1/n) β log(x/m) = logK + (1/n)logC"],
["Newton's Viscosity Law", "Ο = Ξ· Γ G (F/A = Ξ· Γ dv/dr)"],
["HLB (Griffin)", "HLB = 20 Γ Mh / M"],
["Zeta Potential (stable)", "ΞΆ > Β±30 mV"],
["Buffer Capacity", "Ξ² = ΞB / ΞpH"],
["Q10 Rule", "Q10 = k(T+10) / k(T) β 2-3"],
]
master_t = Table(
[[Paragraph(f"<b>{r}</b>", small_body), Paragraph(f, formula_style)] for r, f in master_data],
colWidths=[5*cm, W - 4*cm - 5*cm - 0.2*cm]
)
master_t.setStyle(TableStyle([
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#CBD5E1")),
("BACKGROUND", (0,0), (0,-1), GRAY_LIGHT),
("BACKGROUND", (1,0), (1,-1), YELLOW),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 7),
("FONTSIZE", (0,0), (-1,-1), 9),
# Alternate rows
*[("BACKGROUND", (0,i), (-1,i), colors.HexColor("#F8FAFC")) for i in range(1, len(master_data), 2)],
]))
story.append(master_t)
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 10 β ALL MNEMONICS AT A GLANCE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_title("10. ALL MNEMONICS AT A GLANCE", colors.HexColor("#5B21B6")))
story.append(SP(5))
mnemonics_summary = [
["VBOF", "Colligative Properties", "Vapour lowering Β· Boiling pt elevation Β· Osmotic pressure Β· Freezing pt depression"],
["ABHA", "Ionization of Weak Acid", "Above pKa = ionized Β· Below pKa = unionized Β· H-H equation Β· At pKa = 50:50"],
["CAMP", "Solubilization Methods", "Cosolvency Β· Acids/Alkalis Β· Micellization Β· Prodrugs+Complexation"],
["CASH", "Powder Flow Tests", "Carr's Index Β· Angle of repose Β· Shear cell Β· Hausner Ratio"],
["ZEST", "Colloid Stability", "Zeta potential Β· Electrolyte Β· Steric stabilization Β· Temperature"],
["FED vs DEC","Floc vs Defloc", "Floc: Easy redisperse, Dose uniform | Defloc: Elegant, Caking risk"],
["PPD-T","Non-Newtonian Flow", "Plastic Β· Pseudoplastic Β· Dilatant Β· Thixotropy (time-dependent)"],
["LMF", "Adsorption Isotherms", "Langmuir=Limited monolayer Β· Freundlich=Free multilayer"],
["ZFL", "Reaction Order ID", "Zero=Conc vs t straight Β· First=lnC vs t Β· Second=1/C vs t"],
["AERT", "Arrhenius Equation", "A=frequency factor Β· Ea=activation energy Β· R=8.314 Β· T=Kelvin"],
]
msum_t = Table(
[[Paragraph(f"<b>{m}</b>", mnemonic_style),
Paragraph(f"<b>{topic}</b>", small_body),
Paragraph(meaning, small_body)]
for m, topic, meaning in mnemonics_summary],
colWidths=[2*cm, 3.5*cm, W - 4*cm - 5.7*cm]
)
msum_t.setStyle(TableStyle([
("GRID", (0,0), (-1,-1), 0.5, colors.HexColor("#C4B5FD")),
("BACKGROUND", (0,0), (-1,-1), PURPLE),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 7),
("FONTSIZE", (0,0), (-1,-1), 8.5),
*[("BACKGROUND", (0,i), (-1,i), colors.HexColor("#EDE9FE")) for i in range(0, len(mnemonics_summary), 2)],
]))
story.append(msum_t)
story.append(SP(10))
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# FOOTER TIP BOX
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
final_tip = Table([[Paragraph(
"<b>EXAM DAY CHECKLIST:</b> H-H equation β | Stoke's Law β | Arrhenius β | "
"Rate laws (0, 1st, 2nd) β | HLB values β | Carr's Index thresholds β | "
"Thixotropy curve β | Zeta potential Β±30 mV β",
tip_style)]],
colWidths=[W - 4*cm])
final_tip.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), colors.HexColor("#FEF3C7")),
("BOX", (0,0), (-1,-1), 2, YELLOW_BDR),
("LEFTPADDING", (0,0), (-1,-1), 12),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
]))
story.append(final_tip)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BUILD PDF
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
output_path = "/home/daytona/workspace/pharm-formula-guide/Physical_Pharmacy_Quick_Reference.pdf"
doc = SimpleDocTemplate(
output_path,
pagesize=A4,
leftMargin=2*cm,
rightMargin=2*cm,
topMargin=1.8*cm,
bottomMargin=2*cm,
title="Physical Pharmacy Quick Reference Guide",
author="Study Sprint"
)
doc.build(story, onFirstPage=add_page_number, onLaterPages=add_page_number)
print(f"PDF generated: {output_path}")
cd /home/daytona/workspace/pharm-formula-guide && python generate_guide.py
ls -lh /home/daytona/workspace/pharm-formula-guide/Physical_Pharmacy_Quick_Referβ¦
Physical Pharmacy Quick Reference
PDF Document Β· PDF
| Section | Contents |
|---|---|
| 1. Solutions | Raoult's Law, Osmotic Pressure, Molarity, % w/v + "VBOF" mnemonic |
| 2. Ionization & Buffers | Henderson-Hasselbalch (acid + base), buffer capacity, "ABHA" mnemonic |
| 3. Solubility | log S vs pH, CMC, factors table, "CAMP" mnemonic |
| 4. Micromeritics | Carr's Index, Hausner Ratio, Angle of Repose, surface area, "CASH" mnemonic |
| 5. Dispersed Systems | Stoke's Law, Zeta Potential, HLB (Griffin + Davies), HLB values table, "ZEST" + "FED vs DEC" |
| 6. Rheology | Newton's viscosity law, flow types table, thixotropy tip, "PPD-T" mnemonic |
| 7. Adsorption | Langmuir + Freundlich isotherms (both forms), linearization formulas, "LMF" |
| 8. Kinetics & Stability | Full rate laws table (0, 1st, 2nd), Arrhenius, tΒ½, tββ, Q10, ICH conditions |
| 9. Master Formula Sheet | All 18 key formulas in one cut-and-keep table (colour-coded) |
| 10. All Mnemonics | Every mnemonic summarized in one quick-scan table |
Create image for study time table
A beautiful, colorful printable study timetable image for Physical Pharmacy exam preparation. 2.5 day study plan starting 26 June 2025 ending 28 June 2025 morning. Structured like a professional academic planner with: DAY 1 - Saturday 26 June 2025: - Morning Session (7:00 AM - 10:30 AM): Solutions (IMP), Solubilization (IMP), Ionization & Henderson-Hasselbalch - marked with red star IMP - Afternoon Session (12:00 PM - 3:00 PM): Colloids (IMP), Emulsions & HLB (IMP), Suspensions & Stokes Law (IMP) - Evening Session (5:00 PM - 7:00 PM): Hydrolysis + Adsorption, Micromeritics (IMP), Formula Review DAY 2 - Sunday 27 June 2025: - Morning Session (7:00 AM - 10:00 AM): Rheology (IMP), Kinetics - Rate & Order, Half-life calculations - Afternoon Session (12:00 PM - 3:00 PM): Arrhenius & Stability Testing (IMP), Physicochemical Processes, Miscellaneous Processes - Evening Session (5:00 PM - 7:30 PM): Full Revision Round, Past Paper MCQs (30-40 questions) DAY 2.5 - Monday 28 June 2025 (EXAM DAY): - Morning (7:00 AM - 10:00 AM): Weak areas revision, Formula Sheet review, Final MCQ round 20-25 questions, Last IMP skim Design: dark navy blue header, pastel yellow morning blocks, soft lavender afternoon blocks, mint green evening blocks, orange exam day block. Bold IMP tags in red. Clean sans-serif fonts. Motivational quote at bottom. Star ratings for priority topics. Professional academic planner aesthetic on white background with subtle grid lines.

Physical Pharmacy Quick Reference
PDF Document Β· PDF