Histopathology of luteal cyst and cystic follicles
| Feature | Description |
|---|---|
| Inner lining | Stratified granulosa cells (membrana granulosa) - small, round cells with scant cytoplasm and dark nuclei |
| Outer layer | Theca interna cells - plump, lipid-laden, steroidogenic cells |
| Theca externa | Fibromuscular layer, outermost |
| Follicular fluid | Eosinophilic fluid in the antrum |
| Basement membrane | Intact between granulosa and theca layers |


| Cell Type | Size | Location | Nucleus | Cytoplasm | Function |
|---|---|---|---|---|---|
| Granulosa lutein cells (GLC) | Large (~30 µm) | Central, bulk of wall | Large, spherical, pale | Abundant, foamy/vacuolated (lipid) | ~80% of corpus luteum; secrete estrogen, progesterone, inhibin |
| Theca lutein cells (TLC) | Smaller (~15 µm) | Peripheral, in folds | Spherical, darker | Less cytoplasm, more deeply staining | ~20%; secrete androgens and progesterone |
| Feature | Cystic Follicle | Luteal Cyst |
|---|---|---|
| Wall lining | Granulosa cells + theca interna | Luteinized granulosa + luteinized theca cells |
| Cell size | Small granulosa cells | Large, lipid-laden luteal cells |
| Cytoplasm | Scant, dark | Abundant, foamy/vacuolated |
| Fluid content | Clear, serous | Serosanguineous / hemorrhagic |
| Wall folding | Smooth/flat | Scalloped, deeply folded |
| Rupture risk | Less common | More common (can cause hemoperitoneum) |
| Glassy membrane | Present in atresia | Not a feature |
| Gross color | Grey-white/translucent | Bright yellow |
Save this
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
~/create_histopath_doc.py
from docx import Document
from docx.shared import Pt, RGBColor, Inches
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
import urllib.request
import os
doc = Document()
# --- Default style ---
style = doc.styles["Normal"]
style.font.name = "Arial"
style.font.size = Pt(11)
# Set narrow margins
from docx.shared import Cm
for section in doc.sections:
section.top_margin = Cm(2)
section.bottom_margin = Cm(2)
section.left_margin = Cm(2.5)
section.right_margin = Cm(2.5)
# --- Title ---
title = doc.add_heading("Histopathology of Luteal Cysts and Cystic Follicles", level=1)
title.alignment = WD_ALIGN_PARAGRAPH.CENTER
title.runs[0].font.color.rgb = RGBColor(0x1A, 0x1A, 0x6C)
# Sources line
src_p = doc.add_paragraph()
src_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
src_run = src_p.add_run("Sources: Histology: A Text and Atlas (Pawlina/Ross), pp. 2214–2220, 2329–2331 | Berek & Novak's Gynecology, pp. 451–452")
src_run.font.size = Pt(9)
src_run.font.italic = True
src_run.font.color.rgb = RGBColor(0x55, 0x55, 0x55)
doc.add_paragraph()
# ---- SECTION 1: Cystic Follicles ----
h2 = doc.add_heading("1. Cystic Follicles (Follicular Cysts)", level=2)
h2.runs[0].font.color.rgb = RGBColor(0x1A, 0x5C, 0x1A)
doc.add_heading("Definition", level=3)
doc.add_paragraph(
"A follicle is classified as a follicular cyst when its diameter exceeds 3 cm. "
"They are the most common functional ovarian cysts, rarely exceeding 8 cm. "
"They result from failure of the dominant follicle to ovulate, with persistence and continued expansion of the follicular cavity."
)
doc.add_heading("Gross Appearance", level=3)
gross1 = [
"Thin-walled, unilocular cysts",
"Filled with clear, watery (serous) fluid",
"Lined by a smooth inner surface",
]
for item in gross1:
p = doc.add_paragraph(style="List Bullet")
p.add_run(item)
doc.add_heading("Microscopic / Histopathological Features", level=3)
# Table
table1 = doc.add_table(rows=1, cols=2)
table1.style = "Table Grid"
hdr_cells = table1.rows[0].cells
hdr_cells[0].text = "Feature"
hdr_cells[1].text = "Description"
for cell in hdr_cells:
cell.paragraphs[0].runs[0].font.bold = True
cell.paragraphs[0].runs[0].font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
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"), "1A5C1A")
tcPr.append(shd)
rows_data1 = [
("Inner lining", "Stratified granulosa cells (membrana granulosa) — small, round cells with scant cytoplasm and dark nuclei"),
("Outer layer", "Theca interna cells — plump, lipid-laden, steroidogenic cells"),
("Theca externa", "Fibromuscular layer, outermost"),
("Follicular fluid", "Eosinophilic fluid in the antrum"),
("Basement membrane", "Intact between granulosa and theca layers"),
]
for feat, desc in rows_data1:
row = table1.add_row().cells
row[0].text = feat
row[0].paragraphs[0].runs[0].font.bold = True
row[1].text = desc
doc.add_paragraph()
doc.add_heading("Atretic Follicles (Advanced / Involuting Cystic Follicles)", level=3)
atretic = [
"Granulosa (follicle) cells degenerate first — becoming pyknotic and sloughing into the antrum",
'The basement membrane thickens into a hyalinized "glassy membrane" (eosinophilic, PAS-positive) — a hallmark of atresia',
"Theca interna cells persist longer with intact epithelioid character and remain temporarily steroidogenically active",
"Zona pellucida may persist as a collapsed, wrinkled eosinophilic ring inside the cavity, even after granulosa cells disappear",
"Eventually, the entire follicle is replaced by fibrous tissue (corpus fibrosum/small scar)",
]
for item in atretic:
p = doc.add_paragraph(style="List Bullet")
p.add_run(item)
key = doc.add_paragraph()
key.add_run("Key histological landmarks in atresia: ").font.bold = True
key.add_run("retained zona pellucida + glassy membrane + degenerating granulosa + intact theca interna")
# ---- SECTION 2: Luteal Cyst ----
doc.add_page_break()
h2b = doc.add_heading("2. Luteal Cyst (Corpus Luteum Cyst)", level=2)
h2b.runs[0].font.color.rgb = RGBColor(0x7A, 0x40, 0x00)
doc.add_heading("Formation — Normal Corpus Luteum", level=3)
doc.add_paragraph(
"At ovulation, the follicular wall collapses and is thrown into deep folds (scalloped/crenated wall — characteristic low-power appearance). "
"A luteal cyst forms when the corpus luteum fails to involute normally, or when the central cavity expands and persists (> 3 cm)."
)
formation_steps = [
"Corpus hemorrhagicum — initial bleeding from theca interna capillaries fills the former follicular lumen with a central clot",
"Luteinization — granulosa and theca interna cells undergo dramatic enlargement and fill with lipid droplets; lipochrome pigment gives them their yellow color on gross exam",
"Connective tissue invasion from stroma into the former cavity",
"Rich vascular network established within the luteal wall",
]
for i, item in enumerate(formation_steps, 1):
p = doc.add_paragraph(style="List Number")
p.add_run(item)
doc.add_heading("Gross Appearance", level=3)
gross2 = [
"Yellow, stellate-shaped structure with a crenated (scalloped) wall",
"Central cavity may contain serosanguineous or hemorrhagic fluid",
"Cysts: > 3 cm diameter; can reach up to 10 cm",
"Bright yellow color imparted by lipochrome pigment in luteal cells",
]
for item in gross2:
p = doc.add_paragraph(style="List Bullet")
p.add_run(item)
# Download and insert gross image
img_url = "https://cdn.orris.care/cdss_images/a9ec5d95d9586def1f981033637b1f6240a8f74718a3e4d040e27eee4fd8382e.png"
img_path = "/tmp/workspace/corpus_luteum_gross.png"
try:
urllib.request.urlretrieve(img_url, img_path)
doc.add_picture(img_path, width=Inches(3.5))
cap = doc.add_paragraph("Figure 1. Gross section of human corpus luteum showing bright yellow luteinized wall, corpus albicans, cortex, medulla, and mesovarium.")
cap.alignment = WD_ALIGN_PARAGRAPH.CENTER
cap.runs[0].font.size = Pt(9)
cap.runs[0].font.italic = True
except Exception as e:
doc.add_paragraph(f"[Image could not be embedded: {e}]")
doc.add_heading("Microscopic / Histopathological Features", level=3)
# Download and insert histology image
img_url2 = "https://cdn.orris.care/cdss_images/f77627d2371a315ce4c487ac76b2b61266e7b9baa697d84456fbd107c50310aa.png"
img_path2 = "/tmp/workspace/corpus_luteum_histo.png"
try:
urllib.request.urlretrieve(img_url2, img_path2)
doc.add_picture(img_path2, width=Inches(5.0))
cap2 = doc.add_paragraph(
"Figure 2. H&E photomicrograph of corpus luteum. (a) Low power: scalloped cyst wall around central cavity (Cav) with theca interna cells (arrows). "
"(b) High power: granulosa lutein cells (GLC) — large, pale; theca lutein cells (TLC) — smaller, more darkly staining. (Pawlina/Ross Histology)"
)
cap2.alignment = WD_ALIGN_PARAGRAPH.CENTER
cap2.runs[0].font.size = Pt(9)
cap2.runs[0].font.italic = True
except Exception as e:
doc.add_paragraph(f"[Image could not be embedded: {e}]")
doc.add_paragraph()
# Two-cell table
doc.add_heading("Two Populations of Luteal Cells", level=3)
table2 = doc.add_table(rows=1, cols=6)
table2.style = "Table Grid"
headers2 = ["Cell Type", "Size", "Location", "Nucleus", "Cytoplasm", "Function"]
hdr_row2 = table2.rows[0].cells
for i, h in enumerate(headers2):
hdr_row2[i].text = h
hdr_row2[i].paragraphs[0].runs[0].font.bold = True
hdr_row2[i].paragraphs[0].runs[0].font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
tc = hdr_row2[i]._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"), "7A4000")
tcPr.append(shd)
cells_data2 = [
("Granulosa lutein cells (GLC)", "Large (~30 µm)", "Central, bulk of wall", "Large, spherical, pale", "Abundant, foamy/vacuolated (lipid)", "~80% of CL; secrete estrogen, progesterone, inhibin"),
("Theca lutein cells (TLC)", "Smaller (~15 µm)", "Peripheral, in folds", "Spherical, darker staining", "Less cytoplasm, more deeply eosinophilic", "~20%; secrete androgens and progesterone"),
]
for row_data in cells_data2:
row = table2.add_row().cells
for i, val in enumerate(row_data):
row[i].text = val
if i == 0:
row[i].paragraphs[0].runs[0].font.bold = True
doc.add_paragraph()
doc.add_heading("Ultrastructural Features (Steroid-Secreting Cell Pattern)", level=3)
ultra = [
"Abundant smooth endoplasmic reticulum (sER)",
"Mitochondria with tubular cristae (vs. lamellar cristae in non-steroidogenic cells)",
"Lipid droplets throughout cytoplasm",
"Golgi apparatus with membrane-bound dense bodies",
"Rich capillary network (one of the most vascularized structures in the body)",
]
for item in ultra:
p = doc.add_paragraph(style="List Bullet")
p.add_run(item)
doc.add_heading("Involution — Corpus Luteum of Menstruation", level=3)
doc.add_paragraph(
"If no fertilization occurs (~10 days post-ovulation), the corpus luteum involutes:"
)
invol = [
"Cells become loaded with lipid, decrease in size, undergo autolysis",
"Intercellular hyaline material accumulates among degenerating cells",
"Forms the corpus albicans — a white, hyalinized scar that sinks into the cortex over months",
]
for item in invol:
p = doc.add_paragraph(style="List Bullet")
p.add_run(item)
# ---- SECTION 3: Comparison Table ----
doc.add_page_break()
h2c = doc.add_heading("3. Key Differences: Cystic Follicle vs. Luteal Cyst", level=2)
h2c.runs[0].font.color.rgb = RGBColor(0x1A, 0x1A, 0x6C)
table3 = doc.add_table(rows=1, cols=3)
table3.style = "Table Grid"
headers3 = ["Feature", "Cystic Follicle", "Luteal Cyst"]
hdr_row3 = table3.rows[0].cells
for i, h in enumerate(headers3):
hdr_row3[i].text = h
hdr_row3[i].paragraphs[0].runs[0].font.bold = True
hdr_row3[i].paragraphs[0].runs[0].font.color.rgb = RGBColor(0xFF, 0xFF, 0xFF)
tc = hdr_row3[i]._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"), "1A1A6C")
tcPr.append(shd)
comparison = [
("Wall lining", "Granulosa cells + theca interna", "Luteinized granulosa + luteinized theca cells"),
("Cell size", "Small granulosa cells", "Large, lipid-laden luteal cells"),
("Cytoplasm", "Scant, dark", "Abundant, foamy/vacuolated"),
("Fluid content", "Clear, serous", "Serosanguineous / hemorrhagic"),
("Wall folding", "Smooth / flat", "Scalloped, deeply folded"),
("Rupture risk", "Less common", "More common (can cause hemoperitoneum)"),
("Glassy membrane", "Present in atresia", "Not a feature"),
("Gross color", "Grey-white / translucent", "Bright yellow (lipochrome)"),
]
for feat, col1, col2 in comparison:
row = table3.add_row().cells
row[0].text = feat
row[0].paragraphs[0].runs[0].font.bold = True
row[1].text = col1
row[2].text = col2
doc.add_paragraph()
# Footer note
footer_p = doc.add_paragraph()
footer_p.add_run("Sources: ").font.bold = True
footer_run = footer_p.add_run(
"Histology: A Text and Atlas with Correlated Cell and Molecular Biology (Pawlina/Ross), 9th ed., pp. 2214–2220, 2329–2331. "
"Berek & Novak's Gynecology, 16th ed., pp. 451–452."
)
footer_run.font.size = Pt(9)
footer_run.font.italic = True
out_path = "/tmp/workspace/Histopathology_Luteal_Cyst_Cystic_Follicle.docx"
doc.save(out_path)
print(f"Saved: {out_path}")
python3 /tmp/workspace/create_histopath_doc.py
Histopathology Luteal Cyst Cystic Follicle
Word Document · DOCX