convert the file to 16:9 and refine as per tancon2026 guidelines

Reading File
Running Command

mkdir -p /tmp/workspace/tancon2026-poster && ls -la /tmp/workspace/attachments/d0a81def-4942-4984-9f06-d275d6b6fb9e/ && python3 -c " import pypdf r = pypdf.PdfReader('/tmp/workspace/attachments/d0a81def-4942-4984-9f06-d275d6b6fb9e/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') print('pages:', len(r.pages)) for i,p in enumerate(r.pages): print(i, p.mediabox, float(p.mediabox.width)/72, float(p.mediabox.height)/72) "

Running Command

cd /tmp/workspace/tancon2026-poster && python3 -c " import pdfplumber with pdfplumber.open('/tmp/workspace/attachments/d0a81def-4942-4984-9f06-d275d6b6fb9e/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') as pdf: p = pdf.pages[0] print('size', p.width, p.height) print('---TEXT---') print(p.extract_text()) print('---IMAGES---') for im in p.images: print(im['x0'], im['y0'], im['x1'], im['y1'], im.get('name')) print('---RECTS---') for r in p.rects[:20]: print(r['x0'], r['y0'], r['x1'], r['y1']) print('num rects', len(p.rects)) print('---LINES---', len(p.lines)) "

Searching the Web

TANCON 2026 e-poster guidelines dimensions format

Reading Web Page

https://tancon2026hosur.com/abstract-submission.html

Searching the Web

tancon2026hosur.com e-poster guidelines format 16:9

Reading Web Page

https://tancon2026hosur.com/index.html

Searching the Web

tancon2026hosur.com "e-poster" size PDF upload instructions

Running Command

mkdir -p /tmp/workspace/tancon2026-poster/output && cd /tmp/workspace/tancon2026-poster && cat > make_chart.py << 'EOF' import matplotlib matplotlib.use("Agg") import matplotlib.pyplot as plt categories = ["High-priority", "Moderate-priority", "Low-priority"] counts = [5, 8, 11] colors = ["#D64550", "#F2A541", "#4C9F70"] fig, ax = plt.subplots(figsize=(3.6, 2.15), dpi=300) bars = ax.bar(categories, counts, color=colors, edgecolor="none", width=0.6) for b, c in zip(bars, counts): ax.text(b.get_x() + b.get_width()/2, b.get_height() + 0.3, str(c), ha="center", va="bottom", fontsize=11, fontweight="bold", color="#222222") ax.set_ylim(0, 13) ax.set_ylabel("No. of variants", fontsize=8.5) ax.set_title("Variant Priority Classification (N = 24)", fontsize=9.5, fontweight="bold", color="#123C69") ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) ax.tick_params(axis="x", labelsize=8.5) ax.tick_params(axis="y", labelsize=8) plt.tight_layout() plt.savefig("output/variant_chart.png", transparent=True) print("saved") EOF python3 make_chart.py

Writing File

~/tancon2026-poster/build_poster.py

"""
TANCON 2026 E-Poster - 16:9 refined layout
Genotype-Guided Insights: In Silico Variant Prioritization and Levodopa Response
Correlation in Early-Onset Parkinson's Disease
"""
from reportlab.lib.pagesizes import landscape
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.platypus import (BaseDocTemplate, PageTemplate, Frame, Paragraph,
                                 Spacer, Table, TableStyle, Image, FrameBreak, NextPageTemplate)
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_JUSTIFY, TA_CENTER

PAGE_W, PAGE_H = 13.333 * inch, 7.5 * inch  # 16:9

NAVY = colors.HexColor("#123C69")
TEAL = colors.HexColor("#1F6F8B")
LIGHT_BG = colors.HexColor("#F4F7F9")
RED = colors.HexColor("#D64550")
AMBER = colors.HexColor("#F2A541")
GREEN = colors.HexColor("#4C9F70")
DARK = colors.HexColor("#222222")
GRAY = colors.HexColor("#5A6B76")

# ---------- Styles ----------
title_style = ParagraphStyle("title", fontName="Helvetica-Bold", fontSize=17.5,
                              leading=20.5, textColor=colors.white, alignment=TA_LEFT)
authors_style = ParagraphStyle("authors", fontName="Helvetica-Bold", fontSize=10.5,
                                leading=13, textColor=colors.white, alignment=TA_LEFT)
affil_style = ParagraphStyle("affil", fontName="Helvetica", fontSize=9,
                              leading=11, textColor=colors.HexColor("#D8E4EC"), alignment=TA_LEFT)
badge_conf = ParagraphStyle("badge", fontName="Helvetica-Bold", fontSize=11,
                             leading=13, textColor=NAVY, alignment=TA_CENTER)
badge_sub = ParagraphStyle("badgesub", fontName="Helvetica", fontSize=7.3,
                            leading=9, textColor=NAVY, alignment=TA_CENTER)

sec_head_style = ParagraphStyle("sechead", fontName="Helvetica-Bold", fontSize=11.3,
                                 leading=13, textColor=colors.white, alignment=TA_LEFT,
                                 leftIndent=2)
body_style = ParagraphStyle("body", fontName="Helvetica", fontSize=8.9, leading=11.6,
                             textColor=DARK, alignment=TA_JUSTIFY, spaceAfter=5)
bullet_style = ParagraphStyle("bullet", fontName="Helvetica", fontSize=8.9, leading=11.6,
                               textColor=DARK, alignment=TA_LEFT, leftIndent=9,
                               bulletIndent=0, spaceAfter=4.5)
gene_style = ParagraphStyle("gene", fontName="Helvetica-Bold", fontSize=9.2, leading=12,
                             textColor=NAVY, alignment=TA_LEFT, spaceAfter=2)
kw_label_style = ParagraphStyle("kwlabel", fontName="Helvetica-Bold", fontSize=8.7,
                                 textColor=NAVY, alignment=TA_LEFT)
kw_style = ParagraphStyle("kw", fontName="Helvetica", fontSize=8.7, leading=11,
                           textColor=DARK, alignment=TA_LEFT)

def sec_header(text, color=TEAL):
    t = Table([[Paragraph(text, sec_head_style)]], colWidths=[None])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, -1), color),
        ("TOPPADDING", (0, 0), (-1, -1), 5),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
        ("LEFTPADDING", (0, 0), (-1, -1), 8),
        ("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
    ]))
    return t

# ---------- Content ----------
TITLE = ("Genotype-Guided Insights: In Silico Variant Prioritization and Levodopa "
          "Response Correlation in Early-Onset Parkinson's Disease")
AUTHORS = ("Rajasekhar Naidu Y<super rise=2 size=6>1</super> (Presenting Author), "
           "Vijayashankar P<super rise=2 size=6>1</super>, Anitha Saminathan<super rise=2 size=6>1</super>, "
           "Indhumathi Nagarathinam<super rise=2 size=6>2</super>")
AFFIL = ("<super rise=2 size=6>1</super>Apollo Hospital, Chennai &nbsp;&nbsp; "
         "<super rise=2 size=6>2</super>Sri Ramachandra Institute of Higher Education and Research, Chennai")

INTRO = ("Parkinson's disease (PD) is a progressive neurodegenerative disorder with considerable "
         "clinical and genetic heterogeneity. Although whole-exome sequencing (WES) has identified "
         "numerous PD-associated variants, many remain classified as <b>variants of uncertain "
         "significance (VUS)</b>, limiting clinical interpretation.<br/><br/>"
         "<b>Aim:</b> To evaluate the pathogenic potential of missense VUS using an integrated "
         "in silico framework and explore genotype-phenotype correlations, including levodopa "
         "responsiveness, in early-onset PD.")

METHODS = ("Whole-exome sequencing was performed in <b>50</b> clinically diagnosed PD patients. "
           "<b>24 missense VUS</b> identified in <b>17 patients</b> across <b>12 PD-associated genes</b> "
           "were analyzed using:<br/>"
           "&bull; Pathogenicity prediction algorithms<br/>"
           "&bull; Structural modeling &amp; stability assessment<br/>"
           "&bull; Functional annotation tools<br/><br/>"
           "Variants were classified as high-, moderate-, or low-priority. High-priority variants "
           "underwent <b>molecular docking</b> with FDA-approved anti-Parkinsonian drugs. Clinical "
           "features (age at onset, motor/non-motor symptoms, cognitive status, levodopa response) "
           "were correlated with genetic findings.")

RESULTS_BULLETS = [
    "Of 24 VUS: <b>5 high-priority</b>, <b>8 moderate-priority</b>, <b>11 low-priority</b>",
    "High-priority carriers showed <b>earlier disease onset</b>, greater phenotypic heterogeneity, and higher non-motor symptom burden",
    "<b>Variable levodopa responsiveness</b> observed among carriers of prioritized variants",
]

GENE_CALLOUT = ("<b>Key genes with high pathogenic potential &amp; structural destabilization:</b> "
                "DNAJC6, LRRK2, PLXNA4, DCTN1")

