3:35:49 am on 7/30/10
Menu
» Home
» About Scott
» QRSS VD
» Old Stuff
» Archive
» Contact

Categories
» C/C++
» Circuitry
» Dentistry
» DIY ECG
» General
» Linux
» Microcontrollers
» Molecular Biology
» My Website
» PHP
» Prime Numbers
» Python
» Radio
» UCF Lab
» Everything
Writings
» MD Labels
» Streamrip
» AIM Thoughts
» WindowsXP?
» Partitioning
» CD/DVD Repair
» Monitor Info
» CRT Deflection
» Venomcrack
» Flash Thing
» Heart/Brain
» Diabetes
» Triops
» Biomed

Friends
» Fred
» Kyle W
» Nick
» Louis
» Tom
» Kyle H




Archives
» July 2010
» June 2010
» May 2010
» April 2010
» March 2010
» February 2010
» January 2010
» December 2009
» September 2009
» August 2009
» July 2009
» June 2009
» May 2009
» April 2009
» March 2009
» February 2009
» January 2009
» December 2008
» November 2008
» October 2008
» September 2008
» September 2007
» December 2006
» August 2006
» January 2006
» August 2005
» July 2005
» June 2005
» May 2005
» April 2005
» March 2005
» February 2005
» January 2005
» December 2004
» November 2004
» October 2004
» September 2004
» August 2004
» July 2004
» June 2004
» May 2004
» April 2004
» March 2004
» February 2004
» January 2004
» December 2003
» November 2003
» October 2003
» September 2003
» August 2003
» July 2003
» June 2003
» May 2003
» April 2003
» March 2003
» February 2003
» January 2003
» December 2002
» November 2002
» October 2002
» September 2002
» June 2001

You are currently browsing the The Blogging Protagonist weblog archives for December, 2008.

Archive for December, 2008



Merry Labmice
Posted by
Scott December 23rd, 2008 | 5,253 words | No Comments »


Scott was 23.25 years old when he wrote this!

The pain caused my eyes opened 5am this morning. My alarm wasn’t set to go off until 7:30am, but I couldn’t sleep. I was anxious. Hundreds of thoughts continuously raced through my mind, all of them bad. I’ve been rejected from one dental school, will another take me? Will I ever graduate the program I’m in? Why do I feel like my thesis project is going to fail? My wife postponed starting nursing school for me because we were going to move for dental school, and now I’ve been rejected, what have I done to her? If I don’t get into any dental school, how could I get a job? What would I do with a masters in biomolecular science? Teach at a community college? Get a PhD? In what? God, not the same subject, right? Do they have a PhD in bioinformatics at my school? Will I have to move to another state? Have PhD application deadlines for enrollment in August have already come and gone? What do I have to do today, just kill 6 mice in lab and they try to finish my Christmas shopping? What am I going to get my wife for Christmas? Was she serious when she said she didn’t want to exchange valuable gifts with each other in order to save money? Should I make her something? Should I buy her something? Did I pay rent this month? Power, did I pay that? I don’t remember getting a power bill, but that doesn’t mean I don’t have to pay it anyway, right?

You get the idea. Anyway, stress and the lying-down position combined with acid reflux resulted in the fiery sensation of heartburn as I lay there pondering what felt like my imminent doom. I couldn’t take it anymore. I got up and left. Yeah, I got to work a little early this morning (way early, actually) but I figure that a little more time (spent relaxing, spent blogging) and perhaps some Tums would help me out a bit. So, here I am. Walking into work today I realized that I didn’t have a lot of pictures documenting my time here. So, in the cover of early darkness, I pranced around the building from room to room snapping pictures of the laboratories. Then I got a cup of coffee, sat on a step, and watched the reflection of the rising sun from building I work in.

Thankfully this is not the building where I attended any of my classes, or the thought of sitting beside it for so long would likely be revolting instead of relaxing. On a separate note, as much as Adobe Photoshop’s PhotoMerge plugin disappoints me (it crashes right in front of me every time I try to create an image larger than 4,000×4,000 pixels) I have to say that it worked nicely in my case. This is my lab desk.

