Files
VesiscanClinicalAndroid/app
dw.jang 9387552e18 feat(alignment): V3 CenterAligner 2-Pass 이식 (piezophantomtest #35 BVCV)
Python piezophantomtest ffd436b (2026-07-15 PR #35 'alignment bvcv 규칙 추가')
의 `vesiscan_test.alignment.CenterAligner` 를 Kotlin 으로 이식.

기존 V2 (실시간 sliding window 6-stage) 와 병행. V3 는 Clinical batch 전용:

Pass 1 (scanSelect):
  - 5 위치 (0/1/2/3/4 cm) × 20 cycle → sliding window 10 → 11 trace 씩
  - mean-scan 으로 base 검출 (apply_cross=false) → nch, ch3 판정
  - per-trace cross 검출 → BV 계산 → std/mean = bv_cv
  - Rule A (ch3 필수 + per-trace 검출률 ≥ CH3_HIT_MIN 0.80 + max nch + min bv_cv tie)

Pass 2 (guide):
  - 재측정 한 위치 → target 기준 (ch3='O' & 검출률≥80% & nch≥t.nch &
    bv_cv ≤ t.bv_cv × (1 + bvCvTol)) 충족 시 STOP, 아니면 MOVE_UP.

포팅 원칙:
  - MethodDRunner (기존) 재사용, apply_cross=false/true 두 모드 활용.
  - PiezoBVEstimator.estimateBladderVolume6ch (기존) 재사용.
  - alignment_selection.py 의 select_cm(rule='A', tie='bvcv') 로직 완전 이식.

검증 (CenterAlignerValidationTest, data123 인체 3 세션):
  - Python reference 와 nch/ch3/ch3_hit 완전 일치.
  - bv_cv 오차 <2% (정상 case). BV 발산 케이스 (ch3=X) 만 큰 오차 —
    Rule A 에서 어차피 탈락하므로 최종 선택 영향 없음.
  - 최종 선택 위치 = cm=3 (Python 과 일치).

주의: test 실행 전 PiezoHW.activePreset 를 V1 로 명시 설정 필요.
      실기기는 BleManager 가 device name 으로 autoDetectPreset 처리.

UI 통합 (Pass 1 위치 안내 + Pass 2 판정 화면) 은 후속 작업.
2026-07-15 12:13:34 +09:00
..