import numpy as np
import matplotlib.pyplot as plt
# --- Initial Data from Fermi/LAT Survey ---
# Source: Second catalog of gamma-ray point-sources (1,873 total)
initial_sources = {
"Blazar Galaxy": 1069,
"Pulsars": 115,
"Supernovae": 77,
"Active Galaxies": 20,
"Normal Galaxies & Stars": 20,
"Unknown Objects": 572
}
# --- Data Preparation for Initial Visualization ---
categories = list(initial_sources.keys())
counts = np.array(list(initial_sources.values()))
total_initial = np.sum(counts)
# Print initial summary report using f-strings for alignment
print(f"{'--- INITIAL FERMI/LAT DATA ---':^45}")
print(f"{'Source Category':<30} | {'Initial Count':>10}")
print("-" * 45)
for category, count in initial_sources.items():
print(f"{category:<30} | {count:>10}")
# Generate Initial Pie Chart
fig1, ax1 = plt.subplots(figsize=(10, 7))
ax1.pie(counts, labels=categories, autopct='%1.1f%%', startangle=140)
ax1.set_title(f"Initial Distribution of Fermi/LAT Sources (Total: {total_initial})")
plt.show()
# --- Suzaku Extrapolation Logic ---
# Suzaku studied a sample of 11 of the 572 unidentified sources
suzaku_sample_size = 11
unknown_pool = initial_sources["Unknown Objects"]
# Suzaku's specific findings from that sample
suzaku_findings = {
"Pulsars": 6,
"Blazar Galaxy": 1,
"Normal Galaxies & Stars": 1,
"Unknown Objects": 3
}
# Create a copy to store updated numbers without mutating the original
updated_sources = initial_sources.copy()
# Recalculate distribution based on Suzaku proportions
for category, sample_count in suzaku_findings.items():
if category != "Unknown Objects":
# Proportionally reassign unknown objects to identified categories
extrapolated_count = (sample_count / suzaku_sample_size) * unknown_pool
# Add extrapolated count to existing category
updated_sources[category] += extrapolated_count
# Deduct the same amount from the "Unknown Objects" pool
updated_sources["Unknown Objects"] -= extrapolated_count
# --- Final Updated Report ---
print(f"\n{'--- EXTRAPOLATED SUZAKU UPDATES ---':^45}")
print(f"{'Source Category':<30} | {'Updated Count':>10}")
print("-" * 45)
for category, count in updated_sources.items():
# Use f-strings to round counts to 0 decimal places for a clean display
print(f"{category:<30} | {count:>10.0f}")
# Generate Updated Pie Chart
updated_counts = np.array(list(updated_sources.values()))
fig2, ax2 = plt.subplots(figsize=(10, 7))
ax2.pie(updated_counts, labels=categories, autopct='%1.1f%%', startangle=140)
ax2.set_title(f"Extrapolated Distribution After Suzaku Follow-up")
plt.show()
"Computational solutions for the curious mind. Exploring the intersection of Python programming and rigorous science, featuring solved problems in NASA physics, chemistry, and beyond."
Monday, 23 March 2026
Cracking the Cosmic Code: Fermi’s Latest Gamma-Ray Map
The universe is a noisy place, but much of that noise is invisible to the human eye. Recently, the Fermi team released its second catalog from the Large Area Telescope (LAT), providing a massive inventory of 1,873 gamma-ray point-sources.
While mapping these high-energy beacons is a huge milestone, the real challenge lies in the "unidentified" sources—the cosmic ghosts that show up on the map but don't have a name.
The Mystery of the Unidentified 572
Out of the nearly 1,900 sources detected, 572 remained a mystery. To narrow the search, the Japanese Suzaku X-ray Observatory zoomed in on a small sample of 11 unidentified sources.
The results were a major win for deep-space detective work:
* The Big Winners: 6 were identified as pulsars (dense, spinning remnants of exploded stars).
* The Galactic Guest: 1 was a blazar, a galaxy powered by a massive black hole.
* The Local: 1 was a standard flaring star.
* The Holdouts: 3 sources still refuse to be identified.
Why This Matters
The fact that over half of the Suzaku sample turned out to be pulsars is a huge clue. It suggests that our galaxy might be more crowded with these "cosmic lighthouses" than we previously thought. As we refine our X-ray and gamma-ray data, the "unknown" parts of our map are finally starting to take shape.
A python code was written for this purpose.
Subscribe to:
Post Comments (Atom)
Visualizing Particle Kinematics with Python
Understanding the relationship between position, velocity, and acceleration is fundamental to physics. However, seeing how these variables e...
-
The important source of aerosols in the stratosphere is the formation of carbonyl sulfide (COS) droplets. These droplets are more dangerou...
-
This code in python demonstrates how to calculate molecular weights, physical properties like mole fractions, partial pressure calculations ...
-
The code is based on finding volume, density and orbit radius of some dwarf planets. Further we tried to match these densities with one'...
No comments:
Post a Comment