Take refrence from kaplan and saddock and also from other textbooks and make a short note on a topic biofeedback. Types and indication of biofeedback
biofeedback types indications psychiatry Kaplan Sadock
| Condition | Type of Biofeedback Used |
|---|---|
| Anxiety disorders (GAD, phobias) | EMG, Thermal, HRV, EEG |
| PTSD | EEG (ILF neurofeedback), HRV |
| Depression | EEG (alpha-asymmetry protocol), HRV |
| ADHD | EEG (theta/beta protocol) |
| Insomnia | EEG (alpha/theta frontal training) |
| Substance use disorders | EEG |
| Somatic symptom/related disorders | EMG + Thermal combined |
| Vaginismus | Functional electrical stimulation + biofeedback |
| Stress management | EMG, Thermal, HRV, GSR |
| Instrument | Measures | Primary Use |
|---|---|---|
| EMG | Muscle electrical potentials | Pain, incontinence, stroke rehab |
| EEG | Brain wave activity (alpha, theta, beta, ILF) | PTSD, ADHD, insomnia, depression |
| GSR / EDA | Skin conductance | Anxiety, stress |
| Thermistor | Peripheral skin temperature | Migraine, Raynaud's, anxiety |
| HRV monitor | Heart rate variability patterns | Anxiety, PTSD, depression |
| Anorectal manometry probe | Sphincter/pelvic floor EMG | Incontinence, constipation |
| Force plate | Center of gravity and postural sway | Balance, stroke rehab |
Make its pdf
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && ls -la /tmp/workspace/
mkdir -p /tmp/workspace/biofeedback && python3 << 'EOF' from reportlab.lib.pagesizes import A4 from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import cm from reportlab.lib import colors from reportlab.platypus import (SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable, KeepTogether) from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY OUTPUT = "/tmp/workspace/biofeedback/Biofeedback_Short_Note.pdf" doc = SimpleDocTemplate( OUTPUT, pagesize=A4, leftMargin=2*cm, rightMargin=2*cm, topMargin=2.2*cm, bottomMargin=2*cm, title="Biofeedback – Short Note", author="Orris Medical" ) # ── Colour palette ────────────────────────────────────────────────────────── DARK_BLUE = colors.HexColor("#1A3A5C") MID_BLUE = colors.HexColor("#2E6DA4") LIGHT_BLUE = colors.HexColor("#D6E8F7") ACCENT = colors.HexColor("#E8F4FD") GOLD = colors.HexColor("#B8860B") TABLE_HEADER= colors.HexColor("#2E6DA4") TABLE_ALT = colors.HexColor("#EBF4FB") WHITE = colors.white LIGHT_GREY = colors.HexColor("#F5F5F5") MED_GREY = colors.HexColor("#CCCCCC") styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle( "CustomTitle", parent=styles["Title"], fontSize=22, textColor=WHITE, alignment=TA_CENTER, spaceAfter=4, fontName="Helvetica-Bold", leading=28 ) subtitle_style = ParagraphStyle( "Subtitle", parent=styles["Normal"], fontSize=10, textColor=colors.HexColor("#B0C8E8"), alignment=TA_CENTER, spaceAfter=2, fontName="Helvetica-Oblique" ) h1_style = ParagraphStyle( "H1", parent=styles["Heading1"], fontSize=13, textColor=WHITE, fontName="Helvetica-Bold", spaceBefore=14, spaceAfter=4, leading=16, borderPad=6 ) h2_style = ParagraphStyle( "H2", parent=styles["Heading2"], fontSize=11, textColor=DARK_BLUE, fontName="Helvetica-Bold", spaceBefore=10, spaceAfter=3, leading=14, leftIndent=0 ) h3_style = ParagraphStyle( "H3", parent=styles["Heading3"], fontSize=10, textColor=MID_BLUE, fontName="Helvetica-Bold", spaceBefore=7, spaceAfter=2, leading=13 ) body_style = ParagraphStyle( "Body", parent=styles["Normal"], fontSize=9.5, fontName="Helvetica", leading=14, spaceAfter=4, alignment=TA_JUSTIFY, leftIndent=0 ) bullet_style = ParagraphStyle( "Bullet", parent=styles["Normal"], fontSize=9.5, fontName="Helvetica", leading=13, spaceAfter=2, leftIndent=14, bulletIndent=4, alignment=TA_LEFT ) source_style = ParagraphStyle( "Source", parent=styles["Normal"], fontSize=8, fontName="Helvetica-Oblique", textColor=colors.HexColor("#555555"), leading=11, spaceAfter=2, leftIndent=10 ) bold_body = ParagraphStyle( "BoldBody", parent=body_style, fontName="Helvetica-Bold" ) note_style = ParagraphStyle( "Note", parent=styles["Normal"], fontSize=8.5, fontName="Helvetica-Oblique", textColor=colors.HexColor("#444444"), leading=12, spaceAfter=3, leftIndent=8, borderPad=4, backColor=ACCENT ) def section_header(text, color=DARK_BLUE): """Returns a blue-background section header as a Table.""" data = [[Paragraph(text, ParagraphStyle( "SH", parent=h1_style, textColor=WHITE, fontSize=12, fontName="Helvetica-Bold", leading=15, spaceAfter=0, spaceBefore=0 ))]] t = Table(data, colWidths=[17*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), color), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING",(0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 10), ("RIGHTPADDING", (0,0), (-1,-1), 6), ])) return t def bullet(text): return Paragraph(f"• {text}", bullet_style) def sub_bullet(text): return Paragraph(f" ◦ {text}", ParagraphStyle( "SB", parent=bullet_style, leftIndent=26, fontSize=9 )) def source(text): return Paragraph(f"<i>Source: {text}</i>", source_style) def colored_table(header_row, data_rows, col_widths): all_rows = [header_row] + data_rows t = Table(all_rows, colWidths=col_widths, repeatRows=1) style = [ ("BACKGROUND", (0,0), (-1,0), TABLE_HEADER), ("TEXTCOLOR", (0,0), (-1,0), WHITE), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,0), 9), ("ALIGN", (0,0), (-1,-1), "LEFT"), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("FONTNAME", (0,1), (-1,-1), "Helvetica"), ("FONTSIZE", (0,1), (-1,-1), 8.5), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 7), ("RIGHTPADDING", (0,0), (-1,-1), 7), ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#B0C8E8")), ("ROWBACKGROUNDS",(0,1), (-1,-1), [WHITE, TABLE_ALT]), ] t.setStyle(TableStyle(style)) return t # ───────────────────────────────────────────────────────────────────────────── # TITLE BLOCK # ───────────────────────────────────────────────────────────────────────────── title_data = [[ Paragraph("BIOFEEDBACK", ParagraphStyle( "TT", fontSize=24, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=28, spaceAfter=0 )) ], [ Paragraph("Short Note: Types & Indications", ParagraphStyle( "TS", fontSize=12, textColor=colors.HexColor("#B0C8E8"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=16 )) ], [ Paragraph("References: Kaplan & Sadock's Synopsis of Psychiatry • K&S Comprehensive Textbook<br/>" "Bradley & Daroff's Neurology • Kaplan & Sadock's Comprehensive Textbook (GI Section)", ParagraphStyle("TS2", fontSize=8, textColor=colors.HexColor("#8BB8D8"), fontName="Helvetica-Oblique", alignment=TA_CENTER, leading=12)) ]] title_table = Table(title_data, colWidths=[17*cm]) title_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), DARK_BLUE), ("TOPPADDING", (0,0), (-1,-1), 8), ("BOTTOMPADDING", (0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 14), ("RIGHTPADDING", (0,0), (-1,-1), 14), ("LINEBELOW", (0,-1),(-1,-1), 3, GOLD), ])) story = [] story.append(title_table) story.append(Spacer(1, 0.4*cm)) # ───────────────────────────────────────────────────────────────────────────── # 1. DEFINITION # ───────────────────────────────────────────────────────────────────────────── story.append(section_header("1. DEFINITION")) story.append(Spacer(1, 0.2*cm)) story.append(Paragraph( "Biofeedback involves the <b>recording and real-time display of small changes in physiologic parameters</b>, " "presented to the patient in a visual (meter, bar of lights) or auditory format. The therapist instructs the " "patient to consciously alter these parameters using the feedback display as a guide.", body_style )) story.append(Paragraph( "<b>Neal Miller</b> demonstrated that the normally involuntary autonomic nervous system is susceptible to " "<b>operant conditioning</b> when appropriate feedback is provided — the foundational principle of biofeedback.", body_style )) story.append(source("Kaplan & Sadock's Synopsis of Psychiatry (11th ed.), p. 2336")) story.append(Spacer(1, 0.2*cm)) # ───────────────────────────────────────────────────────────────────────────── # 2. THEORETICAL BASIS # ───────────────────────────────────────────────────────────────────────────── story.append(section_header("2. THEORETICAL BASIS")) story.append(Spacer(1, 0.2*cm)) basis_points = [ "The <b>autonomic nervous system</b> can come under voluntary control through <b>operant conditioning</b>.", "Patients use instruments to perceive subtle changes in their own physiology not normally accessible to consciousness.", "The feedback signal acts as a <b>reinforcer</b> — it reinforces the desired physiologic response.", "Patients eventually learn to make these changes <b>without equipment</b> after sufficient training.", "Example: In <b>bruxism</b>, an EMG on the masseter emits a high tone on contraction and low tone at rest — " "the patient learns to lower the tone (= jaw relaxation). The condition then ameliorates.", ] for pt in basis_points: story.append(bullet(pt)) story.append(source("K&S Synopsis of Psychiatry, p. 2336–2337")) story.append(Spacer(1, 0.2*cm)) # ───────────────────────────────────────────────────────────────────────────── # 3. TYPES OF BIOFEEDBACK # ───────────────────────────────────────────────────────────────────────────── story.append(section_header("3. TYPES OF BIOFEEDBACK")) story.append(Spacer(1, 0.25*cm)) # ── 3.1 EMG story.append(Paragraph("3.1 Electromyogram (EMG) Biofeedback", h2_style)) story.append(Paragraph( "Measures <b>electrical potentials of muscle fibers</b>. The most widely used type. " "Frontalis muscle EMG is the classic site for stress and anxiety-related conditions. " "EMG-triggered neuromuscular stimulation uses a minimal voluntary movement to fire low-amplitude " "motor units that then trigger nerve stimulation for enhanced motor output — applied in stroke rehabilitation.", body_style )) emg_apps = [ "Tension headache, bruxism, TMJ dysfunction", "Chronic low-back pain, neck pain", "Urinary and fecal incontinence, pelvic floor dysfunction", "Stroke rehabilitation (ankle dorsiflexion, wrist/hand extension)", "Anxiety disorders (frontalis EMG + thermal combined)", ] for a in emg_apps: story.append(bullet(a)) story.append(source("K&S Synopsis p. 2336–2337; Bradley & Daroff's Neurology, p. 1184")) story.append(Spacer(1, 0.15*cm)) # ── 3.2 EEG / Neurofeedback story.append(Paragraph("3.2 EEG Biofeedback (Neurofeedback)", h2_style)) story.append(Paragraph( "Translates electrical brain activity (alpha, theta, beta, infra-low frequency) into a visual/auditory signal " "to modulate arousal or correct dysrhythmias in specific brain regions and frequency domains.", body_style )) eeg_rows = [ [Paragraph("Alpha training", bold_body), Paragraph("Promotes relaxation; used in anxiety, stress", body_style)], [Paragraph("Theta training", bold_body), Paragraph("ADHD, learning disabilities", body_style)], [Paragraph("Beta training", bold_body), Paragraph("ADHD, cognitive performance enhancement; alcoholism/depression", body_style)], [Paragraph("Alpha-asymmetry protocol", bold_body), Paragraph("Depressed mood (frontal alpha asymmetry correction)", body_style)], [Paragraph("Infra-low frequency (ILF)\n0.02–0.2 Hz", bold_body), Paragraph( "PTSD — 75% of moderate-severe PTSD improved; 25% had complete resolution in <20 sessions (military cohort)", body_style)], [Paragraph("Alpha/theta frontal protocol", bold_body), Paragraph( "Chronic insomnia — AASM recommends; more effective than progressive muscle relaxation", body_style)], ] eeg_table = colored_table( [Paragraph("EEG Protocol", ParagraphStyle("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold")), Paragraph("Application", ParagraphStyle("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold"))], eeg_rows, [5.5*cm, 11.5*cm] ) story.append(eeg_table) story.append(source("K&S Comprehensive Textbook (10th ed.), p. 8002–8004")) story.append(Spacer(1, 0.15*cm)) # ── 3.3 GSR story.append(Paragraph("3.3 Galvanic Skin Response (GSR) / Electrodermal Biofeedback", h2_style)) story.append(Paragraph( "Measures <b>skin conductance</b> — decreases during relaxation due to reduced sweat gland activity. " "The GSR gauge shows decreased conductivity in relaxed states. Used for anxiety, phobias, and stress management.", body_style )) # ── 3.4 Thermal story.append(Paragraph("3.4 Thermal (Temperature) Biofeedback", h2_style)) story.append(Paragraph( "Uses a <b>thermistor</b> to measure peripheral skin temperature. Skin temperature falls during tension/anxiety " "due to sympathetic vasoconstriction. Patients learn to <b>raise hand temperature</b>, reducing sympathetic " "vasoconstrictive tone. Classic application: <b>migraine prophylaxis</b> — raising hand temperature reduces " "migraine frequency, and also helps angina and palpitations. Often combined with frontalis EMG biofeedback.", body_style )) # ── 3.5 HRV story.append(Paragraph("3.5 Heart Rate Variability (HRV) Biofeedback", h2_style)) story.append(Paragraph( "Based on the theory that positive emotional states increase coherence of HRV patterns through " "feed-forward and feedback loops between heart, brainstem, and neocortex. " "Beneficial changes are associated with <b>decreased serum cortisol</b> and <b>increased serum DHEA</b>. " "'Energy cardiology' is an integrative approach combining EKG-EEG correlations.", body_style )) hrv_points = [ "Generalized anxiety disorder — significant improvement in RCT of police officers vs. wait-list", "PTSD — preliminary evidence for reduced symptom severity", "Depression from chronic stress", "Acute job-related stress — reduced arousal, improved emotional well-being", ] for p in hrv_points: story.append(bullet(p)) story.append(source("K&S Comprehensive Textbook, p. 8003–8004")) story.append(Spacer(1, 0.15*cm)) # ── 3.6 Anorectal/Pelvic Floor story.append(Paragraph("3.6 Anorectal / Pelvic Floor Biofeedback", h2_style)) story.append(Paragraph( "Provides visual or auditory feedback on anal sphincter and pelvic floor muscle functioning, " "following defecation training. Trains patients to either appropriately contract or relax the pelvic floor. " "Applications: fecal incontinence, constipation, dyssynergic defecation, urinary incontinence, vaginismus.", body_style )) story.append(source("K&S Synopsis p. 2336; K&S Comprehensive Textbook p. 6877")) story.append(Spacer(1, 0.15*cm)) # ── 3.7 Respiratory / Blood Pressure story.append(Paragraph("3.7 Respiratory & Blood Pressure Biofeedback", h2_style)) story.append(Paragraph( "<b>Respiratory biofeedback</b>: monitors rate, depth, and pattern — used in asthma and panic/anxiety disorders. " "<b>Blood pressure biofeedback</b>: provides continuous feedback on systolic/diastolic pressure — adjunct in hypertension management.", body_style )) story.append(Spacer(1, 0.3*cm)) # ───────────────────────────────────────────────────────────────────────────── # 4. INSTRUMENTATION SUMMARY TABLE # ───────────────────────────────────────────────────────────────────────────── story.append(section_header("4. INSTRUMENTATION SUMMARY")) story.append(Spacer(1, 0.2*cm)) inst_rows = [ ["EMG", "Muscle electrical potentials", "Pain, incontinence, stroke rehab, bruxism"], ["EEG (Neurofeedback)", "Brain waves (alpha/theta/beta/ILF)", "PTSD, ADHD, insomnia, depression, OCD"], ["GSR / EDA", "Skin conductance", "Anxiety, phobias, stress management"], ["Thermistor", "Peripheral skin temperature", "Migraine, Raynaud's, angina, anxiety"], ["HRV monitor", "Heart rate variability patterns", "Anxiety, PTSD, depression, stress"], ["Anorectal probe", "Sphincter / pelvic floor EMG", "Incontinence, constipation, vaginismus"], ["Force plate", "Centre of gravity / postural sway", "Balance disorders, stroke rehab"], ["Respiratory sensor", "Breathing rate and depth", "Asthma, panic disorder"], ] inst_para_rows = [] for r in inst_rows: inst_para_rows.append([ Paragraph(r[0], ParagraphStyle("TC", fontSize=8.5, fontName="Helvetica-Bold", leading=12)), Paragraph(r[1], ParagraphStyle("TC", fontSize=8.5, fontName="Helvetica", leading=12)), Paragraph(r[2], ParagraphStyle("TC", fontSize=8.5, fontName="Helvetica", leading=12)), ]) inst_table = colored_table( [Paragraph("Instrument", ParagraphStyle("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold")), Paragraph("Measures", ParagraphStyle("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold")), Paragraph("Primary Use", ParagraphStyle("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold"))], inst_para_rows, [4*cm, 6*cm, 7*cm] ) story.append(inst_table) story.append(Spacer(1, 0.3*cm)) # ───────────────────────────────────────────────────────────────────────────── # 5. INDICATIONS # ───────────────────────────────────────────────────────────────────────────── story.append(section_header("5. INDICATIONS")) story.append(Spacer(1, 0.25*cm)) # 5.1 Psychiatric story.append(Paragraph("5.1 Psychiatric / Psychological", h2_style)) psych_rows = [ ["Anxiety disorders (GAD, phobias)", "EMG, Thermal, HRV, EEG, GSR"], ["PTSD", "EEG (ILF neurofeedback), HRV"], ["Depression", "EEG (alpha-asymmetry protocol), HRV"], ["ADHD", "EEG (theta suppression / beta enhancement)"], ["Chronic insomnia", "EEG (alpha/theta frontal protocol) — AASM recommended"], ["Substance use disorders / alcoholism", "EEG biofeedback"], ["OCD", "EEG / neurofeedback (emerging evidence)"], ["Somatic symptom / related disorders", "EMG + Thermal combined"], ["Vaginismus", "Functional electrical stimulation + biofeedback"], ["Stress management", "EMG, Thermal, HRV, GSR"], ] psych_para_rows = [] for r in psych_rows: psych_para_rows.append([ Paragraph(r[0], ParagraphStyle("TC", fontSize=8.5, fontName="Helvetica", leading=12)), Paragraph(r[1], ParagraphStyle("TC", fontSize=8.5, fontName="Helvetica-Bold", textColor=MID_BLUE, leading=12)), ]) story.append(colored_table( [Paragraph("Condition", ParagraphStyle("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold")), Paragraph("Biofeedback Type", ParagraphStyle("TH", fontSize=9, textColor=WHITE, fontName="Helvetica-Bold"))], psych_para_rows, [9.5*cm, 7.5*cm] )) story.append(Spacer(1, 0.2*cm)) # 5.2 Neurological story.append(Paragraph("5.2 Neurological", h2_style)) neuro_points = [ "<b>Stroke rehabilitation</b> — EMG biofeedback for ankle dorsiflexion, wrist extension, handgrip", "<b>Traumatic brain injury (TBI)</b> — EEG biofeedback for cognitive and reading improvement", "<b>Postural control disorders</b> — force plate biofeedback (Balance Master) for centre-of-gravity control", ] for p in neuro_points: story.append(bullet(p)) story.append(source("Bradley & Daroff's Neurology in Clinical Practice, p. 1184")) story.append(Spacer(1, 0.15*cm)) # 5.3 GI story.append(Paragraph("5.3 Gastrointestinal", h2_style)) gi_points = [ "Fecal incontinence — retrains sphincter squeeze contraction", "Chronic constipation and obstructed defecation", "Dyssynergic defecation (pelvic floor dyssynergia)", "Irritable bowel syndrome (IBS) with defecatory overlap", ] for p in gi_points: story.append(bullet(p)) story.append(Spacer(1, 0.15*cm)) # 5.4 Urological story.append(Paragraph("5.4 Urological", h2_style)) uro_points = [ "Urinary incontinence (stress and urge types)", "Overactive bladder", "Pelvic floor retraining post-prostatectomy", ] for p in uro_points: story.append(bullet(p)) story.append(Spacer(1, 0.15*cm)) # 5.5 Pain Medicine story.append(Paragraph("5.5 Pain Medicine", h2_style)) pain_points = [ "<b>Migraine</b> — thermal biofeedback; strongest evidence base in biofeedback literature", "<b>Tension-type headache</b> — frontalis EMG biofeedback", "Chronic low-back pain", "Bruxism / temporomandibular dysfunction (TMD)", "Dysmenorrhea", ] for p in pain_points: story.append(bullet(p)) story.append(Spacer(1, 0.15*cm)) # 5.6 Cardiovascular / General Medical story.append(Paragraph("5.6 Cardiovascular / General Medical", h2_style)) cv_points = [ "Hypertension — blood pressure biofeedback (adjunct)", "Raynaud's phenomenon — thermal biofeedback", "Angina pectoris — thermal (hand-warming) biofeedback", "Asthma — respiratory biofeedback (reduces bronchospasm frequency)", ] for p in cv_points: story.append(bullet(p)) story.append(Spacer(1, 0.3*cm)) # ───────────────────────────────────────────────────────────────────────────── # 6. CLINICAL NOTES # ───────────────────────────────────────────────────────────────────────────── story.append(section_header("6. CLINICAL NOTES")) story.append(Spacer(1, 0.2*cm)) notes = [ ("<b>Combination therapy</b>", "Most effective when combined with relaxation therapy (progressive muscle relaxation, autogenic training). " "A model combining <b>frontalis EMG + thermal biofeedback + verbal progressive relaxation instructions</b> " "addresses insomnia, dysmenorrhea, speech problems, athletic performance, and stress-related somatic conditions."), ("<b>Session structure</b>", "Typically 8–10 weekly sessions of 30–60 minutes each. Improvement follows a learning curve; home practice is essential."), ("<b>Operant conditioning mechanism</b>", "The feedback signal serves as a reinforcer. Patients first achieve physiologic changes with equipment, " "then gradually transfer these skills to daily life without equipment."), ("<b>Outcome</b>", "Biofeedback, progressive relaxation, and applied tension are effective for a broad range of disorders " "and form the foundation for <b>behavioral medicine</b> — where patient behavior change contributes to improved illness outcomes."), ("<b>Contraindications</b>", "No absolute contraindications. Relative caution in severe cognitive impairment where patients " "cannot understand or respond to feedback signals."), ] for title_txt, content_txt in notes: row_data = [[ Paragraph(title_txt, ParagraphStyle("NT", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE, leading=12)), Paragraph(content_txt, ParagraphStyle("NC", fontSize=9, fontName="Helvetica", leading=13, alignment=TA_JUSTIFY)) ]] nt = Table(row_data, colWidths=[4.2*cm, 12.8*cm]) nt.setStyle(TableStyle([ ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("GRID", (0,0), (-1,-1), 0.3, MED_GREY), ("BACKGROUND", (0,0), (0,0), LIGHT_BLUE), ("ROWBACKGROUNDS",(0,0), (-1,-1), [ACCENT, WHITE]), ])) story.append(nt) story.append(Spacer(1, 0.3*cm)) # ───────────────────────────────────────────────────────────────────────────── # 7. KEY SOURCES # ───────────────────────────────────────────────────────────────────────────── story.append(HRFlowable(width="100%", thickness=1, color=MID_BLUE)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph("KEY SOURCES", ParagraphStyle( "KS", fontSize=9, fontName="Helvetica-Bold", textColor=DARK_BLUE, leading=12 ))) sources_list = [ "Kaplan & Sadock's Synopsis of Psychiatry (11th ed.), pp. 2336–2337 — core definition, theory, instrumentation", "Kaplan & Sadock's Comprehensive Textbook of Psychiatry (10th ed.), pp. 8002–8004 — EEG/neurofeedback and HRV biofeedback", "Kaplan & Sadock's Comprehensive Textbook of Psychiatry (10th ed.), p. 6877 — biofeedback in GI/FGID context", "Bradley & Daroff's Neurology in Clinical Practice — instrumented biofeedback in stroke rehabilitation, p. 1184", ] for s in sources_list: story.append(Paragraph(f"• {s}", ParagraphStyle( "SL", fontSize=8.5, fontName="Helvetica-Oblique", textColor=colors.HexColor("#444444"), leading=12, leftIndent=10, spaceAfter=2 ))) # ───────────────────────────────────────────────────────────────────────────── # BUILD # ───────────────────────────────────────────────────────────────────────────── doc.build(story) print("PDF created successfully:", OUTPUT) EOF
Biofeedback Short Note
PDF Document · PDF