CBP-Lab Tasarım Belgesi
Yazılım Tasarım Belgesi · v0.1 taslak

CBP-Lab: Çift yıldız çevresindeki gezegen adaylarının zamanlama, astrometri ve dinamik ile sınanması

Tutulma zamanlamasıyla (O–C) önerilmiş gezegen ve kahverengi cüce adaylarını Gaia DR4 epoch astrometrisiyle birleştirip N-body kararlılık analiziyle eleyen, makine öğrenmesiyle hızlandırılmış bir analiz platformu.

Tarih 23 Eylül 2026 Kapsam Yüksek lisans tezi (MSc), doktoraya genişletilebilir Sabit tarih Gaia DR4 · 2 Aralık 2026 Durum Danışman görüşmesi öncesi taslak

§1Kapsam ve araştırma sorusu

Yazılımı değil, önce cevaplayacağı soruyu tanımlıyoruz. Her bileşen bu soruya hizmet ediyorsa kalır.

Araştırma sorusu. Tutulma zamanlamasıyla önerilmiş çift yıldız çevresi cisimler (NN Ser, Kepler-451, HW Vir, NY Vir…) Gaia DR4 astrometrisiyle tutarlı mı? Tutarlıysa gerçek kütleleri ve yörünge eğimleri nedir? Bu çözümler milyonlarca yıl dinamik olarak kararlı kalabiliyor mu?

Kapsam içi (MSc)

  • Tutulma zamanlarını toplama, O–C diyagramı, LTT modeli fit etme
  • Manyetik aktivite alternatifi: Applegate enerji testi
  • Gaia DR3 (RUWE, yörünge çözümleri) ve DR4 epoch astrometrisini içe aktarma
  • O–C + astrometri ortak Bayesçi fit: gerçek kütle ve eğim
  • REBOUND ile N-body kararlılık: MEGNO, kararlılık haritaları
  • ML kararlılık vekil modeli (surrogate) ve aktif öğrenme
  • Enjeksiyon-geri kazanım testleri: DR4 öncesi hattı doğrulama

Kapsam dışı (şimdilik, doktora)

  • Gezegen oluşumu, disk ve popülasyon sentezi
  • Yıldız evrimi ve ortak zarf fazı modellemesi
  • Atmosfer, iklim ve yaşanabilirlik
  • Özel bir N-body motoru yazmak (REBOUND kullanılacak)

Mimari bunlara kapı bırakıyor. DynamicsBackend ve TimingModel arayüzleri eklenti mantığıyla genişletilebilir (§7, §14).

§2Aktörler

Sistemle etkileşen insanlar ve dış sistemler.

AktörTürSistemden beklentisi
Araştırmacı (sen)Birincil, insanVeri girer, fit ve simülasyon çalıştırır, sonuç ve figür üretir.
Danışman / Jüriİkincil, insanRaporu inceler, deneyi aynı config ile yeniden üretebilmek ister.
Gaia Arşivi (ESA TAP)Dış sistemDR3 kaynak ve yörünge tabloları, DR4 epoch astrometrisi.
MAST / TESSDış sistemIşık eğrileri; yeni tutulma anları bunlardan ölçülür.
Literatür / Grup verisiDış kaynakYayınlanmış tutulma zamanları; bölümün kendi O–C gözlemleri.
Hesaplama altyapısıDış sistemYerel CPU/GPU havuzu; ileride TRUBA (TÜBİTAK ULAKBİM) kümesi.

§3Use case diyagramı

16 use case, altı paket. Kesikli oklar «include» ilişkisi: ok yönündeki use case, çağıranın zorunlu parçasıdır.