It’s clickable too. Go on, click it! I changed desks a few months ago. I thought it would be cool to have a photo of this so, years down the road, I can look back, remember all of the memories, and probably ask myself “why the heck did I choose the molecular biology and microbiology program?”

Currently, I’m listening to Beethoven – Pathetique – Piano Sonata #8 c minor Op- 13.aac at relatively high volume at my desk since no one is in the laboratory yet. This is one of my favorite songs. I have a copy saved on my website, but it’s kind of hidden and unlabeled so it can’t be found on Google and I can’t get in trouble for it (that’s the plan anyway). If you’d like a copy, you can download it yourself (.aac files are like .mp3 files – they can be played with Winamp or Mplayer but they have better sound quality after extreme compression – this 18 and 1/2 minute song is a little over 3 megabytes). Anyhow, the link is: song4.aac and all I ask of you is that you download the file instead of streaming it directly from the website (it’ll save a little bandwidth). Thanks =o)



Data Mismanagement / Infestation
Posted by
Scott December 20th, 2008 | 5,253 words | 3 Comments »


Scott was 23.24 years old when he wrote this!

*As if threat of impending doom doom weren’t already haunting my nightmares* (possibly due to the intimidating threat of overlooked graduation requirements preventing my career from moving forward in a timely manner, but more likely due to terrifying possibility that my entire life will be spent stuck graduate school), yesterday I had two separate wrenches thrown into my academic gears. First, although I succeeded in confirming my legal rights with respect to being bound only to program policies that were already enacted prior to my admission, I came across a disturbing amendment to the thesis policies which claims that no student can propose, submit, or defend their thesis in the same semester. If this ruling applies to me, it will be devastating. I’ve spent a year and a half figuring out a way to do something no body has ever done before (looking at something no one has ever seen before, developing a method to quantitatively measure it that was never used before, and drawing conclusions about a pathological condition that was only previously theorized), and now that I’ve perfected my technique I want to use the subject matter for my thesis, propose the thesis, formally write and submit the thesis, and formally defend it (in rapid succession), thus satisfying my thesis requirements for graduation.
*So, I’m gathering preliminary data together and forming an experimental plan when, oh my, do I need to write more Python code?* Yeah, I know I feel that I look for excuses to find reasons to program, but the truth is that Python is so versatile and my working knowledge of it is thorough enough that I can’t imagine what I’d do without it! My department has an animal facility where they house literally thousands of mice of many different strains. These mice are housed in cages (maximum 5 mice per cage), and each cage contains only one (occationally two) types of mice with respect to sex, age, strain, and heredity. The project I’m working on will compare OVE26 (transgenic diabetic) mice with FVB (normal) controls. I also have a small collection of GFP (fluorescent) mice which I plan to use on a separate project.
*So, what’s the problem?* These mice are randomly distributed in giant racks with 6 stacked rows and 7 columns. Each rack has 46 cages, and racks are double-sided. Thankfully, all of the FVB, OVE26, and GFP mice are located on two large racks for a total of 184 cages. Unfortunately, interspersed are C57BL and other strains of mice I don’t plan to use. Another issue is that I only plan to use male mice in my experiment. A real pain is the fact that one rack is underground in the transgenic animal facility “headquarters” (for lack of a better word), and the other rack containing my mice is three stories up. Not only are these mice seemingly randomly distributed in location, but there appears to be a total lack of species/strain/heridity/sex specific inventory. The only inventory methods appear to be a total animal count. So when I went to my boss to ask how many diabetic mice we have and of what ages, he talked to another person who works in the laboratory and they concluded that they don’t really know. Do they have enough diabetic mice for my experiment? Are they old or young? Can we produce age-matched diabetic and control mice? Are there enough mice for my experiment that I don’t have to ruin the project of another laboratory worker planning on using the same mice? These are all questions that could not be answered, only speculated.

