Download vcsd1_cmb_spectrum.py from PabloCT-code/VCSD-I: direct link, hf CLI and curl.
- Browser
- Download file 3.79 kB
-
https://huggingface.co/PabloCT-code/VCSD-I/resolve/main/vcsd1_cmb_spectrum.py
- Command line
-
hf download hf://PabloCT-code/VCSD-I/vcsd1_cmb_spectrum.py
-
curl -L -o vcsd1_cmb_spectrum.py https://huggingface.co/PabloCT-code/VCSD-I/resolve/main/vcsd1_cmb_spectrum.py
3.79 kB
| import numpy as np | |
| import matplotlib.pyplot as plt | |
| # 1. Rango multipolar completo | |
| multipolos = np.arange(2, 3001) | |
| # 2. Parámetros base calibrados del modelo VCSD-I | |
| A_base = 3200.0 | |
| l_acustico = 220.0 | |
| damping_silk = 450.0 | |
| alpha_gradiente = 0.35 | |
| beta_vorticidad = 0.18 | |
| # 3. Fase híbrida adaptativa (Euler-Bessel) | |
| nu = (1.0 - beta_vorticidad) / 2.0 | |
| desfase_asintotico = (nu * np.pi) / 2.0 | |
| factor_transicion = 1.0 / (1.0 + np.exp(-(multipolos - 1000) / 200)) | |
| fase_baja_frec = multipolos * (np.pi / l_acustico) + (beta_vorticidad * np.log(multipolos)) | |
| fase_alta_frec = multipolos * (np.pi / l_acustico) + desfase_asintotico | |
| fase_efectiva = (1.0 - factor_transicion) * fase_baja_frec + factor_transicion * fase_alta_frec | |
| oscilacion_acustica = np.cos(fase_efectiva)**2 | |
| # 4. Envolventes de potencia y confinamiento geométrico | |
| modulacion_pozo = 1.0 + alpha_gradiente * np.sin(multipolos * (np.pi / (2.0 * l_acustico))) | |
| filtro_atenuacion = np.exp(- (multipolos / damping_silk)**(1.5 - beta_vorticidad)) | |
| # Espectro simétrico base (isótropo) | |
| Cl_isotropo = A_base * oscilacion_acustica * modulacion_pozo * filtro_atenuacion | |
| # 5. Inyección de la anomalía del Punto Frío (Efecto Sachs-Wolfe Integrado asimétrico) | |
| efecto_isw_asimetrico = -70.0 * np.exp(-((multipolos - 5) / 8)**2) | |
| # Espectro neto con la perturbación regional de Eridanus | |
| Cl_anomalo = Cl_isotropo + efecto_isw_asimetrico * (multipolos * (multipolos + 1) / (2 * np.pi)) * 0.05 | |
| Cl_anomalo = np.clip(Cl_anomalo, 0, None) | |
| # 6. Buscar crestas reales (Picos reales desplazados por el desfase logarítmico) | |
| idx_pico1 = np.argmax(Cl_anomalo[100:300]) + 100 | |
| idx_pico2 = np.argmax(Cl_anomalo[400:650]) + 400 | |
| idx_pico3 = np.argmax(Cl_anomalo[650:950]) + 650 | |
| # 7. Despliegue de resultados cuantitativos en consola | |
| print("\n" + "=" * 75) | |
| print(" AUDITORÍA CORREGIDA DE HITOS ACÚSTICOS DESFASADOS (VCSD-I)") | |
| print("=" * 75) | |
| print(f"[*] 1º Pico Real Encontrado (\u2113 = {idx_pico1+2}) : {Cl_anomalo[idx_pico1]:.2f} \u03bcK\u00b2 | Esperado: ~2814 \u03bcK\u00b2") | |
| print(f"[*] 2º Pico Real Encontrado (\u2113 = {idx_pico2+2}) : {Cl_anomalo[idx_pico2]:.2f} \u03bcK\u00b2 | Esperado: ~1142 \u03bcK\u00b2") | |
| print(f"[*] 3º Pico Real Encontrado (\u2113 = {idx_pico3+2}) : {Cl_anomalo[idx_pico3]:.2f} \u03bcK\u00b2 | Esperado: ~1094 \u03bcK\u00b2") | |
| print("-" * 75) | |
| print(f"[*] Desviación térmica en \u2113=5 (Punto Frío): {efecto_isw_asimetrico[3]:.2f} \u03bcK") | |
| print("[VERDICTO]: Los picos mutan su posición angular debido al arrastre de giro.") | |
| print("=" * 75 + "\n") | |
| # 8. Configuración y trazado gráfico académico seguro | |
| fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5)) | |
| # Subplot 1: Espectro Completo | |
| ax1.plot(multipolos, Cl_isotropo, '--', color='gray', alpha=0.6, label='Fondo Base') | |
| ax1.plot(multipolos, Cl_anomalo, color='#004488', linewidth=2.0, label='Modelo VCSD-I') | |
| ax1.axvspan(2000, 3000, color='#ffea00', alpha=0.15, label='Región de Micro-Picos (Bessel)') | |
| ax1.set_title('Espectro del CMB Completo') | |
| ax1.set_xlabel('Multipolo l') | |
| ax1.set_ylabel('D_l') | |
| ax1.legend() | |
| ax1.grid(True, linestyle=':') | |
| # Subplot 2: Zoom de la Anomalía del Punto Frío | |
| ax2.plot(multipolos[:40], Cl_isotropo[:40], '--', color='gray', alpha=0.6, label='Fondo Base') | |
| ax2.plot(multipolos[:40], Cl_anomalo[:40], color='crimson', linewidth=2.5, label='Eje Punto Frío') | |
| ax2.set_title('Bajas Frecuencias: Anomalía de Eridanus') | |
| ax2.set_xlabel('Multipolo l <= 40') | |
| ax2.set_ylabel('D_l') | |
| ax2.legend() | |
| ax2.grid(True, linestyle=':') | |
| # 9. Forzar actualización del backend gráfico y guardar archivo | |
| plt.savefig('espectro_vcsd_final.png', dpi=300) | |
| print("[*] Archivo de respaldo guardado como 'espectro_vcsd_final.png'") | |
| plt.draw() | |
| plt.pause(0.1) | |
| plt.show() | |