%%{init: {"flowchart":{"curve":"basis","nodeSpacing":28,"rankSpacing":60}}}%%
flowchart LR
  R["Araştırmacı"]:::actor
  D["Danışman / Jüri"]:::actor
  G["Gaia Arşivi"]:::ext
  M["MAST / TESS"]:::ext
  H["Hesaplama altyapısı"]:::ext

  subgraph VERI["Veri"]
    UC01(["UC-01 Hedef sistem kaydet"])
    UC02(["UC-02 Tutulma zamanlarını içe aktar"])
    UC03(["UC-03 TESS'ten tutulma anı ölç"])
  end
  subgraph ZAM["Zamanlama analizi"]
    UC04(["UC-04 Efemeris ve O–C üret"])
    UC05(["UC-05 LTT modeli fit et"])
    UC06(["UC-06 Applegate testi"])
  end
  subgraph AST["Astrometri"]
    UC07(["UC-07 Gaia verisi içe aktar"])
    UC08(["UC-08 Tespit edilebilirlik hesapla"])
    UC09(["UC-09 O–C + astrometri ortak fit"])
  end
  subgraph DIN["Dinamik"]
    UC10(["UC-10 Tek N-body kararlılık koşusu"])
    UC11(["UC-11 Kararlılık haritası üret"])
    UC12(["UC-12 Posterioru dinamik olarak filtrele"])
  end
  subgraph ML["Makine öğrenmesi"]
    UC13(["UC-13 Vekil modeli eğit"])
    UC14(["UC-14 Enjeksiyon-geri kazanım testi"])
  end
  subgraph REP["Rapor ve tekrar üretim"]
    UC15(["UC-15 Figür ve rapor üret"])
    UC16(["UC-16 Deneyi yeniden üret"])
  end

  R --- UC01 & UC02 & UC03 & UC05 & UC06 & UC08 & UC09 & UC11 & UC12 & UC13 & UC14 & UC15
  D --- UC15 & UC16
  M --- UC03
  G --- UC07
  H --- UC10

  UC03 -.->|include| UC02
  UC05 -.->|include| UC04
  UC06 -.->|include| UC05
  UC09 -.->|include| UC05
  UC09 -.->|include| UC07
  UC08 -.->|include| UC07
  UC11 -.->|include| UC10
  UC12 -.->|include| UC10
  UC12 -.->|include| UC13
  UC13 -.->|include| UC11
  UC14 -.->|include| UC09

  classDef actor fill:#E3ECF4,stroke:#2C5E8C,color:#18212B,font-weight:bold
  classDef ext fill:#F7EBD9,stroke:#9A5A10,color:#18212B
  

Şekil 1. Mavi: insan aktörler. Turuncu: dış sistemler. Tezin omurgası UC-05 → UC-09 → UC-12 zinciridir.

IDUse caseÖncelikKısa açıklama
UC-01Hedef sistem kaydetçekirdekÇiftin kütleleri, periyodu, Gaia source_id'si, uzaklığı.
UC-02Tutulma zamanlarını içe aktarçekirdekLiteratür tabloları ve grup verisi; hepsi BJD_TDB'ye çevrilir.
UC-03TESS'ten tutulma anı ölçikincilIşık eğrisinden orta-tutulma anı ve hatası (Kwee–van Woerden veya model fit).
UC-04Efemeris ve O–C üretçekirdekDoğrusal/kuadratik efemeris, döngü sayısı E, kalanlar.
UC-05LTT modeli fit etçekirdek1–3 cisimli ışık-yolu modeli; BIC ve kanıt (evidence) ile model seçimi.
UC-06Applegate testiçekirdekSinyali yıldız manyetik döngüsü açıklayabilir mi? Enerji bütçesi.
UC-07Gaia verisi içe aktarDR4DR3 RUWE ve NSS çözümleri; 2 Aralık'tan sonra DR4 epoch verisi.
UC-08Tespit edilebilirlik hesaplaçekirdekHer aday için α (μas) ve Gaia hassasiyetiyle karşılaştırma. Hedef seçimini belirler.
UC-09O–C + astrometri ortak fitDR4Tezin ana katkısı: sin i kırılır, gerçek kütle çıkar.
UC-10Tek N-body kararlılık koşusuçekirdekREBOUND, IAS15/WHFast, MEGNO, çarpışma ve fırlatılma tespiti.
UC-11Kararlılık haritası üretçekirdeka–e ızgarası üzerinde binlerce koşu; paralel çalışır.
UC-12Posterioru dinamik olarak filtreleçekirdekFit posteriorundaki çözümlerin yüzde kaçı kararlı?
UC-13Vekil modeli eğitMLp(kararlı | θ) sınıflandırıcısı. Önce SPOCK taban çizgisi, sonra sisteme özel model.
UC-14Enjeksiyon-geri kazanım testiçekirdekSahte DR4 verisine bilinen cisim ekle, hat onu geri buluyor mu?
UC-15Figür ve rapor üretikincilMakale kalitesinde O–C, köşe (corner) ve kararlılık haritası figürleri.
UC-16Deneyi yeniden üretçekirdekConfig hash + git SHA + seed ile birebir aynı sonuç.

§4Use case senaryoları

En kritik dört use case için tam senaryo: ön koşul, ana akış, alternatif akış ve son koşul.

UC-05 LTT modeli fit et

Aktör
Araştırmacı
Ön koşul
Sistem kayıtlı (UC-01), en az 30 tutulma zamanı var, hepsi BJD_TDB.
Ana akış
  1. Araştırmacı modeli seçer: ltt1, ltt2, ltt2+quad
  2. Sistem efemerisi çıkarır ve O–C'yi hesaplar (UC-04).
  3. Önceki dağılımlar (prior) config'ten okunur.
  4. Önce optimizasyonla başlangıç noktası, ardından MCMC veya nested sampling.
  5. Posterior, BIC ve log Z kaydedilir; kalan (residual) grafiği üretilir.
Alternatif
3a. Zincirler yakınsamazsa (R̂ > 1.01) sistem uyarır, örnek sayısını artırmayı önerir.
3b. Kalanlarda anlamlı periyodiklik kalırsa bir cisim daha eklemeyi önerir.
Son koşul
Posterior nesnesi deney kaydına bağlanır.

UC-09 O–C + astrometri ortak fit

Aktör
Araştırmacı, Gaia Arşivi
Ön koşul
UC-05 posterioru var, UC-08'e göre α ≥ 3σGaia, DR4 verisi indirilmiş.
Ana akış
  1. Ortak parametre vektörü kurulur: P, e, ω, Tp paylaşılır; i ve Ω yalnızca astrometriden gelir.
  2. Zamanlama ve astrometri log-olabilirlikleri toplanır.
  3. Nested sampling ile posterior ve kanıt hesaplanır.
  4. Gerçek kütle m = m sin i / sin i türetilir.
Alternatif
2a. Astrometri sinyal görmezse (α uyumsuz) kütleye üst limit raporlanır. Bu da geçerli bir bilimsel sonuçtur.
2b. O–C ve astrometri çelişirse gerilim metriği raporlanır: aday cisim sorgulanır.
Son koşul
Tez tablosunun bir satırı: sistem, m, i, sonuç tipi.

UC-11 Kararlılık haritası üret

Aktör
Araştırmacı, Hesaplama altyapısı
Ön koşul
En iyi çözüm (best-fit) ve ızgara tanımı: örneğin ac × ec, 200 × 200.
Ana akış
  1. Izgara, bağımsız SimulationJob'lara bölünür.
  2. İş havuzu (~20 çekirdek) işleri paralel çalıştırır.
  3. Her iş ⟨Y⟩ (MEGNO), fırlatılma ve yakın geçiş bayraklarını döndürür.
  4. Sonuçlar Parquet'e yazılır, harita çizilir.
Alternatif
2a. Süre sınırı aşılırsa iş TIMEOUT olarak işaretlenir ve harita üzerinde ayrı renkte gösterilir.
2b. Yarıda kalan harita kaldığı yerden devam eder (idempotent işler).
Son koşul
Harita ve etiketli veri. Etiketler UC-13'ün eğitim verisidir.

UC-14 Enjeksiyon-geri kazanım testi

Aktör
Araştırmacı
Ön koşul
Gaia tarama zamanları ve tarama açıları: DR4 öncesi Gaia GOST aracından ya da simüle edilerek.
Ana akış
  1. Bilinen (m, i, P, e) değerleriyle sahte astrometri ve O–C verisi üretilir, gerçekçi gürültü eklenir.
  2. UC-09 bu veriye körlemesine çalıştırılır.
  3. Geri kazanılan parametreler enjekte edilenlerle karşılaştırılır.
  4. Yüzlerce tekrarla sapma (bias) ve kapsama (coverage) ölçülür.
Neden kritik
2 Aralık'ta gerçek veri geldiğinde hattın doğru çalıştığı zaten kanıtlanmış olur. Jüri karşısında en güçlü savunma budur.

§5Fonksiyonel olmayan gereksinimler

Bilimsel yazılımda asıl hatalar burada çıkar. Hepsi test edilebilir biçimde yazıldı.

IDGereksinimÖlçüt / test
NFR-01Zaman sistemi. İçeride tek zaman ölçeği kullanılır: BJD_TDB. HJD_UTC gibi eski kayıtlar girişte dönüştürülür ve dönüşüm loglanır.Dönüşüm modülünün astropy referans değerleriyle birim testi. HJD ile BJD farkı yaklaşık 1 dk'ya çıkabilir, bu da O–C sinyaliyle aynı mertebededir.
NFR-02Birim güvenliği. Sınırlarda astropy Quantity, çekirdekte G = 1 (AU, M☉, yıl/2π) birimleri.Her public fonksiyonda birim doğrulaması; birimsiz sayı kabul edilmez.
NFR-03Sayısal doğruluk. IAS15'te bağıl enerji hatası < 10⁻⁹.İki cisim Kepler problemi analitik çözümle karşılaştırılır; CI'da çalışır.
NFR-04Tekrar üretilebilirlik. Her deney: config hash, git SHA, seed, paket sürümleri.UC-16: aynı config iki kez çalıştırılınca posterior istatistikleri aynı çıkar.
NFR-05Performans. 200×200 kararlılık haritası (10⁶ yıl, 3–4 cisim) dizüstünde bir gecede biter.Benchmark betiği; tek koşu süresi × iş sayısı / çekirdek sayısı.
NFR-06Veri kökeni (provenance). Her tutulma zamanı kaynağıyla (bibcode veya gözlem gecesi) saklanır.Kaynağı boş satır içe aktarılmaz.
NFR-07Test kapsamı. Matematik çekirdeği (LTT, astrometri, efemeris) için %90 üstü.pytest + coverage; yayınlanmış bir LTT çözümü regresyon testi olarak kullanılır.

