Ejemplo n.º 1
0
def mutli_scale( primary: Spectrum, speclist: Iterable[ Spectrum ], scale_wl: float = DEFAULT_SCALE_WL,
                 scale_radius=DEFAULT_SCALE_RADIUS ) -> List[ Spectrum ]:
    """
    Multiprocessing Spectrum.scale() method.  Scales speclist members to that of the primary Spectrum, returning a
    list in the same order as it was provided.
    
    :param primary: Spectrum object to scale all speclist memebers to
    :type primary: Spectrum
    :param speclist: Iterable of Spectrum objects to scale to primary
    :type speclist: Iterable
    :param scale_wl: Wavelength at which to determine scale factor.  Defaults to DEFAULT_SCALE_WL in common.constants
    :type scale_wl: float
    :param scale_radius: Radius at which to determine scale factor.  Defaults to DEFAULT_SCALE_RADIUS
    :type scale_radius: float
    :return: List of scaled Spectrum objects
    :rtype: list
    """
    from tools.async_tools import generic_ordered_multiprocesser

    scale_flux = primary.aveFlux( central_wl=scale_wl, radius=scale_radius )

    inputV = [ (spec, scale_flux, scale_wl, scale_radius) for spec in speclist ]
    speclist = [ ]
    generic_ordered_multiprocesser( inputV, __multi_scale_wrapper, speclist )
    return speclist