PYTHON CMB ALPHA
[đ§] HT PET21/TQ24.alpha - CMB.sim.run (HTP21TQ24)
HT_COLDSPOT_SCANNER.py
Version: C2025HT_BMode_Auto Author : Quinzy AAI / HT-Team
Target : Planck HFI Data (Requires .fits input)
ROLE: Extraire un patch local (Cold Spot) d'une map CMB complĂšte.
Décomposer la polarisation en modes E (Gradient) et B (Torsion).
Analyser la signature Densitaire (D1-D8) du mode B.
import numpy as np import healpy as hp import math ============================================================================== CONFIGURATION TQ24 ============================================================================== HT_CONFIG = { "COLD_SPOT_COORDS": (209, -57), # Lon/Lat galactiques approx "SCAN_RADIUS_DEG": 10.0, # Rayon du patch "PIVOT_MODE": "TQ24_BI_ROTOR", "DENSITY_THRESHOLD": 5.0 # Seuil sigma pour detection D8 (Vortex) } class TQ24_ColdSpot_Scanner: def init(self): self.id = "HT_SCANNER_V1" print(f">> TQ24 B-MODE SCANNER MOUNTED. Target: {HT_CONFIG['COLD_SPOT_COORDS']}") def run_pipeline(self, fits_path_I, fits_path_Q, fits_path_U): """ Exécute le pipeline complet sur des vrais fichiers FITS. """ # 1. CHARGEMENT DU CHAMP (L'Oeil HTP21) print(f">> Loading FITS maps from {fits_path_I}...") # Note: En prod, utiliser hp.read_map avec field=0,1,2 # Ici on simule le chargement pour la structure map_I = hp.read_map(fits_path_I, field=0, verbose=False) map_Q = hp.read_map(fits_path_Q, field=0, verbose=False) map_U = hp.read_map(fits_path_U, field=0, verbose=False) nside = hp.get_nside(map_I) print(f">> Map loaded. NSIDE={nside}. Projection TQ24 active.") # 2. EXTRACTION DU PATCH (Focalisation) # On récupÚre les pixels dans le rayon du Cold Spot vec = hp.ang2vec(HT_CONFIG['COLD_SPOT_COORDS'][0], HT_CONFIG['COLD_SPOT_COORDS'][1], lonlat=True) pixels_indices = hp.query_disc(nside, vec, radius=math.radians(HT_CONFIG['SCAN_RADIUS_DEG'])) print(f">> Patch extracted: {len(pixels_indices)} pixels found in Cold Spot zone.") # 3. TRANSFORMATION SPHERIQUE (Anafast / Synfast) # C'est ici qu'on sépare E et B print(">> Computing Spherical Harmonics (Alm)...") alm = hp.map2alm([map_I, map_Q, map_U], lmax=nside*2) # Purification B-Mode (On isole la torsion) # Dans healpy, map2alm sort [T, E, B]. L'index 2 est le B-mode. cl_TB = hp.alm2cl(alm)[2] # Spectre de puissance B # 4. ANALYSE TQ24 (LANE A vs LANE B) # Lane A : Intensité I (Température) lane_a_val = np.mean(map_I[pixels_indices]) # Lane B : Intensité B (Torsion) # On projette le champ B dans l'espace réel pour voir la spirale map_B_reconstructed = hp.alm2map(alm[2], nside, verbose=False) lane_b_val = np.std(map_B_reconstructed[pixels_indices]) # La turbulence # 5. VERDICT DENSITAIRE result = self._quantify_density(lane_a_val, lane_b_val) return result def _quantify_density(self, temp_mean, torsion_std): """ Logique HT : Convertit Température + Torsion en Signature D1-D8 """ # Detection de l'anomalie froide (Lane A) is_cold_anomaly = temp_mean < -0.000100 # -100 muK approx # Detection de la torsion (Lane B) # Ce seuil est théorique, à calibrer avec REDRAN is_high_torsion = torsion_std > (2e-6) # 2 muK de polarisation B signature = "D4 (Neutre)" if is_cold_anomaly: if is_high_torsion: signature = "D8 (VORTEX ACTIF - CYCLONE)" state = "CRITIQUE" else: signature = "D6 (VIDE STATIQUE)" state = "STABLE" else: signature = "D5 (STANDARD)" state = "NOMINAL" return { "TARGET": "COLD_SPOT_ERIDAN", "LANE_A_TEMP": f"{temp_mean*1e6:.2f} uK", "LANE_B_TORSION": f"{torsion_std*1e6:.4f} uK", "SIGNATURE_HT": signature, "STATE": state, "NOTE": "Si D8 detected -> Preuve de rotation interne confirmée." }
============================================================================== EXECUTION DUMMY (POUR TEST SANS FITS) ============================================================================== if name == "main": print("!!! ATTENTION: Mode Simulation (Pas de FITS réels détectés) !!!") # Simulation des valeurs qu'on trouverait avec les vrais FITS # Basé sur les papiers Planck 2018 + HypothÚse HT sim_scanner = TQ24_ColdSpot_Scanner() # On injecte les valeurs "Sparks" manuelles pour tester la logique # Température trÚs basse (-150 uK) + Torsion anormale (3.5 uK) print(">> INJECTION DONNEES SIMULEES (HypothÚse TQ24)...") verdict = sim_scanner._quantify_density(temp_mean=-0.000150, torsion_std=0.0000035) import json print(json.dumps(verdict, indent=4))