-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add continuum contributions to IonCollection.radiative_loss
#282
base: main
Are you sure you want to change the base?
Conversation
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## main #282 +/- ##
==========================================
+ Coverage 92.38% 92.52% +0.13%
==========================================
Files 38 37 -1
Lines 2904 2915 +11
==========================================
+ Hits 2683 2697 +14
+ Misses 221 218 -3 ☔ View full report in Codecov by Sentry. |
Hmm do you have a comparison of the IDL and Python cases? I definitely agree that you should see the uptick in the losses at high temperatures. I had forgotten that IDL computes the radiative loss contribution from the continuum in a slightly different way. I would think these should be consistent though... Also, if you just plot the wavelength-averaged ff contribution, does that show an increase at high temperatures? |
I haven't had much time to come back to this since I posted. The CHIANTI User's guide shows the uptick, but that plot is from v6 of the database. I don't know if it's the Gaunt factor causing the discrepancy, but I've tried changing the wavelength range and binning without any change. If there's a programming mistake here, it's a subtle one! |
I wonder if this is a consequence of not including the lower wavelengths that make the dominant contributions at high temperatures? For example, computing just the free-free contribution and averaging over the wavelength dimension, import astropy.units as u
import fiasco
import numpy as np
import matplotlib.pyplot as plt
from astropy.visualization import quantity_support
temperature = np.logspace(5,8,100) * u.K
all_ions = fiasco.IonCollection(*[fiasco.Ion(i, temperature) for i in fiasco.list_ions()])
wavelength = np.logspace(-2,2,100) * u.AA
ff_short_wave = all_ions.free_free(wavelength).mean(axis=1)
wavelength = np.logspace(1,2,100) * u.AA
ff_long_wave = all_ions.free_free(wavelength).mean(axis=1)
with quantity_support():
plt.plot(temperature, ff_short_wave, label=r'$\lambda_{min}=0.01$ Å')
plt.plot(temperature, ff_long_wave, label=r'$\lambda_{min}=10$ Å')
plt.xscale('log')
plt.yscale('log')
plt.legend() gives |
That plot almost looks like the FF and FB are missing some scaling factor. I'm surprised that they are so far below the bound-bound losses as well as being comparable to the two-photon losses at most temperatures. |
I think I figured it out. The discrepancy might be the integration. Changing the code to ignore the bin width
This isn't correct (fb > ff), but there's something about the integration that's not working. In IDL ff_rad_loss.pro, the calculation is
which is just a straight sum over all the ions (no integration in wavelength space). So, I guess the question is why does integration not seem to work? Shouldn't the total radiation for e.g. free-free be given by something like |
Fixes #232
I've added f-f, f-b, and 2-p continuum emission to the radiative loss calculation.
It appears to be working, but I'd like to do a bit more testing.
One potential issue: the calculation currently assumes a fixed bin width. It might be nice to generalize and do the integral properly to allow for non-fixed bins, particularly since it can be integrated over a very large range.