This week marked the beginning of our optional week where we would start a more difficult coding project, and that project turned out to be primer design written in Python. It turned out to be more difficult than it originally seemed but we made very good progress in these 3 days. Without further ado lets begin with Monday.
Today we started the week off with a new programming project in Python. The project consisted of primer design. To ease us in Mr. Ahmet gave an introductory lecture about multiplex PCR. The advantages of multiplex PCR include saved time, reduced material usage, and reduced technical mistakes. But the one disadvantage for multiplex PCR is primer primer interactions, such as primer dimers and hairpin formation. The hairpin formation is a really big problem and it is what we will try to tackle this week.
Before we could move on we read up on primer design on Matlab’s excellent documentation found here. Even though we will eventually code in Python, Matlab helped us brainstorm the functions we would have to write by showing us all the required criteria to design a good primer. To get a greater idea of what we were up to we tried to import Primer3, but it turned out that getting it to work in Windows was nigh on impossible. Instead we continued writing our functions for the different needs of the primer program. We divided into three teams and each team took on a different set of functions to write such as finding the forward and reverse primers, filtering the results, and finding the primer pairs.
After our dinner break we continued with coding the functions for a couple of hours until it was approaching midnight, so we decided to finish the day.
Today was the second day of our primer design coding program. While most of us continued to code the functions we were given some of us were completely blocked and had to look at the functions Mr. Ahmet had written to get an idea of what we needed to do. After orienting ourselves with the code we finished up the functions for the 1st phase of the primer design without having the luxury of a working Primer3 installation to ease the process. After rounding up the codes we visualized the codes in Jupyter (an alternative to IPython) and Mr. Ahmet and Mr. Osman combined all the functions and fixed up our variable naming system as each group was using different names for all the variables in their functions. The picture below is our incomplete dictionary of all the consistent variables we would need in order to run our primer design code.
After coming back from our dinner we continued to further finish the incomplete hards parts which consisted of hairpin, self-primer dimer formation, and primer-primer dimer formation. All the while the code was interlaced with true/false statements to make sure it worked in all possible conditions that it would be faced with.
After having some problems with the coding saving on our server we relieved some stress by trying to watch The Internship, but setting it up would take too long so we decided to end the day.
Today we started the day a little early to work on the missing features of our code. We were at a point that writing our own code from scratch was just not plausible anymore, so Mr. Ahmet was trying really hard to get Primer3 to work. Meanwhile everyone else was reviewing the already written code or rewriting unnecessarily long sections of the code to be slimmer.
After our lunch we started to read the Primer3-py documentation to understand how Primer3 works in a Python environment. Mr. Ahmet then spent a good amount of time setting up a scoring system to weight each of our input variables, in order to determine which ones are more important for the overall primer quality. Doing a scoring system would also allow us to adjust separate parts of the scoring system to get more primers with lower quality or less primers with higher quality as needed. After that the next step was getting PyLab set up to visualize the occurring scoring data in a box plot format. Below is the scoring of the ideal primers we had at the end of our filters.
After handling the graphing aspect we moved on to write some more code at Starbucks, but only after getting some dinner. We used TeamViewer to follow the code in two computers, but after several hours it was apparent that the internet in Starbucks could not handle our shenanigans so we moved back to Genkok to finish up the day with a couple rounds of Counter-Strike.
This concludes the beginning of the last week of our internship, stay tuned for the finale in a couple weeks!