Gsoc 1st Coding Period
The start of the coding period is here. During the community bonding period I got the chance to interact with my mentors and decided a few things.
OpenMS isotope distribution ignored an element’s atomic mass and used mass number instead. We can derive an elements mass number by rounding its atomic mass to the nearest integer. Using integers as atomic mass worked ok till now with coarse grain ID but with high res isotope patterns this approach wont cut it. After communication we decided to modify the existing id class allowing atomic mass float values essentially converting the class field from mass number to atomic mass. This caused all sorts of trouble causing many tests to fail and others to segfault. I had to go through OpenMS codebase and fix the errors. Most of them were solved by round the atomic mass to the mass number. Then I had to test the performance penalty of these modifications in the base class. This meant that I had to benchmark the existing coarse id class. Luckily the difference was not perceivable within margin of error. Avoiding write an extra hi res id class was a smart decision and it will pay off in the long run by reducing duplicate code and maintainability costs.
Another issue that was resolved was the integration of an fft library in the OpenMS contrib repo. OpenMS uses Eigen that had wrappers to several well known fft libraries like fftw and kissfft. Initially, this was good news to save me some time but it turned out eigen did not support any interface for multidimensional fourier transform that is required for the implementation of the ecipex algorithm. We decide to add kissfft in the contrib repo. We chose kissfft over another fft library because it is a simple and lightweight implementation. Building the library was accomplished by writing cmake config files. Some header includes caused problems with the build of the library so I had to apply some patches in the cmake build proccess. This was a bit frustating because because i did not a standard way to generate the patches for the header files so i modified manually some patches that I generated with git. Hopefully the files that required patches was less than 10 so I did not spend much time doing this.