KRISTI BLUMENBERG

DMP Research 2005

Home
Project
Journal
Mentor
Contact

 

 

 

 

 

Research Journal


Week 1:

At the beginning of the week, I looked at some genome visualization websites that Professor Grimm sent to me, and learned about what the genome maps looked like and some of the techniques for creating them.  It was interesting to see the different features, such as zooming and rotating.  Professor Grimm and I also met with Professor Buhler, who told us about the genetic data he had and how it could be visualized.  We established the project: I'll take his E. Coli genome and operon data and display it as a circular genome map, with the ability of fish eye zooming.  I read "Achieving Higher Manification in Context" by Sheelagh Carpendale to learn more about fisheye zooming (or focusing in context).  Once I had an idea of what I needed to do, I started out by creating a grid mesh and warping it by pushing a hemisphere portion from the center of the mesh toward the viewing point.

Back to Top

 

 

 

 
Week 2:

This week I continued to work on the grid mesh and the fish eye warp.  I finally figured out which mesh and camera classes and methods I needed to use!  I had been using the wrong ones and made things much more difficult for myself.  I learned how to create a mesh by writing to a .m file, then began working on texture mapping an image to the mesh.  I started out by just finding a genome map image and mapping it onto a square mesh.  After I got that to work, I worked on texture mapping the image to the grid mesh, which was a bit harder since it had so many faces.  When that was done, I wrote a warp function for the mesh.

Back to Top

 

 

 

 

Week 3:

I have made a lot more progress this week.  I began thinking about the user interface, specifically how the user will be able to choose the place on the map to warp. I created four buttons (up, down, right, and left), a zoom slider which increases the amount the mesh is warped toward the viewer, and a radius slider which increases the radius of the warped part of the mesh.  I also put in two buttons for the user to choose which genome they want to see, because Professor Buhler sent me genome data from two different organisms, E. Coli and Btheta.  Once this was done, I worked on parsing the data files.  I decided to start with the E. Coli file and finish all the visualization stuff for that file before I worked on the other one.  I'm not sure if I parsed the file the most efficient way; I ended up storing each gene attribute in a different array, so that I could access the location, COG, length, etc. with the same id number. 

Back to Top

 

 

 

 

Week 4:

I added several more features for the user interface.  On the left of the genome map, I made text fields that output the gene information.  I also changed the directional buttons into two buttons, clockwise and counter-clockwise.  When moving around the map, the gene number is incremented and the gene's information is shown in the text fields. Next I began constructing the genome map from the parsed genetic data.  This was harder than I thought, because there are over 4,000 genes, so it was hard to fit all of them onto the map.  I looked at a couple sites to see what other E. Coli genome maps looked like:

http://www.cifn.unam.mx/Computational_Genomics/regulondb/HtmlDocs/ECK12_ZoomTool.html

http://www.genome.jp/kegg/docs/slides/tutorial2/gp04.html

Once I had a map that looked similar to these, I added a search feature, so that when a user enters a gene name, the gene's information is displayed and the mesh is warped at the gene's location.  Here is a screen shot of the genome map so far:

 

 

Back to Top

 

 

 

 

Week 5:

This week I worked on parsing the Btheta file and visualizing its data.  I had to make many alterations to my code, since I originally just wrote it for the E. Coli file.  I definitely need to work on my coding style in order to save time!  I wrote a GenomeMap class that would store the file names and arrays of the genes' information, so now it won't be very hard to add more files to visualize.  Once I had created the Btheta map, I decided to work on making my program faster, since it took about a minute and a half to read both files and create the texture maps.  I found where the slowest parts were and made some changes, and now it takes about 25 seconds to read the files and build the texture maps.  I also tried to improve the zooming feature, because when the mesh is warped it isn't pushed out exactly toward the user, since the look-at position is at the center of the mesh, not at the center of the warped part.  So far I haven't found a good solution. 

 

Back to Top

 

 

 

 

Week 6:

