class poppy.SemiAnalyticCoronagraph(ExistingOpticalSystem, oversample=8, occulter_box=1.0)[source]

Bases: poppy.poppy_core.OpticalSystem

A subclass of OpticalSystem that implements a specialized propagation algorithm for coronagraphs whose occulting mask has limited and small support in the image plane. Algorithm from Soummer et al. (2007)

The way to use this class is to build an OpticalSystem class the usual way, and then cast it to a SemiAnalyticCoronagraph, and then you can just call calcPSF on that in the usual fashion.


ExistingOpticalSystem : OpticalSystem

An optical system which can be converted into a SemiAnalyticCoronagraph. This means it must have exactly 4 planes, in order Pupil, Image, Pupil, Detector.

oversample : int

Oversampling factor in intermediate image plane. Default is 8

occulter_box : float

half size of field of view region entirely including the occulter, in arcseconds. Default 1.0 This can be a tuple or list to specify a rectangular region [deltaY,deltaX] if desired.


Note that this algorithm is only appropriate for certain types of Fourier transform, namely those using occulters limited to a sub-region of the image plane. It is certainly appropriate for TFI, and probably the right choice for NIRCam as well, but is of no use for MIRI’s FQPMs.

Methods Summary

propagate_mono([wavelength, normalize, ...])

Methods Documentation

propagate_mono(wavelength=2e-06, normalize=u'first', save_intermediates=False, display_intermediates=False, intermediate_fn=None, poly_weight=None)[source]

wavelength : float

Wavelength in meters

normalize : string, {‘first’, ‘last’}

how to normalize the wavefront?

  • ‘first’ : set total flux = 1 after the first optic, presumably a pupil
  • ‘last’ : set total flux = 1 after the entire optical system.

save_intermediates, display_intermediates, intermediate_fn, poly_weight : bools

Ignored in current version of code?