CONCLUSION = ("This integrated in silico framework effectively prioritized potentially pathogenic "
              "missense VUS and revealed clinically relevant associations between genetic variation, "
              "phenotypic heterogeneity, and therapeutic response.<br/><br/>"
              "Findings suggest specific variants may contribute to differences in disease severity, "
              "symptom profile, and dopaminergic therapy responsiveness &mdash; supporting "
              "<b>genotype-guided patient stratification</b> in early-onset Parkinson's disease.")

KEYWORDS = ("Early-onset Parkinson's disease &bull; VUS &bull; in silico prediction &bull; "
            "genotype-phenotype correlation &bull; molecular docking &bull; levodopa response")

# ---------- Header / footer drawing ----------
def draw_header_footer(canv, doc):
    canv.saveState()
    # Header band
    canv.setFillColor(NAVY)
    canv.rect(0, PAGE_H - 1.05 * inch, PAGE_W, 1.05 * inch, stroke=0, fill=1)
    # thin accent line under header
    canv.setFillColor(TEAL)
    canv.rect(0, PAGE_H - 1.05 * inch - 0.045 * inch, PAGE_W, 0.045 * inch, stroke=0, fill=1)

    # Conference badge top-right
    badge_w, badge_h = 1.75 * inch, 0.85 * inch
    bx, by = PAGE_W - badge_w - 0.18 * inch, PAGE_H - badge_h - 0.10 * inch
    canv.setFillColor(colors.white)
    canv.roundRect(bx, by, badge_w, badge_h, 6, stroke=0, fill=1)
    canv.setFillColor(NAVY)
    canv.setFont("Helvetica-Bold", 12.5)
    canv.drawCentredString(bx + badge_w / 2, by + badge_h - 0.28 * inch, "TANCON 2026")
    canv.setFont("Helvetica", 6.6)
    canv.drawCentredString(bx + badge_w / 2, by + badge_h - 0.44 * inch, "14th Annual Conference of TN &")
    canv.drawCentredString(bx + badge_w / 2, by + badge_h - 0.56 * inch, "Pondicherry Association of Neurologists")
    canv.setFont("Helvetica-Bold", 7.2)
    canv.drawCentredString(bx + badge_w / 2, by + badge_h - 0.74 * inch, "E-POSTER \u2022 ORIGINAL RESEARCH")

    # Footer band
    canv.setFillColor(LIGHT_BG)
    canv.rect(0, 0, PAGE_W, 0.42 * inch, stroke=0, fill=1)
    canv.setFillColor(TEAL)
    canv.rect(0, 0.42 * inch, PAGE_W, 0.02 * inch, stroke=0, fill=1)

    canv.restoreState()

# ---------- Document / frames ----------
doc = BaseDocTemplate("output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf",
                       pagesize=(PAGE_W, PAGE_H),
                       leftMargin=0, rightMargin=0, topMargin=0, bottomMargin=0)

MARGIN = 0.22 * inch
GUTTER = 0.14 * inch
TOP_Y = 0.55 * inch          # bottom of footer + spacer
HEADER_H = 1.05 * inch
BODY_TOP = PAGE_H - HEADER_H - 0.06 * inch
BODY_BOTTOM = 0.55 * inch
BODY_H = BODY_TOP - BODY_BOTTOM

col_w = (PAGE_W - 2 * MARGIN - 3 * GUTTER) / 4

frame_header = Frame(MARGIN, PAGE_H - HEADER_H, PAGE_W - 2*MARGIN - 1.95*inch, HEADER_H,
                      leftPadding=6, rightPadding=6, topPadding=6, bottomPadding=6, showBoundary=0)

frames_body = []
for i in range(4):
    x = MARGIN + i * (col_w + GUTTER)
    f = Frame(x, BODY_BOTTOM, col_w, BODY_H,
              leftPadding=4, rightPadding=4, topPadding=4, bottomPadding=4, showBoundary=0)
    frames_body.append(f)

frame_footer = Frame(MARGIN, 0.03*inch, PAGE_W - 2*MARGIN, 0.36*inch,
                      leftPadding=4, rightPadding=4, topPadding=2, bottomPadding=2, showBoundary=0)

template = PageTemplate(id="poster",
                         frames=[frame_header] + frames_body + [frame_footer],
                         onPage=draw_header_footer)
doc.addPageTemplates([template])

story = []

# ---- header content ----
story.append(Paragraph(TITLE, title_style))
story.append(Spacer(1, 5))
story.append(Paragraph(AUTHORS, authors_style))
story.append(Spacer(1, 2))
story.append(Paragraph(AFFIL, affil_style))
story.append(FrameBreak())

# ---- Column 1: Introduction ----
story.append(sec_header("INTRODUCTION", NAVY))
story.append(Spacer(1, 6))
story.append(Paragraph(INTRO, body_style))
story.append(FrameBreak())

