Tenth/Final week of coding
Welcome to the eleventh and final weekly check-in. This was the tenth and final week of coding.
The summer went by swiftly and the coding period has come to an end. It was a great learning experience. Two crucial technical skills that I enhanced over this summer:
- Ability to understand documentation of different packages
- Ability to implement algorithms from scientific papers
I was able to evolve my problem solving approach thanks to the challenges I faced during the coding period.
My mentors, core team and the FURY community were extremely supportive and helped me whenever I got stuck. I'd like to thank Nasim and Elefth for helping me with the theoretical aspects of the project and helping me understand the research papers and underlying math. I'd like to thank Serge for his code reviews which helped me improve my code quality and helped me make my code more pythonic. I'd like to thank Javier for helping me with the Ribbon representation (which was something that I had been stuck on for a while). Javier also showed me the projects which he was working on which were truly fascinating and also inspired me to work on projects of my own.
One crucial learning outcome over the course of coding period:
Ability to break down problems into smaller pieces (decomposition). Most of the times, I tried to implement everything in one go. This is not a good approach and gets problematic when what you're trying to implement is complicated. Segmenting a problem's solution into steps is the way to go. A time when I employed this approach of segmenting the implementation into several steps during GSoC was when writing the code for the molecular surfaces which involved the following steps:
- Creating a grid of a specific resolution
- Finding the ids of voxels composing the molecular surface
- Implementing marching cubes or some other isosurface generation algorithm
- Smoothen the isosurface obtained in previous step
I'll be sharing my progress for the final week of coding now. The github repo of FURY can be found here.
What did you do this week?
- Implemented this paper (PR created: PR #492) to generate Van der Waals surface and solvent-accessible surface. It was a good learning experience because the first time I read the paper, I didn't understand the underlying math, it all seemed alien to me. I had to read it many times, read up the algorithms used and understand the terminologies. I had a meeting with the mentors to understand a bit of the theory which proved to be quite fruitful as I understood how to go about making the space-filling model. This blog was kinda helpful in understanding how to use
vtkMarchingCubeswith numpy arrays. One of the earliest SAS rendering looked like this (this implementation was not strictly according to the paper):
Current implementation (this implementation was according to the paper):
grid dimenstions = 256 × 256 × 256, used smoothing algorithms recommended by vtk
- I also understood how to go about rendering volumes. I think that the ability to render volumes with FURY will be a cool capability and I'll discuss my implementation and request the mentors for feedback and ideas in the weekly meeting. Example of volume rendering:
What is coming up next week?
I'll try to get PR #452 merged. Documentation work to be done as GSoC coding period has come to an end.
Did you get stuck anywhere?
The paper I was trying to implement seemed quite intimidating at first. Understanding it and the underlying math took a few days. Implementing it in python was also a challenge as usage of
vtkMarchingCubes with numpy arrays is not that well documented. All in all, it was a nice learning experience.
In retrospect, it wasn't always smooth sailing as I used to get stuck quite often (sometimes for weeks) while working on certain representations (VTK documentation wasn't quite helpful and didn't have many python examples). But I didn't give up and read hundreds (if not thousands) of blogs and many research papers to find the solutions to the problems that I encountered (I read over 600 topics on the VTK forum). The key to breaking an impasse is to be unrelenting in the pursuit of answers. Also, don't hesitate to seek help as most of the times the impasse that one faces is something that others have encountered before and they might offer some insight that can help. This pursuit gets quite frustrating at times but the satisfaction one feels after getting the answers makes this struggle worthwhile (quitting ain't an option!).
The coding period has ended and my GSoC journey too is nearing its end but I believe that I'm just getting started with Open Source and I can't wait to work on the ideas I developed over the course of this summer. I have some exciting project ideas for FURY (physics and animation based) that I hope to work on.
To the Reader,
Good luck with your future endeavours and goals.
Never give up.