Team:BU Wellesley Software/Notebook/ChenkaiNotebook
CHECK-why does resourcemanager give the printout out of order? investigate
CHECK-tell user when new plate gets allocated
CHECK-record reaction history, also protocol history
CHECK-debugging purposes, log everything that happens
CHECK-add string name for wells and incubator slots, plates
CHECK-unique identifier for each well/sample
CHECK-fix duplicate restriction digests
CHECK-there are 50ul, 100ul, 200ul tip sizes, must specify
CHECK-if two wells have partial amounts, combine them
CHECK-swap column and row
CHECK-Talk to Jeno about Puppetshow GUI
CHECK-Plate allocation issue
CHECK- Restriction digest testing on the robot
CHECK-move transversing the tree out of assemblymanager, we want a separate program to annotated the tree and produce the protocol graph
CHECK-Fix deck settings, get deck setup out of java constant file
-different buffer for each protocol
-be generic with plate dimensions, specifying locations (grid/site), this is only with the Tecan robots
-fix naming, 3 parts (UUIDS,User defined names,auto-generated linearized tree name)
-save resourcemanager state
-prepare for ligation testing on the robot
-Get the restriction digest/ligation connection working
-Saving samples, sample history to the database
-Work with Janoo to design a PuppetShow GUI with the following functionality: Puppeteer script editing, sample viewing, sample history viewing, integrated DB, Protocol Graph viewing/editing/designing
-Test and verify ligation on the robot
-Restructure sample/history in RM
-Allows RM to pass human readable instructions elsewhere so the user doesn't have to read it from command prompt
-Initial RM resources should also be contained in Settings.xml
- Wednesday 6/8
Just flew back from China, got to PHO209 at 4pm and caught up with other team members on what they are up to. Had a discussion with Viktor about the road ahead, what problems are on our to do list.
Found a fix to the sample name duplication issue, instead of using sample names to identify sample, we are now adding a new UUID field to each liquid, this 8 digit randomly generated code will make sure no two samples of the same content will be confused with each other. Two UUIDS are generated for each sample, one for Pre-Restriction_Digested version and another for Post-Restriction_Digested version.
Implemented tips of different sizes, 50ul, 100ul, 200ul
Removed duplicate entries from Puppeteer output
Implemented incubator functionality
Planned and implemented history recording, reaction history and incubation history
Got the robot moving and tested in the wetlab
Swapped rows with columns to optimize robot pippetting
Added feature to ResourceManager to combine liquids in multiple wells to minimize waste
For debugging purposes, log everything that happens. More specifically, the content of what well should be pipetted to what well
Implemented Protocol History recording for samples
Talked to Janoo about what how the PuppetShow GUI show look like and what functionality it should have
Resource Manager now notifies the user when a new plate gets allocated
Helped Viktor debug Resource Manager, it was giving him a "java.lang.reflect.InvocationTargetException" exception. It turns out he was encountering a "WellOverFlowException" which simply shows up as a InvocationTargetException on the python side. I changed it so now it prints the error message instead of giving an unambiguous exception
Formulated a new way to name samples in Resource Manager, details are sketched out but awaiting for agreement from Viktor and Aaron
Aaron came over today to discuss the issues of sample naming and sample history. He raised a good question during our discussion about how to implement sample history, he asked us what are we going to be doing with the history, and is it worth the time to look in sample history implementation or is it not critical at the moment. We agreed that it should be something to do in the longer term.
Took the protocol graph annotation out of AlgorithmManager and into a separate file called ProtocolGraphAnnotator.java. I emailed this file as well as SDSTree.java which I have modified to Janoo and he got the Puppeteer output generation working on his GUI.
1. What I have done in the past 2 weeks is mostly making gradual improvements on Resource Manager. I have been keeping in close touch with Viktor and helping his debug each time he encounters a bug on the Resource Manager's side. I fixed the bugs that we found during the Tasby's meeting as well as features that needs to be implemented. For example, I implemented the incubator as well as differing DiTi sizes.
We are currently finishing debugging RM and Puppeteer and getting ready to test the whole flow on the robot. I am also working to revamp all the format of all the JSON Objects that are being passed back and forth between Puppeteer and ResourceManager to a more consistent and predictable format. Me and Viktor agreed that as RM grown, the differing return formats for each individual method is becoming harder and harder to manage, so this new format will make it easier for users to understand what those returns are.
2. My work fits into the overall iGem project as the bridge between Clotho design and physical assembly. The automation in assembly completes the entire workflow from a high level description to physical assembly. This is something that not every lab can do, but we have both the software platform and the Evoware robot to complete a design from start to finish with the push of a few buttons.
3. There are a number of features and hurdles that we bypassed using a pretty hackous solution just to get the flow working, those short term approaches must be finalized with more permanent implementations.
Week of 6/20 -Revamp JSON formats -Sample Naming, a. UUID b. Auto-Generated Linearized SDSTree c. User-defined names
Week of 6/27 -Sample History Implementation and Search
Week of 7/4 -Learn Puppeteer/Python for July demo -Get the entire workflow debugged and tested
Week of 7/11-Parallelism and Optimization. Optimize movement to pipette from many wells at the same time instead of using only one Diti at a time
Today: So today was rather productive. Me and Viktor communicated over Skype in the morning to get some final bugs fixed and we met up at the wetlab at 3pm to test our protocols on the robot. We first tested running 3 restriction digests in a row, verifying the correctness of our pipetting with the printout of a event logger that told us what is 'suppose' to happen. Our testing of 3 restriction digests worked fine, but we ran into a 'Out of Resources Exception' when we tried to test with 9 restriction digests. We then spent 40 mins trying to debug this error and finally managed to fix the problem. We next used the same method to test 1 ligation and it worked fine, we then tested 5 ligations in a row and its pipetting pattern also matched what we expected. What we need to do now is to connect the restriction digests and ligations so the ligations will use samples created from the restriction digest as its input samples.
Today was the date of the awaited Joint iGem meeting. I gave everyone an update on ResourceManager and progress on the robot side. The meeting lasted longer than expected but it was productive. I was curious on what the wetlab side have been doing and now I am all up to date with everyone's progress. After the meeting, Viktor, Swapnil and I went over to the Wetlab and retested the 9 restriction digests and 5 ligations. I was there to help verify the 9 restriction digests but had to go at 6.
We had the Comp Meeting today with Doug and he added a number of things onto my todo list:
6-22-11 Comp Meeting ToDo
1. Human Readable RD-> Ligate Connection
2. Consumable Expense, Calculate Plates, Tips, Type
2a. Cost $ (bonus)
3. Consumable projection report
4. Plan to learn from Viktor by 7/9
5. “Plate” allocation
6. Puppeteer DB -> schema
I now have my work cut out for me for the next few weeks. Me, Swapnil, and Viktor had a juicy discussion about how to deal with the plate allocation issue. How does Puppeteer/ResourceManager figure out what plates are least needed and make room on the deck when the deck clutter's up with plates. We agreed to execute a 3 pass method to do this, the first pass calculates resource requirements and initializes the deck, the second pass figures out what plates are accessed at what time, and during the third pass we actually passes instructions to the robot. By this point, the resource manager knows how to make room on the deck and put what plates in the hotel depending on the access time for each plate.
- Thursday 6/23
So today we met with Wellesley's iGem team and exchanged progress and ideas about what we have been doing and what we need to do in the future. I think what they have been working on is definitely cool and I am looking forward to going over to Wellesley's to see their surface on Monday. After the meeting, me, Viktor, Swapnil and Janoo went over to the wetlab where Viktor taught us how Puppeteer works and how he is connecting to the robot through sockets. I now have a much better understanding of Puppeteer and I will start trying to connect to Evoware on my own local server.
We planned to show up in the lab at 2pm and test the Puppeteer protocols on the robot with real samples and enzymes. However, I realized that enzymes have similar consistency as glycerol and requires a different liquid class to pipet properly. We ran into another problem trying to pipet fractional amounts. Apparently we need to pipet 0.5ul of some liquid that we were not anticipating and the RM came back with a error saying that not enough required liquid found. I am assuming this is because the number is rounded and casted as int somewhere and we need to get that debugged. Those errors and problems caused us to postpone the testing until next Tuesday.
Today we went to Wellesley to get updated on what they have been working on. They showed us a couple cool demos which really impressed me. I also wrote down some comments and suggestions for them on the sticky note that I hope they will benefit from. We collaborated to brainstorm ideas about the three main projects, the Electronic Notebook, the Design, and the Primer Designer. I worked in the Electronic Book section and I really think I contributed to the project with my ideas and I really think I can help them in developing this App since I already have experience developing apps on the iPhone, which uses the same programming language and environment as IPads. We had a good time touring their campus and playing ultimate Frisbee afterwards, it was a good day.
We had a short joint meeting today to catch up on things between the wetlab and the drylab. Me, Viktor and Swapnil then went over to the robot to do some more preliminary testing on the robot since a few things has changed since the last time we went over. We were playing around with the liquid detection and liquid class settings so we can pippet glycerol. We ran into a handful of collision errors and 'invalid operand' errors which was new to us. To fix this, we tried changing setting on the liquid class such as z-max offset and 'liquid detection enabled'. Unfamiliarity with the errors as well as the slowness of the wetlab computer made debugging very frustrating and slow. I had to leave at 6pm and I believe Viktor and Swapnil stayed a while longer to fix the error.
We had that brief iGem Comp Team meeting today where everyone gave Doug a update on what they have been doing so far. So today I spent most of my time solving the plate allocation issue by implementing the 3 pass approach. During the first pass, Viktor calculates and allocates all resources needed on the deck, during the second pass, RM records down during what steps are each plates accessed, and during the third pass, we actually run Puppeteer live on the robot and the RM now knows how to make room on the deck by looking at each plate's access time acquired during the 2nd pass.
Today was our scheduled protocol test on the robot with real samples and enzymes. We went over to the lab at around 12:30pm and get things setup. We ran the robot once pipetting water first to make sure everything is still working. We then printed out the init instructions from RM which we gave to Evelyn so she can set up the deck with the plates and samples that RM instructed the user. After everything is set up, we started the robot and recorded the entire pipetting process with Viktor's camera. Everything seems to have worked fine. Evelyn then put the samples the robot made along with the samples she made into the PCR machine. Now I anxiously await the result of our execution, hopefully the result is comparable with the result of the handmade sample.
So the results for the Restriction Digest is out and we are victorious! Judging from the image of the gels, the samples, enzymes, and buffers mixed correctly to cut out the desired part from the restriction sites. Aaron came in today to talk to us about our progress since last week and we gave him a thorough update on our achievements recently. Afterwards I drafted up a excel sheet demonstrating how the plate allocation works. Every time Puppeteer needs a new plate, it would check to see if the deck is full using RM.isDeck_full(), if so, it will call RM.move_plates_to_hotel(1) and make room on the deck based on what plate will be least used.
I spent a couple hours in the morning learning some basic python syntax because I really want to learn a new programming language.
- iGem Joint Meeting
-The wetlab is having trouble with their ligation protocols
-Problem with calculation and concentration, should be fixed soon
-Items and equipments in the wetlab is now more organized and labeled
-Jenhan is taking on a new project, DNA security using invertices
Meanwhile I am working on getting the restriction digest / ligation connection working. Before Swapnil headed out for the TASBE meeting, he wanted me to try to get PuppetShow working on my computer. I had no problem getting it to work on my Mac but installing it in the virtual machine was somewhat troublesome because I kept on encountering errors upon building. In the end however, I finally got PuppetShow to build. I then spent the rest of my day trying to get PuppetShow's stack configuration to run all pieces of the project so that pressing the execute button will run all three pieces of the project and start Evoware. We had trouble doing this because we only have one line to execute each piece of the project and we cannot 'cd' since the root directory is reset after each command to the PuppetShow project directory. We managed to get RM running with the right command.
-Comp Team meeting today, progressed updated
-Figured out the exact commands to run in PuppetShow to execute all 3 pieces of the project
-Headed over to the wetlab to test the accuracy of the robot's pipetting by measuring the robot pippetted amount against the intended amount to see how much error there was
-Wellesley team came over today to get and give an status update on everyone's progress
-Janoo fixed the error in his code and now the stack configuration can run all three pieces simultaneously
-Swapnil, Viktor, Janoo and me talked about what other possible uses does creating the protocol graph have besides visualization. We agreed that it can also provide scheduling solutions, resource usage estimation, and branching ability so we do not need to create a whole new tree if we only want to branch at a particular node with different variables
-I began the morning by learning to serialize java objects so I can save sample, sample history, and the RM state into the Puppeteer database. However, Swapnil came in later today saying that we do not want to directly save java objects into the database but rather only the detailed fields that contains the relevant information such as sample name, sample amount and such. We need to figure out a nice data structure to save the information we want to the database.
-Viktor came in early today since it is his last day before going off to vacation
-Together we fixed the bug that Swapnil and I was encountering that involved HAL crashing everytime
-We originally planned on going to MIT to setup our workflow on their computer but it was rather late when we got HAL debugged
-When Swapnil and Viktor left for the wetlab to do some more testing on the robot, me and Janoo had a productive discussion about what is the best way to save sample/history/state to the database
-Due to Viktor's departure, we now need to fully understand the code he left us so we can add/edit his code confidently, I spent a couple hours trying to decipher his code in case we need to modify it later
-Swapnil, Janoo and I had another discussion about how to go about saving samples and sample histories as well as questions arose from Friday's discussion
-I worked on solidifying the fields that went into the sample and protocol table for our puppeteer database
-We had that joint meeting today where we found out that the ligations are semi-working
-DARPA meeting coming up soon and we are trying to get ready soon and we need to get the ligations tested and verified
-Discussion about what is going to be saved to the database, do we want the Protocol code in our database or a separate SVN, how are we saving sample history and what is the most efficient way to do it
-What fields goes in the ProtocolNodeTable and SampleNodeTable
-Discussion with Doug during the Comp meeting added a couple new things to my todo list
1. Fix deck setting and move it out of java constant file
2. Restructure sample and sample history in RM for easy saving in the DB
3. Get ligation tested and working
-Joint Wellesley meeting today, updated notebook progress, primer designer progress, PADS progress
-Helped Craig with my inputs on the project description for iGem
-Tried out the upper limit of RM capability, it was able to run a maximum of 32 Restriction Digest and 45 Ligations with no error from RM
-Put RM settings in the same Settings.xml file as Hal and figured out how to use RM to read this Settings.xml in order to setup the deck with carriers, hotel, and incubator
-Janoo said he incorporated RM, Puppeteer, and HAL together to run in the background and execute when the user presses run, however, when me and Swapnil tried to test this, it does not work
-There was a bug in RM yesterday morning, apparently a spelling mistake 'Pippet' instead of 'Pipette'
-Tested out the PuppetShow on my computer, I was able to run the whole flow in PuppetShow with RM and HAL running in the foreground(we want them to run in the background in the near future)
-Plate allocation in PP is now hard coded, I tried to change this by asking RM for the plates that needs to be allocated, waiting for Viktor's email
-Spent most of the day getting the settings out of Puppeteer. There is a hardcoded portion of plate allocation procedure embedded in Puppeteer
-Tried to write a RM method that returns what plates need to be allocated then pass it to Puppeteer
-On Puppeteer side, write a method which decodes that method from RM and dynamically allocate plates
-Finished taking the settings out of Puppeteer and the plates can now be dynamically allocated
-Getting ready to test it on the robot when we ran out of time, preparing to do it for tomorrow
-Got the new version of PuppetShow debugged and working on my computer
-Fixed the integration bug Janoo was stuck on
-Compile RM into a jar and imported into PuppetShow for integration
-Went to the wetlab and tested it out on the robot
-Today was the ligation testing
-We first ran the ligation testing with water in the wetlab to make sure the pipetting pattern works
-We then did a real ligation in 3 wells with GFP and Terminator
-Results showed 2 plates with no colonies and 1 plate with one colony. Evelyn's control test had no colonies either
-Fixed Deck.java hard coded url
-Went to the Wetlab to test the deck position change on the robot and it worked well
-Worked on getting a html output resource everytime
-Create a PuppetShow executable for MIT tomorrow
-Went over to MIT to setup PuppetShow on their machine
-Took liquid class out of Puppeteer into Settings.xml
-Tested a restriction digest using PuppetShow with the MIT deck setup, everything worked as expected
-Did not find password to their Evoware, tried to create a virtual machine image to put onto their computer, which turned out unsuccessful
-Joint BU Wellesley meeting today
-Reading up on the C# HAL code to understand it more
-Added the 'Comment' command in Puppeteer and HAL
-Trying to add a 'flush tip' command at the beginning of each puppeteer script
-Camping today! No work =D
-Wellesley people came over today with their Surface and gave us demos on their progress with the Gnome Surfer and Primer Designer
-Taped some footage for the BBC documentary entry
-Did another round of ligations with Evelyn in the Wetlab
-2 robot ligations and 1 manual ligation
-Discussion on how to create the ProtocolGraphGenerate
-Wrote skeletal structures for ProtocolGraphGenerate and Assembly Rule methods
-Sketched up ways we can take user input on sample locations
-Went over to MIT to give Puppeteer to Johnathan
-Spent 2 hours transfer to VM to Johnathan's computer
-Took carrier types out of HAL and softcoded it into the Settings.xml
-Worked on softcoding all the Settings
-Took Diti types and rackType out of HAL and into Settings.xml file
-Presented PuppetShow to the iGem folks
-Got to try out everyone else's Clotho apps
-Chris Anderson visiting BU
-Had a really long meeting upstairs
-Drylab members came down to give Chris a demonstration the apps that we have been working on
-Almost got the manual sample initialization done though there remains a bug that needs to be sorted out
-Got PuppetShow in Clotho and working with the Puppeteer database
-Feedback and todo list created through discussion with Chris Anderson
-Worked on plate allocation, which is becoming a problem when we try to allocate more plates than carriers
-Tried implementing a 3 pass system
-Trying to debug the 3 pass approach, more complicated than I thought
-Met with Shannon and formula outreach plan
-Worked on DNA Scrabble concept
-Rolled back the plate allocation attempt, too much time wasted
-Final iGem meeting, status updated
-Worked on writing Gateway Gibbson protocol