# ---- Column 2: Materials and Methods ----
story.append(sec_header("MATERIALS &amp; METHODS", TEAL))
story.append(Spacer(1, 6))
story.append(Paragraph(METHODS, body_style))
story.append(FrameBreak())

# ---- Column 3: Results ----
story.append(sec_header("RESULTS", colors.HexColor("#B34756")))
story.append(Spacer(1, 6))
for b in RESULTS_BULLETS:
    story.append(Paragraph("&bull;&nbsp; " + b, bullet_style))
story.append(Spacer(1, 4))
story.append(Image("output/variant_chart.png", width=col_w - 8, height=(col_w - 8) * (2.15/3.6)))
story.append(Spacer(1, 4))
gene_box = Table([[Paragraph(GENE_CALLOUT, ParagraphStyle("gc", parent=body_style, fontSize=8.3,
                                                            textColor=NAVY, alignment=TA_LEFT))]],
                  colWidths=[col_w - 8])
gene_box.setStyle(TableStyle([
    ("BACKGROUND", (0, 0), (-1, -1), colors.HexColor("#EAF1F5")),
    ("BOX", (0, 0), (-1, -1), 0.75, TEAL),
    ("TOPPADDING", (0, 0), (-1, -1), 5),
    ("BOTTOMPADDING", (0, 0), (-1, -1), 5),
    ("LEFTPADDING", (0, 0), (-1, -1), 6),
    ("RIGHTPADDING", (0, 0), (-1, -1), 6),
]))
story.append(gene_box)
story.append(FrameBreak())

# ---- Column 4: Conclusion ----
story.append(sec_header("CONCLUSION", GREEN))
story.append(Spacer(1, 6))
story.append(Paragraph(CONCLUSION, body_style))
story.append(FrameBreak())

# ---- Footer: keywords ----
kw_table = Table([[Paragraph("KEYWORDS:", kw_label_style), Paragraph(KEYWORDS, kw_style)]],
                  colWidths=[0.85*inch, None])
