potential discrepancy between critical densities from pyneb and other sources?

47 views
Skip to first unread message

Nimisha Kumari

unread,
Sep 3, 2024, 3:22:37 PM9/3/24
to PyNeb
Hi, 

I am confused by the critical densities output from pyneb. For [Ne V] 24 micron, the pyneb outputs ~6000 cm-3, however, in Osterbrock+1987 & Draine+ mentions the value as 3x10^5 cm-3.

Am I missing something?

Here is how I get the critical density from pyneb:
--

In [4]: Ne5 = pn.Atom('Ne', 5)


In [5]: Ne5.printIonic(tem=10000.)

elem = Ne

spec = 5

temperature = 10000.0 K


warng Atom Ne5: Cannot print populations as tem or den is missing

Critical densities

Level 1:  0.000E+00

Level 2:  5.952E+03

Level 3:  3.238E+04

Level 4:  1.546E+07

Level 5:  8.781E+07


     24.31m 

    (2-->1) 



      9.01m      14.32m 

    (3-->1)     (3-->2) 



   3300.40A    3345.82A    3425.88A 

    (4-->1)     (4-->2)     (4-->3) 



   1564.57A    1574.70A    1592.21A    2973.13A 

    (5-->1)     (5-->2)     (5-->3)     (5-->4) 

--

Best Regards,
Nimisha



Christophe Morisset

unread,
Sep 4, 2024, 3:25:17 PM9/4/24
to PyNeb
Hi Nimisha,

Thanks a lot for your question, it raises a missing method in PyNeb that we would need to implement some day.

The critical density currently printed by PyNeb is per level, not per transition. This means that this it is obtained by considering the ratio of the sum of the As (Einstein coeffs) from the considered level, to the qs (Collision rates) from the considered level: this means any collision to lower or upper level, from the considered level. You can verify that you recover the value you are expecting by instanciating a 2-levels atom: Ne5 = pn.Atom('Ne',5, NLevels=2) and obtaining the critical density for Te=1e4 by : Ne5.getCritDensity(1e4), and compare to the As/qs ratio: Ne5.getA() /  Ne5.getCollRates(1e4). In both cases it gives you the 2.5e4 cm-3, the value you expect from modern atomic data. I do not know which atomic data have been used by Osterbrock.
When more levels are taken into account, transition from level 2 to upper levels change the value of the LEVEL critical density.
The transition critical densities are obtained for any N_levels atom by exploring the matrix obtained by Ne5.getA() /  Ne5.getCollRates(1e4). In your case, the 2-1 transition is in the [1,0] position:

(Ne5.getA() /  Ne5.getCollRates(1e4))[1,0]

We could add a transition, or wavelength, keyword to the getCriticalDensity method in Atom one of these days ;-)

Hope it helps,

Saludos,

Christophe




Christophe Morisset

unread,
Sep 11, 2024, 11:21:42 AM9/11/24
to PyNeb
Hi Nimisha,
I'm coming back to this question of critical densities. There seems to exist a clear definition of n_c as A/q, but then once you realized that A can be Aij, or sum_j(Aij), and that q can be qij or sum_j<i(qij) or sum_j!=i(qij), there is finally a lot of different critical densities, usable for different situations.

If your question is "in which density range a given line ratio is sensitive to density?", then the critical densities of the 2 lines or their 2 upper level are not even relevant! For this kind of question, I'm using a method in PyNeb called getDensityRange. It just looks for the densities at which the line ration is "close" to the limit values. By close, I mean 10% of the distance between the extreme values, to the upper and lower value. This threshold can be changed by the user ("tol" keyword).

I realized that the way this was computed was not correct: for the low density limit I used the ratio of the statistical weights, which only works for [SII]-type density diagnostics (2-1 to 3-1 line ratio, without 3-2 transition). But this does not work for e.g. IR triplet line ratios, as for OIII or NeV ions.

I then updated the method to compute the desired line ratio at very low and very high densities, without any consideration on which kind of transitions they are involving. This is what's new in PyNeb 1.1.20 released yesterday.

I also made a Notebook to illustrate the use of this method and comparing different critical densities, the ones for a given line (Aij/qij), for a given line but considering any de-excitation (Aij/qi) and the level critical density (a la Osterbrock Eq. 3.30). I also plot some values from the literature. The notebook is there: https://github.com/Morisset/PyNeb_devel/blob/master/docs/Notebooks/Test_Crit_Density.ipynb

Hope it helps,
Saludos,
Christophe

Nimisha Kumari

unread,
Sep 20, 2024, 3:19:18 AM9/20/24
to Christophe Morisset, PyNeb
Hi Christophe,

Thanks for investigating this, and making updates to pyneb and for notebook examples. 

One quick question: does this at all impact the pyneb routines that allow us to investigate the Te, ne, and line ratios of fine structure lines, e.g., getEmisGridDic, plotContours from the examples shown in https://github.com/Morisset/PyNeb_devel/blob/master/docs/Notebooks/PyNeb_manual_7.ipynb for context.

Best Regards,
Nimisha

--
You received this message because you are subscribed to the Google Groups "PyNeb" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pyneb+un...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/pyneb/7ac5bcb1-95f1-4a57-ae20-b8eea968bf86n%40googlegroups.com.

Christophe Morisset

unread,
Sep 20, 2024, 3:22:56 AM9/20/24
to PyNeb
Not at all. Only the getDensityRange method was affected. The Atom getEmissivity and getTemDen methods and others you are citing, are giving correct results since PyNeb exists ;-)
Ch.

Nimisha Kumari

unread,
Sep 20, 2024, 3:03:58 PM9/20/24
to Christophe Morisset, PyNeb
Great, thank you Christophe, that's reassuring.

Best Regards,
Nimisha

Reply all
Reply to author
Forward
0 new messages