for simulating coronagraphs. It is designed to be simple and easy to use, while still providing a powerful and flexible framework for simulating a variety of coronagraph designs.
The package includes a number of pre-defined coronagraph designs, as well as a library of functions for creating custom coronagraphs. It also includes a number of tools for visualizing the results of simulations, such as ray tracing plots and intensity maps.
The toycoronagraph package is open source and available on GitHub. It is a valuable tool for anyone interested in learning about coronagraphs or simulating the performance of coronagraph designs.
Here are some of the features of this package:
Simple and easy to use
Powerful and flexible framework
Pre-defined coronagraph designs
Library of functions for creating custom coronagraphs
Tools for visualizing the results of simulations
Open source and available on GitHub
Here are some of the applications of this package:
Learning about coronagraphs
Simulating the performance of coronagraph designs
Designing new coronagraph designs
Testing the performance of coronagraph hardware
Studying the physics of light scattering
Example
example target
Final image (Charge=2)
Final image (Charge=6)
with planets
Pre-image
Final image (Charge=6)
Turn on/off dust inside IWA
Final image (Charge=6)
Final image but ignored dust inside IWA (Charge=6)
Moving planet on an elliptic orbit
Frame definition
Plot the orbit (time = 0.2 period, starting from the perihelion and moving clockwise in the figure)
User could even make a video now
Video (Charge=6)
Video but ignored dust inside IWA (Charge=6)
Example usage (Python)
This py file illustrates how the Python package is used.
importtoycoronagraph.mainastoy# Load the example target image (example.fits) in Toy_Coronagraph/toycoronagraph/example_data/ foldertoy_target=toy.Target()
# Plot the preimage; the image will auto-save to origin.pngtoy_target.plot_origin()
# Plot the final image through vortex coronagraph with charge = 2; the image will auto-save to charge2_final.pngtoy_target.plot_final(charge=2)
# Plot the final image through vortex coronagraph with charge = 6; the image will auto-save to charge6_final.pngtoy_target.plot_final(charge=6)
# Now add a static planet, where pos=(x_position, y_position)toy_target.add_planet(pos=[0.5,0], brightness=0.00005, mode="cartesian")
# You could also add a moving planet on an elliptic orbit, where pos=(length of the semi-major axis, eccentricity, position angle, inclination angle, time/period))toy_target.add_planet(pos=[0.5,0.6,60,0,0.1], brightness=0.00003, mode="moving")
# Plot the preimage with planets; the image will auto-save to origin_with_planets.pngtoy_target.plot_origin()
# Plot the final image with planets; the image will auto-save to charge6_with_planets_final.pngtoy_target.plot_final(charge=6)
# Plot the final image by turning off the target inside IWA; the image will auto-save to charge6_with_planets_iwa_ignore_final.pngtoy_target.plot_final(charge=6, iwa_ignore=True)
# List the planetstoy_target.list_planets()
'''Static Planet 1: (0.5, 0.0) arcsec, brightness: 5.00e-05 JyMoving Planet 2: (-0.3818058424930897, 0.08394161212137384) arcsec, brightness: 3.00e-05 Jy'''# Delete a specific planettoy_target.delete_planet(order=1)
'''Successfully remove planet #1, here is the latest planet list:Moving Planet 1: (-0.3818058424930897, 0.08394161212137384) arcsec, brightness: 3.00e-05 Jy'''# Move a moving planet on its orbit by time/period=0.1toy_target.planet_move(time=0.1, order=1)
'''Planet has moved to new position'''# Plot the orbit of a specific moving planet; the image will auto-save to oribit_planet#.pngtoy_target.plot_orbit(order=1)
# Plot the new preimage with planets; the image will auto-save to origin_with_planets.pngtoy_target.plot_origin()
# Plot the new final image with planets; the image will auto-save to charge6_with_planets_final.pngtoy_target.plot_final(charge=6)
# Print a specific planet brightness, background brightness, and background brightness (ignored dust inside IWA) in the final image through vortex coronagraph with charge = 6toy_target.contrast(charge=6, order=1)
'''This is a charge-6 vortex coronagraph.'''# Plot the core_throughput and inner working angle (in pixel)importtoycoronagraph.psfaspsfimportnumpyasnppsfs=np.load("psfs_c2.npy")
psf.cir_core_throughput_plot(psfs)
# Make the planet movietoy_target.planet_video(charge=6)
# The video will be save to planet_video.mp4# Make the planet movie again, but ignore the dust inside IWAtoy_target.planet_video(charge=6, iwa_ignore=True)
# The video will be save to planet_video_iwa_ignore.mp4
The Tidelift Subscription provides access to a continuously curated stream of human-researched and maintainer-verified data on open source packages and their licenses, releases, vulnerabilities, and development practices.