kw_table.setStyle(TableStyle([
    ("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
    ("LEFTPADDING", (0, 0), (0, 0), 0),
    ("TOPPADDING", (0, 0), (-1, -1), 2),
    ("BOTTOMPADDING", (0, 0), (-1, -1), 2),
]))
story.append(kw_table)

doc.build(story)
print("PDF built.")
Running Command

cd /tmp/workspace/tancon2026-poster && python3 build_poster.py 2>&1 | tail -50

Running Command

cd /tmp/workspace/tancon2026-poster && python3 -c " import pypdf r = pypdf.PdfReader('output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') print('pages', len(r.pages)) p = r.pages[0] print('size', p.mediabox, float(p.mediabox.width)/72, float(p.mediabox.height)/72) " python3 -c "import fitz; print('pymupdf available')" 2>&1 | tail -3

Running Command

cd /tmp/workspace/tancon2026-poster && python3 -c " import pdfplumber with pdfplumber.open('output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') as pdf: for i,p in enumerate(pdf.pages): print('PAGE', i, p.width, p.height) print(repr(p.extract_text())[:800]) print('----') "

Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Running Command

cd /tmp/workspace/tancon2026-poster && python3 build_poster.py && python3 -c " import pypdf r = pypdf.PdfReader('output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') print('pages', len(r.pages)) p=r.pages[0] print('size', float(p.mediabox.width)/72, float(p.mediabox.height)/72) "

Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Running Command

cd /tmp/workspace/tancon2026-poster && python3 build_poster.py && python3 -c " import pypdf r = pypdf.PdfReader('output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') print('pages', len(r.pages)) "

Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Editing File

~/tancon2026-poster/build_poster.py

Successfully replaced 1 instance(s) of the string in '/tmp/workspace/tancon2026-poster/build_poster.py'
Running Command

cd /tmp/workspace/tancon2026-poster && python3 build_poster.py && python3 -c " import pypdf r = pypdf.PdfReader('output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') print('pages', len(r.pages)) p=r.pages[0] print('size_in', float(p.mediabox.width)/72, float(p.mediabox.height)/72) " && ls -la output/

Single page confirmed - the poster now renders as a proper 16:9 (13.333" x 7.5") single-page e-poster.

Summary

I converted and refined your poster into a clean, single-page 16:9 e-poster:

TANCON2026 EPoster PD GenomeToPhenome 16x9

PDF Document · PDF

What changed:
  • Aspect ratio: Confirmed/locked to true 16:9 widescreen (13.333" x 7.5", matching the standard PowerPoint/e-poster widescreen spec used across conferences).
  • Section structure aligned to TANCON 2026's required format for Original Research abstracts (per the official TANCON 2026 abstract guidelines): Introduction → Materials & Methods → Results → Conclusion (previously Background & Aims / Methodology / Results / Discussion / Conclusions were split across inconsistent blocks).
  • Layout: Reorganized into a 4-column scientific-poster grid with a navy header band (title, authors, affiliations) and a "TANCON 2026 · E-Poster · Original Research" badge, replacing the previous ad-hoc box layout.
  • Visual clarity: Added a color-coded bar chart for the variant priority classification (5 high / 8 moderate / 11 low, N=24) instead of plain text, and a highlighted callout box for the key genes (DNAJC6, LRRK2, PLXNA4, DCTN1) — consistent with e-poster best practice of using visuals over dense text blocks.
  • Readability: Consistent sans-serif (Helvetica) typography, condensed but complete scientific content, keywords footer retained.
Note on TANCON 2026 specifics: The official TANCON 2026 site publishes detailed formatting rules for abstract text submission (350-word limit, no images/figures in the abstract, Introduction/Materials & Methods/Results/Conclusion structure for original research) but does not publish a separate dimension/font-size spec sheet for the physical e-poster display itself. I applied that abstract-structure requirement to the poster sections, and used the widely-adopted 16:9 widescreen e-poster convention (13.33" x 7.5", min. 300 dpi images, sans-serif fonts) for the visual design, since that is the standard most neurology/medical conferences (including comparable 2026 meetings) specify for digital poster boards.
If TANCON 2026 later issues an official design template (logo, color scheme, or exact font-size minimums), send it over and I'll match the branding exactly.

can u make the above poster in this form

Running Command

cd /tmp/workspace/tancon2026-poster && python3 -c " import pypdf r = pypdf.PdfReader('/tmp/workspace/attachments/d0a81def-4942-4984-9f06-d275d6b6fb9e/TANCON2026_EPoster_AdaptiveDBS_Revised 2_16x9.pdf') print('pages', len(r.pages)) p = r.pages[0] print(p.mediabox, float(p.mediabox.width)/72, float(p.mediabox.height)/72) "

Reading File
Writing File

~/tancon2026-poster/build_poster_v2.py

"""
TANCON 2026 E-Poster - matched to reference template
(Adaptive DBS poster layout style) applied to the
Genotype-Guided Insights PD/VUS study.
"""
from reportlab.lib.pagesizes import landscape
from reportlab.lib.units import inch
from reportlab.lib import colors
from reportlab.pdfgen import canvas as canvas_mod
from reportlab.platypus import (BaseDocTemplate, PageTemplate, Frame, Paragraph,
                                 Spacer, Table, TableStyle, FrameBreak)
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.enums import TA_LEFT, TA_JUSTIFY, TA_CENTER

PAGE_W, PAGE_H = 960, 540  # 16:9 in points (13.333in x 7.5in)

NAVY      = colors.HexColor("#0B2545")
GOLD      = colors.HexColor("#F2A93B")
WHITE     = colors.white
BLUE_BRD  = colors.HexColor("#2E75B6")
BLUE_BG   = colors.HexColor("#EAF3FB")
TEAL_BRD  = colors.HexColor("#2FA88E")
TEAL_BG   = colors.HexColor("#EAF7F3")
GRAY_BRD  = colors.HexColor("#8C97A6")
GRAY_BG   = colors.HexColor("#F0F3F6")
RED_BRD   = colors.HexColor("#C0392B")
RED_BG    = colors.HexColor("#FBEAEA")
DARK      = colors.HexColor("#1B1B1B")

# ---------------- layout geometry ----------------
MARGIN   = 20
GUTTER   = 16
HEADER_H = 92
FOOTER_H = 12

col_w = (PAGE_W - 2 * MARGIN - GUTTER) / 2
content_top = PAGE_H - HEADER_H
content_bottom = FOOTER_H
box_gap = 10
box_h = (content_top - content_bottom - box_gap) / 2

LEFT_X  = MARGIN
RIGHT_X = MARGIN + col_w + GUTTER

TOP_BOX_Y    = content_bottom + box_h + box_gap   # y (bottom) of top box
BOTTOM_BOX_Y = content_bottom                     # y (bottom) of bottom box

HBAR_H = 20  # section header bar height

boxes = {
    "intro":  dict(x=LEFT_X,  y=TOP_BOX_Y,    w=col_w, h=box_h, border=BLUE_BRD, bg=BLUE_BG, hdr=NAVY, title="INTRODUCTION"),
    "methods":dict(x=LEFT_X,  y=BOTTOM_BOX_Y, w=col_w, h=box_h, border=TEAL_BRD, bg=TEAL_BG, hdr=NAVY, title="MATERIALS AND METHODS"),
    "results":dict(x=RIGHT_X, y=TOP_BOX_Y,    w=col_w, h=box_h, border=GRAY_BRD, bg=GRAY_BG, hdr=NAVY, title="RESULTS"),
    "conclusion":dict(x=RIGHT_X, y=BOTTOM_BOX_Y, w=col_w, h=box_h, border=RED_BRD, bg=RED_BG, hdr=RED_BRD, title="CONCLUSION"),
}

# ---------------- styles ----------------
title_style = ParagraphStyle("title", fontName="Helvetica-Bold", fontSize=14.5,
                              leading=17.5, textColor=WHITE, alignment=TA_CENTER)
authors_style = ParagraphStyle("authors", fontName="Helvetica-Bold", fontSize=10.5,
                                leading=13, textColor=GOLD, alignment=TA_CENTER)
affil_style = ParagraphStyle("affil", fontName="Helvetica-Oblique", fontSize=8.8,
                              leading=11, textColor=colors.HexColor("#E7ECF2"), alignment=TA_CENTER)

body_style = ParagraphStyle("body", fontName="Helvetica", fontSize=9.3, leading=12.1,
                             textColor=DARK, alignment=TA_JUSTIFY, spaceAfter=6)
bullet_style = ParagraphStyle("bullet", fontName="Helvetica", fontSize=9.1, leading=11.8,
                               textColor=DARK, alignment=TA_LEFT, leftIndent=10,
                               bulletIndent=0, spaceAfter=4.5)
gene_style = ParagraphStyle("gene", fontName="Helvetica-Bold", fontSize=8.7, leading=11,
                             textColor=NAVY, alignment=TA_LEFT, spaceAfter=0)

# ---------------- content ----------------
TITLE = ("Genotype-Guided Insights: In Silico Variant Prioritization and Levodopa "
         "Response Correlation in Early-Onset Parkinson's Disease")
AUTHORS = ("Rajasekhar Naidu Y<super rise=2 size=6>1</super> (Presenting Author), "
           "Vijayashankar P<super rise=2 size=6>1</super>, Anitha Saminathan<super rise=2 size=6>1</super>, "
           "Indhumathi Nagarathinam<super rise=2 size=6>2</super>")
AFFIL = ("<super rise=2 size=6>1</super>Apollo Hospital, Chennai &nbsp;&nbsp; "
         "<super rise=2 size=6>2</super>Sri Ramachandra Institute of Higher Education and Research, Chennai")

INTRO = ("Parkinson's disease (PD) is a progressive neurodegenerative disorder with considerable "
         "clinical and genetic heterogeneity. Although whole-exome sequencing (WES) has identified "
         "numerous PD-associated variants, many remain classified as variants of uncertain "
         "significance (VUS), limiting clinical interpretation.<br/><br/>"
         "This study aimed to evaluate the pathogenic potential of missense VUS using an integrated "
         "in silico framework and explore genotype-phenotype correlations, including levodopa "
         "responsiveness, in early-onset PD.")

METHODS = ("Whole-exome sequencing was performed in 50 clinically diagnosed PD patients. Twenty-four "
           "missense VUS identified in 17 patients across 12 PD-associated genes were analyzed using "
           "pathogenicity prediction, structural modeling, stability assessment, and functional "
           "annotation tools.<br/><br/>"
           "Variants were classified as high-, moderate-, or low-priority. High-priority variants "
           "underwent molecular docking with FDA-approved anti-Parkinsonian drugs. Clinical features "
           "(age at onset, motor/non-motor symptoms, cognitive status, levodopa response) were "
           "correlated with genetic findings.")

RESULTS_BULLETS = [
    "5 variants classified as high-priority, 8 as moderate-priority, and 11 as low-priority (N = 24)",
    "Variants in DNAJC6, LRRK2, PLXNA4, and DCTN1 showed high pathogenic potential and structural destabilization",
    "High-priority variant carriers showed earlier disease onset, greater phenotypic heterogeneity, and higher non-motor symptom burden",
    "Variable levodopa responsiveness observed among carriers of prioritized variants",
]

CONCLUSION = ("This integrated in silico framework effectively prioritized potentially pathogenic "
              "missense VUS and revealed clinically relevant associations between genetic variation, "
              "phenotypic heterogeneity, and therapeutic response.<br/><br/>"
              "Findings suggest specific variants may contribute to differences in disease severity, "
              "symptom profile, and dopaminergic therapy responsiveness, supporting genotype-guided "
              "patient stratification in early-onset Parkinson's disease.")

def sec_header_table(title, w, hdr_color):
    style = ParagraphStyle("shead", fontName="Helvetica-Bold", fontSize=10.3,
                            leading=12, textColor=WHITE, alignment=TA_LEFT)
    t = Table([[Paragraph("&#9679;&nbsp; " + title, style)]], colWidths=[w])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, -1), hdr_color),
        ("TOPPADDING", (0, 0), (-1, -1), 4),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 4),
        ("LEFTPADDING", (0, 0), (-1, -1), 8),
        ("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
    ]))
    return t

