CHEM 0062
Possible Projects
Below are suggested projects that you could do. If a particular project interests you we can provide references.
The projects are phrased as if you were trying to calculate one thing. Of course, a user of your code would probably want to use it in different cases, so make sure that it works with other inputs as well.
Project
|
Category
|
Details
|
Your own idea
|
Any
|
Tell us about it!
|
Molecular geometry analysis
|
Geometry analysis
|
Take a molecular structure and calculate the position of its centre of mass, its moment of inertia, and its dipole moment. For the dipole moment, you’ll need more than just the structure, so you will have to invent a file format which also contains the partial charge on each atom.
|
Molecule discriminator
|
Geometry analysis
|
Take a series of molecular structures with different sets of conformations for one molecule. Write a program which identifies how many molecules are symmetrically equivalent to each other (by rotation, translation or maybe reflection).
|
Pair distribution function
|
Geometry analysis
|
Take a structure of a large number of atoms in a box (as a researcher may find at the end of a gas simulation). Calculate the pair distribution function (a histogram of the intermolecular distances).
|
Gas identifier
|
Geometry analysis
|
Take a structure of a large number of molecules in a box (as a researcher may find at the end of a gas simulation). Simply from the geometry information, calculate what molecules are in the sample and how many of each there are.
|
Van der Waals volume calculator
|
Geometry analysis
|
Take a molecular structure. Calculate the volume spanned the space enclosed by the van der Waals radii of each atom of the molecule (taking care of overlaps). Expand this to condensed phases (multiple molecular structures tightly packed).
|
Conformer generator
|
Geometry generator
|
Take a molecular structure and generate its conformers based on one or multiple torsional angle values.
|
Random gas generator
|
Geometry generator
|
Gas simulations need to begin with a random distribution of atoms (or molecules). Take a set of dimensions for a simulation box and a number of atoms and randomly distribute them in the box. Note that two atoms can’t start too unphysically close to each other, or the simulation will fail due to too much repulsion.
|
Crystal structure generator
|
Geometry generator
|
Given a primitive unit cell and a space group, generate a full unit cell, and a supercell of arbitrary shape (I x J x K unit cells grouped together)
|
Polymer generator
|
Geometry generator
|
Take the structure of a polymer fragment and a target total length. Generate a polymer of that length. Consider polymers where the fragments experience torsion at each repeated unit.
|
Mass spectrum analysis
|
Data analysis
|
Take some mass spectra data and extract the masses of the fragments being detected. Then, propose some molecular formulas that match those masses.
|
Gas chromatogram analysis
|
Data analysis
|
Take some gas chromatogram data and calculate the area under each peak. Keep in mind that the peaks may overlap with each other, and there will be a background intensity to account for.
|
Spectrum generator
|
Data analysis
|
When simulating UV-vis spectra, we usually are only able to produce the energy and intensity of each peak, thus making a stick spectrum. Take this information and apply common peak shapes to reconstitute more traditional looking spectra.
|
Peak picking
|
Data analysis
|
Take a noisy data set and extract the maxima from it. If it is too noisy, there will be many unimportant maxima, so you will need a criterion to choose where peaks are located more coarsely and how high they are.
|
Function minimiser
|
Data analysis
|
Computational chemistry calculations often rely on finding the minimum of potential energy surfaces. Each energy calculation can take a long time. Create an algorithm find the minimum of a landscape (or function), evaluating the function as few times as possible. The function could be anything but a popular one for initial tests is the Rosenbrock function.
|
Cholesky decomposition
|
Difficult
|
Solving equations involving symmetric square matrices can be computationally expensive. It is much faster with triangular matrices. A Cholesky decomposition expresses a Hermitian positive-definite matrix as a product of two triangular matrices. Make a program that operates this decomposition. You can expand this to non-Hermitian matrix with a very similar “LDL” decomposition.
|
Gram-Schmidt orthogonalisation
|
Difficult
|
Many numerical operations in Chemistry rely on their basis being orthogonal. A Gram-Schmidt orthogonalisation is an algorithm that takes a set of vectors and produces a transformation matrix which turns these vectors into an orthonormal set. Write an implementation of Gram-Schmidt orthogonalisation.
|
Advice:
- Geometry analysis: You will need to use input files containing the geometry information which you are to analyse. Depending on your project, you may find it more useful to begin with Cartesian coordinates, Z-matrices, or any other kind of info, and present it in all sorts of file formats. Take inspiration from the final mini-project for a common file Cartesian coordinate file format. For your output, you may want to print information to a file or to the screen depending on the type of output.
- Geometry generator: See above but reversing the inputs and outputs. Instead of printing to screen, you may use command line arguments.
- Data analysis: Widespread data storage file formats in science are .csv, and sometimes .jcamp.
- Difficult: The Wikipedia pages for this style. of algorithm are usually quite a good starting point, but you can sometimes find better explanations in their primary sources.
In all cases, you will need simple inputs to begin your development. Make them up! They don’t need to be realistic (at least initially), just simple enough to allow you to start programming.