*With all of the uncertainties already afflicting my thesis process, I didn’t want animal confusion to be a problem.* From what I heard, about a dozen diabetic animals (in the age range I wanted most for my experiment) were recently killed. I felt that this process needed to be organized before I could properly come up with a plan, and of course, Python would be involved. I spent the morning downstairs manually inventorying mice. I decided that a location-based system would be the most useful. Each cage got its own line on a sheet of notebook paper (actually more like 8 sheets), and on each line I noted the cage location (in story/row/column coordinates), and information about the 1 or 2 groups of animals housed in the cage (count, sex, and date of birth for each group). After a couple hours sweating beneath my disposable hairnet and lab coat, I completed the downstairs inventory. To the side is a picture I took of myself half way through the monotonous process. (I think blood was about to shoot out of my eyes) Later I ate lunch, then did the upstairs. After I finished, I went home and manually entered this data into the computer (open office spreadsheet -> XLS), so it looked like this:

*Then I saved this data as a CSV* (comma separated values) file (using either open office or microsoft excel). Note that this is done in such a way that it’s very easy to make modifications to the XLS file to reflect new cages, changing cage locations, or animal death. Anyway, once it was in a CSV format, I wrote a Python script to convert the CSV format to a custom easy-to-analyze format which basically boils down to one line per mouse (not one line per cage). This is the Python script:

f=open("data.csv")
raw=f.readlines()
f.close()
animals=[] # [cage,sex,type,dob,age]
cages=[]
def addAnimals(animal,cage):
        if len(animal[0])==0: return False
        if cage not in cages: cages.append(cage)
        count=int(animal[0])
        if animal[1] == 'm': sex="male"
        else: sex="female"
        strain=animal[2]
        dob=animal[3]
        age=int(round(float(animal[4])))
        animal = [cage,sex,strain,dob,age]
        for i in range(count):
                animals.append(animal)
for i in range(len(raw)):
        line = raw[i].replace('"','').replace('n',"")
        if "-" in line:
                line = line.split(",")
                addAnimals(line[3:8],line[14])
                addAnimals(line[8:13],line[14])
f=open("data.txt",'w')
f.write('['+str(animals)+"],["+str(cages)+']')
f.close()

*Running this script produced a file with content like this:*