def variant_table(w):
    data = [["VARIANT PRIORITY CLASSIFICATION (N = 24)", ""],
            ["High-priority", "5"],
            ["Moderate-priority", "8"],
            ["Low-priority", "11"]]
    t = Table(data, colWidths=[w * 0.72, w * 0.28])
    t.setStyle(TableStyle([
        ("SPAN", (0, 0), (1, 0)),
        ("BACKGROUND", (0, 0), (-1, 0), NAVY),
        ("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
        ("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
        ("FONTSIZE", (0, 0), (-1, 0), 8.3),
        ("ALIGN", (0, 0), (-1, 0), "CENTER"),
        ("FONTNAME", (0, 1), (0, -1), "Helvetica"),
        ("FONTSIZE", (0, 1), (-1, -1), 8.6),
        ("FONTNAME", (1, 1), (1, -1), "Helvetica-Bold"),
        ("TEXTCOLOR", (1, 1), (1, -1), RED_BRD),
        ("ALIGN", (1, 1), (1, -1), "CENTER"),
        ("ROWBACKGROUNDS", (0, 1), (-1, -1), [colors.HexColor("#EAF3FB"), WHITE]),
        ("GRID", (0, 0), (-1, -1), 0.5, colors.HexColor("#C7D3DE")),
        ("TOPPADDING", (0, 0), (-1, -1), 3),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 3),
    ]))
    return t

def gene_callout(w):
    p = Paragraph("<b>High pathogenic potential &amp; structural destabilization:</b> "
                  "DNAJC6, LRRK2, PLXNA4, DCTN1", gene_style)
    t = Table([[p]], colWidths=[w])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0, 0), (-1, -1), colors.HexColor("#FFF3D6")),
        ("BOX", (0, 0), (-1, -1), 0.75, GOLD),
        ("TOPPADDING", (0, 0), (-1, -1), 4),
        ("BOTTOMPADDING", (0, 0), (-1, -1), 4),
        ("LEFTPADDING", (0, 0), (-1, -1), 6),
        ("RIGHTPADDING", (0, 0), (-1, -1), 6),
    ]))
    return t