§6Matematik çekirdeği

Kodun cbplab.core paketinde yaşayacak denklemler. Bu kısmı birlikte türetip kodlayacağız.

Efemeris ve O–C

TC(E) = T0 + P·E O–C = Tgözlenen − TC(E)

E tam sayı döngü numarasıdır. Görünmeyen bir cisim yoksa O–C düz bir çizgi etrafında saçılır; periyodik bir dalga varsa bir şey çifti çekiyordur.

Işık-yolu zamanı etkisi (LTT, Irwin 1952)

τ(t) = (a12 sin i / c) · [ (1 − e²)/(1 + e cos ν) · sin(ν + ω) + e sin ω ]

a12: çiftin sistem kütle merkezi etrafındaki yörüngesinin yarı büyük ekseni. ν: gerçek anomali; t'den Kepler denklemi M = E − e sin E çözülerek bulunur. Bir dakikalık O–C genliği yaklaşık 0.12 AU'luk bir a12 sin i demektir.

Kütle fonksiyonu

f(m) = (a12 sin i)³ / P² = (m3 sin i)³ / (M1 + M2 + m3)² [AU, yıl, M☉]

O–C tek başına yalnızca m sin i verir. Bu tezin çözdüğü dejenerelik budur.

Astrometrik sinyal ve birleştirme

α = a12 / d = m3 / (Mçift + m3) · a3 / d [a: AU, d: pc → α: yay saniyesi]

Kilit gözlem: Gaia'nın gördüğü yalpalama, çiftin kütle merkezinin aynı yörüngesidir, yani O–C'nin ölçtüğü a12'nin açısal karşılığıdır. İkisi birleşince sin i = (a12 sin i)O–C / (α·d) çıkar. Örnek: 0.6 M☉ çift, 3.4 AU'da 5 MJüp cisim, d = 400 pc için α ≈ 67 μas ve P ≈ 8 yıl.

Applegate testi (manyetik alternatif)

ΔP / P = 2π · AO–C / Pmod

Gereken periyot değişimini üretmek için yıldızın iç açısal momentum aktarımına harcaması gereken enerji ΔE hesaplanır ve yıldızın Pmod boyunca ürettiği enerjiyle karşılaştırılır. ΔE/Esec > 1 ise manyetik açıklama elenir. Modern sürüm: Völschow ve ark. (2016) sonlu kabuk modeli.

Dinamik kararlılık

⟨Y⟩ → 2 (yarı-periyodik, kararlı) ⟨Y⟩ ∝ λ·t (kaotik)
akritik / açift = 1.60 + 5.10e − 2.22e² + 4.12μ − 4.27eμ − 5.09μ² + 4.61e²μ² (Holman & Wiegert 1999, P-tipi)

PCEB çiftlerinde açift ≈ 0.005 AU çok küçük, cisimler ise birkaç AU'da. Holman–Wiegert sınırı neredeyse her zaman sağlanır; asıl kararsızlık kaynağı cisimlerin birbirini bozmasıdır. Bu yüzden ADR-02'de iç çifti tek kütle noktası olarak modelleme kararı alıyoruz: hesap yüzlerce kat hızlanır.

§7Sınıf diyagramı (alan modeli)

Tanımlayıcılar İngilizce: kod ve makale dünyası öyle. «interface» olanlar genişleme noktalarıdır.