[[['d-a1', 'male', 'fvb', '09/26/08', 3], ['d-a2', 'male', 'fvb', '08/12/08', 4], ['d-a2', 'male', 'fvb', '08/12/08', 4], ['d-a3', 'male', 'fvb', '12/24/07', 12], ['d-a3', 'male', 'fvb', '12/24/07', 12], ['d-a4', 'male', 'fvb', '11/16/08', 1], ['d-a4', 'male', 'ove26', '11/16/08', 1], ['d-a4', 'male', 'ove26', '11/16/08', 1], ['d-a4', 'male', 'ove26', '11/16/08', 1], ['d-a5', 'male', 'fvb', '10/26/08', 2], ['d-a5', 'male', 'fvb', '10/26/08', 2],...

*From there, I wrote an analysis python script.* Should I post it? [thinks about it] Sure why not. A warning though, the code is pretty rough. It works though =o)

import pylab

f=open('data.txt')
animals,cages=eval(f.read())
animals,cages=animals[0],cages[0]
f.close()
print "Processing data for %d animals in %d cages..." % (len(animals),len(cages))

##LIMITS######
sex="male" #'male' or 'female'
strain="ove26"
minage=3
maxage=9
##############

selected=[]

def passIt(animal): #['u-l7', 'male', 'ove26', '10/28/08', 2]
        global selected
        if not animal: #dscription
                title="Displaing "
                if sex: title = title+sex+" "
                if strain: title = title+strain+" "
                else: title = title+"all "
                title = title + "mice from "
                if minage: title = title+str(minage)+" months to "
                else: title = title+"birth to "
                if maxage: title = title+str(maxage)+" months."
                else: title = title+"death."
                return title
        if sex:
                if not animal[1]==sex: return False
        if strain:
                if not animal[2]==strain: return False
        if minage:
                if animal[4]maxage: return False
        selected.append(animal)
        return True

def histIt(strain="all",col='k',label=True,limitTest=False,lw=None):
        ages,xs,a=[],[],{}
        for animal in animals:
                if limitTest:
                        col='b'
                        if passIt(animal):
                                ages.append(animal[-1])
                                if not animal[-1] in a: a[animal[-1]]=0
                                a[animal[-1]]=a[animal[-1]]+1
                elif strain in animal or strain == "all":
                        ages.append(animal[-1])
                        if not animal[-1] in a: a[animal[-1]]=0
                        a[animal[-1]]=a[animal[-1]]+1
        for x in range(max(ages)+1):
                xs.append(x-.45)
                if not x in a: a[x]=0
        if not limitTest:
                pylab.title("Ages of %d (%s) Mice"%(len(ages),strain))
                pylab.xticks(range(1,max(ages)+1))
        if not label: col,lw='0.9',0
        else: pylab.title(passIt(None))
        pylab.bar(xs,a.values(),color=col,lw=lw)
        for x in range(max(ages)+1):
                if label:
                        if a[x]>0: pylab.text(x,a[x]+1,a[x],ha='center')

def showSelected():
        cages={}
        ids=[]
        m,f=0,0
        for animal in selected:
                if animal[1]=="female":f=f+1
                if animal[1]=="male":m=m+1
                if animal[0] not in cages:
                        cages[animal[0]]=0
                        ids.append(animal[0])
                cages[animal[0]]=cages[animal[0]]+1
        ids.sort()
        x=0
        disp="Total of %d mice (%dm/%df)nn"%(m+f,m,f)

        disp=disp+"Animal Cage Locations:n"
        for cage in ids:
                disp = disp+"%s(%d), "%(cage,cages[cage])
                x=x+1
                if x>7:
                        x=0
                        disp = disp + "n"
        return disp

def getLimits():
        global sex, strain, minage, maxage
        answer=raw_input("Sex [m,f]:")
        if answer=="": sex = None
        if answer=="m": sex = "male"
        if answer=="f": sex = "female"
        answer=raw_input("Strain [ove26,fvb,gfp]:")
        if answer=="": strain = None
        else: strain=answer
        answer=raw_input("Minimum Age [3]:")
        if answer=="": minage = None
        else: minage=int(answer)
        answer=raw_input("Maximum Age [9]:")
        if answer=="": maxage = None
        else: maxage=int(answer)
        print "nn"
        print passIt(None)
        raw_input("npress ENTER to start")
        return

getLimits()
fig = pylab.figure(figsize=(12,8))
histIt(label=False)
histIt(limitTest=True)
masterAxis = [0,pylab.axis()[1]+1,0,int(pylab.axis()[3]*1.15)]
pylab.axis(masterAxis)
pylab.figtext(.4,.85,showSelected(),va='top')
pylab.show()
#fname=raw_input("Enter a name for this image to save it or press ENTER to quit:")
#if len(fname)>1:
#       pylab.savefig(fname+".png")
#       print "nsaved as [%s]"%(fname+".png")
#       raw_input("npress ENTER to exit...")

*Running this code* asks some questions about what type of information I should display. if I have it display all male OVE26 animals (for example) the output looks like this (thanks to matplotlib):

*Here the gray bars are the total number of all animals, and the blue bars are the animals I searched for* (in this case, all male ove26 animals). Comparing FVB and OVE26 charts, I estimated that we had enough male 4-5 month old OVE26 and FVB animals to make the experiment work (about 12 of each group). Searching for male ove26 mice at least 4 months and no older than 5 months old produces this chart:

See how it lists the location of each of the cages and the number of animals I want from each *cage?* For example, “d-I2(1)” means that there is a cage downstairs, along row I, in column 2, which contains 1 male OVE26 mouse 4 or 5 months old. Awesome list generation! Thanks Python =oD

*But wait, couldn’t I have just gone down and looked for 4-5 month old mice?* Yes and no. Yes, it would be easy to find (and mark) these mice, but no because I would not have known to look for them. The goal of yesterday’s little python project was to be able to see at one time everything we have, so I could best determine the criteria of the animals I wanted. Before I made this program, I was planning on comparing mice between 5 and 7 months – something that appears would have been impossible based on the animals we currently have. I can also tell what other experiments I will be able to do in a few months, when some of the mid-age FVB mice will grow older. Additionally, this program is versatile and can be used again and again, for many different projects, with no modification to the code required. Yay Python!



Disappointing Sweaters
Posted by
Scott December 19th, 2008 | 5,253 words | No Comments »


Scott was 23.24 years old when he wrote this!

Several months ago I had a bast attending a movie theater simulcast of Glenn Beck’s show “Unelectable”, which was essentially an hour of stand-up comedy followed by an hour of Glenn Beck pretending to running for the US presidency in 2008, delivering speeches filled with masterful political satire and some disturbingly transparent (and seemingly obvious) truth that no one seemed to be saying at the time, and was very good to hear. Before I lose anybody, I’d like to note that Glenn Beck is a popular conservative AM radio talk show host (currently the 3rd most listened to in the world, beat by Sean Hannity and Rush Limbaugh) that can be heard around the country from 9-12 EST. Anyhow, it was hilarious and amazingly entertaining. My wife and I arrived an hour early and a line of at least a hundred people was already formed. By the time the theater was filled, the crowd was incredibly rowdy and storms of laughter (and often clapping) were produced every time a joke was told. The attendees were an interesting group – mostly families and older generations (I’d say that 80% of the crowd was over 50). It was also impressively white! I think my wife was the only black person in the entire IMAX theater. I felt kind of special. Anyhow, here’s a little video I found from that night:

Like I said, the entire night was amazingly entertaining. My only regret is that I didn’t get to take the rest of my family! I thought my dad (not too sure about my mom), and my dad’s parents would have liked it. (My mom’s parents would have liked it too, but they don’t live in town) After I left, I said that I wished I bought all of them tickets (even though they were 20$ a seat – for a movie theater!). Yeah, it was that good. So when I heard that Glenn Beck would be simulcasting another event, I jumped on the chance! “The Christmas Sweater” was the title of this event, and I have to say (without going into too much detail) that it was very disappointing. I guess I was expecting something similar to the previous show – two hours of laughter. This was a stage show, in which Glenn Beck pranced around for two hours narrating and acting out each character of a Christmas story. The story was somewhat emotional (about his parents dying and him running away as a 13 year old), and vaguely reminiscent of his life it seemed. Far from a literary masterpiece, the story (that he wrote) contained the fatal “and I woke up and it was all a dream!” component, which made me regret going at all (and especially insisting that my parents attend!). I actually felt the need to apologize to them in the parking lot on the way to our cars. [Sigh] I considered getting the (newly released) DVD recording of “unelectable” for my dad for Christmas, but being that this event was such a flop (and therefore the connotation of anything Glenn Beck related in my parents’ eyes), I’ll be hunting for a different gift for him this year. Anyway, I need to get some lab work done today. Out.



Molecular Purgatory
Posted by
Scott December 17th, 2008 | 5,253 words | No Comments »


Scott was 23.23 years old when he wrote this!

In my program (the University of Central Florida’s Master of Science in Molecular Biology and Microbiology) there is a handbook distributed to each class during orientation. The handbook lists the requirements of the program. Presumably, when these requirements are met, one can graduate. It clearly states that you need 30 credit hours to graduate, of which 6 are thesis and 24 are non-thesis courses. Of the 24 hours of non-thesis coursework, there is a small list of required classes [core I (5hr), core II (5hr), Lab (4hr), Prac (2hr), Seminar I (1hr), and Seminar 2 (1hr)] totaling 18 hours. Therefore, since 24 hours are required, but required courses only total 18 hours, it’s assumed that one needs to take 6 hours of elective courses to make-up for this deficiency. I’m pulling my hair out today because my program advisor told me that I needed 10 hours of elective coursework to graduate – something that is not mentioned anywhere in the handbook. (To be accurate, there is a single passing mention of a single 3 hour elective course, but it’s to be taken to help reach the requirement of 24 non-thesis credit hours.) This change (requiring 10 hours of elective credit) was made after I began the program. I do not believe that the program has the right (ethically, or legally) to hold this change against me and prevent my graduation (preventing graduation means that even if I do get accepted into dental school, I could not attend, because acceptance is dependent upon completion of the program I’m in). I spent the last hour describing my plight to the members of the graduate office, in hopes that I can obtain legal documentation to support my case. This stuff is so frustrating. [sigh]

copyright © 2006 swharden@gmail.com