| # Import necessary modules | |
| from classy import Class | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| # Define common settings for the ΛCDM model, including a fixed Helium fraction | |
| common_settings = { | |
| 'h': 0.67810, | |
| 'omega_b': 0.02238280, | |
| 'omega_cdm': 0.1201075, | |
| 'A_s': 2.100549e-09, | |
| 'n_s': 0.9660499, | |
| 'tau_reio': 0.05430842, | |
| 'YHe': 0.24, # Set the Helium fraction explicitly | |
| 'output': 'tCl,lCl', # Include 'lCl' for lensing potential | |
| 'lensing': 'yes', | |
| 'l_max_scalars': 2500 | |
| } | |
| # Initialize CLASS | |
| cosmo = Class() | |
| cosmo.set(common_settings) | |
| cosmo.compute() | |
| # Get the C_l's | |
| cls = cosmo.lensed_cl(2500) | |
| # Extract ell and C_ell^TT | |
| ell = cls['ell'][2:] # Start from 2 to avoid the monopole and dipole | |
| clTT = cls['tt'][2:] | |
| # Plotting | |
| factor = ell * (ell + 1) / (2 * np.pi) * 1e12 # Factor to convert to D_ell | |
| plt.plot(ell, factor * clTT, label='Temperature $C_\ell^{TT}$', color='b') | |
| plt.xlabel(r'Multipole moment $\ell$') | |
| plt.ylabel(r'$\ell (\ell + 1) C_\ell^{TT} / 2\pi \, [\mu K^2]$') | |
| plt.title('CMB Temperature Power Spectrum') | |
| plt.xscale('log') | |
| plt.yscale('log') | |
| plt.grid(True) | |
| plt.legend() | |
| plt.savefig('cmb_temperature_spectrum.png') # Save the plot to a file |