Skip to content

Improve/Unify dust attenuation modelling #893

@abensonca

Description

@abensonca

Currently, dust attenuation is implemented by the stellarSpectraDustAttenuation class - but this is quite simple. It allows for wavelength and age dependence, and is normalized by passing a vBandAttenuation.

  • This class is used for more than just stellar spectra, so is poorly named;
  • It is quite simplistic in what it assumes can affect dust attenuation;
  • ThenodePropertyExtractorLmnstyStllrCF2000 class (re-)implements its own version of the Charlot & Fall (2000) dust attenuation model - not good to have duplicated implementation - remove dust attenuation from this and have it just return the unattenuated luminosity.

Create a new class which provides a much more versatile dust attenuation framework. Then, create a new nodePropertyExtractor which can be applied to any extracted luminosity (broadband, emission line, SED) and simply applies dust attenuation to it.

  • New dustAttenuation class:
    • Re-implement the current set of stellarSpectraDustAttenuation models:
      • Create an abstract subclass of dustAttenuation which simply computes the vBandAttenuation and has an abstract method that applies the relevant extinction curve, then implement the current models as subclasses of this abstract class.
    • Requirements:
      • Computes attenuations directly from node properties (so must receive node as an argument)
      • Can be passed different components (disk, spheroid, AGN) and work with them.
      • Can apply to broad-band luminosities (e.g. total and recent).
      • Can apply to time-resolved stellar populations.
      • Can apply to emission lines.
      • Allow for a specific inclination angle or averaged over all angles.
  • New nodePropertyExtractorDustAttenuation class
    • Apply attenuation to any other nodePropertyExtractor that provides a luminosity, output it with a suitable suffix (e.g. dustAttenuated - perhaps with some extra descriptive suffix provided by the used dustAttenuation class).
      • Optionally still output the unattenuated luminosity also.
    • This would need to handle scalars, tuples, arrays, etc., so probably needs to be a subclass of the nodePropertyExtractorMulti class.
      • This is useful anyway - can wrap a bunch of luminosities in single dust attenuator.
    • The wrapped nodePropertyExtractor would need to provide methods that give:
      • component information: disk/spheroid/blackHole/NSC/total (note that a given attenuator could refuse to apply to, e.g. total)
      • viewing angle information?
      • a data structure that details the luminosity produced split by:
        • (rest-frame) wavelength
        • component?
        • type (stellar, emission line, accretion disk, etc.)
        • age
        • ....???
      • this probably needs to be a list of objects that give this information so that the luminosity can be arbitrarily split (into various ages, components, etc.)
      • the wrapped nodePropertyExtractor class probably needs to provide a reduction function that is able to recombine the attenuated luminosities back into whatever form they want
        • for, e.g. broad band, could then split into recent and old light - dust attenuators could attenuate these differently if they want - reducer just adds them together to get the total luminosity

In addition to re-implemeting the existing classes should also implement:

  • "dust compendium" models
  • "birth cloud" models
  • a sequence attenuation which applies multiple other attenuators;
    • e.g. applying a "birth cloud" attenuation, followed by a "diffuse ISM" attenuation
  • possibly a "dust emission" nodePropertyExtractor which uses these classes to figure out total absorbed luminosity and then re-emits it with some dust spectrum.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions