# BodyCompMouseDXA (바디컴프마우스디엑스에이)

> **연구·참고용 — IACUC 승인 동물실험 데이터의 사후 분석 보조용입니다. 임상 의사결정에 사용하지 마십시오.**
> This is a research/post-hoc analysis aid for IACUC-approved rodent studies. It is **not** a clinical decision tool, **not** a regulated medical device, and **not** a substitute for the validated proprietary software shipped with PIXImus / EchoMRI / Bruker minispec / SkyScan.

## 목적 (Purpose)

마우스 in-vivo whole-body imaging raw 데이터(PIXImus DXA DICOM / EchoMRI .csv / Bruker minispec qNMR .txt / SkyScan microCT .csv stack)를 한 곳에서 표준화·통합 분석하기 위한 standalone Streamlit MVP. DIO 모델별 참조 밴드와 비교하고, 근감소성 비만(sarcopenic obesity), drug-on/drug-off 상호작용, baseline-corrected ANCOVA + mixed-effect repeated measures 통계 결과를 한국어 manuscript-ready 형식으로 export 한다.

- **도메인**: Obesity (비만대사질환)
- **카테고리**: 동물실험 도구 (raw → 자동 분석 파이프라인)
- **타깃 사용자**: 비만/대사 동물실험 wet-lab 연구자, in vivo phenotyping core facility analyst

## 5개 핵심 기능

1. **Multi-format raw ingest** — PIXImus DICOM (`pydicom` 사용 시), EchoMRI `.csv`, Bruker minispec qNMR `.txt`, SkyScan microCT `.csv` 모두 단일 canonical schema로 적재.
   - Schema: `animal_id, model, group, sex, time_point_wk, day_label, body_weight_g, fat_g, lean_g, water_g, fat_pct, lean_pct, BMD, BMC, visceral_fat_proxy_g, appendicular_lean_g, drug_phase, source_format`
2. **Auto ROI + segmentation heuristic** — whole-body / abdomen / hindlimb auto-ROI는 메타데이터 기반 휴리스틱(visceral vs subcutaneous fat 비율, muscle compartment ≈ appendicular lean). 실제 image segmentation은 stub이며 raw DICOM pixel data는 처리하지 않음.
3. **Multi-time-point trajectory + DIO model-specific reference** — DIO C57BL/6J(chow vs HFD60), ob/ob, db/db, NZO, KK-Ay, STAM, GAN-DIO-NASH, CDAA-HFD 8개 모델 × 6 time-point reference band. percent change, slope (g/wk), nadir, regain after nadir.
4. **Sarcopenic obesity index + bone+body 통합** — FMI, LMI, ALM/BW, sarcopenic obesity index = lean/(lean+fat). UI 슬라이더로 cutoff 조정. BMD trajectory + cortical vs trabecular 표시 가능.
5. **Cohort ANCOVA + 한국어 export** — baseline-corrected ANCOVA, mixed-effect repeated measures(`statsmodels` 있으면 `mixedlm`, 없으면 per-time `scipy.stats.f_oneway` fallback), drug-on/drug-off interaction (Welch t-test), Plotly trajectory + violin + manuscript-ready CSV/PNG.

## 기술 스택

- Python 3.11+
- **필수**: `numpy`, `pandas`, `scipy`
- **선택**: `statsmodels` (없으면 scipy fallback), `plotly` (없으면 streamlit native chart), `streamlit` (UI 사용 시), `pydicom` (DICOM 직접 읽기 시)

외부 네트워크/API 호출 없음, 전역 패키지 설치 시도 없음.

## 실행법

```bash
cd "2026-05-11-2-body-comp-mouse-dxa"

# 1) 합성 데이터 생성 (이미 있어도 재실행 안전 — seed=42 결정론적)
python3 data/synthetic_generator.py

# 2-a) CLI demo (streamlit/plotly 없이도 동작)
python3 main.py --demo

# 2-b) Streamlit UI
streamlit run main.py
```

## 데이터 (합성)

`data/synthetic/` 폴더에 6개 cohort CSV (seed=42):

| 파일 | 모델 | n | 설계 |
| --- | --- | --- | --- |
| `cohort_C57BL6_DIO.csv` | C57BL/6J + HFD60% | 8 | wk0–20 6 시점 |
| `cohort_obob.csv` | ob/ob | 8 | wk0–20 6 시점 |
| `cohort_dbdb.csv` | db/db | 8 | wk0–20 6 시점 |
| `cohort_STAM.csv` | STZ + HFD (NASH) | 6 | wk0–20 6 시점 |
| `cohort_control_chow.csv` | C57BL/6J chow | 8 | wk0–20 6 시점 |
| `cohort_GLP1RA_STEP4_mimic.csv` | DIO + GLP-1RA STEP-4 mimic | 12 | induction(0–12wk) → drug-on(12–16wk) → drug-off(16–20wk) |

총 50 마리, 300 행. drug-on/drug-off 실험군: ~20% 체중 감소 → 70% rebound regain 패턴을 모사.

## 검수 체크리스트

- [x] `python3 -c "import ast; ast.parse(open('main.py').read())"` — syntax OK
- [x] `python3 -c "import ast; ast.parse(open('analysis.py').read())"` — syntax OK
- [x] `python3 -c "import ast; ast.parse(open('dio_reference.py').read())"` — syntax OK
- [x] `python3 -c "import ast; ast.parse(open('data/synthetic_generator.py').read())"` — syntax OK
- [x] 6개 합성 CSV 모두 18-column canonical schema header 일치
- [x] `python3 main.py --demo` 정상 출력 (ANCOVA p, mixed-effects per-time, trajectory, 근감소성 비율, 참조 밴드 분류)
- [x] statsmodels / plotly / pydicom 없는 환경에서도 동작 (각각 fallback 또는 friendly RuntimeError)

자세한 결과: `QA.md` 참조.

## 출처 (Sources, offline summary)

- **PIXImus DXA**: Lunar/GE small-animal densitometer 표준 출력 — 본 도구는 데이터 형식 호환만 다루며 GE/Lunar 소프트웨어 결과를 대체하지 않음.
- **EchoMRI**: EchoMRI Body Composition Analyzer 매뉴얼 (.csv export 컬럼 형식 참조).
- **Bruker minispec qNMR**: Bruker minispec mq series TD-NMR 마우스 body composition 측정.
- **SkyScan microCT**: Bruker SkyScan 1176/1276 in vivo microCT preclinical scanner.
- **DIO reference band**: Jackson Labs DIO Series 380050 phenotype + 공개된 obese-mouse phenotyping 종설(예: Suriano et al., 2021; Kleinert et al., 2018) 중심 typical adult-male 값 기반. 본 도구의 reference dict는 manufacturer-validated reference range가 아님.
- **STEP-4 design mimic**: Rubino D et al., JAMA 2021 — 단, 임상 시험 데이터는 사용하지 않으며 마우스 합성 데이터에 trial 구조(induction → drug-on → drug-off)만 차용.

## 의학적 디스클레이머 (반복)

이 도구는 **연구·참고용**이며 **IACUC 승인 동물실험 데이터의 사후 분석**을 위해 설계되었다.
- 임상 의사결정용 아님
- 의료기기 인허가(FDA/MFDS) 미해당
- PIXImus / EchoMRI / Bruker minispec / SkyScan 정품 분석 소프트웨어를 대체하지 않음
- 인간 DXA / BIA / MRI 데이터에 적용 금지
- 합성 데이터는 실측 데이터의 통계적 특성을 모방한 것일 뿐, 실제 실험 결과로 인용 불가
