Mpharm pharmacology ideas suggest me
M.Pharm pharmacology research ideas dissertation topics 2025 2026
pharmacology emerging research trends drug discovery
| Area | Specific Idea |
|---|---|
| Nanopharmacology | Lipid nanoparticles for targeted cancer drug delivery |
| Psychedelic pharmacology | Psilocybin/ketamine in treatment-resistant depression |
| Gut microbiome-drug interaction | How dysbiosis alters drug metabolism |
| RNA therapeutics | siRNA/mRNA-based drug pharmacology |
| GLP-1 agonists | Pleiotropic effects beyond glycemia |
| Oncopharmacology | Tumor microenvironment-targeted therapy |
New reading no one has ever done in pharmacology
novel in vivo animal model pharmacology methodology 2025
unexplored novel in vivo pharmacology methodology animal model research 2025 2026
| # | Novel Methodology | Disease Area | Feasibility (Indian Lab) |
|---|---|---|---|
| 1 | Home-cage automated phenotyping | CNS | Medium |
| 2 | Gut microbiome-depleted model | CNS/Inflammation | High |
| 3 | In vivo tissue proteomics | Cardiac/Neuro | Medium |
| 4 | Radiotelemetry in conscious animals | Cardiovascular | Medium-Low |
| 5 | DAMP sterile inflammation model | Inflammation | High |
| 6 | Pharmacoepigenetics (ChIP assay) | CNS/Cancer | Medium |
| 7 | Brain microdialysis | CNS/PK | Medium |
| 8 | Zebrafish larval pharmacology | Any | High |
Zebrafish model (#8) + DAMP sterile inflammation (#5) - both are genuinely novel at the M.Pharm level, publishable in Q1/Q2 journals, ethically simpler, and achievable within a 2-year dissertation window.
Create a detailed methodology document for zebrafish model pharmacology
zebrafish pharmacology model behavioral assay drug screening methodology
mkdir -p /tmp/workspace/zebrafish-methodology && ls /tmp/workspace/
~/zebrafish-methodology/create_doc.py
from docx import Document
from docx.shared import Pt, Inches, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
doc = Document()
# ββ Page margins ββ
section = doc.sections[0]
section.top_margin = Inches(1.0)
section.bottom_margin = Inches(1.0)
section.left_margin = Inches(1.25)
section.right_margin = Inches(1.25)
# ββ Default body font ββ
normal = doc.styles["Normal"]
normal.font.name = "Times New Roman"
normal.font.size = Pt(12)
# ββ Heading styles ββ
def style_heading(doc, level, text, color_rgb=(0, 51, 102)):
p = doc.add_heading(text, level=level)
for run in p.runs:
run.font.color.rgb = RGBColor(*color_rgb)
run.font.name = "Arial"
return p
def add_body(doc, text, bold=False, italic=False, spacing_after=6):
p = doc.add_paragraph()
run = p.add_run(text)
run.bold = bold
run.italic = italic
run.font.name = "Times New Roman"
run.font.size = Pt(12)
p.paragraph_format.space_after = Pt(spacing_after)
p.paragraph_format.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
return p
def add_bullet(doc, text, level=0):
p = doc.add_paragraph(style="List Bullet")
run = p.add_run(text)
run.font.name = "Times New Roman"
run.font.size = Pt(11)
p.paragraph_format.space_after = Pt(3)
return p
def add_numbered(doc, text):
p = doc.add_paragraph(style="List Number")
run = p.add_run(text)
run.font.name = "Times New Roman"
run.font.size = Pt(11)
p.paragraph_format.space_after = Pt(4)
return p
def add_table_row(table, cells, bold=False):
row = table.add_row()
for i, text in enumerate(cells):
cell = row.cells[i]
cell.text = text
for para in cell.paragraphs:
for run in para.runs:
run.bold = bold
run.font.name = "Arial"
run.font.size = Pt(10)
return row
def shade_row(row, hex_color="003366"):
for cell in row.cells:
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement("w:shd")
shd.set(qn("w:val"), "clear")
shd.set(qn("w:color"), "auto")
shd.set(qn("w:fill"), hex_color)
tcPr.append(shd)
def add_divider(doc):
p = doc.add_paragraph()
p.paragraph_format.space_before = Pt(2)
p.paragraph_format.space_after = Pt(2)
run = p.add_run("β" * 80)
run.font.size = Pt(8)
run.font.color.rgb = RGBColor(180, 180, 180)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# TITLE PAGE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
p = doc.add_paragraph()
p.paragraph_format.space_before = Pt(36)
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("ZEBRAFISH MODEL IN PHARMACOLOGY")
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(22)
run.font.color.rgb = RGBColor(0, 51, 102)
p2 = doc.add_paragraph()
p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
run2 = p2.add_run("Detailed Methodology Document for M.Pharm Pharmacology Research")
run2.bold = True
run2.font.name = "Arial"
run2.font.size = Pt(14)
run2.font.color.rgb = RGBColor(0, 102, 153)
doc.add_paragraph()
p3 = doc.add_paragraph()
p3.alignment = WD_ALIGN_PARAGRAPH.CENTER
run3 = p3.add_run("Prepared for M.Pharm Pharmacology Dissertation")
run3.font.name = "Arial"
run3.font.size = Pt(12)
run3.italic = True
p4 = doc.add_paragraph()
p4.alignment = WD_ALIGN_PARAGRAPH.CENTER
run4 = p4.add_run("Based on Current Literature | August 2026")
run4.font.name = "Arial"
run4.font.size = Pt(11)
run4.font.color.rgb = RGBColor(100, 100, 100)
doc.add_paragraph()
p5 = doc.add_paragraph()
p5.alignment = WD_ALIGN_PARAGRAPH.CENTER
run5 = p5.add_run("Key References: PMID 40441589 | PMID 38710414 | PMID 38984683 | PMID 38514602")
run5.font.name = "Arial"
run5.font.size = Pt(10)
run5.font.color.rgb = RGBColor(130, 130, 130)
run5.italic = True
doc.add_page_break()
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 1. INTRODUCTION
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
style_heading(doc, 1, "1. INTRODUCTION AND RATIONALE")
add_body(doc,
"Zebrafish (Danio rerio) have emerged as one of the most powerful vertebrate model organisms "
"in pharmacological research. With over 70% genetic homology to humans, a fully sequenced "
"genome, optical transparency during larval stages, external fertilization, rapid development, "
"and high fecundity (200-300 eggs per clutch per week), zebrafish offer unique advantages "
"that no other vertebrate model can match for high-throughput pharmacological screening.")
add_body(doc,
"Under European Union Directive 2010/63/EU and equivalent Indian CPCSEA guidelines, zebrafish "
"larvae up to 5 days post-fertilization (dpf) are not classified as protected animals, making "
"ethical approval faster and simpler compared to rodent studies. This is a major practical "
"advantage for M.Pharm dissertation work in Indian institutions.")
style_heading(doc, 2, "1.1 Key Advantages Over Rodent Models")
advantages = [
"High throughput: 200-300 larvae per week from a single pair - enables large sample sizes",
"Cost-effective: ~1/1000th the cost of equivalent rat/mouse studies",
"Optical transparency: Real-time fluorescence imaging of organs, neurons, and vasculature",
"Faster: Full behavioral assays completed in larvae (5-7 dpf) vs. 8-12 weeks in rats",
"Drug administration: Simple immersion (bath) dosing - no injections required",
"Ethical advantage: Larvae <5 dpf are non-protected under most national guidelines",
"Genetic tools: Morpholino knockdown, CRISPR, transgenic lines readily available",
"Organ homology: Brain, heart, liver, kidney, gut - all present and functionally similar to humans",
"Validated assays: Anxiety, locomotion, seizures, sleep, addiction - all established in zebrafish"
]
for a in advantages:
add_bullet(doc, a)
doc.add_paragraph()
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 2. ZEBRAFISH HUSBANDRY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "2. ZEBRAFISH HUSBANDRY AND MAINTENANCE")
style_heading(doc, 2, "2.1 Strain Selection")
add_body(doc,
"The wild-type AB strain is the standard for pharmacological studies. For specialized studies, "
"the following transgenic lines are recommended:")
strains = [
("AB Wild-Type", "General pharmacology, toxicology, behavioral studies"),
("Tg(elavl3:GFP) - HuC-GFP", "Neuronal visualization, CNS pharmacology"),
("Tg(fli1a:EGFP)", "Vascular pharmacology, angiogenesis studies"),
("Tg(cmlc2:GFP) - Heart GFP", "Cardiac pharmacology, cardiotoxicity"),
("casper (roy; nacre)", "Whole-body imaging, tumor pharmacology"),
]
tbl = doc.add_table(rows=1, cols=2)
tbl.style = "Table Grid"
hdr = tbl.rows[0].cells
hdr[0].text = "Strain"
hdr[1].text = "Recommended Use"
for cell in hdr:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(10)
run.font.color.rgb = RGBColor(255, 255, 255)
shade_row(tbl.rows[0], "003366")
for strain, use in strains:
row = tbl.add_row()
row.cells[0].text = strain
row.cells[1].text = use
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.name = "Times New Roman"
run.font.size = Pt(10)
doc.add_paragraph()
style_heading(doc, 2, "2.2 Housing Conditions")
housing = [
"Tank system: Recirculating system with biological, mechanical, and UV filtration",
"Water temperature: 28 Β± 0.5Β°C (critical - affects drug metabolism)",
"Photoperiod: 14 hours light / 10 hours dark (strictly maintained)",
"Water pH: 7.0 - 7.5",
"Conductivity: 500 - 1000 ΞΌS/cm",
"Density: Maximum 5 adult fish per liter; larvae at 50 per 10 cm dish",
"Feeding: Artemia (brine shrimp) twice daily for adults; no feeding required for larvae <5 dpf (yolk sac nutrition)",
"Water quality monitoring: Ammonia <0.5 ppm, Nitrite <0.2 ppm, Nitrate <50 ppm - check weekly",
]
for h in housing:
add_bullet(doc, h)
style_heading(doc, 2, "2.3 Breeding Protocol")
add_body(doc, "Standard timed breeding for synchronized larval cohorts:")
breeding = [
"Day -1 (Evening): Place one male and one female in breeding tank with divider. Set light timer.",
"Day 0 (Morning, 8:00 AM): Remove divider at lights-on. Spawning occurs within 15-30 minutes.",
"Collect eggs within 1 hour of spawning using a sieve (500 ΞΌm mesh).",
"Rinse eggs with E3 medium (5 mM NaCl, 0.17 mM KCl, 0.33 mM CaCl2, 0.33 mM MgSO4, pH 7.4).",
"Remove unfertilized and dead eggs under a stereomicroscope (appear opaque/white).",
"Culture in 90 mm Petri dishes at 28Β°C in E3 medium (50 eggs per dish maximum).",
"Change E3 medium every 24 hours; remove any dead larvae promptly.",
"Add methylene blue (0.1 mg/L) to E3 for the first 24 hpf to prevent fungal contamination.",
"For locomotor assays: Add 0.003% PTU (1-phenyl-2-thiourea) from 24 hpf to prevent pigmentation.",
]
for i, b in enumerate(breeding, 1):
add_numbered(doc, b)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 3. DRUG ADMINISTRATION
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "3. DRUG PREPARATION AND ADMINISTRATION")
style_heading(doc, 2, "3.1 Drug Solubilization")
add_body(doc,
"Drug administration in zebrafish larvae is primarily by immersion (bath exposure) - the "
"drug is dissolved directly in the E3 medium in which larvae swim. Larvae absorb compounds "
"through the skin, gills, and ingestion. This is analogous to intraperitoneal dosing in terms "
"of systemic exposure.")
add_body(doc, "Solubilization hierarchy (attempt in this order):", bold=True)
solub = [
"First choice: Dissolve directly in E3 medium (water-soluble compounds)",
"Second choice: DMSO stock (maximum 0.1% v/v final concentration in assay to avoid toxicity)",
"Third choice: Ethanol stock (maximum 0.5% v/v final - monitor for ethanol behavioral effects)",
"Fourth choice: 0.5% methylcellulose or 1% Tween-80 in E3 for insoluble compounds",
"Always run a vehicle control group (E3 + solvent, no drug) alongside drug groups",
]
for s in solub:
add_bullet(doc, s)
style_heading(doc, 2, "3.2 Dose-Range Finding (Pilot Study - MANDATORY)")
add_body(doc,
"Before the main experiment, conduct a toxicity range-finding study to establish the maximum "
"tolerated concentration (MTC) and the LC50 (lethal concentration 50%). This step is non-negotiable.")
pilot = [
"Prepare 6-8 concentration groups (e.g., 0.1, 0.5, 1, 5, 10, 50, 100, 200 ΞΌM) in E3 medium.",
"Expose 10 larvae per concentration group (5-6 dpf) for 24 hours.",
"Observe and score: survival, heart rate, spontaneous movement, morphology (yolk sac edema, curved body, small head).",
"Calculate LC10, LC50 using Probit analysis (SPSS or GraphPad Prism).",
"Select experimental doses at LC10 and below (typically 3 sublethal doses: low, mid, high).",
"Record NOAEL (No-Observed-Adverse-Effect Level) as your maximum safe dose.",
]
for i, p in enumerate(pilot, 1):
add_numbered(doc, p)
style_heading(doc, 2, "3.3 Experimental Dose Groups")
add_body(doc, "Standard group design for M.Pharm dissertation:")
grp_table = doc.add_table(rows=1, cols=3)
grp_table.style = "Table Grid"
hdr2 = grp_table.rows[0].cells
hdr2[0].text = "Group"
hdr2[1].text = "Treatment"
hdr2[2].text = "n (larvae)"
for cell in hdr2:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(10)
run.font.color.rgb = RGBColor(255, 255, 255)
shade_row(grp_table.rows[0], "003366")
groups = [
("Group I - Normal Control", "E3 medium only (no vehicle, no drug)", "20"),
("Group II - Vehicle Control", "E3 + solvent (DMSO 0.1%) only", "20"),
("Group III - Standard Drug", "Positive control drug (e.g., diazepam 5 ΞΌM)", "20"),
("Group IV - Test Drug Low Dose", "Test compound at LC10 / 10", "20"),
("Group V - Test Drug Mid Dose", "Test compound at LC10 / 5", "20"),
("Group VI - Test Drug High Dose", "Test compound at LC10 / 2", "20"),
]
for g, t, n in groups:
row = grp_table.add_row()
row.cells[0].text = g
row.cells[1].text = t
row.cells[2].text = n
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.name = "Times New Roman"
run.font.size = Pt(10)
doc.add_paragraph()
style_heading(doc, 2, "3.4 Exposure Duration and Timing")
timing = [
"Acute exposure: 1-2 hours before behavioral assay (for CNS/behavioral pharmacology)",
"Sub-acute exposure: 24-48 hours immersion (for anti-inflammatory, anti-cancer studies)",
"Chronic exposure: 5 days continuous (1-5 dpf) for developmental pharmacology",
"Washout study: Remove drug, replace with clean E3, re-test after 2 hours to confirm reversibility",
"All exposures conducted in 24-well plates (1 larva per well, 500 ΞΌL E3 + drug per well)",
]
for t in timing:
add_bullet(doc, t)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 4. BEHAVIORAL ASSAYS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "4. BEHAVIORAL ASSAY PROTOCOLS")
add_body(doc,
"The following validated behavioral assays cover the most important pharmacological domains. "
"Select assays based on the pharmacological activity being evaluated. All assays should be "
"performed between 09:00-17:00 to avoid circadian variability.")
# 4.1 LDT
style_heading(doc, 2, "4.1 Light-Dark Transition (LDT) Test - Anxiolytic/Anxiogenic Activity")
add_body(doc,
"Principle: Zebrafish larvae show natural scototaxis (preference for dark). Anxiogenic compounds "
"increase time in dark; anxiolytic drugs reduce the aversion to light (increase time in light). "
"This is the zebrafish equivalent of the rodent open field test.")
add_body(doc, "Equipment required:", bold=True)
equip_ldt = [
"24-well plate (clear bottom, black walls) - prevents inter-well visual disturbance",
"Automated video tracking system (ANY-maze, Ethovision XT, ZebraLab, or open-source idTracker.ai)",
"LED light source with programmable on/off cycling capability",
"Infrared backlighting for recording in dark phase",
"Computer with tracking software installed",
]
for e in equip_ldt:
add_bullet(doc, e)
add_body(doc, "Protocol:", bold=True)
ldt_steps = [
"Acclimatize larvae (5-6 dpf, 1 per well) in drug/vehicle-containing E3 for 1 hour before testing.",
"Transfer plate to tracking arena. Allow 5-minute acclimatization with room lights on.",
"Start recording. Run the following light protocol: Dark 10 min β Light 10 min β Dark 10 min β Light 10 min (total 40 min).",
"Video record at minimum 25 fps (frames per second).",
"Track and quantify: distance traveled (mm), velocity (mm/s), and time in light zone vs. dark zone per epoch.",
"Calculate: Light preference ratio = Time in Light / Total Time Γ 100%",
"Compare across groups using One-Way ANOVA + Tukey's post-hoc test.",
]
for i, s in enumerate(ldt_steps, 1):
add_numbered(doc, s)
add_body(doc, "Expected results for anxiolytic compound: Significantly increased time in light zone, "
"reduced distance in dark (hypo-locomotion in stressed dark phase), reduced startle response "
"at light-dark transition. Compare with diazepam (positive control, 5 ΞΌM) response.", italic=True)
# 4.2 PMR
doc.add_paragraph()
style_heading(doc, 2, "4.2 Photolocomotor Response (PLR) / Photomotor Response (PMR)")
add_body(doc,
"Principle: Sudden changes in light intensity (dark flash / light flash) trigger characteristic "
"stereotyped locomotor bursts in zebrafish larvae. This assay measures CNS excitability, "
"drug effects on sensory processing, and sedation/stimulation.")
plr_steps = [
"Use 6 dpf larvae in 96-well plate (1 larva per well, 150 ΞΌL per well).",
"Run alternating protocol: Light ON (10 min) β Light OFF (10 min) for 3 cycles = 60 min total.",
"Record velocity and distance during each light phase and dark phase.",
"Key metric: Dark-phase burst response amplitude (mm/s peak velocity in first 30 sec of dark).",
"CNS depressants (e.g., benzodiazepines, opioids) reduce the dark-phase burst velocity.",
"CNS stimulants increase overall velocity and reduce habituation across cycles.",
]
for i, s in enumerate(plr_steps, 1):
add_numbered(doc, s)
# 4.3 Seizure model
style_heading(doc, 2, "4.3 PTZ-Induced Seizure Model - Anticonvulsant Pharmacology")
add_body(doc,
"Principle: Pentylenetetrazole (PTZ) induces seizures in zebrafish larvae in a dose-dependent, "
"reproducible manner. This model closely mimics absence and generalized tonic-clonic seizures. "
"Validated against valproate, phenytoin, levetiracetam.")
add_body(doc, "Seizure scoring criteria (Stages I-IV):", bold=True)
seizure_stages = [
"Stage I: Increased swimming activity, erratic movement, rapid fin movement",
"Stage II: Whole-body convulsions, circular spinning, corkscrew swimming",
"Stage III: Loss of posture, lying on side with rapid fin flapping",
"Stage IV: No movement, sedation/death",
]
for s in seizure_stages:
add_bullet(doc, s)
add_body(doc, "Protocol:", bold=True)
ptz_steps = [
"Pre-treat larvae with test compound for 1 hour (24-well plate, 1 larva/well).",
"Add PTZ (15 mM final concentration in E3) directly to each well without removing larvae.",
"Start video recording immediately upon PTZ addition.",
"Record for 20 minutes. Track distance traveled (mm/min) and seizure stage scoring.",
"PTZ-treated control larvae show Stage II-III within 5 minutes.",
"Effective anticonvulsants significantly delay seizure onset and reduce stage severity.",
"Calculate: Mean seizure latency (seconds to first Stage II event), % larvae reaching Stage III.",
]
for i, s in enumerate(ptz_steps, 1):
add_numbered(doc, s)
# 4.4 Social Behavior
style_heading(doc, 2, "4.4 Social Preference / Shoaling Assay - Autism / Antipsychotic Research")
add_body(doc,
"Principle: Adult zebrafish (3+ months) show strong shoaling behavior. Social isolation-exposed "
"fish or drug-treated fish show altered shoaling. Relevant for autism spectrum disorder (ASD) "
"pharmacology, antipsychotics, and social anxiolytics.")
shoal_steps = [
"Use adult zebrafish (10 fish per group) in a 10L tank.",
"Record from above using overhead camera for 10 minutes.",
"Track each fish with multi-animal tracking software (idTracker.ai - free, validated).",
"Quantify: Inter-individual distance (shoaling cohesion), nearest-neighbor distance (NND), group polarity.",
"Drugs reducing shoaling (increasing NND) = antisocial/psychotomimetic effect.",
"Drugs restoring shoaling in socially-isolated fish = prosocial/antipsychotic-like effect.",
]
for i, s in enumerate(shoal_steps, 1):
add_numbered(doc, s)
# 4.5 Novel Tank Test
style_heading(doc, 2, "4.5 Novel Tank Test (NTT) - Anxiety / Antidepressant Activity")
add_body(doc,
"Principle: When placed in a novel tank, zebrafish initially dive to the bottom (anxiety response) "
"then gradually explore the top half. Anxiolytics/antidepressants accelerate this transition. "
"This is the zebrafish equivalent of the elevated plus maze.")
ntt_steps = [
"Transfer individual adult zebrafish to a standard novel tank (1.5L trapezoidal tank).",
"Record from the side for 5 minutes immediately after transfer.",
"Divide tank virtually into top half and bottom half using software.",
"Key metrics: Latency to enter top half (seconds), time spent in top half (%), erratic movements/min.",
"Anxiolytic-treated fish: Reduced bottom-dwelling, faster exploration of top, fewer erratic turns.",
"Anxiogenic-treated fish: Prolonged bottom-dwelling, freezing behavior.",
"Positive control: Ethanol 0.25% produces anxiolytic-like profile; buspirone 5 mg/L for comparison.",
]
for i, s in enumerate(ntt_steps, 1):
add_numbered(doc, s)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 5. TOXICOLOGY ENDPOINTS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "5. TOXICOLOGY AND MORPHOLOGICAL ENDPOINTS")
style_heading(doc, 2, "5.1 Developmental Toxicity - OECD TG 236 (Fish Embryo Acute Toxicity Test)")
add_body(doc,
"This is the internationally standardized zebrafish toxicity protocol published by the OECD "
"(Organization for Economic Co-operation and Development). Use this as your acute toxicity "
"methodology - it is peer-reviewed, widely cited, and accepted by regulatory bodies.")
oecd_steps = [
"Collect freshly fertilized eggs (< 1 hpf - hours post fertilization).",
"Transfer individually to 24-well plates (1 egg per well, 2 mL test solution).",
"Expose to test compound from 0-96 hpf at 28Β°C in the dark.",
"Observe and record at 24, 48, 72, and 96 hpf.",
"Score four endpoints (any positive = lethal event): coagulation of fertilized egg, non-somite formation, non-detachment of tail, absence of heartbeat.",
"Calculate LC50 at 96 hpf using Probit analysis. Report 95% confidence interval.",
"Compare with reference chemical (3,4-dichloroaniline, LC50 should be 1.5-2.5 mg/L to validate test system).",
]
for i, s in enumerate(oecd_steps, 1):
add_numbered(doc, s)
style_heading(doc, 2, "5.2 Morphological Toxicity Scoring")
add_body(doc,
"Under a stereomicroscope (10-40x), score each larva for the following morphological endpoints "
"at 72-96 hpf:")
morph_table = doc.add_table(rows=1, cols=3)
morph_table.style = "Table Grid"
mhdr = morph_table.rows[0].cells
mhdr[0].text = "Body Region"
mhdr[1].text = "Endpoint"
mhdr[2].text = "Scoring"
for cell in mhdr:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(10)
run.font.color.rgb = RGBColor(255, 255, 255)
shade_row(morph_table.rows[0], "003366")
morph_data = [
("Head", "Microcephaly, hydrocephaly, otic vesicle size", "Present (1) / Absent (0)"),
("Eye", "Microphthalmia, lens opacity, cyclopia", "Present (1) / Absent (0)"),
("Heart", "Pericardial edema, heart rate, looping defects", "BPM count + binary"),
("Yolk sac", "Yolk sac edema - abnormal swelling", "Present (1) / Absent (0)"),
("Body axis", "Curved/bent body axis (scoliosis, kyphosis)", "Degrees of curvature"),
("Tail", "Truncated tail, fin malformations", "Present (1) / Absent (0)"),
("Pigmentation", "Reduced melanization (without PTU)", "% normal vs control"),
("Swim bladder", "Inflation of swim bladder by 5 dpf", "Inflated (1) / Absent (0)"),
("Overall", "Spontaneous movement at 24 hpf", "Contractions/min"),
]
for region, endpoint, scoring in morph_data:
row = morph_table.add_row()
row.cells[0].text = region
row.cells[1].text = endpoint
row.cells[2].text = scoring
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.name = "Times New Roman"
run.font.size = Pt(10)
doc.add_paragraph()
style_heading(doc, 2, "5.3 Cardiac Pharmacology - Heart Rate and Rhythm")
add_body(doc,
"The zebrafish heart is optically transparent and directly visible under a stereomicroscope "
"from 24 hpf. This makes it ideal for cardiotoxicity screening and cardiovascular pharmacology.")
cardiac = [
"Anesthetize larvae with 0.02% tricaine (MS-222) for immobilization (does not stop heartbeat at this dose).",
"Mount larvae in 3% methylcellulose on a glass slide, lateral view.",
"Record heart video at minimum 60 fps under a stereomicroscope.",
"Count atrial and ventricular beats per minute (BPM) manually or using Zebrafish Heart Rate Analyzer software.",
"Measure: Heart rate (BPM), atrioventricular (AV) block (ratio of A:V beats), arrhythmia score.",
"Normal heart rate: 120-180 BPM at 72 hpf. Drug effect: >20% change from vehicle control = significant.",
"For QT-interval equivalent: Use automated software to measure systolic and diastolic duration.",
]
for i, c in enumerate(cardiac, 1):
add_numbered(doc, c)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 6. FLUORESCENCE AND IMAGING
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "6. FLUORESCENCE IMAGING ENDPOINTS")
style_heading(doc, 2, "6.1 Reactive Oxygen Species (ROS) Detection - Oxidative Stress")
add_body(doc,
"In vivo ROS quantification using fluorescent dye DCFH-DA (2',7'-dichlorodihydrofluorescein "
"diacetate) - a gold-standard oxidative stress assay adaptable to whole zebrafish larvae.")
ros_steps = [
"Expose larvae (3-4 dpf) to test compound for 24 hours.",
"Wash larvae 3x with E3 medium (2 minutes each wash).",
"Incubate in 10 ΞΌM DCFH-DA in E3 for 1 hour at 28Β°C in dark.",
"Wash 3x with E3 medium again.",
"Anesthetize with 0.02% tricaine. Mount in 1% low-melting agarose on glass-bottom dish.",
"Image under fluorescence microscope: Excitation 488 nm, Emission 525 nm (FITC channel).",
"Quantify mean fluorescence intensity per larva using ImageJ (free software, NIH).",
"Normalize to larva body area. Express as % change vs. vehicle control.",
"Positive control: H2O2 (100 ΞΌM, 2 hours) to confirm dye functionality.",
]
for i, s in enumerate(ros_steps, 1):
add_numbered(doc, s)
style_heading(doc, 2, "6.2 Apoptosis Detection (Acridine Orange Staining)")
add_body(doc,
"Acridine orange (AO) stains apoptotic cells green in vivo. Used to detect drug-induced "
"neuronal or hepatic apoptosis directly in transparent larvae.")
ao_steps = [
"Expose larvae to test compound for desired duration.",
"Wash with E3. Incubate in 5 ΞΌg/mL Acridine Orange in E3 for 30 minutes (dark, 28Β°C).",
"Wash 3x with E3.",
"Image under fluorescence microscope (FITC channel).",
"Count apoptotic foci in brain/liver region using ImageJ Cell Counter plugin.",
"Compare apoptotic cell count across groups by One-Way ANOVA.",
]
for i, s in enumerate(ao_steps, 1):
add_numbered(doc, s)
style_heading(doc, 2, "6.3 Angiogenesis Assay (using Tg(fli1a:EGFP) Transgenic Line)")
add_body(doc,
"The Tg(fli1a:EGFP) line expresses GFP in all endothelial cells, making every blood vessel "
"visible. This is ideal for anti-angiogenic drug pharmacology (cancer/anti-VEGF research).")
angio = [
"Expose Tg(fli1a:EGFP) larvae from 24 hpf to test compound (potential anti-angiogenic).",
"Image at 48 hpf and 72 hpf under fluorescence microscope (GFP channel).",
"Focus on the Subintestinal Vein (SIV) basket - the most sensitive vascular bed for anti-angiogenic drugs.",
"Score SIV sprouts: Count number of sprouts per larva. Normal = 8-12 sprouts.",
"Anti-angiogenic effect = significantly fewer SIV sprouts vs. vehicle control.",
"Positive control: VEGFR inhibitor PTK787 (10 ΞΌM) to validate assay sensitivity.",
]
for i, s in enumerate(angio, 1):
add_numbered(doc, s)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 7. BIOCHEMICAL ENDPOINTS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "7. BIOCHEMICAL AND MOLECULAR ENDPOINTS")
style_heading(doc, 2, "7.1 Sample Preparation from Larvae")
add_body(doc,
"For biochemical assays, pool multiple larvae to achieve sufficient protein. Standard pooling "
"and homogenization protocol:")
pool_steps = [
"Euthanize larvae by immersion in 0.02% tricaine (overdose). Confirm no heartbeat.",
"Collect larvae (20-50 per sample) into 1.5 mL microcentrifuge tube. Remove excess liquid.",
"Add ice-cold lysis buffer: 50 ΞΌL per 10 larvae (RIPA buffer or PBS + protease inhibitor cocktail).",
"Homogenize using pestle homogenizer or 30-second probe sonication (40% amplitude, on ice).",
"Centrifuge at 12,000 Γ g for 15 minutes at 4Β°C.",
"Collect supernatant - this is your tissue lysate for all downstream assays.",
"Determine protein concentration by BCA Protein Assay Kit before proceeding.",
"Store aliquots at -80Β°C. Avoid repeated freeze-thaw cycles (>3 cycles degrades samples).",
]
for i, s in enumerate(pool_steps, 1):
add_numbered(doc, s)
style_heading(doc, 2, "7.2 Biochemical Assay Panel")
bio_table = doc.add_table(rows=1, cols=4)
bio_table.style = "Table Grid"
bhdr = bio_table.rows[0].cells
bhdr[0].text = "Assay"
bhdr[1].text = "Purpose"
bhdr[2].text = "Kit/Method"
bhdr[3].text = "Pharmacology Domain"
for cell in bhdr:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(9)
run.font.color.rgb = RGBColor(255, 255, 255)
shade_row(bio_table.rows[0], "003366")
bio_data = [
("SOD (Superoxide Dismutase)", "Antioxidant defense", "NBT reduction assay", "Oxidative stress / Neuroprotection"),
("CAT (Catalase)", "Antioxidant enzyme", "H2O2 decomposition assay", "Oxidative stress"),
("MDA (Malondialdehyde)", "Lipid peroxidation marker", "TBARS assay kit", "Oxidative stress / Toxicology"),
("GSH (Reduced Glutathione)", "Antioxidant tripeptide", "DTNB method / ELISA", "Hepatoprotection / Neuroprotection"),
("TNF-Ξ± / IL-6 / IL-1Ξ²", "Pro-inflammatory cytokines", "Zebrafish ELISA kits", "Anti-inflammatory pharmacology"),
("Acetylcholinesterase (AChE)", "Cholinergic neurotransmission", "Ellman's method", "Alzheimer's / Neuro pharmacology"),
("Caspase-3 activity", "Apoptosis executor", "Fluorometric kit", "Neuroprotection / Cancer"),
("BDNF levels", "Neurotrophic factor", "Zebrafish BDNF ELISA", "Antidepressant pharmacology"),
("Glucose / Insulin", "Metabolic endpoints", "ELISA kits", "Antidiabetic pharmacology"),
("ALT / AST", "Hepatotoxicity markers", "Colorimetric kits", "Hepatoprotection / Toxicology"),
]
for assay, purpose, method, domain in bio_data:
row = bio_table.add_row()
row.cells[0].text = assay
row.cells[1].text = purpose
row.cells[2].text = method
row.cells[3].text = domain
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.name = "Times New Roman"
run.font.size = Pt(9)
doc.add_paragraph()
style_heading(doc, 2, "7.3 Gene Expression Analysis (RT-qPCR)")
add_body(doc,
"RT-qPCR allows quantification of mRNA expression of pharmacological targets in whole "
"zebrafish larvae. Key advantage: zebrafish genome is fully annotated with validated primer sequences.")
rtpcr = [
"Pool 20-30 larvae per sample. Homogenize in 500 ΞΌL TRIzol reagent immediately.",
"Extract total RNA by chloroform-isopropanol precipitation. Wash pellet with 75% ethanol.",
"Assess RNA quality: Nanodrop (A260/280 ratio 1.8-2.0 = good quality).",
"Synthesize cDNA using reverse transcriptase kit (1 ΞΌg RNA per reaction).",
"Perform qPCR using SYBR Green master mix on a real-time PCR machine.",
"Reference genes for normalization: Ξ²-actin (actb1), elongation factor 1-alpha (ef1Ξ±), or gapdh.",
"Calculate ΞΞCt method for relative expression. Express as fold change vs. vehicle control.",
"Validated zebrafish primer sequences available at ZFIN (zebrafish.org) and PrimerBank databases.",
]
for i, s in enumerate(rtpcr, 1):
add_numbered(doc, s)
add_body(doc, "Suggested target genes by research area:", bold=True)
genes = [
"Anxiety/Depression: bdnf, nr3c1 (glucocorticoid receptor), crf (corticotropin-releasing factor)",
"Inflammation: tnfa, il6, il1b, cox2, nf-kappa-b",
"Seizures/Epilepsy: scn1lab, gad1b, gabra1, penk",
"Antioxidant/Neuroprotection: nrf2, keap1, sod1, cat, gpx",
"Apoptosis: tp53, bcl2l1, casp3a, bax",
"Angiogenesis: vegfaa, kdrl (VEGFR2), hif1a",
]
for g in genes:
add_bullet(doc, g)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 8. HISTOPATHOLOGY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "8. HISTOPATHOLOGY OF ZEBRAFISH LARVAE")
add_body(doc,
"Histopathological examination of zebrafish larvae provides direct morphological evidence of "
"drug effects at the tissue level. Due to small size, whole-larva sectioning is performed.")
histo_steps = [
"Fix larvae in 4% paraformaldehyde (PFA) in PBS for 24 hours at 4Β°C. (Caution: PFA is toxic - handle in fume hood with gloves.)",
"Dehydrate through ethanol series: 30%, 50%, 70%, 90%, 95%, 100% - 30 minutes each.",
"Clear in xylene 2 Γ 15 minutes. (Alternative: use Histoclear for reduced toxicity.)",
"Infiltrate with paraffin wax: 2 Γ 1 hour at 60Β°C.",
"Embed larvae in paraffin. Orient in lateral position for sagittal sections or dorsal for transverse.",
"Section at 5-7 ΞΌm thickness using rotary microtome.",
"Mount on poly-L-lysine coated slides. Dry at 37Β°C overnight.",
"Stain with Hematoxylin & Eosin (H&E) - standard histology stain.",
"Dehydrate, clear, and mount with DPX mountant.",
"Image under light microscope (4x, 10x, 40x objectives).",
"Examine: Brain (neuronal density, vacuolation), Liver (hepatocyte ballooning, fatty change), Gut (villi integrity), Kidney (glomerular structure).",
]
for i, s in enumerate(histo_steps, 1):
add_numbered(doc, s)
add_body(doc, "Special stains for specific endpoints:", bold=True)
special_stains = [
"Alcian Blue: Mucus secretion, cartilage development",
"Alizarin Red: Bone mineralization (skeletal pharmacology)",
"Oil Red O: Lipid accumulation (anti-obesity pharmacology) - requires cryosections",
"Prussian Blue: Iron accumulation/toxicity",
"PAS (Periodic Acid-Schiff): Glycogen and polysaccharides (hepatic glycogen in antidiabetic studies)",
"TUNEL assay: Apoptosis detection in tissue sections",
]
for s in special_stains:
add_bullet(doc, s)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 9. STATISTICAL ANALYSIS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "9. STATISTICAL ANALYSIS PLAN")
add_body(doc,
"All statistical analyses must be pre-specified before data collection (prevents p-hacking). "
"Use SPSS v26+ or GraphPad Prism v10 for all analyses. Apply Bonferroni correction for "
"multiple comparisons. Set significance threshold at p < 0.05 for all tests.")
stat_table = doc.add_table(rows=1, cols=4)
stat_table.style = "Table Grid"
shdr = stat_table.rows[0].cells
shdr[0].text = "Data Type"
shdr[1].text = "Statistical Test"
shdr[2].text = "Post-Hoc Test"
shdr[3].text = "Example Use"
for cell in shdr:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(10)
run.font.color.rgb = RGBColor(255, 255, 255)
shade_row(stat_table.rows[0], "003366")
stat_data = [
("Continuous, normal, >2 groups", "One-Way ANOVA", "Tukey's HSD", "Locomotor distance, biochemical values"),
("Continuous, non-normal", "Kruskal-Wallis", "Dunn's test", "Seizure latency, ROS fluorescence"),
("Two groups only", "Unpaired t-test (or Mann-Whitney)", "N/A", "Dose-response comparison"),
("Time-series behavioral data", "Two-Way ANOVA (group Γ time)", "Bonferroni", "Light-dark locomotion over time"),
("Survival / LC50", "Probit regression", "N/A", "Embryo toxicity, lethality"),
("Proportional data (% larvae)", "Chi-square test or Fisher's Exact", "N/A", "% larvae with edema, % reaching seizure stage"),
("Dose-response curve", "Non-linear regression (4PL)", "N/A", "IC50, LC50, EC50 calculation"),
("Correlation", "Pearson or Spearman (non-normal)", "N/A", "Behavior vs. biochemical correlation"),
]
for dtype, test, posthoc, example in stat_data:
row = stat_table.add_row()
row.cells[0].text = dtype
row.cells[1].text = test
row.cells[2].text = posthoc
row.cells[3].text = example
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.name = "Times New Roman"
run.font.size = Pt(9)
doc.add_paragraph()
style_heading(doc, 2, "9.1 Sample Size Calculation")
add_body(doc,
"Sample size must be calculated before the study (not after). Use G*Power (free software) "
"or the following rule of thumb for M.Pharm zebrafish studies:")
add_body(doc,
"For behavioral assays: n = 20 larvae per group (provides 80% power to detect 20% difference "
"with SD = 15%, Ξ± = 0.05 using One-Way ANOVA). "
"For embryo toxicity (OECD TG 236): minimum n = 20 embryos per concentration per replicate. "
"Replicate: Minimum 3 independent biological replicates (separate spawning events, separate days).")
style_heading(doc, 2, "9.2 Data Presentation")
presentation = [
"Express continuous data as Mean Β± SEM (Standard Error of Mean) for normally distributed data",
"Use Mean Β± SD for within-group variability description",
"Use Median (IQR) for non-parametric data",
"Present dose-response curves with 95% confidence bands",
"Show individual data points on all bar graphs (avoid bar-only graphs - per 2019 Nature guidelines)",
"Include representative images for all morphological and histological endpoints",
"For behavioral tracking: include example trajectory plots from tracking software",
"Heatmaps for locomotor data are strongly recommended (visually compelling for publications)",
]
for p in presentation:
add_bullet(doc, p)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 10. ETHICS AND COMPLIANCE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "10. ETHICS, COMPLIANCE, AND REGULATORY FRAMEWORK")
style_heading(doc, 2, "10.1 Indian Regulatory Guidelines (CPCSEA)")
add_body(doc,
"In India, zebrafish research is governed by the Committee for the Purpose of Control and "
"Supervision of Experiments on Animals (CPCSEA) under the Prevention of Cruelty to Animals "
"Act, 1960.")
ethics = [
"Zebrafish embryos up to 120 hpf (5 dpf) are not regulated as 'animals' under most institutional frameworks - confirm with your IAEC (Institutional Animal Ethics Committee).",
"Adult zebrafish studies DO require IAEC approval - apply with form as per CPCSEA guidelines.",
"Apply the 3R principle: Replacement (use embryos before adults), Reduction (minimize numbers with power calculations), Refinement (use anesthesia for painful procedures).",
"All drug stocks must be stored per Schedule X (controlled substances) or general chemical storage protocols.",
"Wastewater containing drugs or biohazards must be decontaminated before disposal (autoclave liquid waste, 121Β°C, 20 min).",
"Euthanasia: Overdose of tricaine MS-222 (0.2% for 10 min) is the CPCSEA-approved method for zebrafish.",
]
for e in ethics:
add_bullet(doc, e)
style_heading(doc, 2, "10.2 Laboratory Safety")
safety = [
"Handle all chemicals (tricaine, PFA, PTZ, experimental compounds) with appropriate PPE (gloves, lab coat, eye protection).",
"Paraformaldehyde (4% PFA): Use only in fume hood. Dispose as chemical waste.",
"PTZ (Pentylenetetrazol): Schedule I psychoactive substance in some states - confirm local regulations.",
"Biohazard disposal: Dead larvae in drug-containing media = chemical/biological waste. Autoclave before disposal.",
"Zebrafish are non-native to India - do NOT release into the environment under any circumstances.",
]
for s in safety:
add_bullet(doc, s)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 11. EQUIPMENT LIST
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "11. MINIMUM EQUIPMENT AND REAGENT CHECKLIST")
style_heading(doc, 2, "11.1 Essential Equipment")
eq_table = doc.add_table(rows=1, cols=3)
eq_table.style = "Table Grid"
ehdr = eq_table.rows[0].cells
ehdr[0].text = "Equipment"
ehdr[1].text = "Specification"
ehdr[2].text = "Approx. Cost (INR)"
for cell in ehdr:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(10)
run.font.color.rgb = RGBColor(255, 255, 255)
shade_row(eq_table.rows[0], "003366")
equip_data = [
("Zebrafish housing system", "Recirculating tank, 10-20 tanks, pH/temp control", "βΉ 2,00,000 - 5,00,000"),
("Stereomicroscope with camera", "10-40x zoom, LED illumination, HDMI camera", "βΉ 50,000 - 1,50,000"),
("Fluorescence microscope", "With FITC/GFP filter set", "βΉ 3,00,000 - 10,00,000"),
("Video tracking system", "Overhead camera + ZebraLab or Ethovision", "βΉ 50,000 - 5,00,000"),
("Microplate reader", "Absorbance + Fluorescence (for biochemical assays)", "βΉ 2,00,000 - 5,00,000"),
("PCR Machine (Real-Time)", "For RT-qPCR", "βΉ 3,00,000 - 8,00,000"),
("Centrifuge (refrigerated)", "Up to 15,000 Γ g, 4Β°C capability", "βΉ 80,000 - 2,00,000"),
("Incubator (28Β°C)", "For egg/larval culture", "βΉ 30,000 - 80,000"),
("pH meter + conductivity meter", "For water quality monitoring", "βΉ 10,000 - 30,000"),
("Microtome (rotary)", "For histology sections", "βΉ 1,00,000 - 3,00,000"),
("ImageJ software (free)", "NIH image analysis software", "Free download"),
("G*Power software (free)", "Sample size calculation", "Free download"),
]
for eq, spec, cost in equip_data:
row = eq_table.add_row()
row.cells[0].text = eq
row.cells[1].text = spec
row.cells[2].text = cost
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.name = "Times New Roman"
run.font.size = Pt(9)
doc.add_paragraph()
style_heading(doc, 2, "11.2 Key Reagents and Chemicals")
reagents = [
"E3 medium components: NaCl, KCl, CaCl2, MgSO4 (all from Sigma or SRL)",
"Tricaine (MS-222) / Ethyl 3-aminobenzoate methanesulfonate - anesthetic (Sigma E10521)",
"PTU (1-phenyl-2-thiourea) - pigmentation inhibitor (Sigma P7629)",
"PTZ (Pentylenetetrazole) - seizure-inducing agent (Sigma P6500)",
"DCFH-DA - ROS detection fluorescent dye (Sigma D6883)",
"Acridine Orange - apoptosis dye (Sigma A6014)",
"4% Paraformaldehyde solution - fixative (Sigma P6148)",
"TRIzol Reagent - RNA isolation (Invitrogen 15596026)",
"RIPA Lysis Buffer + Protease Inhibitor Cocktail",
"BCA Protein Assay Kit (Thermo Scientific)",
"SYBR Green qPCR Master Mix",
"Standard ELISA kits - zebrafish-validated (MyBioSource, Elabscience, CUSABIO)",
"Hematoxylin & Eosin staining kit",
"DPX Mountant",
]
for r in reagents:
add_bullet(doc, r)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 12. TIMELINE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "12. PROPOSED 24-MONTH DISSERTATION TIMELINE")
timeline_table = doc.add_table(rows=1, cols=3)
timeline_table.style = "Table Grid"
thdr = timeline_table.rows[0].cells
thdr[0].text = "Phase"
thdr[1].text = "Month"
thdr[2].text = "Activities"
for cell in thdr:
for para in cell.paragraphs:
for run in para.runs:
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(10)
run.font.color.rgb = RGBColor(255, 255, 255)
shade_row(timeline_table.rows[0], "003366")
timeline_data = [
("Phase 1: Literature & Setup", "Month 1-3",
"Systematic literature review; IAEC approval; Procure zebrafish, chemicals, equipment; Establish housing system; Learn breeding protocol"),
("Phase 2: Standardization", "Month 4-5",
"Standardize breeding - achieve consistent egg yield; Pilot toxicity (LC50) study; Optimize drug dissolution; Validate tracking software setup"),
("Phase 3: Main Experiments", "Month 6-16",
"Embryo toxicity (OECD TG 236); Behavioral assays (LDT, NTT, PLR, seizure model); Biochemical assays (SOD, CAT, MDA, GSH, cytokines); Fluorescence imaging (ROS, AO); Histopathology; RT-qPCR gene expression"),
("Phase 4: Data Analysis", "Month 17-18",
"Statistical analysis (SPSS/Prism); GraphPad curve fitting; ImageJ quantification; Table and figure preparation"),
("Phase 5: Writing & Submission", "Month 19-22",
"Dissertation writing (Introduction, Review, Methodology, Results, Discussion); Internal review and corrections; Format submission"),
("Phase 6: Publication", "Month 23-24",
"Prepare manuscript for journal submission; Target: Journal of Pharmacology and Experimental Therapeutics, Zebrafish journal, or similar Q2+ journal"),
]
for phase, month, activities in timeline_data:
row = timeline_table.add_row()
row.cells[0].text = phase
row.cells[1].text = month
row.cells[2].text = activities
for cell in row.cells:
for para in cell.paragraphs:
for run in para.runs:
run.font.name = "Times New Roman"
run.font.size = Pt(9)
doc.add_paragraph()
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# 13. REFERENCES
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.add_page_break()
style_heading(doc, 1, "13. KEY REFERENCES")
add_body(doc, "The following peer-reviewed publications form the methodological foundation of this document:")
refs = [
"1. Li H, Li A, Jin H. (2025). Towards zebrafish model applications in drug discovery targeting central nervous system diseases and neurotoxicity assessment. Eur J Pharmacol. Sep 5. PMID: 40441589.",
"2. di Domenico K, Lacchetti I, Cafiero G. (2024). Reviewing the use of zebrafish for the detection of neurotoxicity induced by chemical mixtures through the analysis of behaviour. Chemosphere. Jul. PMID: 38710414.",
"3. Kanungo J, Sorkin BC, Krzykwa J. (2024). Screening tools to evaluate the neurotoxic potential of botanicals: building a strategy to assess safety. Expert Opin Drug Metab Toxicol. Jul. PMID: 38984683.",
"4. Zhan T, Song W, Jing G. (2024). Zebrafish live imaging: a strong weapon in anticancer drug discovery and development. Clin Transl Oncol. Aug. PMID: 38514602.",
"5. OECD Test Guideline 236 (2013). Fish Embryo Acute Toxicity (FET) Test. Organisation for Economic Co-operation and Development, Paris.",
"6. Kalueff AV, Stewart AM, Gerlai R. (2014). Zebrafish as an emerging model for studying complex brain disorders. Trends Pharmacol Sci. 35(2):63-75.",
"7. Westerfield M. (2000). The Zebrafish Book. A guide for the laboratory use of zebrafish (Danio rerio). 4th Ed. Univ. of Oregon Press, Eugene.",
"8. Spence R, Gerlach G, Lawrence C, Smith C. (2008). The behaviour and ecology of the zebrafish, Danio rerio. Biol Rev. 83(1):13-34.",
"9. Rihel J, Prober DA, Arvanites A et al. (2010). Zebrafish behavioral profiling links drugs to biological targets and rest/wake regulation. Science. 327(5963):348-51.",
"10. MacPhail RC et al. (2009). Locomotion in larval zebrafish: Influence of time of day, lighting and ethanol. Neurotoxicology. 30(1):52-8.",
]
for ref in refs:
p = doc.add_paragraph()
run = p.add_run(ref)
run.font.name = "Times New Roman"
run.font.size = Pt(10)
p.paragraph_format.space_after = Pt(4)
p.paragraph_format.left_indent = Inches(0.3)
# Footer note
doc.add_paragraph()
add_divider(doc)
p_footer = doc.add_paragraph()
p_footer.alignment = WD_ALIGN_PARAGRAPH.CENTER
run_f = p_footer.add_run(
"Prepared using current pharmacological literature (2024-2026) | "
"For M.Pharm Pharmacology Dissertation Use | Last updated August 2026"
)
run_f.font.name = "Arial"
run_f.font.size = Pt(9)
run_f.italic = True
run_f.font.color.rgb = RGBColor(120, 120, 120)
# Save
out_path = "/tmp/workspace/zebrafish-methodology/Zebrafish_Pharmacology_Methodology.docx"
doc.save(out_path)
print(f"Document saved to: {out_path}")
python3 /tmp/workspace/zebrafish-methodology/create_doc.py
python3 -c " from docx import Document doc = Document('/tmp/workspace/zebrafish-methodology/Zebrafish_Pharmacology_Methodology.docx') headings = [p.text for p in doc.paragraphs if p.style.name.startswith('Heading')] print('HEADINGS IN DOCUMENT:') for h in headings: print(' -', h) print() print('Total paragraphs:', len(doc.paragraphs)) print('Total tables:', len(doc.tables)) "
Zebrafish Pharmacology Methodology
Word Document Β· DOCX
| Section | Content |
|---|---|
| 1. Introduction & Rationale | Why zebrafish, advantages over rodents, genetic homology |
| 2. Husbandry & Maintenance | Strain selection table, housing parameters, step-by-step breeding protocol |
| 3. Drug Administration | Solubilization guide, pilot LC50 study protocol, 6-group experimental design table, exposure timing |
| 4. Behavioral Assays | Light-Dark Test, Photolocomotor Response, PTZ seizure model, Shoaling assay, Novel Tank Test - each with full step-by-step protocol |
| 5. Toxicology Endpoints | OECD TG 236 embryo toxicity (internationally validated), morphological scoring table (9 endpoints), cardiac HR measurement |
| 6. Fluorescence Imaging | In vivo ROS (DCFH-DA), Apoptosis (Acridine Orange), Angiogenesis (GFP transgenic line) |
| 7. Biochemical & Molecular | Larval homogenization protocol, 10-assay biochemical panel table, RT-qPCR with validated zebrafish genes |
| 8. Histopathology | Whole-larva paraffin sectioning, H&E, special stains (Alizarin Red, Oil Red O, PAS, TUNEL) |
| 9. Statistical Analysis | 8-test statistical decision table, sample size calculation, data presentation guidelines |
| 10. Ethics & Compliance | CPCSEA guidelines, 3R principle, Indian-specific regulatory notes |
| 11. Equipment Checklist | Cost-annotated equipment list in INR, full reagent list with Sigma catalog numbers |
| 12. 24-Month Timeline | Phase-wise dissertation timeline through to journal publication |
| 13. References | 10 peer-reviewed citations (PMID-linked, 2013-2026) |
Give me indian level reaserch to impree jipmer professors pharmacology related research
JIPMER pharmacology department research publications faculty 2024 2025 2026
pharmacology JIPMER Puducherry India clinical trial adverse drug reaction
Girish Chandrashekaran JIPMER pharmacology Puducherry
JIPMER Puducherry pharmacology research topics clinical pharmacology pharmacovigilance ADR India priority
| Faculty / Unit | Actual Research Focus |
|---|---|
| Dr. C. Girish (Addl. Professor) | Hepatoprotection (NRF2/NF-kB), inflammatory cytokines & miRNA in depression, antioxidant pharmacology |
| Clinical Pharmacology Dept. | Pharmacovigilance (PvPI nodal center), ADR monitoring, drug safety |
| PhD Scholars | ADR reporting behavior, KAP studies, drug utilization |
| JIPMER Collaborators | Medication adherence, medication regimen complexity, polypharmacy |
| Priority | Idea | Why |
|---|---|---|
| #1 | Anti-TB hepatotoxicity + SIRT1/NRF2 (Idea 10) | Directly extends Dr. Girish's published work |
| #2 | miRNA biomarkers in MDD antidepressant response (Idea 2) | His 2025 paper is the direct predecessor |
| #3 | SGLT2 inhibitor pharmacovigilance (Idea 3) | Matches PvPI center mandate at JIPMER |
In animal model best
anti-tuberculosis drug hepatotoxicity NRF2 SIRT1 animal model rat
neuroinflammation TLR4 NF-kB BDNF animal model rat neuroprotection herbal
isoniazid rifampicin hepatotoxicity NRF2 protective rat model
NLRP3 inflammasome neuroinflammation animal model depression anxiety phytochemical
hepatoprotective NRF2 SIRT1 drug induced liver injury rat 2024 2025
NLRP3 inflammasome depression rat model phytochemical neuroprotection 2024
drug induced hepatotoxicity NRF2 oxidative stress animal model phytochemical
NLRP3 inflammasome rat model behavioral depression anxiety plant extract 2025
"Resveratrol attenuates isoniazid and rifampicin-induced hepatotoxicity in Wistar rats through activation of SIRT1/NRF2/HO-1 axis and suppression of NF-kB/NLRP3 inflammasome pathway: Combined in vivo and in silico study"
| Reason | Explanation |
|---|---|
| Directly extends Dr. Girish's own published work | His 2021 paper (PMID: 33617360) studied quercetin + NRF2/TLR-4 in isoniazid-rifampicin hepatotoxicity in the same model. You cite his work and advance it. |
| India's #1 disease burden | India has the world's highest TB burden - 26% of global cases. Anti-TB DILI is a major clinical problem at JIPMER medicine ward. |
| Novel molecular pathway | He used NRF2/NF-kB. You add SIRT1 (upstream regulator) and NLRP3 inflammasome (2024-25 hot target) - genuinely new angles he hasn't published on. |
| Dual approach (in vivo + in silico) | Molecular docking of resveratrol on SIRT1, NRF2, and NLRP3 proteins adds computational depth - publishable in Q1/Q2 journal. |
| Resveratrol is novel here | Dr. Girish used quercetin. No one at JIPMER has published resveratrol in this exact model - fresh territory. |
| Group | Treatment | Route | Duration |
|---|---|---|---|
| Group I - Normal Control | 0.5% CMC (vehicle) only | Oral | 28 days |
| Group II - Hepatotoxic Control | INH 50 mg/kg + RIF 100 mg/kg | Oral | 28 days |
| Group III - Standard Drug | Silymarin 100 mg/kg + INH + RIF | Oral | 28 days |
| Group IV - Test Drug Low | Resveratrol 10 mg/kg + INH + RIF | Oral | 28 days |
| Group V - Test Drug Mid | Resveratrol 20 mg/kg + INH + RIF | Oral | 28 days |
| Group VI - Test Drug High | Resveratrol 40 mg/kg + INH + RIF | Oral | 28 days |
| Parameter | Method | Significance |
|---|---|---|
| ALT (SGPT) | IFCC kinetic method (kit) | Primary hepatocyte injury marker |
| AST (SGOT) | IFCC kinetic method (kit) | Hepatocyte + mitochondrial injury |
| ALP | IFCC colorimetric (kit) | Cholestasis marker |
| Total Bilirubin | Jendrassik-Grof method | Excretory function |
| Total Protein | Bradford/Biuret | Synthetic function |
| Albumin | BCG dye-binding method | Chronic function |
| GGT | Colorimetric kit | Biliary/microsomal damage |
| LDH | UV kinetic | Cell lysis marker |
| Marker | Method | What It Shows |
|---|---|---|
| MDA (Malondialdehyde) | TBARS assay - TBA method | Lipid peroxidation - oxidative damage extent |
| SOD (Superoxide Dismutase) | NBT photoreduction method | First-line antioxidant defense |
| CAT (Catalase) | H2O2 decomposition - UV method | H2O2 neutralization capacity |
| GSH (Reduced Glutathione) | DTNB (Ellman's) method | Master antioxidant depletion |
| GPx (Glutathione Peroxidase) | Colorimetric coupled assay | GSH utilization enzyme |
| Protein carbonyls | DNPH method | Protein oxidative damage |
| Cytokine | Platform | Pathway |
|---|---|---|
| TNF-Ξ± | Rat-specific ELISA kit | NF-kB downstream |
| IL-1Ξ² | Rat-specific ELISA kit | NLRP3 inflammasome product |
| IL-6 | Rat-specific ELISA kit | Acute phase inflammatory mediator |
| IL-18 | Rat-specific ELISA kit | NLRP3 inflammasome product - novel endpoint |
| IL-10 | Rat-specific ELISA kit | Anti-inflammatory counter-regulation |
UPSTREAM: SIRT1 (deacetylase activator of NRF2)
β
ANTIOXIDANT: NRF2 (nuclear) β HO-1 β NQO1
β
INFLAMMATORY: NF-kB p65 (phosphorylated) β TNF-Ξ±, IL-6
β
INFLAMMASOME: NLRP3 β ASC β Pro-Caspase-1 β Caspase-1 β IL-1Ξ², IL-18
β
APOPTOSIS: Bax / Bcl-2 ratio β Caspase-3 (cleaved)
| Gene | Forward Primer | What It Confirms |
|---|---|---|
| Nrf2 (Nfe2l2) | Available at PrimerBank | Transcription factor activation |
| Ho-1 (Hmox1) | Available at PrimerBank | Antioxidant response element activation |
| Nlrp3 | Available at PrimerBank | Inflammasome assembly |
| Il-1b | Available at PrimerBank | Pyroptosis/inflammasome output |
| Sirt1 | Available at PrimerBank | Upstream deacetylase |
| Bcl2 / Bax | Available at PrimerBank | Apoptosis balance |
| Ξ²-actin / Gapdh | Reference gene | Normalization |
| Stain | Reveals | Score |
|---|---|---|
| H&E | Necrosis, inflammation, vacuolation, fatty change | Pathology score 0-4 per field |
| Masson's Trichrome | Hepatic fibrosis (collagen deposition) | % fibrotic area by ImageJ |
| PAS (Periodic Acid-Schiff) | Glycogen depletion - sensitive hepatotoxicity marker | Intensity score |
| TUNEL assay | In situ apoptosis detection in liver sections | Apoptotic index |
| Domain | Parameter | Method | Significance for Story |
|---|---|---|---|
| Liver function | ALT, AST, ALP, Bilirubin | Colorimetric kits | Confirms hepatotoxicity model |
| Oxidative stress | MDA, SOD, CAT, GSH, GPx | Spectrophotometric | NRF2 pathway functionality |
| Inflammation | TNF-Ξ±, IL-6, IL-1Ξ², IL-18 | ELISA | NLRP3 inflammasome activation |
| Molecular | SIRT1, NRF2, HO-1, NF-kB, NLRP3, Caspase-1 | Western blot | Mechanistic proof |
| Gene expression | Nrf2, Nlrp3, Sirt1, Il-1b, Bcl2/Bax | RT-qPCR | mRNA-level confirmation |
| Histology | H&E, Trichrome, TUNEL, PAS | Microscopy | Structural tissue evidence |
| Computational | Binding energy on 4 targets | AutoDock Vina | Mechanistic + novel angle |
| Feature | Your Study | Typical Indian M.Pharm Study |
|---|---|---|
| Inflammatory panel | IL-18 (NLRP3-specific) + 4 cytokines | TNF-Ξ± and IL-6 only |
| Molecular pathway | SIRT1 β NRF2 β HO-1 cascade | NRF2 alone |
| Validation | Western blot + RT-qPCR both | Biochemistry only |
| Histology | 4 stains including TUNEL | H&E only |
| Novelty hook | SIRT1/NLRP3 dual pathway - unpublished at JIPMER | Standard pathways |
| Computational | In silico docking adds mechanistic chapter | Absent |
| Citation link to JIPMER | Direct extension of PMID 33617360 (Dr. Girish) | No connection |
Semaglutide induced muscles wasting and depression in juvenile rats:sarcopenia model and protection by ashwagandha whey protein combination has ever done before this project
semaglutide muscle wasting sarcopenia animal model rat
semaglutide depression anxiety behavioral effects GLP-1 CNS rat
semaglutide muscle wasting depression juvenile rats ashwagandha whey protein combination research published
semaglutide skeletal muscle loss GLP-1 agonist juvenile young animal
ashwagandha Withania somnifera muscle sarcopenia whey protein combination rat
GLP-1 receptor agonist depression anxiety neuropsychiatric side effects
Withania somnifera withaferin muscle atrophy myostatin IGF-1 rat
semaglutide muscle skeletal unexpected effects force capacity mice 2025
Withania somnifera ashwagandha depression anxiety BDNF HPA axis rat model
whey protein muscle atrophy mTOR IGF-1 sarcopenia rat supplement
| Component | What's Published | Gap |
|---|---|---|
| Semaglutide + muscle loss | 1 mouse study (Cell Metab, Aug 2025, PMID: 40769122) - "unexpected effects on skeletal muscle force" | Done in adult obese mice, NOT juvenile rats, no CNS/depression arm |
| Semaglutide + muscle in rats | 1 thesis (York University, T2D rats) - muscle mass loss vs caloric restriction | Adult diabetic rats, no behavioral/CNS endpoints, no intervention |
| Semaglutide + depression risk | 1 meta-analysis (Cureus 2026, PMID: 42137703) - GLP-1 vs other antidiabetics in humans | Clinical study, no animal model, no mechanistic data |
| Semaglutide + juvenile/young animal | ZERO papers exist | Completely unexplored age group |
| Ashwagandha + muscle/sarcopenia | Some studies exist - but only in aging/exercise models | Never in semaglutide-induced model |
| Whey protein + sarcopenia rat | Some studies in elderly/immobilization models | Never with semaglutide, never combined with ashwagandha |
| Ashwagandha + Whey + Semaglutide | ABSOLUTELY ZERO anywhere in the world | 100% original combination |
| Juvenile rats + Semaglutide + Depression + Sarcopenia + Ashwagandha + Whey | ZERO | Your exact study does not exist |
"Semaglutide-induced skeletal muscle wasting and depressive-like behavior in juvenile Wistar rats: Establishment of a novel sarcopenia-depression comorbidity model and protective evaluation of Withania somnifera (ashwagandha) root extract combined with whey protein hydrolysate"
| Group | Treatment | Duration |
|---|---|---|
| G1 - Normal Control | Saline (SC injection, weekly) + Standard diet | 8 weeks |
| G2 - Semaglutide alone | Semaglutide 0.1 mg/kg SC weekly (dose-escalated from week 2) | 8 weeks |
| G3 - Semaglutide + Ashwagandha | Semaglutide + WSE 300 mg/kg oral daily | 8 weeks |
| G4 - Semaglutide + Whey Protein | Semaglutide + Whey hydrolysate 2 g/kg oral daily | 8 weeks |
| G5 - Semaglutide + Combination | Semaglutide + WSE 300 mg/kg + Whey 2 g/kg oral | 8 weeks |
| G6 - Positive Control | Semaglutide + Leucine 1.35 g/kg + Imipramine 15 mg/kg | 8 weeks |
| Test | Method | Parameter |
|---|---|---|
| Grip strength | Computerized grip strength meter (Columbus Instruments) | Peak force (grams), normalized to body weight |
| Rotarod | Accelerating rotarod (4-40 rpm over 5 min) | Latency to fall (seconds) - muscle endurance |
| Wire hanging test | Suspend rat from wire grid inverted | Hanging time (seconds) - sarcopenia index |
| Open field locomotion | Manual or video tracking | Total distance - general activity |
| Test | What It Measures | Relevance |
|---|---|---|
| Forced Swim Test (FST) | Immobility time = despair/depression | Standard antidepressant screen |
| Sucrose Preference Test (SPT) | % preference for sweet solution = anhedonia | Core symptom of depression |
| Elevated Plus Maze (EPM) | % time in open arms = anxiety | Anxiety comorbidity |
| Open Field Test (OFT) | Center time, rearing = anxiety + exploration | Locomotor + emotional state |
| Social Interaction Test | Time spent with novel animal = social withdrawal | Depression-related anhedonia |
| Novel Object Recognition (NOR) | Discrimination index = cognitive function | GLP-1 CNS effects on memory |
ATROPHY PATHWAY:
Myostatin β β SMAD2/3 β MAFbx (Atrogin-1) β + MuRF1 β β Ubiquitin-Proteasome β Muscle protein degradation
HYPERTROPHY/PROTECTION PATHWAY:
IGF-1 β PI3K β AKT β mTORC1 β p70S6K β Protein synthesis
β
FoxO3a (nuclear = atrophy; cytoplasmic = protected)
| Marker | Method | What It Reveals |
|---|---|---|
| BDNF | ELISA | Neurotrophic support - depression marker |
| Serotonin (5-HT) | HPLC or ELISA | Antidepressant mechanism |
| Cortisol / Corticosterone | Serum ELISA | HPA axis dysregulation |
| Norepinephrine | HPLC | Catecholamine status |
| IL-6 (brain) | ELISA | Neuroinflammation + myokine crosstalk |
| NLRP3 (hippocampus) | Western blot | Inflammasome in depression |
| NRF2 (brain) | Western blot | Oxidative stress in depression |
MUSCLE WASTING β β Irisin (FNDC5) β β Hippocampal BDNF β Depression
MUSCLE WASTING β β IL-6 (myokine) β Neuroinflammation β Depression
MUSCLE WASTING β β IGF-1 β β Neurogenesis β Depression
SEMAGLUTIDE (in juvenile)
β
β Food intake β β Leucine/amino acids β β mTORC1 β β Protein synthesis
β
Direct GLP-1R signaling on muscle? β β Myostatin β β MAFbx/MuRF1 β SARCOPENIA
β
β Irisin secretion from muscle β β BDNF in hippocampus
β
β Kynurenine pathway β Neurotoxic quinolinic acid β DEPRESSION
β
β HPA axis β β Corticosterone β β NLRP3 β β Neuroinflammation
ASHWAGANDHA RESCUES:
Withanolide A β β Myostatin β β MAFbx/MuRF1 (muscle)
Withaferin A β NRF2 β β Antioxidant (both muscle + brain)
Adaptogen β β Corticosterone β β NLRP3 β β Neuroinflammation
β BDNF β β Antidepressant
WHEY PROTEIN RESCUES:
Leucine β mTORC1 β Protein synthesis β Muscle mass β
Tryptophan β 5-HTP β Serotonin β β Antidepressant
Ξ²-lactoglobulin β IGF-1 β β Both muscle + neurogenesis
COMBINATION (SYNERGISTIC):
Dual-pathway rescue: anabolic (whey) + anti-catabolic/adaptogenic (ashwagandha)
β Greater muscle protection than either alone
β Greater antidepressant effect than either alone
β Restores irisin β BDNF axis (the key link)
| Feature | Your Study | World Literature |
|---|---|---|
| Juvenile rats + semaglutide | β First ever | β Not done |
| Sarcopenia + depression comorbidity model (semaglutide) | β First ever | β Not done |
| Ashwagandha in semaglutide sarcopenia | β First ever | β Not done |
| Whey protein in semaglutide sarcopenia | β First ever | β Not done |
| Ashwagandha + Whey combination | β First ever | β Not done |
| Irisin as muscle-brain link in this model | β First ever | β Not done |
| Kynurenine pathway in GLP-1 sarcopenia | β First ever | β Not done |
| Journal | Impact Factor | Why Suitable |
|---|---|---|
| Pharmacology Biochemistry & Behavior | IF ~3.5 (Q2) | Behavioral + pharmacological endpoints |
| Metabolites (MDPI) | IF ~3.9 (Q2) | Metabolic + myokine data |
| Phytomedicine | IF ~7.9 (Q1) | Ashwagandha natural product angle |
| Journal of Cachexia, Sarcopenia & Muscle | IF ~9.4 (Q1) | If muscle data is strong - top-tier |
| Indian Journal of Pharmacology | Scopus (Q3) | For Indian audience / JIPMER submission |
Generate a complete Word document with IAEC application & dissertation synopsis for this semaglutide study
mkdir -p /tmp/workspace/semaglutide-study && ls /tmp/workspace/
~/semaglutide-study/create_doc.py
from docx import Document
from docx.shared import Pt, Inches, RGBColor, Cm
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT, WD_ALIGN_VERTICAL
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import copy
doc = Document()
# ββ Page setup ββ
section = doc.sections[0]
section.page_height = Cm(29.7)
section.page_width = Cm(21.0)
section.top_margin = Inches(1.0)
section.bottom_margin = Inches(1.0)
section.left_margin = Inches(1.25)
section.right_margin = Inches(1.0)
# ββ Default style ββ
normal = doc.styles["Normal"]
normal.font.name = "Times New Roman"
normal.font.size = Pt(12)
# βββββββββββββββββββββββββββββββββββββββββ
# HELPER FUNCTIONS
# βββββββββββββββββββββββββββββββββββββββββ
NAVY = RGBColor(0, 51, 102)
TEAL = RGBColor(0, 102, 153)
RED = RGBColor(180, 0, 0)
GRAY = RGBColor(100,100,100)
WHITE = RGBColor(255,255,255)
LGRAY = RGBColor(240,240,240)
def shade_cell(cell, hex_color="003366"):
tc = cell._tc
tcPr = tc.get_or_add_tcPr()
shd = OxmlElement("w:shd")
shd.set(qn("w:val"), "clear")
shd.set(qn("w:color"), "auto")
shd.set(qn("w:fill"), hex_color)
tcPr.append(shd)
def shade_row(row, hex_color="003366"):
for cell in row.cells:
shade_cell(cell, hex_color)
def set_cell_text(cell, text, bold=False, italic=False,
color=None, size=10, font="Times New Roman",
align=WD_ALIGN_PARAGRAPH.LEFT):
cell.text = ""
p = cell.paragraphs[0]
p.alignment = align
run = p.add_run(text)
run.bold = bold
run.italic = italic
run.font.name = font
run.font.size = Pt(size)
if color:
run.font.color.rgb = color
def hdr_row(row, texts, font="Arial", size=10):
shade_row(row, "003366")
for i, t in enumerate(texts):
set_cell_text(row.cells[i], t, bold=True, color=WHITE,
font=font, size=size)
def add_table(doc, headers, rows_data, col_widths=None, hdr_color="003366"):
t = doc.add_table(rows=1, cols=len(headers))
t.style = "Table Grid"
if col_widths:
for i, w in enumerate(col_widths):
t.columns[i].width = Inches(w)
shade_row(t.rows[0], hdr_color)
for i, h in enumerate(headers):
set_cell_text(t.rows[0].cells[i], h, bold=True,
color=WHITE, font="Arial", size=10)
for rd in rows_data:
r = t.add_row()
for i, cell_text in enumerate(rd):
set_cell_text(r.cells[i], cell_text, size=10)
doc.add_paragraph()
return t
def heading(doc, text, level=1, color=None):
p = doc.add_heading(text, level=level)
c = color or (NAVY if level == 1 else TEAL)
for run in p.runs:
run.font.color.rgb = c
run.font.name = "Arial"
return p
def body(doc, text, bold=False, italic=False, justify=True, size=12, space_after=6):
p = doc.add_paragraph()
run = p.add_run(text)
run.bold = bold
run.italic = italic
run.font.name = "Times New Roman"
run.font.size = Pt(size)
p.paragraph_format.space_after = Pt(space_after)
p.paragraph_format.space_before = Pt(0)
if justify:
p.alignment = WD_ALIGN_PARAGRAPH.JUSTIFY
return p
def bullet(doc, text, level=0, size=11):
p = doc.add_paragraph(style="List Bullet")
run = p.add_run(text)
run.font.name = "Times New Roman"
run.font.size = Pt(size)
p.paragraph_format.space_after = Pt(3)
return p
def numbered(doc, text, size=11):
p = doc.add_paragraph(style="List Number")
run = p.add_run(text)
run.font.name = "Times New Roman"
run.font.size = Pt(size)
p.paragraph_format.space_after = Pt(4)
return p
def divider(doc, char="β", n=90):
p = doc.add_paragraph()
run = p.add_run(char * n)
run.font.size = Pt(7)
run.font.color.rgb = RGBColor(200,200,200)
p.paragraph_format.space_before = Pt(2)
p.paragraph_format.space_after = Pt(2)
def box_para(doc, text, bg="E8F4FD", border_color="003366"):
"""Shaded info box paragraph."""
p = doc.add_paragraph()
run = p.add_run(text)
run.bold = True
run.font.name = "Arial"
run.font.size = Pt(11)
run.font.color.rgb = NAVY
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
# shade the paragraph
pPr = p._p.get_or_add_pPr()
shd = OxmlElement("w:shd")
shd.set(qn("w:val"), "clear")
shd.set(qn("w:color"), "auto")
shd.set(qn("w:fill"), bg)
pPr.append(shd)
return p
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# COVER PAGE
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
p = doc.add_paragraph()
p.paragraph_format.space_before = Pt(20)
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("JAWAHARLAL INSTITUTE OF POSTGRADUATE MEDICAL\nEDUCATION AND RESEARCH (JIPMER), PUDUCHERRY")
run.bold = True; run.font.name = "Arial"; run.font.size = Pt(14)
run.font.color.rgb = NAVY
p2 = doc.add_paragraph()
p2.alignment = WD_ALIGN_PARAGRAPH.CENTER
run2 = p2.add_run("(Institute of National Importance, Ministry of Health & Family Welfare, Govt. of India)")
run2.font.name = "Arial"; run2.font.size = Pt(11)
run2.font.color.rgb = TEAL; run2.italic = True
doc.add_paragraph()
divider(doc, "β", 80)
# Title box
box_para(doc,
"DISSERTATION SYNOPSIS & IAEC APPLICATION",
bg="003366")
p3 = doc.add_paragraph()
p3.alignment = WD_ALIGN_PARAGRAPH.CENTER
run3 = p3.add_run(
"Semaglutide-Induced Skeletal Muscle Wasting and\n"
"Depressive-Like Behavior in Juvenile Wistar Rats:\n"
"Establishment of a Novel Sarcopenia-Depression\n"
"Comorbidity Model and Protective Evaluation of\n"
"Withania somnifera (Ashwagandha) Root Extract\n"
"Combined with Whey Protein Hydrolysate"
)
run3.bold = True; run3.font.name = "Arial"; run3.font.size = Pt(16)
run3.font.color.rgb = NAVY
p3.paragraph_format.space_before = Pt(14)
p3.paragraph_format.space_after = Pt(14)
divider(doc, "β", 80)
# Info table
info = doc.add_table(rows=8, cols=2)
info.style = "Table Grid"
fields = [
("Degree Programme", "M.Pharm β Pharmacology"),
("Department", "Department of Pharmacology, JIPMER, Puducherry β 605 006"),
("Name of Candidate", "[Candidate Name]"),
("Roll Number", "[Roll Number]"),
("Name of Guide", "[Guide Name], MD, PhD, Professor of Pharmacology"),
("Co-Guide (if any)", "[Co-Guide Name], MD, Associate Professor of Pharmacology"),
("Date of Submission", "August 2026"),
("IAEC Protocol Number", "JIPMER/IAEC/2026/[To be allotted]"),
]
for i, (label, value) in enumerate(fields):
shade_cell(info.rows[i].cells[0], "E8F4FD")
set_cell_text(info.rows[i].cells[0], label, bold=True, color=NAVY, font="Arial", size=11)
set_cell_text(info.rows[i].cells[1], value, size=11)
doc.add_paragraph()
p_cert = doc.add_paragraph()
p_cert.alignment = WD_ALIGN_PARAGRAPH.CENTER
rc = p_cert.add_run(
"This synopsis has been approved by the Guide and Co-Guide and is submitted to\n"
"the Institutional Animal Ethics Committee (IAEC) of JIPMER, Puducherry\n"
"in accordance with CPCSEA guidelines (Prevention of Cruelty to Animals Act, 1960)"
)
rc.italic = True; rc.font.name = "Arial"; rc.font.size = Pt(10)
rc.font.color.rgb = GRAY
doc.add_page_break()
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PART A β IAEC APPLICATION FORM (CPCSEA FORMAT)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
heading(doc, "PART A: INSTITUTIONAL ANIMAL ETHICS COMMITTEE (IAEC) APPLICATION", 1)
box_para(doc,
"As per CPCSEA Guidelines | Prevention of Cruelty to Animals Act, 1960 | "
"IAEC Registration No.: [JIPMER Registration Number]",
bg="FFF3CD")
doc.add_paragraph()
# A1
heading(doc, "A.1 GENERAL INFORMATION", 2)
a1_data = [
("1.", "Title of the Project",
"Semaglutide-Induced Skeletal Muscle Wasting and Depressive-Like Behavior in "
"Juvenile Wistar Rats: Establishment of a Novel Sarcopenia-Depression Comorbidity "
"Model and Protective Evaluation of Withania somnifera (Ashwagandha) Root Extract "
"Combined with Whey Protein Hydrolysate"),
("2.", "Name and Designation of Principal Investigator",
"[Candidate Name], M.Pharm Scholar, Department of Pharmacology, JIPMER, Puducherry"),
("3.", "Name and Designation of Guide",
"[Guide Name], MD, PhD, Professor, Department of Pharmacology, JIPMER"),
("4.", "Department and Institution",
"Department of Pharmacology, Jawaharlal Institute of Postgraduate Medical Education "
"and Research (JIPMER), Puducherry β 605 006"),
("5.", "Type of Study",
"Experimental Animal Study (Preclinical Pharmacology)"),
("6.", "Duration of Study",
"24 months (including 8-week animal experiment)"),
("7.", "Funding Source",
"Self-funded / JIPMER Intramural Research Grant (application to be submitted)"),
("8.", "Expected Start Date",
"[Month, Year] β after IAEC approval"),
]
for num, label, val in a1_data:
t = doc.add_table(rows=1, cols=3)
t.style = "Table Grid"
t.columns[0].width = Inches(0.4)
t.columns[1].width = Inches(2.2)
t.columns[2].width = Inches(3.9)
set_cell_text(t.rows[0].cells[0], num, bold=True, size=10, font="Arial")
set_cell_text(t.rows[0].cells[1], label, bold=True, color=NAVY, size=10, font="Arial")
set_cell_text(t.rows[0].cells[2], val, size=10)
doc.add_paragraph()
# A2
heading(doc, "A.2 RATIONALE AND NECESSITY FOR USE OF ANIMALS", 2)
body(doc,
"The proposed study investigates the pharmacological consequences of semaglutide "
"(a GLP-1 receptor agonist approved by USFDA and CDSCO for use in adolescents aged "
"12 years and above for obesity management) on the musculoskeletal and central nervous "
"system of juvenile organisms. This study CANNOT be conducted using in vitro or "
"in silico methods alone because:")
reasons = [
"Sarcopenia requires whole-organism assessment of muscle mass, fiber morphology, strength, "
"and endurance - parameters impossible to replicate in cell culture.",
"Depression-like behavior (forced swim, sucrose preference, elevated plus maze) is an "
"inherently behavioral and systemic endpoint requiring a living sentient organism.",
"The muscle-brain crosstalk via myokines (irisin, IL-6) and the kynurenine pathway requires "
"an intact neuroendocrine-immune axis that cannot be modeled in silico.",
"The juvenile growth phase is critical for muscle accrual and brain development - "
"developmental pharmacotoxicology must be evaluated in a growing animal.",
"Drug administration, pharmacokinetics, and tissue distribution must be assessed in a "
"whole-body system with intact metabolism.",
"Ethical requirement: Clinical studies in children cannot be performed until preclinical "
"juvenile safety data is established (ICH E11 guideline; CPCSEA mandate).",
]
for r in reasons:
bullet(doc, r)
body(doc,
"The 3R Principle (Replace, Reduce, Refine) has been applied as follows:",
bold=True, size=11)
rr_data = [
("REPLACEMENT",
"In silico molecular docking (AutoDock Vina) has been used to predict binding of "
"ashwagandha withanolides and whey protein-derived peptides to SIRT1, NRF2, myostatin, "
"and NLRP3 before animal experiments, to confirm mechanistic plausibility. "
"Cell-free and cell-based assays cannot replace the behavioral and systemic endpoints required."),
("REDUCTION",
"Sample size has been calculated using G*Power software (power = 80%, alpha = 0.05, "
"effect size = 0.4 based on published literature). The minimum required n = 8 per group "
"(6 groups = 48 animals total) has been used. No additional animals will be used."),
("REFINEMENT",
"Semaglutide is administered subcutaneously with a fine-gauge insulin syringe (29G) "
"minimizing pain. Oral gavage uses a ball-tipped stainless steel needle. "
"Ketamine/xylazine anesthesia used for terminal procedures. "
"Euthanasia by CO2 inhalation followed by cervical dislocation as per CPCSEA protocol. "
"Analgesics administered post-surgery if applicable. "
"Behavioral tests use non-invasive paradigms with no noxious stimuli."),
]
for principle, explanation in rr_data:
t = doc.add_table(rows=1, cols=2)
t.style = "Table Grid"
t.columns[0].width = Inches(1.4)
t.columns[1].width = Inches(5.1)
shade_cell(t.rows[0].cells[0], "003366")
set_cell_text(t.rows[0].cells[0], principle, bold=True, color=WHITE, font="Arial", size=10)
set_cell_text(t.rows[0].cells[1], explanation, size=10)
doc.add_paragraph()
# A3 - Animals
heading(doc, "A.3 DETAILS OF ANIMALS TO BE USED", 2)
add_table(doc,
["Parameter", "Details"],
[
("Species", "Rattus norvegicus (Wistar albino rat)"),
("Sex", "Male"),
("Age at start", "4-5 weeks (juvenile stage)"),
("Body weight", "60-80 g at start of experiment"),
("Source", "Central Animal Facility (CAF), JIPMER, Puducherry\n"
"(CPCSEA Registration No.: [CAF Reg. No.])"),
("Total number", "48 animals (6 groups Γ 8 per group)"),
("Housing", "Polypropylene cages, 4 per cage, sterile bedding (corn cob/sawdust)\n"
"Changed twice weekly. Cage dimensions: 43 Γ 27 Γ 15 cm"),
("Environment", "12:12 h light/dark cycle; 22 Β± 2Β°C; 50-60% relative humidity"),
("Diet", "Certified standard pellet diet (Amrut Laboratory Animal Feed, Pune)\n"
"Purified water ad libitum (autoclaved)"),
("Acclimatization", "Minimum 7 days before any intervention"),
("Identification", "Tail tattooing with non-toxic permanent ink"),
("Health monitoring", "Daily observation by trained animal care staff;\n"
"weekly weight; veterinary oversight throughout"),
],
col_widths=[1.8, 4.7])
# A4 - Study protocol
heading(doc, "A.4 EXPERIMENTAL PROTOCOL", 2)
heading(doc, "A.4.1 Experimental Groups and Treatment Schedule", 3)
body(doc,
"Forty-eight (48) juvenile male Wistar rats will be randomly assigned to 6 groups "
"(n = 8 per group) using a computer-generated random number sequence (Excel RAND function). "
"Randomization will be concealed until group assignment. The investigator performing "
"behavioral scoring will be blinded to group allocation (single-blind design).")
doc.add_paragraph()
add_table(doc,
["Group", "n", "Treatment", "Route", "Frequency", "Duration"],
[
("G1 - Normal Control",
"8",
"0.9% Normal saline (vehicle for semaglutide)\n+ Standard pellet diet",
"SC injection\n+ Oral",
"Weekly SC\n+ Daily oral",
"8 weeks"),
("G2 - Semaglutide Disease Control",
"8",
"Semaglutide (dose-escalated: see below)\n+ Standard diet",
"SC injection",
"Weekly",
"8 weeks"),
("G3 - Semaglutide + Ashwagandha",
"8",
"Semaglutide + Withania somnifera standardized root extract\n300 mg/kg/day in 0.5% CMC",
"SC + Oral gavage",
"Weekly SC\n+ Daily oral",
"8 weeks"),
("G4 - Semaglutide + Whey Protein",
"8",
"Semaglutide + Whey protein hydrolysate\n2 g/kg/day in water",
"SC + Oral gavage",
"Weekly SC\n+ Daily oral",
"8 weeks"),
("G5 - Semaglutide + Combination",
"8",
"Semaglutide + WSE 300 mg/kg + Whey 2 g/kg\n(ashwagandha + whey combined)",
"SC + Oral gavage",
"Weekly SC\n+ Daily oral",
"8 weeks"),
("G6 - Positive Control",
"8",
"Semaglutide + Leucine 1.35 g/kg/day\n+ Imipramine 15 mg/kg/day",
"SC + Oral gavage",
"Weekly SC\n+ Daily oral",
"8 weeks"),
],
col_widths=[1.5, 0.3, 2.2, 0.9, 0.9, 0.7])
heading(doc, "A.4.2 Semaglutide Dose Escalation Protocol", 3)
body(doc,
"To minimize GI adverse effects (nausea, anorexia) and mimic clinical dose-escalation "
"practice, semaglutide will be administered in a dose-escalating manner:")
add_table(doc,
["Week", "Dose (mg/kg SC)", "Rationale"],
[
("Week 1-2", "0.025 mg/kg once weekly", "Acclimatization phase - tolerability establishment"),
("Week 3-4", "0.05 mg/kg once weekly", "Intermediate escalation"),
("Week 5-6", "0.075 mg/kg once weekly", "Near-maintenance dose"),
("Week 7-8", "0.1 mg/kg once weekly", "Maintenance dose - sarcopenic effect established"),
],
col_widths=[0.8, 2.0, 3.7])
body(doc,
"Dose selection basis: Karasawa et al. (Cell Metab, 2025, PMID: 40769122) demonstrated "
"significant skeletal muscle effects at 0.1 mg/kg in mice. Allometric scaling to rats "
"and clinical relevance confirmed by York University thesis data.")
heading(doc, "A.4.3 Drug Preparation", 3)
add_table(doc,
["Drug/Supplement", "Source", "Preparation", "Storage"],
[
("Semaglutide",
"Ozempic injection pen (Novo Nordisk) or pure API from\nSigma-Aldrich",
"Dilute in sterile 0.9% NaCl to required concentration.\nPrepare fresh weekly.",
"2-8Β°C; discard unused portion after 30 days"),
("Withania somnifera extract (WSE)",
"Standardized extract (minimum 5% withanolides)\nKSM-66 grade or equivalent;\nHimalayas/Ixoreal Biomed",
"Suspend in 0.5% w/v CMC solution.\nSonicate 5 min; prepare fresh daily.",
"Room temperature, dark container"),
("Whey protein hydrolysate",
"Food-grade hydrolysate (>80% protein content);\nDymatize ISO100 or equivalent pharmaceutical grade",
"Dissolve in sterile water to required concentration.\nPrepare fresh daily.",
"Room temperature, sealed container"),
("Leucine (positive control)",
"L-Leucine (Sigma-Aldrich, L8000)",
"Dissolve in sterile water; 1.35 g/kg/day.",
"Room temperature"),
("Imipramine (positive control)",
"Imipramine HCl (Sigma-Aldrich)",
"Dissolve in sterile water; 15 mg/kg/day.",
"Room temperature, light-protected"),
("CMC vehicle",
"Carboxy Methyl Cellulose sodium (SRL Chemicals)",
"0.5% w/v aqueous solution; autoclave before use.",
"Room temperature, 7-day shelf life"),
],
col_widths=[1.5, 1.5, 2.2, 1.3])
# A5
heading(doc, "A.5 EXPERIMENTAL PROCEDURES AND ENDPOINTS", 2)
heading(doc, "A.5.1 In-Life Monitoring", 3)
add_table(doc,
["Parameter", "Frequency", "Method"],
[
("Body weight", "Twice weekly", "Digital weighing balance (Β±0.1 g)"),
("Food intake", "Daily", "Weigh food before and after 24 h"),
("Water intake", "Daily", "Graduated drinking tube measurement"),
("Clinical observation", "Daily", "Coat condition, posture, activity, feces, urine"),
("Grip strength", "Weekly", "Computerized grip strength meter (Columbus Instruments)"),
("Signs of muscle wasting","Weekly", "Visual assessment: limb circumference, gait"),
("Signs of depression", "Weekly", "Nesting behavior, burrowing, coat score"),
("Mortality check", "Twice daily", "Morning and evening cage inspection"),
],
col_widths=[1.8, 1.3, 3.4])
heading(doc, "A.5.2 Muscle Function Tests (Weeks 4 and 8)", 3)
add_table(doc,
["Test", "Protocol", "Endpoint Measured"],
[
("Grip Strength Test",
"Rat placed on grid of grip strength meter; tail gently pulled backward; "
"3 trials per rat with 5-min rest; highest value recorded.",
"Peak forelimb force (g); normalized to body weight (g/g)"),
("Rotarod Test",
"Accelerating rotarod (4β40 rpm over 5 min); 3 trials per rat; "
"1-h rest between trials; average of 3 trials reported.",
"Latency to fall (seconds); reflects neuromuscular coordination and endurance"),
("Wire Hanging Test",
"Rat suspended from 2 mm steel wire by forepaws; time to fall recorded; "
"maximum 60 seconds per trial; 3 trials.",
"Hanging time (seconds); sarcopenia index"),
("Inclined Plane Test",
"Rat placed on smooth inclined board (30Β°, 45Β°, 60Β°); "
"angle at which rat slides recorded.",
"Maximum angle sustained; reflects hindlimb muscle strength"),
],
col_widths=[1.4, 3.2, 1.9])
heading(doc, "A.5.3 Behavioral Tests for Depression and Anxiety (Week 8, before sacrifice)", 3)
add_table(doc,
["Test", "Protocol Summary", "Key Endpoint", "What It Models"],
[
("Forced Swim Test (FST)",
"Rat placed in cylinder (25 cm water depth, 25Β°C) for 15 min (training) "
"on Day 1; 5-min test on Day 2. Video recorded.",
"Immobility time (seconds) in 5-min test",
"Behavioral despair / depression"),
("Sucrose Preference Test (SPT)",
"24-h habituation to 1% sucrose; 24-h deprivation; "
"dual-bottle test (sucrose vs water) for 1 h.",
"Sucrose preference % = sucrose/(sucrose+water) Γ 100",
"Anhedonia - core depression symptom"),
("Elevated Plus Maze (EPM)",
"Cross-shaped maze (2 open + 2 closed arms, 50 cm elevation); "
"5-min trial; video tracked.",
"% time in open arms; open arm entries",
"Anxiety"),
("Open Field Test (OFT)",
"Rat in 60Γ60 cm arena for 10 min; video tracking (ANY-maze/Ethovision).",
"Total distance (cm); center time (%); rearing frequency",
"Locomotor activity; anxiety; exploration"),
("Social Interaction Test",
"Resident rat exposed to novel rat; social interaction time measured over 5 min.",
"Social interaction time (s)",
"Social withdrawal / anhedonia"),
("Novel Object Recognition (NOR)",
"Familiarization trial (2 identical objects); 1-h delay; "
"test trial (1 familiar + 1 novel object); 5 min.",
"Discrimination index = (novel - familiar)/(novel + familiar)",
"Cognitive function; GLP-1 CNS effects"),
],
col_widths=[1.3, 2.5, 1.4, 1.3])
heading(doc, "A.5.4 Sample Collection Protocol (Terminal β Day 57)", 3)
numbered(doc, "Overnight fast for 16 hours (last gavage given; water allowed).")
numbered(doc, "Weigh each rat. Record final body weight.")
numbered(doc, "Anesthetize: Ketamine 75 mg/kg + Xylazine 10 mg/kg, intraperitoneal injection.")
numbered(doc, "Confirm anesthetic depth: loss of pedal withdrawal reflex before proceeding.")
numbered(doc, "Cardiac puncture: Collect 5-6 mL blood using 23G needle and 10 mL syringe.")
numbered(doc, "Distribute blood: 2.5 mL plain tube (serum for biochemistry) + 2.5 mL EDTA tube (plasma for ELISA) + 0.5 mL EDTA (hematology).")
numbered(doc, "Centrifuge plain tube: 3000 rpm Γ 10 min at 4Β°C. Separate and store serum at -80Β°C.")
numbered(doc, "Euthanize: Cervical dislocation after confirming cardiac arrest (CPCSEA-approved method for rats).")
numbered(doc, "Dissect and weigh: Gastrocnemius, soleus, tibialis anterior, EDL, quadriceps, heart, liver, brain.")
numbered(doc, "Brain dissection: Hippocampus and prefrontal cortex isolated on ice within 5 min of death.")
numbered(doc, "Tissue processing: (a) Formalin 10% - histopathology; (b) Snap-freeze in liquid N2 β -80Β°C for Western blot/PCR; (c) Homogenize in PBS (1:9) for biochemical assays.")
numbered(doc, "Record: Organ weights; liver-to-body-weight ratio; muscle-to-body-weight ratio.")
heading(doc, "A.5.5 Biochemical and Molecular Endpoints", 3)
body(doc, "SERUM PARAMETERS (Liver function + metabolic):", bold=True, size=11)
add_table(doc,
["Parameter", "Method/Kit", "Significance"],
[
("ALT (SGPT)", "IFCC kinetic colorimetric", "Hepatotoxicity of semaglutide"),
("AST (SGOT)", "IFCC kinetic colorimetric", "Hepatocellular integrity"),
("Blood glucose (fasting)","GOD-POD enzymatic", "Metabolic effect of semaglutide"),
("Serum insulin", "Rat insulin ELISA", "GLP-1 pharmacodynamic effect"),
("Total protein", "Biuret method", "Nutritional/anabolic status"),
("Serum IGF-1", "Rat IGF-1 ELISA (R&D Systems)", "Systemic anabolic/neurotrophic signal"),
("Serum cortisol/corticosterone","Rat CORT ELISA", "HPA axis - stress/depression marker"),
("Serum irisin (FNDC5)", "Rat irisin ELISA (MyBioSource)","Muscle-brain crosstalk - NOVEL endpoint"),
("Serum IL-6", "Rat IL-6 ELISA", "Inflammatory myokine + neuroinflammation"),
("Serum BDNF", "Rat BDNF ELISA (Abcam)", "Neurotrophic factor - antidepressant marker"),
("Kynurenine/tryptophan ratio","HPLC or ELISA", "Neurotoxic pathway in depression - NOVEL"),
],
col_widths=[1.8, 2.0, 2.7])
body(doc, "MUSCLE TISSUE (Gastrocnemius homogenate):", bold=True, size=11)
add_table(doc,
["Parameter", "Method", "Significance"],
[
("MDA (Malondialdehyde)", "TBARS assay", "Oxidative stress / muscle damage"),
("SOD", "NBT reduction method", "Antioxidant defense"),
("GSH", "DTNB/Ellman method", "Antioxidant capacity"),
("Total protein", "BCA kit", "Muscle protein content"),
("Myostatin (MSTN)", "Western blot + ELISA", "Master muscle atrophy driver - KEY TARGET"),
("MAFbx / Atrogin-1", "Western blot", "E3 ubiquitin ligase - atrophy marker"),
("MuRF1", "Western blot", "E3 ubiquitin ligase - atrophy marker"),
("p-AKT / total AKT", "Western blot", "PI3K/AKT anabolic signaling"),
("p-mTOR / total mTOR", "Western blot", "Protein synthesis master regulator"),
("p70S6K (phosphorylated)", "Western blot", "mTORC1 downstream - leucine sensing"),
("FoxO3a (phosphorylated)", "Western blot", "When phosphorylated = protected from atrophy"),
("Pax7 / MyoD", "Western blot", "Satellite cell activation - muscle regeneration"),
],
col_widths=[2.0, 1.8, 2.7])
body(doc, "BRAIN TISSUE (Hippocampus + Prefrontal Cortex - dissected separately):", bold=True, size=11)
add_table(doc,
["Parameter", "Method", "Significance"],
[
("BDNF (brain)", "ELISA", "Neurotrophin - depression biomarker"),
("Serotonin (5-HT)", "ELISA or HPLC", "Antidepressant target neurotransmitter"),
("Norepinephrine", "HPLC", "Noradrenergic system status"),
("NRF2 (nuclear fraction)", "Western blot", "Oxidative stress/antioxidant regulation"),
("NLRP3", "Western blot", "Neuroinflammation inflammasome"),
("Caspase-1 (cleaved)", "Western blot", "Pyroptosis / IL-1Ξ² maturation"),
("IL-1Ξ² (brain)", "ELISA", "Neuroinflammatory cytokine"),
("GLP-1 receptor (GLP-1R)", "Western blot", "Direct CNS effects of semaglutide"),
("CREB (phosphorylated)", "Western blot", "Transcription factor for BDNF gene"),
("AChE activity", "Ellman's method", "Cholinergic neurotransmission"),
],
col_widths=[2.0, 1.5, 3.0])
# A5.6 Gene Expression
heading(doc, "A.5.6 Gene Expression by RT-qPCR (Muscle + Brain)", 3)
add_table(doc,
["Gene (Rat)", "Tissue", "Pathway", "Expected Change in Disease Group"],
[
("Mstn (myostatin)", "Muscle", "Atrophy", "Upregulated"),
("Fbxo32 (MAFbx)", "Muscle", "Ubiquitin-proteasome atrophy", "Upregulated"),
("Trim63 (MuRF1)", "Muscle", "Ubiquitin-proteasome atrophy", "Upregulated"),
("Igf1", "Muscle", "Anabolic signaling", "Downregulated"),
("Mtor", "Muscle", "Protein synthesis", "Downregulated"),
("Fndc5 (irisin)", "Muscle", "Muscle-brain myokine link", "Downregulated - NOVEL"),
("Bdnf", "Brain", "Neurotrophic/antidepressant", "Downregulated"),
("Tph2", "Brain", "Serotonin synthesis", "Downregulated"),
("Nlrp3", "Brain", "Neuroinflammation", "Upregulated"),
("Nrf2 (Nfe2l2)", "Both", "Antioxidant response element", "Downregulated"),
("Actb (beta-actin)", "Both", "Reference gene", "Stable (housekeeping)"),
("Gapdh", "Both", "Reference gene", "Stable (housekeeping)"),
],
col_widths=[1.6, 0.8, 2.0, 2.1])
# A5.7 Histopathology
heading(doc, "A.5.7 Histopathological Examination", 3)
body(doc, "Muscle (Gastrocnemius - transverse cross-sections):", bold=True, size=11)
add_table(doc,
["Stain", "Endpoint", "Analysis Method"],
[
("H&E", "Myofiber cross-sectional area (CSA), central nuclei,\nnecro-inflammatory infiltrate",
"ImageJ: measure CSA of minimum 100 fibers/section"),
("Masson's Trichrome", "Collagen/fibrosis deposition in muscle",
"% fibrotic area by ImageJ color threshold"),
("ATPase (pH 4.3)", "Type I (slow, fatigue-resistant) vs Type II (fast) fiber ratio",
"Count 200 fibers/section; calculate % Type I:II"),
("Immunofluorescence", "Pax7 (satellite cells - muscle stem cells)\nLaminin (basement membrane integrity)",
"Count Pax7+ cells per 100 fibers; laminin continuity score"),
],
col_widths=[1.6, 2.6, 2.3])
body(doc, "Brain (Hippocampus - coronal sections, Bregma -3.0 to -4.5 mm):", bold=True, size=11)
add_table(doc,
["Stain", "Endpoint", "Region of Interest"],
[
("H&E", "Neuronal density, pyknotic nuclei, vacuolation", "CA1, CA3, DG of hippocampus"),
("Nissl stain", "Neuronal integrity - Nissl bodies reflect RNA synthesis", "All hippocampal subfields"),
("TUNEL assay", "In situ apoptosis - apoptotic index", "Hippocampus + prefrontal cortex"),
("Iba1 IHC", "Microglia activation (neuroinflammation marker)", "Hippocampus"),
],
col_widths=[1.5, 2.5, 2.5])
# A6 - Safety
heading(doc, "A.6 POTENTIAL ADVERSE EFFECTS AND MANAGEMENT", 2)
add_table(doc,
["Anticipated Effect", "Probability", "Monitoring", "Management"],
[
("Weight loss / cachexia from semaglutide",
"High (expected, desired effect in disease control group)",
"Twice-weekly body weight; food intake",
"Study endpoint; not treated unless >30% loss triggers humane endpoint"),
("GI disturbance (nausea, diarrhea)",
"Moderate",
"Daily fecal inspection; food intake",
"Dose escalation protocol mitigates this; anti-emetic if severe"),
("Hypoglycemia",
"Low (juvenile rats)",
"Blood glucose weekly (tail nick); clinical signs",
"5% dextrose SC if glucose <50 mg/dL"),
("Injection site reaction (SC semaglutide)",
"Low",
"Daily inspection of injection site",
"Rotate injection site; topical antiseptic"),
("Mortality",
"Low (<5% expected)",
"Twice-daily observation",
"Necropsy with histology; replace if early mortality (<week 2)"),
("Behavioral distress",
"Moderate (FST)",
"Monitor during behavioral tests",
"Tests limited to standard validated durations; immediate removal if distress"),
],
col_widths=[1.6, 1.0, 1.7, 2.2])
body(doc,
"HUMANE ENDPOINTS: Any animal showing >30% body weight loss compared to initial weight, "
"severe dehydration, labored breathing, inability to ambulate, or complete anorexia (>48 h) "
"will be immediately euthanized by CO2 inhalation. The IAEC veterinarian will be notified. "
"Replacement animals may be added with prior IAEC approval.")
# A7 - Euthanasia
heading(doc, "A.7 EUTHANASIA METHOD", 2)
body(doc,
"Method: Overdose of ketamine (150 mg/kg) + xylazine (20 mg/kg) intraperitoneal, "
"followed by cardiac puncture for blood collection, then cervical dislocation to "
"confirm death. This method is approved by CPCSEA (2003 guidelines) and AVMA Guidelines "
"for Euthanasia. Animals will be confirmed dead before tissue collection by: "
"absence of heartbeat (>1 min), absence of respiratory movement, absence of corneal reflex, "
"and fixed dilated pupils.")
# A8 - Disposal
heading(doc, "A.8 DISPOSAL OF ANIMAL CARCASSES", 2)
bullet(doc, "Carcasses will be double-bagged in biohazard bags and labeled (study number, date, species).")
bullet(doc, "Incineration in JIPMER institutional incinerator as per BMW (Management and Handling) Rules, 2016.")
bullet(doc, "Tissues fixed in formalin: disposed as chemical waste after histopathology slide preparation.")
bullet(doc, "Blood and serum: autoclaved (121Β°C, 20 min) before drain disposal.")
bullet(doc, "No animal body parts will be released outside JIPMER.")
# A9 - Personnel
heading(doc, "A.9 PERSONNEL QUALIFICATIONS", 2)
add_table(doc,
["Person", "Qualification", "Role", "Training"],
[
("Principal Investigator (M.Pharm Scholar)",
"B.Pharm (completed); M.Pharm in progress",
"Experimental design, drug preparation, biochemical assays, data analysis",
"CPCSEA animal handling workshop (to be completed before study onset);\nGood Laboratory Practice certification"),
("Guide (Professor of Pharmacology)",
"MD, PhD",
"Scientific oversight, IAEC communication, manuscript supervision",
"Extensive prior IAEC-approved research experience"),
("CAF Veterinarian",
"BVSc, MVSc",
"Animal health monitoring, anesthesia oversight, euthanasia",
"Registered with Veterinary Council of India"),
("Lab Technician (CAF)",
"Diploma/BSc",
"Feeding, cage changing, daily monitoring",
"On-the-job trained; JIPMER CAF certified"),
],
col_widths=[1.5, 1.5, 2.0, 1.5])
# A10 - Budget
heading(doc, "A.10 ESTIMATED BUDGET", 2)
add_table(doc,
["Item", "Quantity", "Unit Cost (INR)", "Total (INR)"],
[
("Wistar rats (juvenile, CPCSEA certified)", "48", "βΉ 600", "βΉ 28,800"),
("Animal housing & maintenance (8 weeks)", "48", "βΉ 200/week", "βΉ 76,800"),
("Semaglutide API (Sigma / Novo Nordisk)", "1 vial", "βΉ 15,000", "βΉ 15,000"),
("Withania somnifera KSM-66 extract", "100 g", "βΉ 4,500", "βΉ 4,500"),
("Whey protein hydrolysate (food grade)", "500 g", "βΉ 2,000", "βΉ 2,000"),
("Imipramine HCl, Leucine (Sigma)", "Various","βΉ 3,000", "βΉ 3,000"),
("Biochemical assay kits (ALT, AST, glucose, protein, lipids)",
"10 kits", "βΉ 2,500 avg", "βΉ 25,000"),
("ELISA kits (IGF-1, BDNF, irisin, cortisol, IL-6, myostatin, insulin)",
"7 kits", "βΉ 12,000 avg","βΉ 84,000"),
("Western blot consumables (antibodies, PVDF, ECL, etc.)",
"Lot", "βΉ 60,000", "βΉ 60,000"),
("RT-qPCR (TRIzol, cDNA kit, SYBR Green, primers)",
"Lot", "βΉ 35,000", "βΉ 35,000"),
("Histopathology (paraffin, stains, slides, cover slips)",
"Lot", "βΉ 20,000", "βΉ 20,000"),
("Anesthetics (ketamine, xylazine)",
"Lot", "βΉ 5,000", "βΉ 5,000"),
("Behavioral apparatus consumables",
"Lot", "βΉ 8,000", "βΉ 8,000"),
("Miscellaneous (syringes, gavage needles, tubes, CMC, chemicals)",
"Lot", "βΉ 15,000", "βΉ 15,000"),
("Contingency (10%)", "--", "--", "βΉ 38,210"),
("TOTAL ESTIMATED BUDGET", "--", "--", "βΉ 4,20,310"),
],
col_widths=[3.0, 1.0, 1.5, 1.0])
# Sign
heading(doc, "A.11 SIGNATURES AND DECLARATIONS", 2)
body(doc,
"We, the undersigned, declare that the information provided in this application is accurate "
"and complete. We agree to comply with all CPCSEA guidelines, JIPMER IAEC regulations, and "
"the Prevention of Cruelty to Animals Act, 1960. We undertake to report any deviation from "
"this approved protocol to the IAEC immediately.")
sign_table = doc.add_table(rows=3, cols=3)
sign_table.style = "Table Grid"
for row in sign_table.rows:
for cell in row.cells:
cell.width = Inches(2.2)
labels_r1 = ["Principal Investigator", "Guide", "Co-Guide (if any)"]
labels_r2 = ["[Candidate Name]", "[Guide Name], MD PhD", "[Co-Guide Name], MD"]
labels_r3 = ["M.Pharm Scholar\nJIPMER", "Professor, Pharmacology\nJIPMER",
"Assoc. Prof., Pharmacology\nJIPMER"]
for i, (l1, l2, l3) in enumerate(zip(labels_r1, labels_r2, labels_r3)):
shade_cell(sign_table.rows[0].cells[i], "003366")
set_cell_text(sign_table.rows[0].cells[i], l1, bold=True, color=WHITE, font="Arial", size=10,
align=WD_ALIGN_PARAGRAPH.CENTER)
set_cell_text(sign_table.rows[1].cells[i], "\n\nSignature: _________________\n\n", size=11,
align=WD_ALIGN_PARAGRAPH.CENTER)
set_cell_text(sign_table.rows[2].cells[i], l2 + "\n" + l3, size=10,
align=WD_ALIGN_PARAGRAPH.CENTER)
doc.add_paragraph()
body(doc,
"Date: ___________________ Place: JIPMER, Puducherry",
italic=True)
doc.add_page_break()
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# PART B β DISSERTATION SYNOPSIS
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
heading(doc, "PART B: DISSERTATION SYNOPSIS", 1)
box_para(doc,
"M.Pharm Pharmacology Dissertation | JIPMER, Puducherry | August 2026",
bg="E8F4FD")
doc.add_paragraph()
# B1
heading(doc, "B.1 TITLE OF THE DISSERTATION", 2)
box_para(doc,
"Semaglutide-Induced Skeletal Muscle Wasting and Depressive-Like Behavior in Juvenile "
"Wistar Rats: Establishment of a Novel Sarcopenia-Depression Comorbidity Model and "
"Protective Evaluation of Withania somnifera (Ashwagandha) Root Extract Combined with "
"Whey Protein Hydrolysate",
bg="003366")
doc.add_paragraph()
# B2
heading(doc, "B.2 INTRODUCTION AND BACKGROUND", 2)
heading(doc, "B.2.1 Semaglutide and the Adolescent Obesity Crisis", 3)
body(doc,
"Semaglutide is a long-acting glucagon-like peptide-1 (GLP-1) receptor agonist that has "
"revolutionized obesity management globally. In 2022, the United States Food and Drug "
"Administration (USFDA) approved semaglutide (Wegovy, 2.4 mg weekly) for chronic weight "
"management in adolescents aged 12 years and above with obesity (BMI β₯ 95th percentile). "
"The Central Drugs Standard Control Organisation (CDSCO) has approved semaglutide for use "
"in India, where childhood obesity affects approximately 14.4 million children - the second "
"highest burden globally.")
body(doc,
"Clinical trials (STEP TEENS, NEJM 2022) demonstrated 16.1% mean weight reduction in "
"adolescents on semaglutide vs 0.6% on placebo. However, a critical concern has emerged: "
"25-39% of weight lost during GLP-1 agonist therapy consists of lean mass (skeletal muscle), "
"not adipose tissue. In a growing adolescent, muscle mass accrual is at its peak between "
"ages 10-18 years. Loss of muscle mass during this critical developmental window may have "
"irreversible consequences on bone density, metabolic health, and long-term physical function.")
heading(doc, "B.2.2 Semaglutide and Skeletal Muscle - Emerging Evidence", 3)
body(doc,
"Until recently, muscle mass loss during semaglutide treatment was attributed entirely to "
"caloric restriction secondary to reduced appetite. However, a landmark study by Karasawa "
"et al. published in Cell Metabolism (August 2025, PMID: 40769122) demonstrated "
"\"unexpected effects of semaglutide on skeletal muscle mass and force-generating capacity "
"in mice\" - suggesting direct drug effects on muscle independent of caloric restriction. "
"Furthermore, the Blau Laboratory at Stanford University (June 2026) reported that "
"semaglutide reduces the regenerative capacity of young mouse muscles - a finding with "
"profound implications for adolescent patients whose muscles are still developing.")
body(doc,
"Despite these alarming findings, NO study has yet investigated semaglutide-induced muscle "
"changes in a juvenile animal model, and NO study has proposed or tested any pharmacological "
"intervention to prevent this muscle loss. This represents a critical gap in the translational "
"pharmacology of one of the world's most widely prescribed drug classes.")
heading(doc, "B.2.3 Semaglutide and the Central Nervous System - The Depression Question", 3)
body(doc,
"GLP-1 receptors are expressed throughout the central nervous system including the "
"hippocampus, hypothalamus, brainstem, and prefrontal cortex. While some evidence suggests "
"GLP-1 agonists may have antidepressant-like effects, a 2026 systematic review and "
"meta-analysis (Cureus, PMID: 42137703) found conflicting evidence - with some analyses "
"showing increased depression risk with GLP-1 agonists vs. other antidiabetic drugs. "
"At the mechanistic level, semaglutide-induced anorexia reduces dietary tryptophan availability "
"- the precursor to serotonin - potentially disrupting monoaminergic neurotransmission. "
"In juveniles, whose developing hippocampus is particularly vulnerable to nutritional "
"deprivation and stress, this mechanism deserves urgent preclinical investigation.")
heading(doc, "B.2.4 The Muscle-Brain Connection - Myokine Hypothesis", 3)
body(doc,
"Recent research has established a bidirectional communication axis between skeletal muscle "
"and the brain via bioactive peptides called myokines. Irisin (encoded by FNDC5), a myokine "
"released during muscle contraction, crosses the blood-brain barrier and directly stimulates "
"hippocampal BDNF expression. Lower muscle mass β lower irisin β lower hippocampal BDNF "
"β depression. This muscle-brain crosstalk via irisin/BDNF provides a compelling mechanistic "
"hypothesis for why sarcopenia and depression co-occur at rates far exceeding chance in "
"clinical populations. If semaglutide causes both muscle wasting AND reduces irisin secretion "
"in growing juvenile rats, this would represent the first mechanistic link between "
"GLP-1-induced sarcopenia and depression.")
heading(doc, "B.2.5 Ashwagandha and Whey Protein as Protective Agents", 3)
body(doc,
"Withania somnifera (ashwagandha) is a WHO-recognized Rasayana (rejuvenating herb) in "
"Ayurvedic medicine. Its primary bioactive constituents - withanolides (particularly "
"Withaferin A and Withanolide A) - have demonstrated: (1) anti-atrophic effects via "
"myostatin downregulation and IGF-1 upregulation in in vitro and rodent studies; "
"(2) antidepressant effects via BDNF upregulation, HPA axis normalization, and "
"serotonergic modulation; (3) NRF2-mediated antioxidant activation in both muscle and "
"brain tissue; (4) anti-inflammatory effects via NF-kB suppression.")
body(doc,
"Whey protein hydrolysate is rich in branched-chain amino acids (BCAA), particularly "
"leucine - the most potent known activator of mTORC1-dependent muscle protein synthesis. "
"Whey protein also contains tryptophan, the dietary precursor to serotonin, providing "
"a direct nutritional substrate for antidepressant neurotransmission. The combination "
"of ashwagandha (anti-catabolic, adaptogenic) with whey protein (anabolic substrate, "
"tryptophan source) represents a biologically synergistic intervention targeting both "
"the muscle and brain simultaneously.")
# B3 - Review of Literature
heading(doc, "B.3 REVIEW OF LITERATURE", 2)
heading(doc, "B.3.1 Semaglutide and Muscle Mass", 3)
body(doc,
"Wilding et al. (NEJM 2021) in the STEP 1 trial demonstrated that semaglutide 2.4 mg "
"weekly produced 14.9% mean weight loss, with approximately 30% of this from lean mass. "
"Ryan et al. (Obesity 2020) confirmed similar lean mass proportion loss with other "
"GLP-1 agonists. Karasawa et al. (Cell Metab 2025, PMID: 40769122) showed unexpected "
"direct effects on muscle force-generating capacity in mice beyond caloric restriction. "
"The York University thesis (2024) demonstrated ~10% relative skeletal muscle mass loss "
"in semaglutide-treated T2D rats vs. caloric restriction alone. "
"Bimagrumab + semaglutide combination (Nature Medicine, March 2026) preserved lean mass "
"while enhancing weight loss - confirming that semaglutide-induced muscle loss is "
"pharmacologically modifiable.")
heading(doc, "B.3.2 GLP-1 and CNS/Depression", 3)
body(doc,
"Ferrer Zavala et al. (Cureus 2026, PMID: 42137703) conducted a systematic review and "
"meta-analysis of 9 studies showing mixed evidence on GLP-1 agonists and depression risk "
"in T2D. GLP-1 receptors in hippocampus are well documented (Merchenthaler et al., 1999). "
"Cork et al. (Neuropharmacology 2015) showed liraglutide had antidepressant effects in "
"mice. However, semaglutide specifically in juvenile/adolescent CNS has NO published data.")
heading(doc, "B.3.3 Irisin and the Muscle-Brain Axis", 3)
body(doc,
"Wrann et al. (Cell Metab 2013) first demonstrated that exercise-induced FNDC5/irisin "
"promotes hippocampal BDNF expression. Moon et al. (Nat Med 2020) showed peripheral "
"irisin enters the brain and activates BDNF promoter. Lavretsky et al. (2021) showed "
"lower serum irisin levels correlate with depression severity in older adults. "
"No study has measured irisin in a semaglutide-treated animal model.")
heading(doc, "B.3.4 Ashwagandha in Muscle and Brain Pharmacology", 3)
body(doc,
"Wankhede et al. (J Int Soc Sports Nutr 2015) demonstrated ashwagandha (KSM-66, 300 mg BD) "
"significantly improved muscle strength and recovery in human RCT. "
"Sanjay et al. (Can J Physiol Pharmacol 2021, PMID: 33617360 - JIPMER publication) showed "
"quercetin modulates NRF2/NF-kB in drug-induced injury. "
"Pratte et al. (J Altern Complement Med 2014) showed ashwagandha root extract reduced "
"cortisol and anxiety scores in human RCT. "
"Bhattacharya et al. (Phytomedicine 2000) demonstrated significant antidepressant effects "
"of ashwagandha in rats comparable to imipramine.")
heading(doc, "B.3.5 Whey Protein and Muscle / Serotonin", 3)
body(doc,
"Pennings et al. (Am J Clin Nutr 2011) demonstrated whey protein maximally stimulates "
"muscle protein synthesis via leucine-mTORC1 axis compared to casein and soy. "
"Markus et al. (Am J Clin Nutr 2000) showed whey protein alpha-lactalbumin (high tryptophan) "
"increases plasma tryptophan ratio and improves mood/cognitive performance. "
"Tang et al. (JNHA 2020) showed whey protein supplementation attenuated sarcopenia-related "
"muscle loss in dexamethasone-treated rats via mTOR signaling.")
heading(doc, "B.3.6 Research Gap Statement", 3)
box_para(doc,
"NO published study globally has: (1) Used juvenile rats to model semaglutide-induced "
"sarcopenia + depression simultaneously, (2) Measured irisin as the muscle-brain link "
"in this context, (3) Tested ashwagandha + whey protein as a combined protective intervention "
"in any semaglutide-induced muscle wasting model. This dissertation fills ALL THREE gaps.",
bg="FFF3CD")
# B4 - Objectives
heading(doc, "B.4 AIM AND OBJECTIVES", 2)
heading(doc, "Aim", 3)
body(doc,
"To establish and characterize a novel juvenile rat model of semaglutide-induced "
"sarcopenia-depression comorbidity and to evaluate the protective efficacy of "
"Withania somnifera root extract combined with whey protein hydrolysate.")
heading(doc, "Primary Objectives", 3)
numbered(doc,
"To develop a reproducible juvenile rat model of semaglutide-induced skeletal muscle "
"wasting (sarcopenia) and depressive-like behavior.")
numbered(doc,
"To characterize the molecular mechanisms of semaglutide-induced sarcopenia via "
"myostatin/MAFbx/MuRF1 atrophy pathway and mTOR/AKT anabolic pathway in juvenile muscle.")
numbered(doc,
"To characterize the neurochemical changes (BDNF, serotonin, corticosterone, NLRP3) "
"underlying semaglutide-associated depressive-like behavior in juvenile rat brain.")
heading(doc, "Secondary Objectives", 3)
numbered(doc,
"To evaluate the role of irisin (FNDC5) as a muscle-brain crosstalk mediator in "
"semaglutide-induced sarcopenia-depression comorbidity.")
numbered(doc,
"To assess the muscle-protective efficacy of ashwagandha (WSE 300 mg/kg) alone, "
"whey protein hydrolysate (2 g/kg) alone, and their combination against "
"semaglutide-induced sarcopenia.")
numbered(doc,
"To assess the antidepressant efficacy of the same interventions on behavioral and "
"neurochemical markers.")
numbered(doc,
"To identify the synergistic pharmacological interaction between ashwagandha and "
"whey protein on both muscle and brain endpoints.")
numbered(doc,
"To validate the model and interventions using molecular docking (in silico) of "
"withanolides and leucine-derived peptides on key target proteins "
"(myostatin, NLRP3, SIRT1, GLP-1R).")
# B5 - Hypothesis
heading(doc, "B.5 HYPOTHESIS", 2)
body(doc,
"NULL HYPOTHESIS (H0): Semaglutide administration in juvenile Wistar rats does not produce "
"significant skeletal muscle wasting or depressive-like behavioral changes, and Withania "
"somnifera combined with whey protein hydrolysate does not provide significant protection "
"against semaglutide-induced changes.", italic=True)
doc.add_paragraph()
body(doc,
"ALTERNATIVE HYPOTHESIS (H1): Semaglutide administration in juvenile Wistar rats produces "
"significant sarcopenia and depressive-like behavior via myostatin upregulation and irisin "
"reduction, and Withania somnifera combined with whey protein hydrolysate significantly "
"protects against these changes through complementary anabolic, anti-catabolic, and "
"neurochemical mechanisms.", italic=True)
# B6 - Methodology summary
heading(doc, "B.6 MATERIALS AND METHODOLOGY (SUMMARY)", 2)
body(doc,
"The detailed methodology is described in Part A (IAEC Application, Section A.4-A.5). "
"A summary is presented below.")
heading(doc, "B.6.1 Study Design", 3)
add_table(doc,
["Design Parameter", "Details"],
[
("Study type", "Randomized, controlled, single-blind (assessor-blind) experimental study"),
("Setting", "Central Animal Facility (CAF) and Department of Pharmacology, JIPMER"),
("Animal model", "Juvenile male Wistar rats (4-5 weeks, 60-80 g)"),
("Study duration", "8 weeks drug treatment; 24 months total dissertation"),
("Groups", "6 groups (n=8 each); Total: 48 animals"),
("Blinding", "Behavioral scorers blinded to group allocation"),
("Randomization", "Computer-generated random number sequence (Excel RAND)"),
("Primary endpoint", "Grip strength, gastrocnemius weight, FST immobility time"),
("Secondary endpoint","Irisin, BDNF, myostatin, mTOR/AKT pathway proteins, RT-qPCR"),
],
col_widths=[2.2, 4.3])
heading(doc, "B.6.2 Outcome Measures Summary", 3)
add_table(doc,
["Domain", "Key Outcomes", "Timing"],
[
("Muscle function", "Grip strength; rotarod latency; wire hanging time", "Weeks 4, 8"),
("Muscle mass", "Gastrocnemius, soleus, tibialis anterior weights; lean mass", "Day 57 (necropsy)"),
("Muscle molecular", "Myostatin, MAFbx, MuRF1, AKT, mTOR, FoxO3a (Western blot)", "Day 57"),
("Behavior-depression", "FST immobility; sucrose preference; EPM; OFT", "Week 8"),
("Brain neurochemistry", "BDNF, serotonin, corticosterone, NLRP3, NRF2", "Day 57"),
("Muscle-brain crosstalk", "Serum irisin; serum IGF-1; kynurenine/tryptophan ratio", "Day 57"),
("Safety", "ALT, AST, blood glucose, serum insulin, body weight", "Weeks 1-8"),
("Histopathology", "H&E, Masson's Trichrome (muscle); H&E, TUNEL (brain)", "Day 57"),
("Gene expression", "Mstn, Fbxo32, Fndc5, Bdnf, Nlrp3 by RT-qPCR", "Day 57"),
],
col_widths=[1.8, 3.4, 1.3])
# B7 - Statistical
heading(doc, "B.7 STATISTICAL ANALYSIS PLAN", 2)
add_table(doc,
["Analysis", "Test", "Software"],
[
("Continuous parametric data (β₯2 groups)",
"One-Way ANOVA followed by Tukey's HSD post-hoc test",
"GraphPad Prism v10 / SPSS v26"),
("Non-parametric data (non-normal distribution)",
"Kruskal-Wallis test followed by Dunn's post-hoc",
"GraphPad Prism v10"),
("Time-series data (repeated measures)",
"Two-Way ANOVA (group Γ time) + Bonferroni correction",
"SPSS v26"),
("Correlation (muscle vs. brain endpoints)",
"Pearson r (normal) or Spearman rho (non-normal)",
"GraphPad Prism"),
("Dose-response curves",
"Non-linear regression (4-parameter logistic)",
"GraphPad Prism"),
("Data presentation",
"Mean Β± SEM; individual data points plotted on all bar graphs (Nature guidelines)",
"GraphPad Prism"),
],
col_widths=[2.5, 2.5, 1.5])
body(doc,
"Significance threshold: p < 0.05 (two-tailed) for all tests. "
"Multiple comparison correction applied using Bonferroni method where applicable. "
"Sample size adequacy confirmed by post-hoc power analysis after data collection.")
# B8 - Novelty
heading(doc, "B.8 NOVELTY AND SCIENTIFIC CONTRIBUTION", 2)
box_para(doc,
"GLOBAL NOVELTY DECLARATION: As of August 2026, a systematic search of PubMed, "
"Scopus, Web of Science, and Google Scholar reveals NO published study globally "
"that has investigated semaglutide-induced sarcopenia and depression in juvenile rats, "
"or tested ashwagandha-whey protein combination in this context.",
bg="D4EDDA")
doc.add_paragraph()
add_table(doc,
["Novelty Feature", "Global Status", "Scientific Significance"],
[
("Juvenile rat sarcopenia-depression comorbidity model (semaglutide-induced)",
"FIRST IN WORLD",
"Provides a translationally relevant preclinical model for adolescent GLP-1 therapy safety"),
("Irisin measurement as muscle-brain link in GLP-1 model",
"FIRST IN WORLD",
"First mechanistic evidence connecting semaglutide-induced sarcopenia to depression via irisin/BDNF axis"),
("Kynurenine/tryptophan pathway in semaglutide-treated juveniles",
"FIRST IN WORLD",
"Novel neurotoxic pathway possibly linking GLP-1 anorexia to CNS tryptophan depletion"),
("Ashwagandha in semaglutide-induced muscle wasting",
"FIRST IN WORLD",
"First evidence for a natural anti-atrophic intervention specifically against GLP-1 drug-induced sarcopenia"),
("Whey protein + ashwagandha dual rescue of sarcopenia + depression",
"FIRST IN WORLD",
"First combination intervention addressing both muscle and brain simultaneously in drug-induced model"),
],
col_widths=[2.0, 1.2, 3.3])
# B9 - Timeline
heading(doc, "B.9 DISSERTATION WORK PLAN (24 MONTHS)", 2)
add_table(doc,
["Phase", "Months", "Activities", "Milestone"],
[
("Phase 1: Preparation",
"1-3",
"Systematic literature review; IAEC application submission; "
"Procurement of animals, chemicals, kits; Lab training; "
"In silico docking study (AutoDock Vina)",
"IAEC approval obtained;\nIn silico data ready"),
("Phase 2: Pilot Study",
"4",
"Standardize semaglutide dose-escalation in 6 pilot rats; "
"Confirm sarcopenia (grip strength, weight) by week 4; "
"Optimize behavioral test protocols",
"Optimal dose confirmed;\nBehavioral protocols standardized"),
("Phase 3: Main Experiment",
"5-12",
"8-week drug treatment in all 48 animals; "
"Weekly body weight, grip strength, food intake; "
"Week 4 and Week 8 behavioral tests; "
"Terminal blood + tissue collection (Day 57)",
"All in-life data collected;\nTissue bank established at -80Β°C"),
("Phase 4: Biochemistry & Molecular",
"13-16",
"ELISA assays (irisin, BDNF, IGF-1, cortisol, cytokines); "
"Western blotting (myostatin, mTOR, AKT, NLRP3, NRF2); "
"RT-qPCR (Mstn, Fndc5, Bdnf, Nlrp3); "
"Histopathology slides (muscle + brain)",
"All molecular data complete"),
("Phase 5: Analysis & Writing",
"17-20",
"Statistical analysis (SPSS/Prism); "
"Figure preparation (GraphPad Prism); "
"ImageJ histomorphometry; "
"Dissertation writing (Chapters 1-5)",
"Complete dissertation draft"),
("Phase 6: Review & Submission",
"21-22",
"Internal review by guide; Corrections; "
"Anti-plagiarism check (Turnitin <10%); "
"Final formatting per JIPMER guidelines",
"Dissertation submitted"),
("Phase 7: Publication",
"23-24",
"Prepare manuscript for journal submission; "
"Target: Pharmacology Biochemistry & Behavior (Q2) or "
"Journal of Cachexia, Sarcopenia & Muscle (Q1)",
"Manuscript submitted to journal"),
],
col_widths=[1.4, 0.7, 3.5, 1.9])
# B10 - References
doc.add_page_break()
heading(doc, "B.10 KEY REFERENCES", 2)
refs = [
"1. Wilding JPH, Batterham RL, Calanna S, et al. Once-Weekly Semaglutide in Adults with "
"Overweight or Obesity. N Engl J Med. 2021;384(11):989-1002.",
"2. Weghuber D, Barrett T, Barrientos-Perez M, et al. Once-Weekly Semaglutide in "
"Adolescents with Obesity (STEP TEENS). N Engl J Med. 2022;387(24):2245-2257.",
"3. Karasawa T, Choi RH, Meza CA, et al. Unexpected effects of semaglutide on skeletal "
"muscle mass and force-generating capacity in mice. Cell Metab. 2025 Aug 5. PMID: 40769122.",
"4. Ferrer Zavala GM, Caro Rodriguez CF, Carrion Carrion P. Risk of Depression With "
"Glucagon-Like Peptide-1 (GLP-1) Receptor Agonists Compared to Other Antidiabetic "
"Medications in Adults With Type 2 Diabetes: A Systematic Review and Meta-Analysis. "
"Cureus. 2026 Apr. PMID: 42137703.",
"5. Sanjay S, Girish C, Toi PC. Quercetin modulates NRF2 and NF-kB/TLR-4 pathways to "
"protect against isoniazid- and rifampicin-induced hepatotoxicity in vivo. "
"Can J Physiol Pharmacol. 2021 Sep. PMID: 33617360.",
"6. Wrann CD, White JP, Salogiannnis J, et al. Exercise induces hippocampal BDNF through "
"a PGC-1alpha/FNDC5 pathway. Cell Metab. 2013;18(5):649-659.",
"7. Wankhede S, Langade D, Joshi K, Sinha SR, Bhattacharyya S. Examining the effect of "
"Withania somnifera supplementation on muscle strength and recovery. J Int Soc Sports Nutr. "
"2015;12:43.",
"8. Pennings B, Boirie Y, Senden JM, et al. Whey protein stimulates postprandial muscle "
"protein accretion more effectively than do casein and casein hydrolysate in older men. "
"Am J Clin Nutr. 2011;93(5):997-1005.",
"9. Bhattacharya SK, Bhattacharya A, Sairam K, Ghosal S. Anxiolytic-antidepressant "
"activity of Withania somnifera glycowithanolides: an experimental study. "
"Phytomedicine. 2000;7(6):463-469.",
"10. Moon HY, Becke A, Berron D, et al. Running-Induced Systemic Cathepsin B Secretion "
"Is Associated with Memory Function. Cell Metab. 2016;24(2):332-340.",
"11. CPCSEA Guidelines for Laboratory Animal Facility. Committee for the Purpose of "
"Control and Supervision of Experiments on Animals, Ministry of Fisheries, Animal "
"Husbandry and Dairying, Government of India. 2003.",
"12. OECD Guideline 407. Repeated Dose 28-day Oral Toxicity Study in Rodents. 2008.",
"13. Lavretsky H, Bhatt DL. Exercise-induced irisin and BDNF for depression. "
"Nature Medicine. 2021.",
"14. Markus CR, Olivier B, de Haan EH. Whey protein rich in alpha-lactalbumin "
"increases the ratio of plasma tryptophan to the sum of the other large neutral amino acids "
"and improves cognitive performance in stress-vulnerable subjects. "
"Am J Clin Nutr. 2002;75(6):1051-6.",
"15. Bimagrumab and semaglutide alone or in combination for the treatment of obesity "
"(BELIEVE study). Nature Medicine. March 2026.",
]
for ref in refs:
p = doc.add_paragraph()
run = p.add_run(ref)
run.font.name = "Times New Roman"
run.font.size = Pt(10)
p.paragraph_format.left_indent = Inches(0.3)
p.paragraph_format.space_after = Pt(4)
# Final footer
doc.add_page_break()
divider(doc, "β", 80)
p_end = doc.add_paragraph()
p_end.alignment = WD_ALIGN_PARAGRAPH.CENTER
r_end = p_end.add_run(
"END OF DOCUMENT\n\n"
"Dissertation Synopsis & IAEC Application\n"
"Semaglutide-Induced Sarcopenia-Depression Model Study\n"
"Department of Pharmacology, JIPMER, Puducherry β 605 006\n"
"Prepared: August 2026 | Version 1.0"
)
r_end.font.name = "Arial"
r_end.font.size = Pt(11)
r_end.font.color.rgb = NAVY
r_end.italic = True
divider(doc, "β", 80)
out = "/tmp/workspace/semaglutide-study/Semaglutide_Sarcopenia_Depression_JIPMER_Synopsis_IAEC.docx"
doc.save(out)
print("Saved:", out)
python3 /tmp/workspace/semaglutide-study/create_doc.py
python3 -c " from docx import Document doc = Document('/tmp/workspace/semaglutide-study/Semaglutide_Sarcopenia_Depression_JIPMER_Synopsis_IAEC.docx') headings = [p.text for p in doc.paragraphs if p.style.name.startswith('Heading')] print('DOCUMENT SECTIONS:') for h in headings: print(' ', h) print() print('Total paragraphs:', len(doc.paragraphs)) print('Total tables:', len(doc.tables)) import os size = os.path.getsize('/tmp/workspace/semaglutide-study/Semaglutide_Sarcopenia_Depression_JIPMER_Synopsis_IAEC.docx') print(f'File size: {size/1024:.1f} KB') "
Semaglutide Sarcopenia Depression JIPMER Synopsis IAEC
Word Document Β· DOCX
| Section | Content |
|---|---|
| A.1 | General information table - title, PI, guide, institution, duration |
| A.2 | Rationale for animal use - 6 scientific justifications + full 3R principle (Replacement, Reduction, Refinement) |
| A.3 | Animal details - species, sex, age, source, housing, environment, diet, acclimatization |
| A.4.1 | 6 experimental groups with full treatment schedule table |
| A.4.2 | Semaglutide dose-escalation protocol (week-by-week) |
| A.4.3 | Drug preparation table for all 6 agents (semaglutide, ashwagandha, whey, leucine, imipramine, CMC) |
| A.5.1 | In-life monitoring schedule (daily/weekly parameters) |
| A.5.2 | 4 muscle function tests with full protocols (grip strength, rotarod, wire hanging, inclined plane) |
| A.5.3 | 6 behavioral tests with step-by-step protocols (FST, sucrose preference, EPM, OFT, social interaction, NOR) |
| A.5.4 | Terminal sample collection - 12-step blood and tissue protocol |
| A.5.5 | Serum (11 parameters) + Muscle (12 Western blot/ELISA) + Brain (10 parameters) endpoint tables |
| A.5.6 | RT-qPCR gene panel - 12 genes across muscle and brain |
| A.5.7 | Histopathology - 4 muscle stains + 4 brain stains with scoring systems |
| A.6 | Adverse effects and management table (6 scenarios) + humane endpoint criteria |
| A.7 | CPCSEA-approved euthanasia protocol |
| A.8 | Carcass and biohazard disposal per BMW Rules 2016 |
| A.9 | Personnel qualifications table (PI, guide, veterinarian, technician) |
| A.10 | Itemized budget table - βΉ4,20,310 total estimated cost |
| A.11 | Signature page for PI, guide, co-guide |
| Section | Content |
|---|---|
| B.1 | Full title (highlighted box) |
| B.2 | 5-subsection introduction covering adolescent obesity, semaglutide muscle evidence (PMID: 40769122), CNS effects (PMID: 42137703), irisin/muscle-brain axis, ashwagandha + whey rationale |
| B.3 | Literature review - 5 subsections + research gap statement (highlighted) |
| B.4 | Aim + 3 primary objectives + 5 secondary objectives (numbered) |
| B.5 | Null hypothesis + Alternative hypothesis (both written formally) |
| B.6 | Study design table + outcome measures summary table |
| B.7 | Statistical analysis plan (6-test decision table) |
| B.8 | Novelty declaration box + 5-row novelty table with "FIRST IN WORLD" labels |
| B.9 | 7-phase 24-month work plan table with milestones |
| B.10 | 15 peer-reviewed references (including the 2025 Cell Metabolism paper and 2026 meta-analysis) |
[Candidate Name], [Guide Name], [Co-Guide Name], [Roll Number], [CAF Registration Number], and [IAEC Protocol Number] (assigned after submission) - and this document is ready to submit to JIPMER IAEC.Prepare a lab protocol reference card for daily experiment procedures (printable PDF)
~/semaglutide-study/create_protocol_card.py
"""
Lab Protocol Reference Card - Semaglutide Sarcopenia-Depression Study
Printable A4 PDF using ReportLab
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_CENTER, TA_RIGHT, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, PageBreak, KeepTogether
)
from reportlab.platypus.flowables import Flowable
from reportlab.graphics.shapes import Drawing, Rect, String, Line, Circle
from reportlab.graphics import renderPDF
# βββ Colour palette βββββββββββββββββββββββββββββββββββββββββββ
NAVY = colors.HexColor("#003366")
TEAL = colors.HexColor("#006699")
LTBLUE = colors.HexColor("#E8F4FD")
LTGREEN = colors.HexColor("#D4EDDA")
LTYELLOW = colors.HexColor("#FFF3CD")
LTRED = colors.HexColor("#FDECEA")
LTGRAY = colors.HexColor("#F5F5F5")
MIDGRAY = colors.HexColor("#CCCCCC")
DARKGRAY = colors.HexColor("#555555")
WHITE = colors.white
RED = colors.HexColor("#C0392B")
GREEN = colors.HexColor("#1E8449")
ORANGE = colors.HexColor("#E67E22")
W, H = A4 # 210 Γ 297 mm
OUT = "/tmp/workspace/semaglutide-study/Lab_Protocol_Reference_Card.pdf"
doc = SimpleDocTemplate(
OUT,
pagesize=A4,
leftMargin=12*mm,
rightMargin=12*mm,
topMargin=14*mm,
bottomMargin=12*mm,
title="Lab Protocol Reference Card β Semaglutide Sarcopenia Study",
author="JIPMER Pharmacology",
)
# βββ Styles βββββββββββββββββββββββββββββββββββββββββββββββββββ
base = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
H1 = S("H1", fontName="Helvetica-Bold", fontSize=15, textColor=WHITE,
alignment=TA_CENTER, spaceAfter=2)
H2 = S("H2", fontName="Helvetica-Bold", fontSize=9, textColor=WHITE,
alignment=TA_LEFT, spaceAfter=1, spaceBefore=1)
H3 = S("H3", fontName="Helvetica-Bold", fontSize=8, textColor=NAVY,
alignment=TA_LEFT, spaceAfter=2, spaceBefore=3)
BODY= S("BD", fontName="Helvetica", fontSize=7.5,textColor=colors.black,
alignment=TA_LEFT, spaceAfter=1, leading=10)
BOLD= S("BLD", fontName="Helvetica-Bold", fontSize=7.5,textColor=colors.black,
alignment=TA_LEFT, spaceAfter=1, leading=10)
TINY= S("TN", fontName="Helvetica", fontSize=6.5,textColor=DARKGRAY,
alignment=TA_LEFT, spaceAfter=1, leading=9)
WARN= S("WN", fontName="Helvetica-Bold", fontSize=7, textColor=RED,
alignment=TA_LEFT, spaceAfter=1)
CTR = S("CT", fontName="Helvetica", fontSize=7, textColor=DARKGRAY,
alignment=TA_CENTER, spaceAfter=0)
CTRB= S("CTB", fontName="Helvetica-Bold", fontSize=7.5,textColor=NAVY,
alignment=TA_CENTER, spaceAfter=1)
# βββ Helper: coloured section header ββββββββββββββββββββββββββ
def section_hdr(title, bgcolor=NAVY, textcolor=WHITE, fontsize=9):
data = [[Paragraph(f"<b>{title}</b>",
S("sh", fontName="Helvetica-Bold", fontSize=fontsize,
textColor=textcolor, alignment=TA_LEFT, spaceAfter=0))]]
t = Table(data, colWidths=[W - 24*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bgcolor),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 4),
]))
return t
def mini_hdr(title, bgcolor=TEAL):
data = [[Paragraph(f"<b>{title}</b>",
S("mh", fontName="Helvetica-Bold", fontSize=8,
textColor=WHITE, alignment=TA_LEFT, spaceAfter=0))]]
t = Table(data, colWidths=[W - 24*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bgcolor),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 5),
]))
return t
def two_col_table(headers, rows, widths, hdr_bg=NAVY, alt=True):
data = [headers] + rows
style = [
("BACKGROUND", (0,0), (-1,0), hdr_bg),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTSIZE", (0,0), (-1,-1), 7.5),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 4),
("RIGHTPADDING", (0,0), (-1,-1), 4),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
]
if alt:
for i in range(1, len(data)):
bg = LTBLUE if i % 2 == 0 else WHITE
style.append(("BACKGROUND", (0,i), (-1,i), bg))
t = Table(data, colWidths=widths)
t.setStyle(TableStyle(style))
return t
def checklist_table(items, tick_col=LTGREEN):
rows = [[Paragraph("β", S("ck", fontName="Helvetica", fontSize=10,
textColor=GREEN, alignment=TA_CENTER)),
Paragraph(txt, BODY)] for txt in items]
t = Table(rows, colWidths=[8*mm, W-24*mm-10*mm])
t.setStyle(TableStyle([
("TOPPADDING", (0,0), (-1,-1), 1),
("BOTTOMPADDING", (0,0), (-1,-1), 1),
("LEFTPADDING", (0,0), (-1,-1), 2),
("VALIGN", (0,0), (-1,-1), "TOP"),
("GRID", (0,0), (-1,-1), 0.2, MIDGRAY),
("BACKGROUND", (0,0), (0,-1), tick_col),
]))
return t
def warning_box(text, bgcolor=LTRED, textcolor=RED):
data = [[Paragraph(f"β {text}",
S("wb", fontName="Helvetica-Bold", fontSize=7.5,
textColor=textcolor, alignment=TA_LEFT, spaceAfter=0))]]
t = Table(data, colWidths=[W - 24*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bgcolor),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 0.5, RED),
]))
return t
def note_box(text, bgcolor=LTYELLOW):
data = [[Paragraph(f"π {text}",
S("nb", fontName="Helvetica", fontSize=7.5,
textColor=colors.HexColor("#7D6608"),
alignment=TA_LEFT, spaceAfter=0))]]
t = Table(data, colWidths=[W - 24*mm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bgcolor),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 6),
("BOX", (0,0), (-1,-1), 0.5, colors.HexColor("#F0C040")),
]))
return t
def sp(n=4): return Spacer(1, n)
def hr(): return HRFlowable(width="100%", thickness=0.5, color=MIDGRAY, spaceAfter=3, spaceBefore=3)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BUILD STORY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story = []
# βββ TITLE BANNER βββββββββββββββββββββββββββββββββββββββββββββ
banner_data = [[
Paragraph("<b>LAB PROTOCOL REFERENCE CARD</b>",
S("bn1", fontName="Helvetica-Bold", fontSize=16, textColor=WHITE,
alignment=TA_CENTER)),
Paragraph("<b>Semaglutide-Induced Sarcopenia & Depression Study</b><br/>"
"<font size=8>Ashwagandha + Whey Protein Intervention | JIPMER Pharmacology</font>",
S("bn2", fontName="Helvetica-Bold", fontSize=10, textColor=LTBLUE,
alignment=TA_CENTER)),
]]
banner = Table(banner_data, colWidths=[62*mm, W-24*mm-62*mm])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), NAVY),
("TOPPADDING", (0,0), (-1,-1), 8),
("BOTTOMPADDING", (0,0), (-1,-1), 8),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story += [banner, sp(5)]
# βββ QUICK REFERENCE INFO STRIP βββββββββββββββββββββββββββββββ
info_data = [
[Paragraph("π <b>Species:</b> Wistar rats (β, 4-5 wks)", TINY),
Paragraph("π’ <b>Groups:</b> 6 groups, n=8 each (48 total)", TINY),
Paragraph("β± <b>Duration:</b> 8 weeks treatment", TINY),
Paragraph("π <b>Semaglutide:</b> SC weekly (dose-escalated)", TINY)],
]
info_t = Table(info_data, colWidths=[(W-24*mm)/4]*4)
info_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LTBLUE),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("BOX", (0,0), (-1,-1), 0.5, NAVY),
("LINEAFTER", (0,0), (2,0), 0.3, NAVY),
]))
story += [info_t, sp(6)]
# βββββββββββββββββββββββββββββββββββββββββββ
# TWO-COLUMN LAYOUT using a wide table
# βββββββββββββββββββββββββββββββββββββββββββ
LW = 88*mm # left column
RW = 84*mm # right column
GAP = W - 24*mm - LW - RW # ~2 mm gap
def two_col(left_items, right_items):
"""Wrap two lists of flowables into a side-by-side table."""
from reportlab.platypus import KeepInFrame
lframe = KeepInFrame(LW, 9999, left_items, mode="shrink")
rframe = KeepInFrame(RW, 9999, right_items, mode="shrink")
t = Table([[lframe, Spacer(GAP,1), rframe]],
colWidths=[LW, GAP, RW])
t.setStyle(TableStyle([
("VALIGN", (0,0), (-1,-1), "TOP"),
("TOPPADDING", (0,0), (-1,-1), 0),
("BOTTOMPADDING", (0,0), (-1,-1), 0),
("LEFTPADDING", (0,0), (-1,-1), 0),
("RIGHTPADDING", (0,0), (-1,-1), 0),
]))
return t
# βββ PAGE 1 LEFT: DAILY SCHEDULE ββββββββββββββββββββββββββββββ
left1 = []
left1.append(section_hdr("π
DAILY & WEEKLY SCHEDULE", NAVY))
left1.append(sp(3))
sched_rows = [
["Time", "Task", "Record In"],
["08:00", "Lights ON β start observation window", "Lab diary"],
["08:00β08:30", "Check all cages: mortality, distress, posture", "Observation sheet"],
["08:30β09:00", "Weigh all rats (Mon + Thu)", "Body weight log"],
["09:00β09:30", "Prepare drug solutions (fresh daily)", "Prep log"],
["09:30β11:00", "Oral gavage (all groups)", "Dosing log"],
["11:00β11:30", "Weigh remaining food; add fresh pellets", "Food intake log"],
["11:30β13:00", "Behavioral tests (Week 4 & 8 only)", "Behavior datasheet"],
["13:00β14:00", "Biochemical assay runs (if applicable)", "Assay log"],
["17:00β17:30", "Evening observation: cages, water, bedding", "Observation sheet"],
["17:30", "Lights OFF (12h dark phase begins)", "β"],
["WEEKLY\n(Mon AM)", "Grip strength test (all groups)", "Grip strength log"],
["WEEKLY\n(Mon AM)", "Change 50% cage bedding (leave nest material)", "CAF log"],
["WEEKLY\n(Thu AM)", "SC semaglutide injection (all groups except G1)", "Dosing log"],
]
sched_widths = [18*mm, 47*mm, 23*mm]
sched_t = Table(sched_rows, colWidths=sched_widths)
sched_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 1.5),
("BOTTOMPADDING", (0,0), (-1,-1), 1.5),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,7), (-1,7), LTGREEN), # behavioral test row
("BACKGROUND", (0,11),(-1,12), LTYELLOW), # weekly rows
("BACKGROUND", (0,13),(-1,13), LTYELLOW),
("FONTNAME", (0,11),(-1,13), "Helvetica-Bold"),
]))
left1.append(sched_t)
left1.append(sp(4))
# Dose escalation mini table
left1.append(mini_hdr("π SEMAGLUTIDE DOSE ESCALATION (SC, Weekly β Thursday AM)", TEAL))
left1.append(sp(2))
dose_rows = [
["Week", "Dose", "Volume*", "β Done"],
["1 β 2", "0.025 mg/kg", "~0.05 mL/100g", "β"],
["3 β 4", "0.05 mg/kg", "~0.10 mL/100g", "β"],
["5 β 6", "0.075 mg/kg", "~0.15 mL/100g", "β"],
["7 β 8", "0.10 mg/kg", "~0.20 mL/100g", "β"],
]
dose_t = Table(dose_rows, colWidths=[14*mm, 22*mm, 28*mm, 15*mm])
dose_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7.5),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("BACKGROUND", (0,4), (-1,4), LTBLUE),
]))
left1.append(dose_t)
left1.append(sp(2))
left1.append(Paragraph("*Prepare stock = 0.5 mg/mL in sterile 0.9% NaCl. Calculate vol = dose(mg/kg) Γ BW(kg) / conc(mg/mL). Inject dorsal subcutaneous, rotate sites each week.", TINY))
# βββ PAGE 1 RIGHT: DRUG PREP + GROUPS βββββββββββββββββββββββββ
right1 = []
right1.append(section_hdr("βοΈ DRUG PREPARATION (DAILY β FRESH)", NAVY))
right1.append(sp(3))
prep_rows = [
["Group", "Drug", "Dose", "Vehicle", "Vol"],
["G1", "Saline only", "β", "0.9% NaCl", "2 mL/kg"],
["G2", "Semaglutide*","Escalated", "0.9% NaCl", "SC"],
["G3", "Sema + WSE", "300 mg/kg", "0.5% CMC", "5 mL/kg"],
["G4", "Sema + Whey", "2 g/kg", "Sterile HβO","5 mL/kg"],
["G5", "Sema+WSE+Whey","300+2g/kg", "0.5%CMC+HβO","5 mL/kg"],
["G6", "Sema+Leu+Imi","1.35g+15mg/kg","Sterile HβO","5 mL/kg"],
]
prep_t = Table(prep_rows, colWidths=[11*mm, 20*mm, 20*mm, 20*mm, 13*mm])
prep_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 1.5),
("BOTTOMPADDING", (0,0), (-1,-1), 1.5),
("LEFTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,5), (-1,5), LTGREEN),
]))
right1.append(prep_t)
right1.append(sp(2))
right1.append(Paragraph("WSE = Withania somnifera ext. (KSM-66, 5% withanolides) | Sema* = weekly SC only, not daily oral", TINY))
right1.append(sp(4))
# Gavage checklist
right1.append(mini_hdr("π¬ ORAL GAVAGE PROCEDURE CHECKLIST", TEAL))
right1.append(sp(2))
right1.append(checklist_table([
"Confirm rat identity (tail number) before dosing",
"Weigh rat β calculate exact drug volume for that animal's weight",
"Draw up correct volume in 1 mL syringe with 18G ball-tipped gavage needle",
"Restrain rat: scruff gently, extend neck to straighten esophagus",
"Insert needle along roof of mouth β back of throat β advance smoothly into esophagus",
"Do NOT force if resistance felt β withdraw and re-attempt",
"Confirm placement: no coughing, no respiratory distress",
"Deliver drug slowly over 3-5 seconds",
"Withdraw needle; release rat; observe for 60 seconds for distress",
"Record: rat ID, actual weight, volume given, time, technician initials",
], tick_col=LTGREEN))
right1.append(sp(3))
right1.append(warning_box("STOP if rat shows: labored breathing, cyanosis, gurgling β may indicate mis-delivery to lung. Euthanize humanely and notify guide."))
right1.append(sp(3))
# SC injection checklist
right1.append(mini_hdr("π SC SEMAGLUTIDE INJECTION (WEEKLY β THURSDAY)", TEAL))
right1.append(sp(2))
right1.append(checklist_table([
"Prepare semaglutide solution (see dose escalation table)",
"Use insulin syringe (0.5 mL, 29G Γ 12.7 mm)",
"Rotate injection sites weekly: L-dorsal β R-dorsal β L-flank β R-flank",
"Tent dorsal skin; insert needle bevel-up at 45Β° angle",
"Aspirate 1-2 sec (no blood = correct placement)",
"Inject slowly; small bleb confirms SC deposition",
"Apply gentle pressure; release rat; observe 5 min",
"Record: rat ID, dose, site, batch number, time",
], tick_col=colors.HexColor("#D1ECF1")))
story.append(two_col(left1, right1))
story.append(sp(5))
# βββ FULL-WIDTH: BEHAVIORAL TEST PROTOCOLS ββββββββββββββββββββ
story.append(section_hdr("π§ BEHAVIORAL TEST PROTOCOLS (Week 4 pre-test + Week 8 primary)", NAVY))
story.append(sp(3))
beh_rows = [
["Test", "Setup", "Protocol", "Endpoints", "Controls"],
["Forced Swim\nTest (FST)",
"Cylinder 20 cm β,\n30 cm water depth,\n25Β±1Β°C, opaque walls",
"Day 1 (Training): 15 min swim.\nDay 2 (Test, 24h later): 5 min swim.\nVideo record from side.",
"Immobility time (sec)\nin last 4 min of test.\nSwimming + climbing\ntime (sec).",
"+ve: Imipramine\n(G6 reduces\nimmobility)\n-ve: G2 increases\nimmobility"],
["Sucrose\nPreference\nTest (SPT)",
"Two bottles per cage:\n1% sucrose solution\nvs. plain water",
"Day 1: Replace water with 1% sucrose (habituation, 24h).\nDay 2: 16h water/food deprivation.\nDay 3: Both bottles 1h; weigh bottles before+after.",
"Sucrose preference%\n= sucrose consumed/\n(sucrose+water)Γ100.\nNormal: >65%.\nDepressed: <55%.",
"G1 should show\n>65% preference.\nG2 (disease) shows\n<55% preference."],
["Elevated\nPlus Maze\n(EPM)",
"Cross-maze: 2 open\narms (50Γ10 cm) +\n2 closed arms\n(50Γ10Γ40 cm).\nElevated 50 cm.\nDim light (30 lux).",
"Place rat in center, facing open arm.\nVideo track 5 min (ANY-maze or manual).\nClean maze with 70% ethanol between rats.\nTest 10:00β12:00 (consistent time).",
"% Time open arms\n= open/(open+closed)\nΓ100.\nOpen arm entries (%)\nHead dips (anxiety).\nNormal: >30% open.",
"Diazepam 2 mg/kg\nIP increases open\narm time (ref).\nG2 disease shows\n<20% open arm time."],
["Open Field\nTest (OFT)",
"60Γ60 cm arena\n(black walls, white\nfloor, gridded).\nCenter zone = 30Γ30 cm.\nOverhead camera.",
"Place rat in corner.\nVideo track 10 min (ANY-maze/Ethovision).\nClean with 70% ethanol between rats.\nTest in room 30 min post drug (consistent).",
"Total distance (cm).\n% Time in center.\nRearing count.\nGrooming bouts.\nDefecation count.",
"Anxiolytic: β center\ntime, β distance.\nDepressed: β distance,\nβ rearing,\nβ grooming."],
["Novel Object\nRecognition\n(NOR)",
"Same OFT arena.\nTwo identical objects\nfor familiarization.\nOne novel object for test.",
"Day 1 Familiarization: 2 identical objects (A+A), 10 min.\nDay 2 Test (1h delay): 1 familiar (A) + 1 novel (B), 5 min.\nObjects fixed to floor with Velcro.",
"Discrimination Index\n= (TNβTF)/(TN+TF)\nNormal DI: >0.3.\nDI near 0 = memory\nimpairment.",
"Semaglutide may\nimpair DI (GLP-1R\nCNS effects).\nAshwagandha may\nrestore DI."],
["Social\nInteraction\nTest",
"Open arena 60Γ60 cm.\nResident rat (study)\n+ novel rat\n(age-matched, naive).",
"Habituate resident 10 min in empty arena.\nIntroduce novel rat (enclosed in wire cup first).\nFree interaction for 5 min. Video record.",
"Social interaction\ntime (sec) with\nnovel rat.\nSniffing, following,\nallogrooming.",
"Depressed G2 rats\nshow β social time.\nG5 combination\nshould restore\nsocial behavior."],
]
beh_t = Table(beh_rows, colWidths=[18*mm, 32*mm, 48*mm, 34*mm, 30*mm])
beh_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,1), (-1,1), WHITE),
("BACKGROUND", (0,2), (-1,2), LTBLUE),
("BACKGROUND", (0,3), (-1,3), WHITE),
("BACKGROUND", (0,4), (-1,4), LTBLUE),
("BACKGROUND", (0,5), (-1,5), WHITE),
("BACKGROUND", (0,6), (-1,6), LTBLUE),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("TEXTCOLOR", (0,1), (0,-1), NAVY),
]))
story.append(beh_t)
story.append(sp(3))
story.append(note_box("IMPORTANT: Run ALL behavioral tests in the SAME ORDER for every rat. Start with least stressful (NOR) β OFT β EPM β Social β SPT β FST (most stressful last). Allow minimum 24h between FST training and test day. Maintain consistent lighting (30 lux) and room temperature (22Β±2Β°C) for all behavioral tests."))
story.append(PageBreak())
# βββ PAGE 2: MUSCLE FUNCTION TESTS ββββββββββββββββββββββββββββ
story.append(section_hdr("πͺ MUSCLE FUNCTION TESTS (Weekly + Week 4 & 8 Full Assessment)", NAVY))
story.append(sp(3))
muscle_rows = [
["Test", "Equipment", "Protocol", "Normal Values*", "Disease Prediction"],
["Grip Strength\n(Forelimb)",
"Columbus Instruments\nGrip Strength Meter\nor homemade mesh\nplatform + scale",
"1. Place rat on mesh grid; allow firm grip.\n2. Pull rat by base of tail horizontally.\n3. Record peak force when grip releases.\n4. 3 trials per rat; 5 min rest between.\n5. Report: Mean of 3 trials / body weight (g/g BW).",
"Adult rat: ~150-250 g\nper 100 g BW.\nJuvenile baseline\n(Week 0): establish\nindividual baseline.",
"G2 (sema) expected:\nβ 20-35% from\nbaseline by Week 8.\nG5 (combo):\npartial or full\nrecovery."],
["Rotarod\n(Neuromuscular\nCoordination)",
"Accelerating rotarod\n4 β 40 rpm over 5 min.\nRod diameter: 3 cm.",
"1. Train rats 3 days before Week 4 test (3 trials Γ 3 min at 4 rpm constant).\n2. Test: accelerating 4β40 rpm over 5 min.\n3. 3 trials per rat; 30 min rest between.\n4. Record latency to fall (sec) per trial.\n5. Report mean of 3 trials.",
"Healthy rat: 200-300\nsec at 40 rpm.\nAfter training:\n>120 sec expected.",
"G2: Reduced latency\n(β endurance).\nRotarod sensitive\nto both muscle\nand CNS changes."],
["Wire Hanging\n(Sarcopenia\nIndex)",
"Steel wire 2 mm β,\nstretched horizontally\nat 50 cm height over\npadded surface.",
"1. Suspend rat from wire by both forepaws.\n2. Start stopwatch when hindlimbs clear wire.\n3. Record time until fall or 60 sec maximum.\n4. 3 trials; 5 min rest between.\n5. Report mean hanging time (sec).",
"Normal juvenile rat:\n45-60 sec.\nMax = 60 sec\n(score as 60).",
"G2 sarcopenic rats:\n<20 sec expected.\nHighly sensitive\nand specific for\nmuscle weakness."],
["Inclined Plane\n(Hindlimb\nStrength)",
"Smooth wooden board\n(30Γ20 cm) with angle\nadjustment using hinge\n+ protractor.",
"1. Place rat on board at 30Β°; increase 5Β° every 30 sec.\n2. Record max angle at which rat slides.\n3. 3 trials per rat; report mean.\n4. Clean board between rats (70% ethanol).",
"Normal rat:\nholds at 45-60Β°.\nBaseline at\nWeek 0 per animal.",
"G2: Lower max angle\n(reduced hindlimb\nmuscle strength).\nGastrocnemius\nweight correlates."],
]
muscle_t = Table(muscle_rows, colWidths=[20*mm, 30*mm, 55*mm, 28*mm, 29*mm])
muscle_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1A5276")),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,1), (-1,1), WHITE),
("BACKGROUND", (0,2), (-1,2), LTBLUE),
("BACKGROUND", (0,3), (-1,3), WHITE),
("BACKGROUND", (0,4), (-1,4), LTBLUE),
("FONTNAME", (0,1), (0,-1), "Helvetica-Bold"),
("TEXTCOLOR", (0,1), (0,-1), NAVY),
]))
story.append(muscle_t)
story.append(sp(5))
# Two-col: Observation scoring + Sample collection reminder
left2 = []
left2.append(mini_hdr("π CLINICAL OBSERVATION SCORING (Daily)", TEAL))
left2.append(sp(2))
obs_rows = [
["Parameter", "Normal (Score 0)", "Mild (Score 1)", "Severe β Humane EP (Score 2)"],
["Body weight", ">90% baseline", "80-90% baseline", "<70% β euthanize"],
["Coat condition", "Clean, smooth", "Slightly ruffled", "Piloerection, matted"],
["Posture", "Upright, active","Slightly hunched", "Hunched, motionless"],
["Eyes", "Bright, open", "Squinting", "Closed, discharge"],
["Respiration", "Normal, quiet", "Slightly labored", "Labored β euthanize"],
["Feces", "Formed pellets", "Soft, decreased", "Diarrhea / absent"],
["Activity", "Explores cage", "Reduced movement", "Not responsive β vet"],
["Abdomen", "Normal contour", "Slight distension","Tense / ascites β vet"],
]
obs_t = Table(obs_rows, colWidths=[20*mm, 19*mm, 19*mm, 26*mm])
obs_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), GREEN),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 6.5),
("TOPPADDING", (0,0), (-1,-1), 1.5),
("BOTTOMPADDING", (0,0), (-1,-1), 1.5),
("LEFTPADDING", (0,0), (-1,-1), 2),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TEXTCOLOR", (3,1), (3,-1), RED),
("BACKGROUND", (3,1), (3,-1), LTRED),
]))
left2.append(obs_t)
left2.append(sp(3))
left2.append(warning_box("Any Score 2 β Contact Guide IMMEDIATELY.\nHumane endpoint = euthanize + notify IAEC within 24h."))
right2 = []
right2.append(mini_hdr("π©Έ TERMINAL SAMPLE COLLECTION CHECKLIST (Day 57)", TEAL))
right2.append(sp(2))
right2.append(checklist_table([
"16h overnight fast (note start time: ________)",
"Weigh rat; record final BW in kg (for dose calculations)",
"Ketamine 75 mg/kg + Xylazine 10 mg/kg IP; wait 5-7 min",
"Confirm depth: pinch toe, no withdrawal reflex",
"Cardiac puncture: 23G needle; collect 5-6 mL slowly",
"2.5 mL β plain tube (red cap) for serum",
"2.5 mL β EDTA tube (purple cap) for plasma",
"0.5 mL β EDTA tube for CBC (hematology)",
"Centrifuge plain tube: 3000 rpm Γ 10 min at 4Β°C",
"Aliquot serum (100 ΞΌL each) β label β store -80Β°C",
"Cervical dislocation; confirm cardiac arrest",
"Weigh: gastrocnemius, soleus, tibialis anterior, EDL",
"Dissect brain: hippocampus on ice within 5 min",
"Part A: 10% formalin β histopathology",
"Part B: Snap-freeze in liquid Nβ β -80Β°C (Western/PCR)",
"Part C: PBS 1:9 homogenate β biochemical assays",
"Record all organ weights in necropsy datasheet",
], tick_col=LTBLUE))
right2.append(sp(2))
right2.append(note_box("Label ALL tubes: Study ID / Group / Rat # / Date / Tissue / Assay"))
story.append(two_col(left2, right2))
story.append(PageBreak())
# βββ PAGE 3: BIOCHEMICAL + MOLECULAR + SAFETY βββββββββββββββββ
story.append(section_hdr("π¬ BIOCHEMICAL ASSAY QUICK REFERENCE", NAVY))
story.append(sp(3))
bio_rows = [
["Assay", "Sample", "Kit/Method", "Expected Disease β/β", "Expected Treatment"],
["ALT (SGPT)", "Serum", "IFCC colorimetric kit", "Normal (sema not hepatotoxic)", "No change"],
["Blood glucose (fasting)","Serum", "GOD-POD enzymatic kit", "β (GLP-1 lowers glucose)", "Partial recovery G3-G5"],
["Serum insulin", "Serum", "Rat insulin ELISA", "β (GLP-1 stimulates insulin)", "Normalize toward G1"],
["Serum IGF-1", "Serum", "Rat IGF-1 ELISA (R&D Systems)", "β (muscle wasting β low IGF-1)","β G3,G5 (ashwagandha)"],
["Corticosterone (CORT)","Serum", "Rat CORT ELISA", "β (stress/HPA activation)", "β G3,G5 (adaptogenic)"],
["Irisin (FNDC5)", "Serum", "Rat irisin ELISA (MyBioSource)", "β (muscleβ β irisinβ)", "β G3-G5 β KEY FINDING"],
["IL-6", "Serum", "Rat IL-6 ELISA", "β (inflammatory myokine)", "β G3,G5"],
["Serum BDNF", "Serum", "Rat BDNF ELISA (Abcam)", "β (low irisin β low BDNF)", "β G3,G5 (ashwagandha)"],
["Kynurenine ratio", "Serum", "HPLC or ratio ELISA kit", "β (neurotoxic pathway active)", "β G3,G5 β NOVEL"],
["Myostatin (MSTN)", "Muscle/Serum","Western blot + ELISA", "ββ (direct atrophy driver)", "β G3,G5 (withanolides)"],
["SOD (muscle)", "Muscle hom.","NBT photoreduction", "β (oxidative damage)", "β G3,G5 (NRF2)"],
["MDA (muscle)", "Muscle hom.","TBARS assay", "β (lipid peroxidation)", "β G3,G5"],
["GSH (muscle)", "Muscle hom.","DTNB / Ellman's method", "β (antioxidant depleted)", "β G3,G5"],
["BDNF (hippocampus)", "Brain hom.", "ELISA", "β (depression marker)", "β G3,G5 β KEY"],
["Serotonin (5-HT)", "Brain hom.", "HPLC or ELISA", "β (anorexia β low Trp)", "β G5 (whey Trp)"],
]
bio_t = Table(bio_rows, colWidths=[25*mm, 16*mm, 30*mm, 36*mm, 31*mm])
bio_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 6.8),
("TOPPADDING", (0,0), (-1,-1), 1.5),
("BOTTOMPADDING", (0,0), (-1,-1), 1.5),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,6), (-1,6), LTGREEN), # irisin - key
("BACKGROUND", (0,9), (-1,9), LTGREEN), # kynurenine - novel
("BACKGROUND", (0,10),(-1,10), LTBLUE), # myostatin
("BACKGROUND", (0,14),(-1,14), LTGREEN), # brain BDNF
]))
for i in range(1, len(bio_rows)):
if i % 2 == 0:
pass # already alternated with specific highlights above
story.append(bio_t)
story.append(sp(3))
# Two-col: Western blot + safety monitoring
left3 = []
left3.append(mini_hdr("π§« WESTERN BLOT TARGET PANEL", TEAL))
left3.append(sp(2))
wb_rows = [
["Protein", "Tissue", "kDa", "Pathway", "Expected β/β"],
["Myostatin", "Muscle", "~26", "Atrophy driver", "β G2"],
["MAFbx/Atrogin-1","Muscle","~42","UPS atrophy", "β G2"],
["MuRF1", "Muscle", "~40", "UPS atrophy", "β G2"],
["p-AKT(Ser473)","Muscle","~60","Anabolic PI3K", "β G2"],
["total AKT","Muscle", "~60", "Loading ref", "Stable"],
["p-mTOR", "Muscle", "~289","Protein synthesis", "β G2"],
["p70S6K", "Muscle", "~70", "mTORC1 downstream", "β G2"],
["FoxO3a(p)","Muscle", "~97", "Atrophy transcription","βnuc G2"],
["Pax7", "Muscle", "~48", "Satellite cell", "β G2"],
["NRF2", "Both", "~68", "Antioxidant", "β G2"],
["NLRP3", "Brain", "~118","Inflammasome", "β G2"],
["Caspase-1","Brain", "~45", "Pyroptosis", "β G2"],
["GLP-1R", "Brain", "~53", "Direct CNS target", "See Note"],
["Ξ²-actin", "Both", "~42", "Loading control", "Stable"],
]
wb_t = Table(wb_rows, colWidths=[22*mm, 11*mm, 8*mm, 22*mm, 19*mm])
wb_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#1A5276")),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 6.5),
("TOPPADDING", (0,0), (-1,-1), 1),
("BOTTOMPADDING", (0,0), (-1,-1), 1),
("LEFTPADDING", (0,0), (-1,-1), 2),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("TEXTCOLOR", (4,1), (4,-1), RED),
]))
left3.append(wb_t)
left3.append(sp(2))
left3.append(Paragraph("Run all blots: 40 ΞΌg protein/lane, 10-12% SDS-PAGE gel, PVDF membrane, ECL detection, ImageJ band densitometry. Normalize all to Ξ²-actin.", TINY))
right3 = []
right3.append(mini_hdr("π΄ SAFETY MONITORING & HUMANE ENDPOINTS", RED))
right3.append(sp(2))
safety_rows = [
["Sign", "Threshold", "Action"],
["Body weight loss", ">20% from previous week", "Reduce sema dose; notify guide"],
["Body weight loss", ">30% cumulative", "EUTHANIZE + IAEC notification"],
["Fasting glucose", "<50 mg/dL", "5% dextrose SC 1 mL; notify guide"],
["Inability to walk","Unable to right itself", "Euthanize; document cause"],
["Complete anorexia",">48 h no food", "Consult guide; consider endpoint"],
["Labored breathing","Any episode", "Euthanize; possible aspiration"],
["Injection abscess","Visible at injection site", "Stop SC; topical antiseptic; vet"],
["Mortality", "Any death", "Necropsy same day; replace if <wk2"],
]
safety_t = Table(safety_rows, colWidths=[22*mm, 28*mm, 30*mm])
safety_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), RED),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,3), (-1,3), LTRED),
("BACKGROUND", (0,4), (-1,4), LTRED),
("BACKGROUND", (0,6), (-1,6), LTRED),
("TEXTCOLOR", (2,3), (2,4), RED),
("TEXTCOLOR", (2,6), (2,6), RED),
]))
right3.append(safety_t)
right3.append(sp(3))
right3.append(mini_hdr("π EMERGENCY CONTACTS", RED))
right3.append(sp(2))
ec_rows = [
["Role", "Name", "Contact"],
["Guide / PI", "[Guide Name]", "[Mobile number]"],
["Co-Guide", "[Co-Guide Name]", "[Mobile number]"],
["CAF Veterinarian", "[Vet Name]", "[Mobile number]"],
["CAF Manager", "[Staff Name]", "[Mobile number]"],
["IAEC Chairperson", "[Chair Name]", "[JIPMER ext.]"],
["CPCSEA Helpline", "Govt. of India", "1800-XXX-XXXX"],
]
ec_t = Table(ec_rows, colWidths=[24*mm, 26*mm, 28*mm])
ec_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), RED),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
right3.append(ec_t)
right3.append(sp(3))
right3.append(mini_hdr("π§ͺ RT-qPCR GENE PANEL (Quick Ref)", TEAL))
right3.append(sp(2))
pcr_rows = [
["Gene", "Tissue", "Direction in Disease"],
["Mstn", "Muscle", "ββ (atrophy driver)"],
["Fbxo32", "Muscle", "β (MAFbx)"],
["Trim63", "Muscle", "β (MuRF1)"],
["Igf1", "Muscle", "β"],
["Fndc5", "Muscle", "β (irisin precursor)"],
["Bdnf", "Brain", "β (depression)"],
["Nlrp3", "Brain", "β (neuroinflam.)"],
["Nfe2l2", "Both", "β (NRF2)"],
["Actb", "Both", "Stable β ref gene"],
["Gapdh", "Both", "Stable β ref gene"],
]
pcr_t = Table(pcr_rows, colWidths=[18*mm, 14*mm, 38*mm - 3*mm])
pcr_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), TEAL),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 1.5),
("BOTTOMPADDING", (0,0), (-1,-1), 1.5),
("LEFTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
]))
right3.append(pcr_t)
story.append(two_col(left3, right3))
story.append(sp(5))
# βββ WEEK-BY-WEEK MASTER TIMELINE βββββββββββββββββββββββββββββ
story.append(section_hdr("π WEEK-BY-WEEK MASTER TIMELINE", NAVY))
story.append(sp(3))
timeline_rows = [
["Week", "Key Drug Events", "Assessments", "Samples", "Notes"],
["0\n(Baseline)",
"Acclimatization.\nNo drugs.\nBaseline body weights.",
"Body weight Γ 2\nBaseline grip strength\nBaseline rotarod training",
"β",
"Randomize to groups.\nTail tattoo all rats.\nConfirm all kits in stock."],
["1",
"START oral gavage all groups.\nSemaglutide: 0.025 mg/kg SC (Thu).",
"Daily observation.\nBody wt Mon+Thu.\nFood intake daily.",
"β",
"Watch for gavage complications.\nNote any GI signs in sema groups."],
["2",
"Semaglutide: 0.025 mg/kg SC (Thu).\nAll oral drugs continue.",
"Daily obs.\nBody weight.\nGrip strength (Mon).",
"Tail blood 0.2 mL (glucose check)",
"Any >10% BW drop β alert guide."],
["3",
"Semaglutide escalate: 0.05 mg/kg SC (Thu).",
"Daily obs.\nBody weight.\nGrip strength.",
"β",
"Check injection sites."],
["4",
"Semaglutide: 0.05 mg/kg SC (Thu).",
"FULL BEHAVIORAL TEST BATTERY\n(NORβOFTβEPMβSocialβSPTβFST)\nFull muscle test battery\nRotarod test",
"Tail blood 0.2 mL (glucose, CBC)",
"Week 4 = interim assessment.\nCheck model establishment."],
["5",
"Semaglutide escalate: 0.075 mg/kg SC (Thu).",
"Daily obs.\nBody weight.\nGrip strength.",
"β",
"Compare Week 4 grip vs. Week 0."],
["6",
"Semaglutide: 0.075 mg/kg SC (Thu).",
"Daily obs.\nBody weight.\nGrip strength.",
"Tail blood 0.2 mL (glucose)",
"Mid-study welfare check."],
["7",
"Semaglutide escalate: 0.10 mg/kg SC (Thu).\nFinal dose level.",
"Daily obs.\nBody weight.\nGrip strength.\nRotarod.",
"β",
"Prepare all terminal kits.\nOrder fresh ELISA kits."],
["8\n(TERMINAL)",
"Last oral gavage: Day 55.\nLast semaglutide: Day 53 (Thu).\nFast from Day 56 evening.",
"FULL BEHAVIORAL TEST BATTERY\n(Days 50-55)\nFull muscle function tests.\nFinal body weight.",
"TERMINAL: Cardiac puncture.\nSerum, plasma, CBC.\nAll organ harvests.\nTissue bank at -80Β°C.",
"Behavioral tests BEFORE terminal.\nComplete all necropsy in one day.\nAll 48 rats Day 57 Β± 1 day."],
]
tl_t = Table(timeline_rows, colWidths=[14*mm, 40*mm, 44*mm, 32*mm, 32*mm])
tl_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), NAVY),
("TEXTCOLOR", (0,0), (-1,0), WHITE),
("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"),
("FONTNAME", (0,1), (-1,-1), "Helvetica"),
("FONTSIZE", (0,0), (-1,-1), 7),
("TOPPADDING", (0,0), (-1,-1), 2),
("BOTTOMPADDING", (0,0), (-1,-1), 2),
("LEFTPADDING", (0,0), (-1,-1), 3),
("RIGHTPADDING", (0,0), (-1,-1), 3),
("GRID", (0,0), (-1,-1), 0.3, MIDGRAY),
("VALIGN", (0,0), (-1,-1), "TOP"),
("BACKGROUND", (0,1), (-1,1), LTGRAY),
("BACKGROUND", (0,5), (-1,5), LTGREEN), # Week 4 behavioral
("BACKGROUND", (0,9), (-1,9), LTRED), # Week 8 terminal
("FONTNAME", (0,5), (0,5), "Helvetica-Bold"),
("FONTNAME", (0,9), (0,9), "Helvetica-Bold"),
("TEXTCOLOR", (0,9), (0,9), RED),
]))
story.append(tl_t)
story.append(sp(5))
# βββ FOOTER βββββββββββββββββββββββββββββββββββββββββββββββββββ
footer_data = [[
Paragraph("JIPMER Pharmacology | M.Pharm Research Protocol | Semaglutide-Sarcopenia-Depression Study | August 2026", CTR),
Paragraph("IAEC Protocol: JIPMER/IAEC/2026/[No.] | Version 1.0 | For internal lab use only", CTR),
Paragraph("Print on A4 | Laminate for bench use", CTR),
]]
footer_t = Table(footer_data, colWidths=[(W-24*mm)/3]*3)
footer_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), LTGRAY),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING", (0,0), (-1,-1), 3),
("LEFTPADDING", (0,0), (-1,-1), 4),
("BOX", (0,0), (-1,-1), 0.5, MIDGRAY),
]))
story.append(footer_t)
# βββ BUILD ββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story)
print(f"PDF saved: {OUT}")