classDiagram
  direction LR
  class TargetSystem {
    +str name
    +int gaia_source_id
    +Quantity distance
    +float ruwe
    +InnerBinary binary
    +list~Companion~ companions
  }
  class InnerBinary {
    +Star primary
    +Star secondary
    +Quantity period
    +float t0_bjd
    +total_mass() Quantity
  }
  class Star {
    +Quantity mass
    +Quantity radius
    +Quantity teff
    +Quantity luminosity
    +str kind
  }
  class Companion {
    +str label
    +Quantity m_sini
    +Quantity period
    +float ecc
    +float omega
    +float t_peri
    +semi_major_axis(M) Quantity
    +astrometric_signature(d) Quantity
  }
  class TimingPoint {
    +int cycle
    +float bjd_tdb
    +float sigma_s
    +str eclipse_type
    +str source
    +str method
  }
  class TimingSeries {
    +list~TimingPoint~ points
    +o_minus_c(eph) ndarray
  }
  class Ephemeris {
    +float t0
    +float period
    +float quad
    +predict(E) float
  }
  class TimingModel {
    <<interface>>
    +delay(t, theta) ndarray
    +param_names() list
  }
  class LTTModel {
    +int n_companions
    +delay(t, theta) ndarray
  }
  class AstrometricSeries {
    +ndarray t
    +ndarray al_residual
    +ndarray scan_angle
    +ndarray sigma
    +str release
  }
  class AstrometricModel {
    +predict(t, theta) ndarray
  }
  class JointLikelihood {
    +log_prob(theta) float
  }
  class Sampler {
    <<interface>>
    +run(lik, prior) Posterior
  }
  class Posterior {
    +ndarray samples
    +float log_evidence
    +summary() DataFrame
  }
  class ApplegateTest {
    +run(star, amp, pmod) ApplegateResult
  }
  class DynamicsBackend {
    <<interface>>
    +integrate(cfg) StabilityResult
  }
  class ReboundBackend
  class SimulationConfig {
    +list bodies
    +str integrator
    +float t_max
    +int seed
  }
  class StabilityResult {
    +float megno
    +bool ejected
    +bool close_encounter
    +float t_survive
    +is_stable() bool
  }
  class StabilitySurrogate {
    <<interface>>
    +predict_proba(theta) ndarray
  }
  class SPOCKAdapter
  class CBPClassifier
  class Experiment {
    +str id
    +str config_hash
    +str git_sha
    +int seed
  }

  TargetSystem "1" *-- "1" InnerBinary
  InnerBinary "1" *-- "2" Star
  TargetSystem "1" o-- "0..*" Companion
  TargetSystem "1" --> "1" TimingSeries
  TargetSystem "1" --> "0..1" AstrometricSeries
  TimingSeries "1" *-- "many" TimingPoint
  TimingSeries ..> Ephemeris
  TimingModel <|.. LTTModel
  JointLikelihood --> TimingModel
  JointLikelihood --> AstrometricModel
  JointLikelihood --> TimingSeries
  JointLikelihood --> AstrometricSeries
  Sampler ..> JointLikelihood
  Sampler ..> Posterior
  ApplegateTest ..> Star
  DynamicsBackend <|.. ReboundBackend
  DynamicsBackend ..> SimulationConfig
  DynamicsBackend ..> StabilityResult
  StabilitySurrogate <|.. SPOCKAdapter
  StabilitySurrogate <|.. CBPClassifier
  CBPClassifier ..> StabilityResult : eğitim etiketi
  Experiment o-- Posterior
  Experiment o-- StabilityResult
  

Şekil 2. Üç arayüz (TimingModel, DynamicsBackend, StabilitySurrogate) sistemin büyüyeceği yerlerdir. Doktorada gezegen oluşumu, DynamicsBackend'in yeni bir gerçeklemesi olarak eklenir.

§8Bileşen diyagramı

Katmanlı mimari. Bağımlılıklar yalnızca aşağı doğru akar; core hiçbir şeye bağımlı değildir, saf matematiktir.

flowchart TB
  subgraph UI["Arayüz katmanı"]
    CLI["cbp CLI (Typer)"]
    NB["Jupyter defterleri"]
  end
  subgraph APP["Uygulama katmanı"]
    PIPE["pipelines: fit, stability, inject"]
    EXP["experiment: config, hash, kayıt"]
    REPORT["report: figür, tablo"]
  end
  subgraph DOM["Alan katmanı"]
    CORE["core: ephemeris, ltt, astrometry, kepler, applegate"]
    INF["inference: likelihood, prior, samplers"]
    DYN["dynamics: DynamicsBackend, rebound_backend"]
    MLP["ml: surrogate, features, active_learning"]
  end
  subgraph INFRA["Altyapı katmanı"]
    IO["io: gaia_client, mast_client, timing_loader"]
    STORE["store: Parquet, HDF5, cache"]
    EXEC["exec: yerel havuz, Slurm adaptörü"]
  end
  EXT1[("Gaia TAP")]:::ext
  EXT2[("MAST")]:::ext

  CLI --> PIPE
  NB --> PIPE
  PIPE --> EXP
  PIPE --> REPORT
  PIPE --> INF
  PIPE --> DYN
  PIPE --> MLP
  INF --> CORE
  DYN --> CORE
  MLP --> DYN
  PIPE --> IO
  EXP --> STORE
  IO --> STORE
  DYN --> EXEC
  IO --> EXT1
  IO --> EXT2
  classDef ext fill:#F7EBD9,stroke:#9A5A10
  

Şekil 3. core NumPy dışında bağımlılık taşımaz. Bu sayede yayınlanmış çözümlerle birim testi yapmak ve ileride JAX'e taşımak kolaylaşır.

§9Aktivite diyagramı: bir sistemin analiz hattı

