semaphoreP / codeastro

Course Material for the Code/Astro Workshop
BSD 3-Clause "New" or "Revised" License
164 stars 68 forks source link

Code/Astro

A rectangular badge, half black half purple containing the text made at Code Astro

Course materials for the Code/Astro workshop.

Workshop website: https://semaphorep.github.io/codeastro/

Workshop "cheatsheet" of links & information: https://github.com/semaphoreP/codeastro/blob/main/workshop_info.md

Recording of the 2022 Code/Astro workshop: https://www.youtube.com/playlist?list=PLb1880Rn0qkK7zTWcqGaXNbKZbxkpvUuH.

Getting Started

Before the workshop, please complete the following:

  1. Follow the installation instructions to get the necessary packages installed.

  2. Do the diagnostic assignment to get familiarized with some Python fundamentals.

Project Information

Throughout this week, you’ll be working with a small group of collaborators (1-4 others) on a final project, a real open-source Python package for astronomy. If you already have group partners in mind, please email us! If not, we will assign you to a group based on timezone, career level, and any personal preferences you've communicated to us. This is an opportunity to put the knowledge you’ve learned from Code/Astro intro practice. On the final day of the workshop, you’ll (optionally) have a chance to present your package to the other Code/Astro participants.

Project Goal:

Develop an open-source Python package for astronomy from the ground up. Your project should:

Each of these goals will be covered on a different day of the workshop, so it’s completely fine if you don’t know how to do each of these right now.

Timeline & Time Expectations:

You should aim to spend 10 hours (~3.3 hours per day) working on the project. Days 1 and 2 are the main time to develop the core functionality of your package. Writing docs/tests/packaging will keep you busy on Day 4 (we don't nomianlly have anything planned on Day 3).

Here’s a more detailed suggested timeline:

Day 1: decide on the purpose of the package. Write one central function or class and put it on Github. Example: we’re working on a package that plots the most likely galactic orbits for a user-specified subset of the Gaia catalog. Today, me and partner 1 will write a function that uses galpy to compute and plot orbits for a list of stars, and partners 2 and 3 will write a class for constructing the list of stars using user input. We'll use two separate branches to do this.

Day 2: get a feature working and committed to Github. You'll be busy later this week doing documentation and other scaffolding, so try to finish something you can demo today. Example: We’ll continue working on the core functionality we sketched out yesterday so that we can produce a plot of likely galactic orbits given a Gaia star ID.

Day 3: Nothing is scheduled for today!

Day 4: The final stretch! Document your code, add tests, release it, and get ready to present tomorrow! Example: we’ll write docstrings for a couple core classes and functions (all we have time for) and add a tutorial to our README. We’ll write unit tests that evaluate the performance of key functions (e.g. if a user sets a degree range keyword, does the Gaia query work appropriately?), and end-to-end tests that make sure the whole package is working. We'll put our code on PyPI and try pip installing it on each of our machines to work through installation problems.

Examples from Past Years:

https://github.com/sonithls/GaiaCurves

https://github.com/JulienNGirard/SEDition

https://github.com/Bhavesh012/TCalc

https://github.com/laldoroty/snlcpy

Final Presentation:

During the final presentation, you will have the opportunity to give a short (5 minute) demonstration of the package your developed. Remember to talk about the motivation behind the package, any challenges or difficulties you encountered, and show off what the package does! We'll send around a sign-up sheet on Day 4, so please sign up for a slot!

Advice for Pair Programming:

To do this project, you’ll be working with others to program. This is likely a new experience for most of you. We suggest you use “pair programming” to collaborate, especially towards the beginning of the week:

Project Topics:

Many of you came to this workshop with ideas for open-source projects that are relevant to your research. If you’re in that category, please use this project as an opportunity to make something useful for your research!

Many of you don’t have research experience, and/or did not come to this workshop with an idea. That’s completely fine too! If you’re struggling to think of an idea for a project, here’s a list of ideas to give you some inspiration: