TLDR: I contributed to a decently sized open source project by adding features, testing computational optimizations, and writing documentation.

Why did I do it?

I undertook a second term of research under Dr. Olivier Hervet to improve Bjet_MCMC and to get experience contributing to open source software, testing and optimizing software, and working with an OpenHPC cluster.

What did I accomplish?

I used the Hummingbird Computer Cluster to test Bjet and gather data on its performance. I constructed a testing framework in python that automates parsing Bjet's output, processing the data, and visualizes it with Matplotlib. I've also modified the code base to expose previously hidden details about the MCMC proccess for more insight into Bjet's in-practice performance. I then took my results, prepared a presentation, and shared my findings with the UCSC Very High Energy Astrophysics Department. I was able to find parameters that reduced runtime by ~20% without impacting accuracy. I wrote documentation so that users can practically benefit from this work.

I also contributed a new feature to Bjet_MCMC. I modified existing code to analyze the Markov Chains' convergence. I fit an exponential decay curve to the convergence and added that information to the text of the output report as well as the relevant graphical outputs.

What did I learn?

The most important thing I learned was how to deal with a large, complex project, that I didn't write myself. Most of my programming at school is individual and small scale, so working to augment and improve an existing codebase was a new experience.

I also got to practice larger scale software developement. This was important to me because I rarely get to think about software architecture or system design. This is because I wasn't just making a few graphs, but building out testing infrastructure. Bjet was not designed to be testable in this way so I had to parse a lot of text files to get the data. By making a few good abstractions and picking good data structures I was able to create software that could be easily be extended to measure and deal with new parameters or data sources.