Programming Progress

Hello again. It’s Matt back with some progress updates on my research. For starters, I got it working!

Look at those beautiful hexagons

As a reminder, the purpose of doing this is to simulate a single strand of DNA, the one in the middle, as if it were in vitro. Since we can’t simulate the entirety of a strand of DNA (it’s far too large), we take a small portion of it and hope that the insights we glean can be applied, or at least give us some insight into the whole DNA strand. There is also a slight change that you may have picked up on: the DNA has been rotated around the y-axis. This is purely for our sake in doing the analysis; it’s challenging as-is to work with 4D data sets (after we run the DNA simulation through the online web server that does all the math for us we get back data that when we plug it into matplotlib we get a 4D data set: the x, y, and z coordinates as well as the electric potential at all points), adding in another level of complexity in having to consider the x-axis as the z-axis, for instance, just adds needless confusion. It took me about two days to implement this rotation as the way I attempted first was to essentially make another function in my program that rotates the coordinates of the original DNA strand before I copy it everywhere. Unfortunately, rotations in 3D are hard and I couldn’t get it working. Luckily, I found something online that simplified the work a ton: the program we’ve been using to visualize the DNA (where the picture came from), VMD, actually allows you to change the locations of the DNA and spit them back into the original file. With 6 lines of code, the DNA strand was rotated and I could use my original program with no edits.

Now, our goal is analysis. I mentioned above that we will be using matplotlib, a graphing package for Python, in order to accomplish this. Basically, what we want to do now, is take the big long sheet of electric potentials that we have at every point in the simulation and trim it down to only the data we care about: the data inside a smaller-than-the-small-hexagon (i.e. inside a 28nm radius hexagon centered around the central DNA strand). Again, our goal is to simulate this singular DNA strand; the rest of the data isn’t representative of this goal and can be ignored for our analysis, the only reason it exists in the first place is because the potential at a given point depends on the potential at all the points around it. Once the data we want is selected (which is probably the hardest part of the rest of the project, 3D plots in matplotlib are no joke) we can then do some math on our end to figure out the excess number of ions that are present around the DNA strand according to the Poisson-Boltzmann equation. If you remember from the last post, this is the entire point of the project! If we can get the number of these ions we can begin work on publishing the paper and the sweet sweet publishing credit can be added to my resume! One step at a time, but every step forward is one step closer to grad school.

Ion Competitions and Programming Headaches

Hey! I’m Matt, one of the researchers working with Dr. Andresen this summer. My project is a continuation of a published work Dr. Andresen collaborated on back in 2013 (link). Allow me to give you some background before I explain exactly what it is I’m doing. The electrostatics of nucleic acids are fundamental to both nucleic acid structure and function. The physical origin of DNA condensation -a process essential for gene regulation- remains unsettled. It is the goal of our research to further our understanding of both these aspects/processes by observing what happens to DNA condensation when the solution containing the DNA has different amounts of differently charged ions. The research Dr. Andresen worked on in 2013 explored what happens when the amount of +2 and +3 ions varies in the solution, my research is interested in +1 and +3 ions. Basically, we look at how many of each ion bind to the DNA as their concentrations vary. My job, more specifically, is to simulate the DNA ion-competition according to how the Nonlinear Poisson-Boltzmann (NLPB) equations say it should work. Practically, this means arranging the DNA strands into predetermined shapes (in our case a hexagon) to try and mimic a small strand of DNA in vitro. Hopefully, our research will provide more insight into, not only into DNA condensation, but also biomolecular electrostatics in general.

As for my work these last few weeks, it’s mostly been trying to learn (and then unlearn) a few python packages for working with .pdb files. .pdb files are files with specific formatting that stores information about the DNA like its positional data, total charge, connections between nucleic acids, etc. This started off pretty well with me making rapid progress in terms of positioning the DNA strands where they needed to be (see below), but sadly, as I learned this Thursday, the packages I was using to do this unfortunately break the .pdb files when they edit them. Not break them completely, mind you, but just enough where the accuracy of the simulation takes a serious hit and thus I had to abandon them. This left me with only one option: write my own. Fortunately, I don’t need much of the functionality of those packages, I really just need the ability to modify the positions of the strands. I imagine I’ll have this done sometime early next week as the only snag left is that .pdb files require a very specific format that is whitespace dependent and I’m having trouble getting everything to literally lineup as it should.

DNA strands arranged in a Hexagon. VMD is the visualization software


After I work out the kinks, the next step will be to run my .pdb file through https://server.poissonboltzmann.org, a free Poisson-Boltzmann equation solver. This allows me to outsource the processing of the data to a webserver so my poor laptop doesn’t overheat and die trying to do all that math. Once I get the data back and in a state that I deem acceptable, I’ll be able to start doing some actual analysis, but at this point that’s getting ahead of myself.