Ultrasound padhkar samjhne ka sabse asan tarika hindi me
ultrasound basics hindi easy learning guide
| Probe Type | Frequency | Kab Use Hota Hai |
|---|---|---|
| Linear Probe | High (7-15 MHz) | Superficial structures - nerves, veins, thyroid |
| Curvilinear/Convex Probe | Low (2-5 MHz) | Abdomen - liver, kidney, uterus |
| Phased Array Probe | Low (1-5 MHz) | Heart (echo), lungs |
| Term | Screen par kya dikhta hai | Example |
|---|---|---|
| Hyperechoic (echogenic) | Bright white | Bone, gallstone, fat |
| Isoechoic | Grey (surrounding tissue jaisa) | Normal liver |
| Hypoechoic | Dark grey | Muscle, solid mass |
| Anechoic | Pure black | Fluid, blood vessel, cyst |
Clinical use: Gallstone identify karne ka classic sign!
Clinical use: Cyst vs solid mass differentiate karna.
| Mode | Naam ka Matlab | Use |
|---|---|---|
| B-Mode | Brightness Mode | Sabse common - 2D image |
| M-Mode | Motion Mode | Heart movement, fetal heartbeat |
| Doppler Mode | Blood flow | Blood vessels mein flow direction |
| Color Doppler | Colored flow map | Arteries (red) vs veins (blue) |
| Organ | Ultrasound mein appearance |
|---|---|
| Liver | Homogeneous medium grey texture |
| Gallbladder | Anechoic (black) pouch with bright walls |
| Kidney | Outer cortex grey, inner echogenic renal sinus |
| Bladder | Anechoic (black) round structure |
| Blood vessels | Anechoic (black) tubes - arteries pulsate |
| Bone | Bright white with shadow behind |
Source: Murray & Nadel's Textbook of Respiratory Medicine (POCUS Terminology Table); Yamada's Textbook of Gastroenterology (Ultrasound Principles); Color Atlas of Ultrasound Anatomy, 3e
Create a PDF quick reference guide ultrasound terms ki
ls /home/daytona/workspace/ 2>/dev/null || echo "workspace empty or not found"
mkdir -p /home/daytona/workspace/ultrasound-guide && echo "done"
~/ultrasound-guide/create_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
import os
OUTPUT = "/home/daytona/workspace/ultrasound-guide/Ultrasound_Quick_Reference.pdf"
# ββ Colours βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
DARK_BLUE = colors.HexColor("#1A3A5C")
MED_BLUE = colors.HexColor("#2E6DA4")
LIGHT_BLUE = colors.HexColor("#D6E8F7")
TEAL = colors.HexColor("#0D7377")
LIGHT_TEAL = colors.HexColor("#D0F0F0")
ORANGE = colors.HexColor("#E07B39")
LIGHT_ORANGE= colors.HexColor("#FDE8D8")
GREEN = colors.HexColor("#2E7D32")
LIGHT_GREEN = colors.HexColor("#E8F5E9")
PURPLE = colors.HexColor("#5C3D8F")
LIGHT_PURPLE= colors.HexColor("#EDE7F6")
YELLOW_BG = colors.HexColor("#FFFDE7")
WHITE = colors.white
LIGHT_GREY = colors.HexColor("#F5F5F5")
MID_GREY = colors.HexColor("#9E9E9E")
DARK_GREY = colors.HexColor("#424242")
doc = SimpleDocTemplate(
OUTPUT,
pagesize=A4,
leftMargin=1.5*cm, rightMargin=1.5*cm,
topMargin=1.8*cm, bottomMargin=1.8*cm,
)
W = A4[0] - 3*cm # usable width
styles = getSampleStyleSheet()
# ββ Custom styles βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def S(name, **kw):
return ParagraphStyle(name, **kw)
sTitle = S("sTitle",
fontSize=22, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_CENTER, spaceAfter=4, leading=26)
sSubtitle = S("sSubtitle",
fontSize=11, textColor=colors.HexColor("#BFD8F0"),
alignment=TA_CENTER, fontName="Helvetica", spaceAfter=2)
sSectionHeader = S("sSectionHeader",
fontSize=11.5, textColor=WHITE, fontName="Helvetica-Bold",
alignment=TA_LEFT, leading=15, spaceAfter=0)
sBody = S("sBody",
fontSize=8.5, textColor=DARK_GREY, fontName="Helvetica",
leading=12, spaceAfter=2)
sBodyBold = S("sBodyBold",
fontSize=8.5, textColor=DARK_GREY, fontName="Helvetica-Bold",
leading=12, spaceAfter=2)
sTerm = S("sTerm",
fontSize=9, textColor=DARK_BLUE, fontName="Helvetica-Bold",
leading=12)
sDef = S("sDef",
fontSize=8.5, textColor=DARK_GREY, fontName="Helvetica",
leading=11)
sHindi = S("sHindi",
fontSize=8.5, textColor=TEAL, fontName="Helvetica-Oblique",
leading=11)
sSmall = S("sSmall",
fontSize=7.5, textColor=MID_GREY, fontName="Helvetica",
leading=10)
sFooter = S("sFooter",
fontSize=7, textColor=MID_GREY, fontName="Helvetica",
alignment=TA_CENTER, leading=10)
sTip = S("sTip",
fontSize=8.5, textColor=colors.HexColor("#4A148C"),
fontName="Helvetica-Bold", leading=11)
# ββ Helper builders βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def section_header(text, bg=MED_BLUE):
data = [[Paragraph(text, sSectionHeader)]]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("ROUNDEDCORNERS", [4]),
]))
return t
def two_col_table(rows, col1_w=None, col2_w=None, col3_w=None,
header_bg=LIGHT_BLUE, alt_bg=LIGHT_GREY,
header_color=DARK_BLUE):
"""rows[0] is header row (list of strings or Paragraphs)."""
if col3_w:
cw = [col1_w or W*0.28, col2_w or W*0.42, col3_w or W*0.30]
elif col2_w:
cw = [col1_w or W*0.30, col2_w or W*0.70]
else:
cw = [W*0.30, W*0.70]
table_data = []
for i, row in enumerate(rows):
if i == 0:
table_data.append([
Paragraph(f"<b>{c}</b>", S("h", fontSize=8.5,
textColor=header_color, fontName="Helvetica-Bold",
leading=11))
for c in row
])
else:
table_data.append([
Paragraph(str(c), sBody) if j > 0
else Paragraph(str(c), sBodyBold)
for j, c in enumerate(row)
])
style = [
("BACKGROUND", (0,0), (-1,0), header_bg),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, alt_bg]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 4),
("BOTTOMPADDING", (0,0), (-1,-1), 4),
("LEFTPADDING", (0,0), (-1,-1), 6),
("RIGHTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]
t = Table(table_data, colWidths=cw, repeatRows=1)
t.setStyle(TableStyle(style))
return t
def tip_box(text, bg=YELLOW_BG, border=ORANGE):
data = [[Paragraph(f"<b>TIP:</b> {text}", sTip)]]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LINEAFTER", (0,0), (0,-1), 2, border),
("LINEBEFORE", (0,0), (0,-1), 4, border),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING", (0,0), (-1,-1), 8),
]))
return t
def memory_box(items, bg=LIGHT_GREEN, title="Memory Trick"):
content = [Paragraph(f"<b>π§ {title}</b>", S("mt",
fontSize=8.5, textColor=GREEN, fontName="Helvetica-Bold",
leading=12))]
for item in items:
content.append(Paragraph(f"β’ {item}", S("mi",
fontSize=8.5, textColor=DARK_GREY, fontName="Helvetica",
leading=12)))
data = [[content]]
t = Table(data, colWidths=[W])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg),
("LINEBEFORE", (0,0), (0,-1), 4, GREEN),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0),(-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("RIGHTPADDING",(0,0), (-1,-1), 8),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
return t
def sp(h=0.18):
return Spacer(1, h*cm)
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# BUILD STORY
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story = []
# ββ HEADER BANNER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
banner_data = [[
Paragraph("ULTRASOUND", sTitle),
Paragraph("Quick Reference Guide", sSubtitle),
Paragraph("Ultrasound Terms - Hindi + English", sSubtitle),
]]
banner = Table([[
Paragraph("<b>ULTRASOUND</b><br/>Quick Reference Guide", sTitle),
]], colWidths=[W])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 14),
("BOTTOMPADDING", (0,0), (-1,-1), 14),
("LEFTPADDING", (0,0), (-1,-1), 16),
("ROUNDEDCORNERS",[6]),
]))
story.append(banner)
sub_banner = Table([[
Paragraph("Hindi + English | Sabhi Important Terms | Beginners ke liye", sSubtitle),
]], colWidths=[W])
sub_banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), MED_BLUE),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 16),
("ROUNDEDCORNERS",[4]),
]))
story.append(sub_banner)
story.append(sp(0.4))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 1 β ECHOGENICITY
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("1. ECHOGENICITY β Screen Par Image Kaise Dikhti Hai", bg=DARK_BLUE))
story.append(sp(0.2))
echo_rows = [
["Term", "Screen Par", "Matlab (Hindi)", "Example"],
["Hyperechoic\n(Echogenic)", "Bright White β¬", "Bahut zyada reflection\n(hard/dense tissue)", "Bone, Gallstone, Fat, Tendon"],
["Isoechoic", "Medium Grey", "Barabar reflection\n(reference tissue jaisa)", "Normal liver vs spleen"],
["Hypoechoic", "Dark Grey", "Kam reflection\n(soft/cellular tissue)", "Muscle, solid mass, lymph node"],
["Anechoic", "Pure Black β¬", "Koi reflection nahi\n(fluid/liquid)", "Cyst, bladder, blood vessel"],
]
echo_table = two_col_table(echo_rows,
col1_w=W*0.20, col2_w=W*0.18, col3_w=W*0.30,
header_bg=LIGHT_BLUE)
# 4-col fix
cw4 = [W*0.20, W*0.18, W*0.30, W*0.32]
rows_para = []
for i, row in enumerate(echo_rows):
if i == 0:
rows_para.append([
Paragraph(f"<b>{c}</b>", S("hh", fontSize=8.5,
textColor=DARK_BLUE, fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
rows_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sBody),
Paragraph(row[2], sBody),
Paragraph(row[3], sSmall),
])
echo_t = Table(rows_para, colWidths=cw4, repeatRows=1)
echo_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), LIGHT_BLUE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(echo_t)
story.append(sp(0.2))
story.append(memory_box([
"Black = Liquid (paani, blood, urine, bile)",
"White = Hard (haddi, patthar, gallstone)",
"Grey shades = Soft tissue (liver, muscle, kidney)",
], title="Echogenicity Memory Trick"))
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 2 β ARTIFACTS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("2. ARTIFACTS β Common Ultrasound Artifacts", bg=TEAL))
story.append(sp(0.2))
art_rows = [
["Artifact", "Kya Dikhta Hai", "Cause (Kyon Hota Hai)", "Clinical Use"],
["Posterior Acoustic\nShadowing", "Hard object ke peeche\nkala andhera (shadow)", "Sound wave reflect ho jaati hai;\nneeche nahi pahunchti", "Gallstone, kidney stone,\ncalcification identify karna"],
["Posterior Acoustic\nEnhancement","Cyst/fluid ke peeche\nzyada brightness", "Fluid mein attenuation kam;\nneeche zyada sound pahunchti","Cyst vs solid mass\ndifferentiate karna"],
["Mirror Artifact", "Diaphragm ke upar\nfalse image", "Strong reflector se\ndouble reflection", "Liver lesion ko chest mein\ndikhna (false)"],
["Reverberation\nArtifact", "Parallel bright lines\n(= spacing repeat hoti)", "Sound wave do surfaces\nke beech bounce karti hai", "Air, needles, implants\nidentify karna"],
["Comet Tail\nArtifact", "Bright narrow streak\nbelow object", "Small reflectors mein\nreverberation", "Cholesterol crystals\nin gallbladder"],
["Edge Shadowing", "Curved structure ke\nkinare se shadow", "Sound beam curved\nsurface par refracts", "Gallbladder walls,\ncysts ke edges"],
]
art_cw = [W*0.21, W*0.22, W*0.30, W*0.27]
art_para = []
for i, row in enumerate(art_rows):
if i == 0:
art_para.append([
Paragraph(f"<b>{c}</b>", S("ah", fontSize=8.5,
textColor=TEAL, fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
art_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sBody),
Paragraph(row[2], sBody),
Paragraph(row[3], sSmall),
])
art_t = Table(art_para, colWidths=art_cw, repeatRows=1)
art_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), LIGHT_TEAL),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(art_t)
story.append(sp(0.2))
story.append(tip_box(
"Shadowing + hyperechoic focus = STONE (gallstone ya kidney stone ka classic sign). "
"Enhancement + anechoic = CYST (simple cyst confirm karne ke liye)."
))
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 3 β PROBE / TRANSDUCER
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("3. PROBE / TRANSDUCER TYPES β Kaunsa Probe Kab Use Karo", bg=PURPLE))
story.append(sp(0.2))
probe_rows = [
["Probe Type", "Frequency", "Depth", "Best Use (Kab Use Karo)"],
["Linear\n(High-freq)", "5β15 MHz", "Shallow\n(< 5 cm)", "Thyroid, veins, nerves,\nsuperficial masses, tendons"],
["Curvilinear\n(Convex)", "2β5 MHz", "Deep\n(5β20 cm)", "Abdomen, pelvis, kidney,\nliver, OB-Gyn scan"],
["Phased Array\n(Sector)", "1β5 MHz", "Deep", "Heart (echocardiography),\nlung, small rib space"],
["Endocavitary\n(Intracavity)","5β10 MHz", "Moderate", "Transvaginal, transrectal\nscans, early pregnancy"],
["Hockey Stick\n(Small parts)","10β18 MHz","Very shallow", "Pediatric, finger, eye,\nsmall superficial structures"],
]
probe_cw = [W*0.22, W*0.15, W*0.15, W*0.48]
probe_para = []
for i, row in enumerate(probe_rows):
if i == 0:
probe_para.append([
Paragraph(f"<b>{c}</b>", S("ph", fontSize=8.5,
textColor=PURPLE, fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
probe_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sBody),
Paragraph(row[2], sBody),
Paragraph(row[3], sSmall),
])
probe_t = Table(probe_para, colWidths=probe_cw, repeatRows=1)
probe_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), LIGHT_PURPLE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(probe_t)
story.append(sp(0.2))
story.append(memory_box([
"High MHz = Shallow depth = More detail (surface structures)",
"Low MHz = Deep penetration = Less detail (deep organs)",
"Rule: Jitna gehra scan karna ho, utna LOW frequency probe choose karo",
], title="Frequency vs Depth Rule", bg=LIGHT_PURPLE))
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 4 β ULTRASOUND MODES
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("4. ULTRASOUND MODES β Image Capture Ke Tarike", bg=ORANGE))
story.append(sp(0.2))
mode_rows = [
["Mode", "Full Name", "Kya Karta Hai (Hindi)", "Use Case"],
["B-Mode", "Brightness Mode", "2D grayscale image banata hai;\npixel brightness = sound intensity", "Sabse common - routine scans,\norgan imaging"],
["M-Mode", "Motion Mode", "Ek line par motion track karta hai;\ntime vs displacement graph", "Fetal heart rate, cardiac\nwall motion"],
["A-Mode", "Amplitude Mode", "1D trace - amplitude vs depth", "Ophthalmology (eye)\naxial length measure"],
["Color Doppler", "Color Doppler", "Blood flow direction color se:\nRed = probe ki taraf\nBlue = probe se door", "Blood vessel patency,\ndeep vein thrombosis"],
["Power Doppler", "Power Doppler", "Flow presence dikhata hai\n(direction nahi - more sensitive)", "Low-flow vessels, tumor\nvascularization"],
["Pulsed Wave\nDoppler","PW Doppler", "Specific point par velocity\nmeasure karta hai", "Cardiac valve assessment,\nportal vein flow"],
["3D/4D Mode", "3D/4D Ultrasound", "3D volume image; 4D = 3D in real\ntime (moving 3D)", "Fetal imaging, surgical\nplanning"],
]
mode_cw = [W*0.17, W*0.20, W*0.33, W*0.30]
mode_para = []
for i, row in enumerate(mode_rows):
if i == 0:
mode_para.append([
Paragraph(f"<b>{c}</b>", S("mh", fontSize=8.5,
textColor=ORANGE, fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
mode_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sSmall),
Paragraph(row[2], sBody),
Paragraph(row[3], sSmall),
])
mode_t = Table(mode_para, colWidths=mode_cw, repeatRows=1)
mode_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), LIGHT_ORANGE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "TOP"),
]))
story.append(mode_t)
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 5 β PHYSICS TERMS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("5. PHYSICS TERMS β Technical Words Ka Matlab", bg=colors.HexColor("#B71C1C")))
story.append(sp(0.2))
phys_rows = [
["Term", "Hindi Matlab", "Key Point"],
["Acoustic Impedance", "Tissue ki sound rok-ne ki takkat", "Alag tissues mein boundary par reflection hoti hai"],
["Attenuation", "Sound wave ka kamzor hona depth ke saath", "Isliye deep structures ke liye low-freq probe chahiye"],
["Frequency (MHz)", "Sound wave ki cycles per second", "Higher = better resolution, less penetration"],
["Wavelength", "Ek wave cycle ki length", "Freq badhne par wavelength ghatti hai"],
["Resolution", "Do cheezon ko alag-alag dekhne ki kshamta", "Axial > Lateral in ultrasound"],
["Gain", "Image ki brightness/amplification", "Zyada gain = zyada bright image (noise bhi badh sakta hai)"],
["TGC (Time Gain Comp.)", "Depth ke saath gain adjust karna", "Deep structures ko equally bright dikhane ke liye"],
["Focal Zone", "Beam ki sabse narrow point", "Best resolution yahan milti hai - adjust karo target par"],
["Near Field / Far Field","Probe ke paas / dur ka area", "Near field = probe ke closest; Far field = deepest area"],
["PRF (Pulse Repetition)", "Kitni baar pulse bheja jata hai per second", "High PRF = high-velocity flow detect kar sakta hai"],
]
phys_cw = [W*0.27, W*0.38, W*0.35]
phys_para = []
for i, row in enumerate(phys_rows):
if i == 0:
phys_para.append([
Paragraph(f"<b>{c}</b>", S("physh", fontSize=8.5,
textColor=colors.HexColor("#B71C1C"),
fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
phys_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sBody),
Paragraph(row[2], sSmall),
])
phys_t = Table(phys_para, colWidths=phys_cw, repeatRows=1)
phys_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#FFEBEE")),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(phys_t)
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 6 β ORGAN APPEARANCES
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("6. NORMAL ORGAN APPEARANCES β Normal Scan Mein Kya Dikhta Hai", bg=colors.HexColor("#1B5E20")))
story.append(sp(0.2))
organ_rows = [
["Organ", "Normal Appearance", "Key Landmarks", "Size (approx)"],
["Liver", "Homogeneous medium-grey\n(isoechoic texture)", "Hepatic veins, portal veins\n(portal = bright walls)", "< 15 cm span"],
["Gallbladder", "Anechoic (black) pouch\nbright echogenic walls", "Gallbladder wall < 3mm thick\nAnechoic lumen (fasting)", "6-10 cm length"],
["Spleen", "Slightly hyperechoic\nthan liver; homogeneous", "Splenic hilum, splenic vein", "< 12 cm"],
["Kidney", "Outer cortex grey\nInner sinus bright (echogenic)", "Cortex, medulla, renal sinus\nPyramids = hypoechoic", "9-12 cm"],
["Pancreas", "Isoechoic to slightly\nhyperechoic (fat with age)", "Pancreatic duct < 2mm\nAnterior to SMA/SMV", "Head 3cm, body 2cm"],
["Bladder", "Anechoic (black)\nThin echogenic walls", "Wall < 3mm (full bladder)\nPost. enhancement behind it", "Variable (full/empty)"],
["Aorta", "Anechoic pulsatile tube\nAnterior to spine", "Branches: celiac, SMA, renal\nPulsating visible B-mode", "< 3 cm diameter"],
["Uterus", "Homogeneous myometrium\nEndometrium bright stripe", "Endometrium changes with\nmenstrual cycle", "7-8 cm length"],
]
organ_cw = [W*0.17, W*0.27, W*0.28, W*0.28]
organ_para = []
for i, row in enumerate(organ_rows):
if i == 0:
organ_para.append([
Paragraph(f"<b>{c}</b>", S("orgh", fontSize=8.5,
textColor=colors.HexColor("#1B5E20"),
fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
organ_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sBody),
Paragraph(row[2], sSmall),
Paragraph(row[3], sSmall),
])
organ_t = Table(organ_para, colWidths=organ_cw, repeatRows=1)
organ_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), LIGHT_GREEN),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(organ_t)
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 7 β PROBE MOVEMENTS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("7. PROBE MOVEMENTS β Scan Karne Ka Tarika", bg=colors.HexColor("#4A148C")))
story.append(sp(0.2))
move_rows = [
["Movement", "Kya Karte Hain", "Purpose"],
["Slide / Translate", "Probe ko skin par saraao (left-right ya up-down)", "Different area scan karna"],
["Fan / Sweep", "Probe ka ek end fix rakho, doosra tilt karo", "Structure ke aage-peeche dekhna"],
["Rock", "Probe ko image plane mein rock karo (fore-aft)", "Near field/far field adjust"],
["Rotate", "Probe ko rotate karo (axis par ghumao)", "Longitudinal se transverse view mein jaana"],
["Compress / Press", "Probe se gentle pressure dalo", "DVT: vein compress hogi, not artery"],
]
move_cw = [W*0.22, W*0.42, W*0.36]
move_para = []
for i, row in enumerate(move_rows):
if i == 0:
move_para.append([
Paragraph(f"<b>{c}</b>", S("mvh", fontSize=8.5,
textColor=PURPLE, fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
move_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sBody),
Paragraph(row[2], sSmall),
])
move_t = Table(move_para, colWidths=move_cw, repeatRows=1)
move_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), LIGHT_PURPLE),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(move_t)
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 8 β QUICK REFERENCE CHEAT BOX (2-col layout)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("8. QUICK CHEAT SHEET β Exam / Bedside Reference", bg=DARK_BLUE))
story.append(sp(0.2))
def mini_box(title, items, bg, border_color):
content = [Paragraph(f"<b>{title}</b>", S("bt", fontSize=8.5,
fontName="Helvetica-Bold", textColor=border_color, leading=12))]
for item in items:
content.append(Paragraph(f"β’ {item}", S("bi", fontSize=8,
fontName="Helvetica", textColor=DARK_GREY, leading=11)))
data = [[content]]
t = Table(data, colWidths=[(W/2)-0.2*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0),(-1,-1), bg),
("LINEBEFORE", (0,0),(0,-1), 3, border_color),
("TOPPADDING", (0,0),(-1,-1), 6),
("BOTTOMPADDING", (0,0),(-1,-1), 6),
("LEFTPADDING", (0,0),(-1,-1), 8),
("RIGHTPADDING", (0,0),(-1,-1), 6),
("VALIGN", (0,0),(-1,-1), "TOP"),
]))
return t
cheat_left = mini_box("Echogenicity Quick Recap", [
"Anechoic (Black) = Fluid",
"Hyperechoic (White) = Dense/Hard",
"Hypoechoic (Dark grey) = Soft/cellular",
"Shadowing behind = Stone/Calcification",
"Enhancement behind = Cyst/Fluid",
], LIGHT_BLUE, MED_BLUE)
cheat_right = mini_box("Probe Selection Rule", [
"Thyroid, veins, nerves = Linear (high MHz)",
"Abdomen, pelvis = Curvilinear (low MHz)",
"Heart, lung = Phased array",
"TVS/TRS = Endocavitary probe",
"High freq = more detail, less depth",
], LIGHT_ORANGE, ORANGE)
cheat_left2 = mini_box("Doppler Color Code", [
"Red = Flow TOWARD probe",
"Blue = Flow AWAY from probe",
"Aliasing = turbulent/fast flow (mosaic)",
"Power Doppler = direction nahi, sirf flow",
"PW Doppler = velocity waveform dikhata hai",
], LIGHT_TEAL, TEAL)
cheat_right2 = mini_box("Machine Settings Yaad Rakho", [
"Gain = Brightness (TGC = depth-wise)",
"Depth = Field of view ka size",
"Focus = Best resolution ka zone (set on target)",
"Freeze = Image rok do",
"Cine loop = Last few seconds replay karo",
], LIGHT_GREEN, GREEN)
cheat_t = Table(
[[cheat_left, cheat_right],
[sp(0.15), sp(0.15)],
[cheat_left2, cheat_right2]],
colWidths=[(W/2)-0.1*cm, (W/2)-0.1*cm]
)
cheat_t.setStyle(TableStyle([
("VALIGN", (0,0),(-1,-1), "TOP"),
("LEFTPADDING", (0,0),(-1,-1), 0),
("RIGHTPADDING", (0,0),(-1,-1), 0),
("TOPPADDING", (0,0),(-1,-1), 0),
("BOTTOMPADDING",(0,0),(-1,-1), 0),
("COLPADDING", (0,0),(-1,-1), 4),
]))
story.append(cheat_t)
story.append(sp(0.3))
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# SECTION 9 β PATHOLOGY TERMS
# βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(section_header("9. COMMON PATHOLOGY TERMS β Report Mein Common Words", bg=colors.HexColor("#E65100")))
story.append(sp(0.2))
path_rows = [
["Term (Report Mein)", "Hindi Matlab", "Common Condition"],
["Echogenic focus", "Bright spot", "Gallstone, renal stone, calcification"],
["Heterogeneous echotexture","Uneven texture (patches)", "Cirrhosis, tumor, abscess"],
["Homogeneous echotexture", "Even/uniform texture", "Normal organ / simple cyst"],
["Acoustic shadow", "Object ke peeche kala area", "Stone confirm karna"],
["Posterior enhancement", "Object ke peeche bright area", "Cyst / fluid filled structure"],
["Mass / lesion", "Koi bhi abnormal structure", "Tumor, cyst, abscess, hematoma"],
["Calcification", "Calcium deposit - bright with shadow", "Chronic inflammation, tumors"],
["Echogenic liver", "Liver brighter than normal (fat deposited)", "Fatty liver (hepatic steatosis)"],
["Hydronephrosis", "Kidney mein fluid collection (dilated pelvis)","Obstruction - stone/stricture"],
["Ascites", "Abdomen mein free fluid (anechoic space)", "Liver disease, malignancy, infection"],
["Free fluid / FAST exam", "Body cavity mein extra fluid", "Trauma - FAST scan mein check"],
["Vascularity", "Blood supply - color Doppler pe flow", "Tumor vascularity, inflammation"],
]
path_cw = [W*0.28, W*0.35, W*0.37]
path_para = []
for i, row in enumerate(path_rows):
if i == 0:
path_para.append([
Paragraph(f"<b>{c}</b>", S("pth", fontSize=8.5,
textColor=colors.HexColor("#E65100"),
fontName="Helvetica-Bold", leading=11))
for c in row
])
else:
path_para.append([
Paragraph(row[0], sBodyBold),
Paragraph(row[1], sBody),
Paragraph(row[2], sSmall),
])
path_t = Table(path_para, colWidths=path_cw, repeatRows=1)
path_t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,0), colors.HexColor("#FFF3E0")),
("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, LIGHT_GREY]),
("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#CCCCCC")),
("TOPPADDING", (0,0), (-1,-1), 5),
("BOTTOMPADDING", (0,0), (-1,-1), 5),
("LEFTPADDING", (0,0), (-1,-1), 6),
("VALIGN", (0,0), (-1,-1), "MIDDLE"),
]))
story.append(path_t)
story.append(sp(0.3))
# βββ FOOTER βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
story.append(HRFlowable(width=W, thickness=0.5, color=MID_GREY))
story.append(sp(0.1))
story.append(Paragraph(
"Ultrasound Quick Reference Guide | Hindi + English | "
"Sources: Murray & Nadel's Respiratory Medicine; Yamada's Gastroenterology; "
"Color Atlas of Ultrasound Anatomy, 3e | For educational use only",
sFooter
))
# ββ BUILD ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/ultrasound-guide && python create_pdf.py 2>&1
ls -lh /home/daytona/workspace/ultrasound-guide/Ultrasound_Quick_Reference.pdf
Ultrasound Quick Reference
PDF Document Β· PDF
| Section | Content |
|---|---|
| 1. Echogenicity | Hyperechoic / Hypoechoic / Anechoic - color-coded table + memory trick |
| 2. Artifacts | Shadowing, Enhancement, Reverberation, Comet tail - 6 artifacts |
| 3. Probe Types | Linear, Curvilinear, Phased Array, Endocavitary - kab kaunsa use karo |
| 4. Modes | B-mode, M-mode, Doppler, Color Doppler, 3D/4D - sabke use case |
| 5. Physics Terms | Impedance, Attenuation, Gain, TGC, Focal Zone - technical words Hindi mein |
| 6. Normal Organs | Liver, Kidney, Gallbladder, Bladder, Aorta etc. - normal kya dikhta hai |
| 7. Probe Movements | Slide, Fan, Rock, Rotate, Compress - scan technique |
| 8. Quick Cheat Sheet | 4 mini-boxes - exam aur bedside ke liye instant reference |
| 9. Pathology Terms | Ascites, Hydronephrosis, Fatty liver - report mein common words |