콘텐츠로 이동

계약서 0: 신규 Plot Type 요청 — 일반 번들 제출 스펙

목적: 아직 fig-atlas에 존재하지 않는 새로운 형태의 시각화를 처음 요청할 때,
upstream pipeline이 제출해야 하는 번들의 일반 구조와 필수 요소를 정의합니다.

기존 3개 계약서(de_go, integrated, cross_condition)에 해당하는 그림은
해당 계약서를 따르면 됩니다. 이 문서는 그 어디에도 해당하지 않는 신규 plot type에 적용됩니다.


번들 폴더 구조 (최소 요구사항)

raw_data/<study>/<project_name>/<bundle_name>/
  inputs/
    data.csv            # 필수 — 렌더러가 직접 읽는 표 (아래 규칙 참고)
  metadata/
    metadata.yaml       # 필수 — plot_type + plot_params 스냅샷
  example/
    plot.png            # 강력 권장 — 참고용 출력 이미지 (없으면 설명으로 대체)
    script.R            # 선택 — 이 데이터로 처음 그렸던 원본 스크립트 (있으면 렌더러 합성에 참고)

한 프로젝트(최종 figure 하나) = 여러 번들의 집합.
서브패널 하나 = 번들 하나.


1. inputs/data.csv 작성 규칙

규칙 설명
컬럼명 대소문자 일치 pandas가 컬럼명으로 매칭하므로 이름은 계약서/metadata.yaml에 적힌 그대로
원본값 보존 로그변환·반올림·표시용 반올림 금지 — 축약 이름 변환은 fig-atlas config에서 처리
전체 행 포함 통계 필터(padj < 0.05 등)를 적용하지 않은 전체 결과를 넣는 것이 원칙 — 임계값은 config가 담당
Absent = 행 없음 어떤 조합이 유의하지 않거나 결과가 없으면 NaN 행을 만들지 말고 그냥 행을 생략
컬럼 순서 무관 순서는 중요하지 않으나 이름은 정확히 일치
인코딩 UTF-8, 줄바꿈 LF 권장

2. metadata/metadata.yaml 작성 규칙

figure_id: <bundle_name>                  # 예: feature_enrichment_cluster1
plot_type: <renderer_slug>                # 예: peak_feature_enrichment
                                          #   (기존 렌더러가 없으면 새 이름을 제안)
data_source: <upstream_tool_and_version>  # 예: "cmg-seqviewer 3.2 / masigpro 1.4"

# 이 데이터로 처음 그렸을 때의 시각화 파라미터 스냅샷.
# fig-atlas 쪽에서 configs/config_<project>.yaml이 최종 소스가 되므로,
# 여기 값은 "한 번 그려봤을 때 잘 나온 값"이면 충분합니다.
# 어떤 필드가 존재하는지(스키마)는 정확히 기술해 주세요 — 값은 나중에 조정.
plot_params:
  # 예:
  # fdr_max: 0.05
  # geneset_col: "cluster_id"
  # feature_col: "Feature"
  # odds_ratio_col: "OddsRatio"
  # sig_color: "#e57373"
  # 이 plot_type에서 의미 있는 파라미터를 모두 열거

# 이 번들이 속한 컬럼/패널 위치 (알고 있을 경우만)
panel_position:
  col: 2          # 0-indexed
  row: 3          # 0-indexed, row 0 = summary row

신규 렌더러가 필요한 경우: plot_type에 새 이름을 적고, example/plot.png와 example/script.R을 함께 제출하면 fig-atlas 쪽에서 렌더러를 합성합니다(SKILL.md Case C 절차). 기존 렌더러 목록은 docs/reference/renderer_inventory.md를 참고하세요(범용 fig_atlas/renderers/, 오믹스 fig_atlas_omics/renderers/). 새로 합성한 렌더러는 파라미터 스키마(SCHEMA)를 함께 갖추며(테스트가 강제), 그 뒤로는 fa param scaffold <renderer>가 조정 가능한 전체 파라미터를 설명과 함께 보여 줍니다.


3. example/plot.png — 권장하는 이유

fig-atlas는 기존 3개 계약서에 속하지 않는 번들을 처음 소비할 때
렌더러 합성 → 렌더 결과 → 제출본과 시각적 비교 루프를 돌립니다.
예시 이미지 없이 컬럼 스펙만 있으면 이 루프를 돌릴 수 없어 레이아웃 확인에
추가 왕복이 발생합니다. 가능하면 항상 포함해 주세요.


4. 기존 번들 타입과 신규 번들 타입 구분

이미 계약서가 있는 타입 이 문서를 사용하는 타입
volcano, go_cluster_dot, go_bar, go_rrvgo_treemap feature_enrichment, ma_plot
multi_group_heatmap, ts_profile, venn, count_summary peak_feature_composition, coverage_track
cross_condition_heatmap, cross_condition_dotplot ts_clusters (새 컬럼 조합), 기타

한 프로젝트 안에 기존 타입 번들과 신규 타입 번들이 섞여 있어도 됩니다.
기존 타입 번들은 해당 계약서를, 신규 타입 번들은 이 문서를 따르면 됩니다.


5. 여러 번들을 한 번에 제출할 때 (새 프로젝트 전체)

프로젝트 루트에 project_manifest.yaml을 선택적으로 추가할 수 있습니다:

project_name: lab-atac-acute-ts-integrated   # config_<project>.yaml의 이름
study: 2026-lab-atac
layout_family: atac_integrated                      # 레이아웃 패밀리 힌트 (선택)

# 번들 목록과 각각이 사용하는 렌더러 (없으면 metadata.yaml에서 추론)
bundles:
  - name: feature_enrichment_bundle
    plot_type: peak_feature_enrichment
    panel: [row1-6, col2]
  - name: ts_clusters_bundle
    plot_type: multi_group_heatmap
    panel: [row1-6, col0]
  # ...

이 파일이 있으면 fig-atlas 쪽에서 config를 자동 생성할 때 정확도가 높아집니다.


6. 제출 체크리스트

[ ] inputs/data.csv — UTF-8, 전체 결과, 컬럼명 정확
[ ] metadata/metadata.yaml — figure_id, plot_type, data_source, plot_params 포함
[ ] example/plot.png — 기존 스크립트/도구로 한 번 그린 결과 (권장)
[ ] example/script.R 또는 script.py — 원본 스크립트 (선택, 있으면 렌더러 합성 품질 향상)
[ ] 신규 렌더러가 필요한 경우: plot_type에 새 이름을 적고 example/ 반드시 포함
[ ] 방향성이 있는 데이터(UP/DOWN)를 포함하면: 단일 방향인지 혼재 여부를 명시

이 계약서 자체가 새 번들 타입을 명세하는 것은 아닙니다. 번들별 구체적 컬럼 스펙은
해당 번들이 fig-atlas에 처음 소비된 이후 별도 계약서(혹은 기존 계약서 개정)로 문서화됩니다.