Team:BU Wellesley Software/Notebook/ChenkaiNotebook

From 2011.igem.org

(Difference between revisions)
Line 148: Line 148:
*'''Friday 7/1'''[[File: PlateAllocationVerification.png‎ |400px|thumb|right|Plate allocation verification. The top shows the printout for the plate access times. The bottom shows how RM make room on the deck based on what timestep you are at and the access times.]]
*'''Friday 7/1'''[[File: PlateAllocationVerification.png‎ |400px|thumb|right|Plate allocation verification. The top shows the printout for the plate access times. The bottom shows how RM make room on the deck based on what timestep you are at and the access times.]]
 +
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.

Revision as of 16:02, 5 July 2011

Chenkai iGem Notebook

Work Stack

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 incubator

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

-different buffer for each protocol

-be generic with plate dimensions, specifying locations (grid/site), this is only with the Tecan robots

-move transversing the tree out of assemblymanager, we want to a separate **program to annotated the tree and produce the protocol graph

-fix naming, 3 parts (UUIDS,User defined names,auto-generated linearized tree name)

-save resourcemanager state


Work Diary

  • 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.

  • Thursday, 6/9
    New Puppeteer output with UUIDS replacing sample names

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.

  • Friday 6/10

Implemented tips of different sizes, 50ul, 100ul, 200ul

Removed duplicate entries from Puppeteer output

Implemented incubator functionality

  • Monday 6/13
    Prints out the history of a sample

Planned and implemented history recording, reaction history and incubation history

Got the robot moving and tested in the wetlab

  • Tuesday 6/14

Swapped rows with columns to optimize robot pippetting

Added feature to ResourceManager to combine liquids in multiple wells to minimize waste

  • Wednesday 6/15
    Debugger printout log of what "should" happen during Evo150 execution

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

  • Thursday 6/16

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

  • Friday 6/17

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.

  • Monday 6/20

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.

  • Tuesday 6/21

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.

  • Wednesday 6/22

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.

  • Friday 6/24

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.

  • Monday 6/27
    Wellesley and BU Team Picture

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.

  • Tuesday 6/28

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.

  • Wednesday 6/29

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.

  • Thursday 6/30

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.

  • Friday 7/1
    Plate allocation verification. The top shows the printout for the plate access times. The bottom shows how RM make room on the deck based on what timestep you are at and the access times.

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.