Her hedef sistem bu karar ağacından geçer. Her dal bir tez sonucu üretir, çıkmaz sokak yoktur.

flowchart TD
  A(["Başla: hedef sistem"]) --> B["Tutulma zamanlarını topla, BJD_TDB'ye çevir"]
  B --> C["Efemeris fit, O–C üret"]
  C --> D{"O–C'de anlamlı periyodik sinyal var mı?"}
  D -- Hayır --> Z1["Sonuç: cisim yok veya üst limit"]
  D -- Evet --> E["LTT fit: 1, 2, 3 cisim; BIC ve log Z ile seç"]
  E --> F{"Applegate enerji testi: manyetik açıklama mümkün mü?"}
  F -- Mümkün --> Z2["Sonuç: sinyal belirsiz, manyetik aktivite dışlanamıyor"]
  F -- "Mümkün değil" --> G["Tespit edilebilirlik: α ile Gaia hassasiyetini karşılaştır"]
  G --> H{"α ≥ 3σ ?"}
  H -- Hayır --> I["Yalnızca O–C posterioru"]
  H -- Evet --> J["DR4 ile ortak fit: gerçek m ve i"]
  J --> K{"O–C ve astrometri tutarlı mı?"}
  K -- Hayır --> Z3["Sonuç: aday çürütüldü veya gerilim raporu"]
  K -- Evet --> L["Posterior örnekleri"]
  I --> L
  L --> M["Vekil model ile p(kararlı) tahmini"]
  M --> N{"0.2 < p < 0.8 ?"}
  N -- "Evet, belirsiz" --> O["REBOUND ile tam N-body"]
  N -- "Hayır, net" --> P["Vekil etiketi kabul et"]
  O --> Q["Kararlı çözüm oranı ve harita"]
  P --> Q
  Q --> Z4(["Sonuç: kütle, eğim ve dinamik geçerlilik"])
  

Şekil 4. Dört farklı çıkış noktası (Z1–Z4), dört yayınlanabilir sonuç tipi demektir. "Hiçbir şey bulamadım" riski tasarım gereği yok.

§10Sekans diyagramları

10.1 Ortak fit ve dinamik filtre (UC-09 + UC-12)

