Source code for ChiantiPy.tools.mputil

"""
Functions needed for standard Python multiprocessing module mspectrum
"""
import numpy as np
import ChiantiPy

[docs]def doFfQ(inQ, outQ): """ Multiprocessing helper for `ChiantiPy.core.continuum.freeFree` Parameters ----------- inQ : `~multiprocessing.Queue` Ion free-free emission jobs queued up by multiprocessing module outQ : `~multiprocessing.Queue` Finished free-free emission jobs """ for inputs in iter(inQ.get, 'STOP'): ionS = inputs[0] temperature = inputs[1] wavelength = inputs[2] abund = inputs[3] em = inputs[4] ff = ChiantiPy.core.continuum(ionS, temperature, abundance=abund, em=em) ff.freeFree(wavelength) outQ.put(ff.FreeFree) return
[docs]def doFbQ(inQ, outQ): """ Multiprocessing helper for `ChiantiPy.core.continuum.freeBound` Parameters ----------- inQ : `~multiprocessing.Queue` Ion free-bound emission jobs queued up by multiprocessing module outQ : `~multiprocessing.Queue` Finished free-bound emission jobs """ for inputs in iter(inQ.get, 'STOP'): ionS = inputs[0] temperature = inputs[1] wavelength = inputs[2] abund = inputs[3] em = inputs[4] fb = ChiantiPy.core.continuum(ionS, temperature, abundance=abund, em=em) try: fb.freeBound(wavelength) # fb_emiss = fb.FreeBound['intensity'] except ValueError: fb.FreeBound = {'intensity':np.zeros((len(temperature),len(wavelength)))} outQ.put(fb.FreeBound) return
[docs]def doIonQ(inQueue, outQueue): """ Multiprocessing helper for `ChiantiPy.core.ion` and `ChiantiPy.core.ion.twoPhoton` Parameters ----------- inQueue : `~multiprocessing.Queue` Jobs queued up by multiprocessing module outQueue : `~multiprocessing.Queue` Finished jobs """ for inpts in iter(inQueue.get, 'STOP'): ionS = inpts[0] temperature = inpts[1] density = inpts[2] wavelength = inpts[3] wvlRange = [wavelength.min(), wavelength.max()] filter = inpts[4] allLines = inpts[5] abund = inpts[6] em = inpts[7] doContinuum = inpts[8] thisIon = ChiantiPy.core.Ion.ion(ionS, temperature, density, abundance=abund, em=em) thisIon.intensity(wvlRange = wvlRange, allLines = allLines) if 'errorMessage' not in sorted(thisIon.Intensity.keys()): thisIon.spectrum(wavelength, filter=filter) outList = [ionS, thisIon] if not thisIon.Dielectronic and doContinuum: if (thisIon.Z - thisIon.Ion) in [0, 1]: thisIon.twoPhoton(wavelength) outList.append(thisIon.TwoPhoton) outQueue.put(outList) return