At the beginning of the week, I added a couple more features.  I finally added a key, and when a user searches for a gene, a line will point to its location and the gene is labeled with its name and direction.  Next, I worked on the warping function, because it still does not zoom in on the genome enough, and it also does not point toward the viewer.  I talked to Professor Grimm about this, and she suggested that I find the vector from the warped point to the viewing position and use this in the warping function.  She also suggested using orthogonal projection instead of perspective.  On Wednesday, we showed Professor Buhler what I had done so far, so that we could get some input on what additional features would be most useful for genome research.  He showed me the UCSC Genome Browser, which is an incredible tool that displays a lot of details and comparisons of genomes.  Some data that could be added to my tool could be GC content, gene expression, and operon predictions.  Some of the data could be shown on the zoomed out map, and more detailed data could be shown on the zoomed in portions of the map.  Professor Buhler also said that it would be useful to allow multiple zoomed-in views of the genome to be displayed.  However, before I add these features, I need to fix the warping feature.  Professor Grimm and I decided to try something new that would not warp the mesh in the z-direction.  I made a lot of changes: I changed the projection from perspective to orthographic, and I changed the grid mesh into a circular mesh and texture mapped the genome data onto it.  This definitely saved time in building the mesh and texture maps, and it looks exactly the same as it did before.  Now I am working on selecting an area in the genome to translate to the origin, rotate, scale, then put back, which is one of the new methods of warping the image. 

Back to Top

 

 

 

 

Week 7:

I had some trouble with the zooming at first.  I wasn't really sure how to take a part of the circular mesh and texture map and scale it.  After some failed attempts and then talking to Professor Grimm, I finally got on the right track.  I had to change the DrawTexture method, so that when it was drawing each face it would find all the faces to be warped and scale them to be bigger.  I also had to play around with rotating and translating the faces, so that the faces would be in a good location and would not look warped.  Next, I fixed some of the problems with the texture map, because I realized some of the genes were not being drawn and some were not in the right place.  Finally, I fixed the zoom slider and radius slider so that now they will work for the new warp.  Next week, I will try to push out the part of the mesh that is hidden when the scaled faces overlap it, so that all of the map can be seen.  Then I will work on labeling the genes.

 

Back to Top

 

 

 

 

Week 8:

I first worked on increasing the resolution of the genome map, because the genes are very squished and it is hard to distinguish between each separate gene.  So far I haven't been able to increase the width of the image to more than 2^11, because for some reason the texture mapping won't work.  I wanted to see if it would look a lot better at 2^12, so I divided the circle mesh and the texture maps into halves, with the width of each texture map at 2^11.  It did look a lot better and would be much easier to label at this resolution.  However, having the mesh in halves causes everything to be a little more difficult, especially wrapping.  So I think I'll work on increasing the resolution once I have finished the "squishing" and the labeling.  Next I worked on the "squishing" part, where I am moving the faces of the mesh so that all of the map can be seen.  First, I decided to figure out the exact vertices of the face after it had been scaled, translated, etc.  This was a little difficult, since I had so many transformations.  After I had these points, I could find out which faces were overlapped by the scaled face, and then move those.  However, once I got those points, I wasn't sure how exactly I should move the faces in between.  Professor Grimm helped me out and now I have a better idea of what I need to do.  We also discovered that the scaling was warping the face a little bit, so I needed to scale the face from its center point, instead of one of its vertices.    

 

Back to Top

 

 

 

 

 

Week 9:

I finally got the squishing to work: I ended up creating a new mesh with the altered vertices, then in the DrawTexture method I check each face to see if it should be altered, then switch the face at that position with one of the altered faces.  Next, I had to incorporate the zoom and radius functions into the altered mesh.  This took a while to play around with, because as the warped face changed size it would start overlapping other faces.  I mostly fixed this, but it's still not exactly perfect.  Here is a picture of the map after the radius and the zoom have been increased:   

All the faces in the map are visible, which was the original goal.  Next, I need to figure out a way to label the genes, and then I want to get the search function to work again. 

Back to Top

 

 

 

 

 

Week 10:

In my last week, I altered the way the genes were displayed by creating a zoom window instead and rotating the entire genome map when the directional buttons were used.  The zoom window is a separte mesh and texture map, where I determine which genes should be displayed in the window and redrawing them at a higher resolution.  Now it is much easier to view the genes and label them.  I then verified that the genes were in the correct location and were the right length.  I am still working on a mouse function where the user can click on the part of the genome map and the face is displayed in the zoom window.  The map now looks like this:

 

 

 

Back to Top

 

 

 

 

 

 

 

 

Home | Project | Journal | Mentor | Contact

Last updated: 08/03/05.