sequenceDiagram
  actor R as Araştırmacı
  participant CLI as cbp CLI
  participant EXP as Experiment
  participant IO as io.gaia_client
  participant LIK as JointLikelihood
  participant SMP as Sampler (dynesty)
  participant SUR as Surrogate
  participant DYN as ReboundBackend

  R->>CLI: cbp fit NN_Ser --model ltt2+astro
  CLI->>EXP: create(config) → id, hash, seed
  CLI->>IO: epoch_astrometry(source_id)
  IO-->>CLI: AstrometricSeries (önbellekten veya TAP'ten)
  CLI->>LIK: build(timing, astro, priors)
  CLI->>SMP: run(LIK)
  loop her canlı nokta
    SMP->>LIK: log_prob(θ)
    LIK-->>SMP: log L
  end
  SMP-->>CLI: Posterior (örnekler, log Z)
  CLI->>SUR: predict_proba(örnekler)
  SUR-->>CLI: p(kararlı)
  loop belirsiz örnekler için
    CLI->>DYN: integrate(cfg)
    DYN-->>CLI: StabilityResult
  end
  CLI->>EXP: save(posterior, stabilite, figürler)
  CLI-->>R: rapor yolu + özet tablo
  

10.2 Aktif öğrenmeyle vekil model eğitimi (UC-13)

sequenceDiagram
  participant AL as ActiveLearner
  participant SUR as CBPClassifier (GPU)
  participant POOL as İş havuzu
  participant DYN as ReboundBackend
  participant ST as Store

  AL->>POOL: başlangıç: 2000 rastgele θ
  POOL->>DYN: integrate × 2000 (paralel)
  DYN-->>ST: etiketler (MEGNO, fırlatılma)
  loop doğruluk hedefe ulaşana dek
    AL->>SUR: fit(etiketli veri)
    AL->>SUR: aday havuzunda belirsizlik
    SUR-->>AL: en belirsiz 500 θ
    AL->>POOL: yalnızca bunları simüle et
    POOL->>DYN: integrate × 500
    DYN-->>ST: yeni etiketler
  end
  AL-->>ST: model + kalibrasyon eğrisi
  

Şekil 5–6. Aktif öğrenmenin fikri: pahalı simülasyonu yalnızca modelin kararsız kaldığı sınır bölgesinde harcamak. Bu, "ML'i araç olarak kullanıyoruz" cümlesinin somut karşılığıdır.

§11Durum diyagramı: SimulationJob

stateDiagram-v2
  [*] --> Queued
  Queued --> Running: işçi aldı
  Running --> Stable: t_max'a ulaştı, ⟨Y⟩ yaklaşık 2
  Running --> Chaotic: ⟨Y⟩ eşiği aştı
  Running --> Ejected: r > r_max
  Running --> Collided: yakın geçiş / çarpışma
  Running --> Timeout: duvar saati sınırı
  Running --> Failed: sayısal hata
  Timeout --> Queued: daha uzun sınırla yeniden dene
  Failed --> Queued: IAS15 ile yeniden dene
  Stable --> Stored
  Chaotic --> Stored
  Ejected --> Stored
  Collided --> Stored
  Stored --> [*]
  

Şekil 7. Her terminal durum aynı zamanda bir sınıflandırma etiketidir. Vekil modeli ikili değil, çok sınıflı eğitmek mümkün olur.

§12Dağıtım diyagramı

Başlangıçta her şey yeni dizüstünde çalışır. TRUBA yalnızca gerekirse eklenir, kod değişmez.

flowchart LR
  subgraph LAP["Dizüstü: Core Ultra 9 275HX, RTX 5070 Ti 12 GB, 32 GB"]
    direction TB
    CPU["CPU havuzu: ~20 REBOUND işçisi (joblib), her simülasyon tek çekirdek"]
    GPU["GPU: PyTorch CUDA; vekil model eğitimi, ileride JAX ile toplu olabilirlik"]
    SSD[("NVMe: data/raw, data/processed, runs/ (Parquet, HDF5)")]
  end
  subgraph REMOTE["Dış servisler"]
    GAIA[("Gaia Arşivi TAP")]
    MAST[("MAST / TESS")]
    GH["GitHub: repo + CI (pytest)"]
  end
  subgraph HPC["İsteğe bağlı: TRUBA"]
    SLURM["Slurm dizi işleri: büyük kararlılık haritaları"]
  end
  CPU --- SSD
  GPU --- SSD
  SSD <--> GAIA
  SSD <--> MAST
  LAP <--> GH
  CPU -. "exec.slurm adaptörü" .-> SLURM
  

Şekil 8. REBOUND tek simülasyonda çok çekirdek kullanmaz; paralellik simülasyonlar arasındadır. 275HX'in 8 P + 16 E çekirdeği bu tür "utanç verici derecede paralel" iş için idealdir. GPU burada N-body için değil, ML için.

§13Repo yapısı ve teknoloji yığını

cbp-lab/
├── pyproject.toml            # uv ile bağımlılık yönetimi
├── configs/
│   ├── systems/              # nn_ser.yaml, kepler451.yaml …
│   └── experiments/          # fit_ltt2.yaml, stabmap_200.yaml
├── src/cbplab/
│   ├── core/                 # ephemeris.py, kepler.py, ltt.py, astrometry.py, applegate.py
│   ├── inference/            # likelihood.py, priors.py, samplers/
│   ├── dynamics/             # backend.py (arayüz), rebound_backend.py, jobs.py
│   ├── ml/                   # features.py, surrogate.py, spock_adapter.py, active.py
│   ├── io/                   # gaia_client.py, mast_client.py, timing_loader.py, timescales.py
│   ├── store/                # parquet.py, cache.py
│   ├── exec/                 # local_pool.py, slurm.py
│   ├── experiment.py         # config hash, git SHA, seed
│   ├── report/               # figures.py, tables.py
│   └── cli.py                # cbp fit | stabmap | inject | report
├── tests/
│   ├── core/                 # analitik testler: Kepler, LTT simetri, birimler
│   └── regression/           # yayınlanmış çözümleri yeniden üretme
├── notebooks/                # keşif; kalıcı kod src/'ye taşınır
├── data/                     # git dışı; DVC veya basit manifest
└── runs/                     # deney çıktıları, id bazlı
İşSeçimNeden
N-bodyREBOUND + REBOUNDxStandart, MEGNO yerleşik, IAS15/WHFast/MERCURIUS integratörleri var.
Astronomi araçlarıastropy, astroquery, lightkurveZaman ölçekleri, birimler, Gaia TAP, TESS verisi.
Bayesçi çıkarımemcee, dynestyemcee hızlı keşif için; dynesty model karşılaştırması (log Z) için.
MLscikit-learn, XGBoost, PyTorchÖnce ağaç modelleri (az veri, yorumlanabilir), gerekirse sinir ağı.
Kararlılık taban çizgisiSPOCK (Tamayo ve ark. 2020)Hazır bir ML kararlılık sınıflandırıcısı. Kendi modelimiz onu geçmek zorunda.
ConfigYAML + pydanticDoğrulanmış, hash'lenebilir deney tanımı.
Kalitepytest, ruff, GitHub ActionsMatematik çekirdeği her commit'te test edilir.

§14Mimari karar kayıtları (ADR)

ADRKararGerekçe ve bedel
ADR-01Kendi N-body motorumuzu yazmıyoruz; REBOUND kullanıyoruz.Tezin katkısı entegratör değil, bilimsel soru. Jüri, kanıtlanmış bir koda itiraz etmez.
ADR-02İç çift, varsayılan olarak tek kütle noktası.açift cisimlerin yörüngesinden yaklaşık 1000 kat küçük. Hız kazancı çok büyük. Bedeli: her sistem için bir kez tam çift modelle doğrulama koşusu yapılacak.
ADR-03Tek iç zaman ölçeği: BJD_TDB.Karışık zaman ölçekleri, sahte O–C sinyalinin en yaygın kaynağıdır.
ADR-04Özel ML modelinden önce SPOCK taban çizgisi."Neden hazır aracı kullanmadın?" sorusunu önceden cevaplar. SPOCK kompakt çoklu gezegenler için eğitildi; yüksek eksantrikli ve geniş yörüngeli çift yıldız çevresi rejimde ne kadar iyi çalıştığı ölçülecek. Tezin ML katkısı bu fark olabilir.
ADR-05Deney = değişmez config + hash.UC-16 ve jüri için tekrar üretilebilirlik. Bedeli: config şemasını erken tasarlamak.
ADR-06DR4 formatı belli olmadan AstrometricSeries soyut tutulur.DR4 veri modeli tam yayınlanmadan kod yazılıyor; adaptör deseni riski tek dosyaya hapseder.

§15Yol haritası

Sabit nokta 2 Aralık. Her sprintin sonunda gösterilebilir bir çıktı var.

S0 · PC gelince

İskelet

Repo, uv ortamı, CI, ilk REBOUND koşusu, core/kepler.py ve analitik testleri.

Bitti tanımı: iki cisim testi yeşil, enerji hatası < 10⁻⁹.

S1 · Ekim 1–2. hf

Kepler-451 demosu

Makaledeki aday cisimlerle kararlılık sonucunu REBOUND ile yeniden üret.

Bitti tanımı: makaledeki kararlılık süresiyle uyumlu figür → hocaya götürülecek demo.

S2 · Ekim sonu

Zamanlama çekirdeği

Zaman ölçeği dönüşümleri, efemeris, LTT modeli, emcee fit, Applegate testi.

Bitti tanımı: NN Ser'in yayınlanmış LTT çözümü regresyon testiyle yeniden üretildi.

S3 · Kasım 1–2. hf

Kararlılık haritaları

İş havuzu, MEGNO haritaları, posterior filtresi, SPOCK taban çizgisi.

Bitti tanımı: 200×200 harita bir gecede bitiyor (NFR-05).

S4 · Kasım sonu

DR4 hazırlığı

Tespit edilebilirlik hesaplayıcı (UC-08), astrometri modeli, sahte veriyle enjeksiyon-geri kazanım (UC-14).

Bitti tanımı: hedef listesi α'ya göre sıralı; sahte veride kütle sapması < 1σ.

S5 · 2 Aralık +

Gerçek DR4

Veriyi indir, adaptörü tamamla, en umutlu 2–3 sistemde ortak fit.

Bitti tanımı: en az bir sistem için gerçek kütle veya üst limit.

S6 · Ocak

Vekil model ve seminer

Aktif öğrenme, SPOCK karşılaştırması, seminer sunumu ve tez önerisi taslağı.

Bitti tanımı: tez önerisi danışmana teslim.

§16Riskler ve açık sorular

RiskEtkiÖnlem
Sistemler sönük ve uzak, α Gaia hassasiyetinin altında kalabilir.YüksekUC-08 ile hedefleri erkenden ele. Görülmezse bile kütleye üst limit bir sonuçtur.
DR4 epoch verisinin formatı veya kapsamı beklenenden farklı olabilir.OrtaADR-06 adaptör deseni; S4'te sahte veriyle hazırlık.
Başka gruplar aynı sistemlere DR4 ile bakabilir.OrtaAvantajımız grubun kendi O–C verisi ve 2 Aralık'ta hazır kod.
Danışman bu gruptan olmayabilir.OrtaKepler-451 demosuyla gruptan birinin kapısını çal; danışman ilk yarıyıl sonuna kadar değiştirilebilir.
Ders yükü sprintleri kaydırabilir.OrtaS1 ve S4 kritik; S3 ve S6 esneyebilir.

Doğrulanacaklar. Kepler-451 makalesinin (arXiv:2606.26817) parametre tablosu, grubun O–C verisinin paylaşılıp paylaşılmayacağı ve Gaia DR4 epoch astrometrisinin bu sönüklükteki kaynakları kapsayıp kapsamadığı. İlk ikisini hoca, sonuncusunu ESA dokümantasyonu cevaplar.