Implement a Python code which determines the minimum of a 2D Morse potential by an optimization procedure.
Allow the user to define a 2D Morse potential using the equilibrium distances x0, respectively y0, the asymptotic limits Dx, repectively Dy, and the potential well widths a, respectively b.
Implement a class which determines the analytical gradient of the 2D Morse potential.
Implement a class which performs the optimization, starting from user-defined input coordinates (x1, y1). Implement at least one optimization algorithm, see several examples here.
Optional: implement routines to visualize the potential and the path followed during optimization.
Implement a Python program which can perform different types of spectral analysis.
Implement a Spectrum class which can read and perform different operations (normalize, calculate area, etc.) on spectra of your choice (e.g. IR, optical, X-ray, etc. absorption or emission spectra, Raman, NMR or anything else). For example, you could use a database like NIST (experimental), SpectraBase (experimental), or MaterialsProject (calculated data), or spectra which you measured/calculated yourself.
Implement a class which can perform operations with two or more spectra (addition, subtraction, average/weighted average, etc.).
Implement a class for plotting and visualizing spectra in a Jupyter notebook.
Optional: Implement a class which can handle a collection of spectra (performed under different conditions) and represent it as a 2D map.
Implement a Python code which can perform different operations on molecules.
Implement an Atom class where atoms are defined by their atomic number or symbol and have different properties like mass, single bond radius, double bond radius, etc.
Implement a Molecule class as a collection of Atoms and read in the atomic coordinates from an xyz file. Implement routines to allow the user to rotate the molecule, stretch bonds, or rotate dihedral angles.
Using py3Dmol, write a routine to visualize molecules in a Jupyter notebook.
Optional: using RDKit, enable the user to create a molecule based on its SMILES string. See some examples here.
Implement a Python program which determines the pressure, temperature, and balck-body emission spectrum of a star based on the simple model described in problem 4 of problem set 8, Introduction to Astronomy, MIT course. In your program:
Implement a Star class where a star object is defined by its total mass (M) and radius (R).
Implement a routine which calculates the pressure and temperature as a function of radius within the star.
Implement a routine which computes the black-body emission of the star based on its surface temperature. To obtain the surface temperature, modify the quadratic temperature profile as T(r) = Tc ( 1 - b (r/R)**2 ), where b=0.9991 and Tc is the temperature at the star's center (r=0). The surface temperature is obtained at the radius for which the inward optical depth from the surface is 2/3. In the equation for the optical depth, consider a constant Rosseland mean opacity k = 0.034 m**2/kg.
Implement a StarCluster class which consists of a collection of stars and implement routines which plot the pressure and temperature at the stars' core as a function of their mass or radius.
Optional: enable computing the Kelvin-Helmholtz timescale according to the model described in problem 4.
Implement a Python code which generates a solar system based on a simple heliocentric model with circular orbits in 2D.
Implement a Sun class with mass, radius and luminosity as attributes.
Implement a Planet class with attributes mass, radius, type, starting position, distance from the sun, orbital velocity, period, etc.
Implement a SolarSystem class consisting of one sun and a collection of planets. Allow the user to define the attributes of the sun and the number of planets in the solar system, then generate a set of planets following (some) of the rules described here. Determine the planets' periods of rotation based on Kepler's third law.
Optional: create a routine which allows to visualize the solar system in a Jupyter notebook. For example, see here or here.