# ---------------- background drawing ----------------
def draw_background(canv, doc):
    canv.saveState()
    # header
    canv.setFillColor(NAVY)
    canv.rect(0, PAGE_H - HEADER_H, PAGE_W, HEADER_H, stroke=0, fill=1)
    canv.setFillColor(GOLD)
    canv.rect(0, PAGE_H - HEADER_H - 2.5, PAGE_W, 2.5, stroke=0, fill=1)
    canv.setFillColor(RED_BRD)
    canv.rect(0, PAGE_H - HEADER_H - 5.5, PAGE_W, 3, stroke=0, fill=1)

    # boxes (rounded rect bg + border) then header bars on top
    for key, b in boxes.items():
        canv.setFillColor(b["bg"])
        canv.setStrokeColor(b["border"])
        canv.setLineWidth(1.6)
        canv.roundRect(b["x"], b["y"], b["w"], b["h"], 8, stroke=1, fill=1)

    # footer accent line
    canv.setFillColor(NAVY)
    canv.rect(0, 0, PAGE_W, 4, stroke=0, fill=1)
    canv.setFillColor(GOLD)
    canv.rect(0, 4, PAGE_W, 1.5, stroke=0, fill=1)
    canv.restoreState()

# ---------------- document ----------------
doc = BaseDocTemplate("output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf",
                       pagesize=(PAGE_W, PAGE_H),
                       leftMargin=0, rightMargin=0, topMargin=0, bottomMargin=0)

frame_header = Frame(0, PAGE_H - HEADER_H, PAGE_W, HEADER_H,
                      leftPadding=20, rightPadding=20, topPadding=8, bottomPadding=10, showBoundary=0)

PAD = 10
frame_intro = Frame(boxes["intro"]["x"] + PAD, boxes["intro"]["y"] + PAD,
                     boxes["intro"]["w"] - 2*PAD, boxes["intro"]["h"] - 2*PAD,
                     leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0, showBoundary=0)
frame_methods = Frame(boxes["methods"]["x"] + PAD, boxes["methods"]["y"] + PAD,
                       boxes["methods"]["w"] - 2*PAD, boxes["methods"]["h"] - 2*PAD,
                       leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0, showBoundary=0)
frame_results = Frame(boxes["results"]["x"] + PAD, boxes["results"]["y"] + PAD,
                       boxes["results"]["w"] - 2*PAD, boxes["results"]["h"] - 2*PAD,
                       leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0, showBoundary=0)
frame_conclusion = Frame(boxes["conclusion"]["x"] + PAD, boxes["conclusion"]["y"] + PAD,
                          boxes["conclusion"]["w"] - 2*PAD, boxes["conclusion"]["h"] - 2*PAD,
                          leftPadding=0, rightPadding=0, topPadding=0, bottomPadding=0, showBoundary=0)

template = PageTemplate(id="poster",
                         frames=[frame_header, frame_intro, frame_methods, frame_results, frame_conclusion],
                         onPage=draw_background)
doc.addPageTemplates([template])

story = []

# header content
story.append(Paragraph(TITLE, title_style))
story.append(Spacer(1, 3))
story.append(Paragraph(AUTHORS, authors_style))
story.append(Spacer(1, 1))
story.append(Paragraph(AFFIL, affil_style))
story.append(FrameBreak())

inner_w = boxes["intro"]["w"] - 2*PAD
# INTRODUCTION
story.append(sec_header_table("INTRODUCTION", inner_w, NAVY))
story.append(Spacer(1, 5))
story.append(Paragraph(INTRO, body_style))
story.append(FrameBreak())

# MATERIALS AND METHODS
story.append(sec_header_table("MATERIALS AND METHODS", inner_w, NAVY))
story.append(Spacer(1, 5))
story.append(Paragraph(METHODS, body_style))
story.append(FrameBreak())

# RESULTS
story.append(sec_header_table("RESULTS", inner_w, NAVY))
story.append(Spacer(1, 5))
for b in RESULTS_BULLETS:
    story.append(Paragraph("&#9679;&nbsp; " + b, bullet_style))
story.append(Spacer(1, 4))
story.append(variant_table(inner_w))
story.append(FrameBreak())

# CONCLUSION
story.append(sec_header_table("CONCLUSION", inner_w, RED_BRD))
story.append(Spacer(1, 5))
story.append(Paragraph(CONCLUSION, body_style))

doc.build(story)
print("PDF v2 built.")
Running Command

cd /tmp/workspace/tancon2026-poster && mkdir -p output && python3 build_poster_v2.py && python3 -c " import pypdf r = pypdf.PdfReader('output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') print('pages', len(r.pages)) p=r.pages[0] print('size_in', float(p.mediabox.width)/72, float(p.mediabox.height)/72) "

Running Command

cd /tmp/workspace/tancon2026-poster && python3 -c " import pdfplumber with pdfplumber.open('output/TANCON2026_EPoster_PD_GenomeToPhenome_16x9.pdf') as pdf: p = pdf.pages[0] print(p.extract_text()) " ls -la output/

The layout and content are all in place and rendering correctly on a single 16:9 slide, matching the reference template's structure exactly - navy header with gold/red accent lines, four rounded colored boxes (Introduction/blue, Materials & Methods/teal, Results/gray, Conclusion/red) in a 2x2 grid, section headers with bullet markers, and a data table in the Results box matching the "outcomes overview" style from your reference.

TANCON2026 EPoster PD GenomeToPhenome 16x9

PDF Document · PDF

What I matched from your Adaptive DBS reference:
  • Dark navy header band with centered bold white title, gold/amber author line, italic affiliation line
  • Double accent line under the header (gold then red)
  • 2x2 grid of rounded, color-bordered boxes instead of the 4-column layout from before:
    • Introduction - blue border / light blue fill
    • Materials and Methods - teal border / light mint fill
    • Results - gray border / light gray fill
    • Conclusion - red border / light pink fill (matching the reference's red conclusion box)
  • Section header bars (navy for Introduction/Methods/Results, red for Conclusion) with a bullet marker, exactly like your reference
  • A summary data table inside the Results box ("VARIANT PRIORITY CLASSIFICATION, N=24") styled like the reference's "PATIENT OUTCOMES OVERVIEW" table - navy header row, alternating row shading, bold red values
  • Thin navy/gold footer line at the bottom, matching the reference's minimal footer
I dropped the earlier 4-column layout, the TANCON badge, and the keywords footer since your reference template doesn't use them - this version mirrors its exact visual structure while keeping all your original PD/VUS study content (Introduction, Methods, 4 Results bullets + the DNAJC6/LRRK2/PLXNA4/DCTN1 gene finding, Conclusion).
This is a shared conversation. Sign in to Orris to start your own chat.