Description:

  • modeling of time for a DNA molecule to reach equilibrium in a CsCl gradient

Notes:

general

  • 1 Svedberg (S) unit = 10^-13
    • rate of sedimentation

parameters

  • density-gradient proportionality constant (Beta^o or B) = 1.14e9 /beta
  • average particle density in the gradient (D)
    • AKA, the buoyant density (g/cm^3) of particle in the salt (Pp)
  • cfg_rpm (R)
  • position of particle at equilibrium (P)
  • dna_length in bp (L)
  • sedimentation rate (S)
  • time in hours (T)

equations

$S = 2.8 + 0.00834 * (L*666)^{0.479}$

$T = 1.13e14 * \beta^o * (D-1) / (R^4 * P^2 * S)$

Notes from Dan's N-SIP paper

Buckley, D. H., Huangyutitham, V., Hsu, S. F., & Nelson, T. A. (2007). Stable Isotope Probing with 15N Achieved by Disentangling the Effects of Genome G+C Content and Isotope Enrichment on DNA Density. Applied and Environmental Microbiology, 73(10), 3189–3195. Retrieved from http://aem.asm.org/cgi/doi/10.1128/AEM.02609-06

  • random 5kb reads from any genome could vary by ~13%
    • this translates to ~0.0127 g/ml

In [1]:
%load_ext rmagic
%load_ext rpy2.ipython


/opt/anaconda/lib/python2.7/site-packages/pytz/__init__.py:29: UserWarning: Module argparse was already imported from /opt/anaconda/lib/python2.7/argparse.pyc, but /opt/anaconda/lib/python2.7/site-packages is being added to sys.path
  from pkg_resources import resource_stream

In [2]:
%%R
require(ggplot2)
require(gridExtra)


Loading required package: ggplot2
Loading required package: gridExtra
Loading required package: grid

Plotting buoyant density as a function of GC

Equations:

$\rho = 1.660 + 0.098 * GC$

$GC = (\rho - 1.66) / 0.098$

Where:

$GC = fraction\ of\ GC\ (GC content)$

$\rho = buoyant\ density$


In [3]:
%%R 
# GC range
GC = seq(0,1,0.1)

## GC_fraction = (p - 1.66) / 0.098
GC2buoyant.density = function(x){ (x * 0.098) + 1.66 }

BD = GC2buoyant.density(GC)

tbl = as.data.frame(cbind(GC,BD))

p = ggplot(tbl, aes(BD, GC)) +
        #geom_point(size=3) +
        geom_line() +
        labs(x='Buoyant density', y='GC content') +
        #coord_flip() +
        theme( text = element_text(size=18) )
print(p)


Plotting density-gradient proportionality constant (Beta^o) for CsCl as a function of density (25oC, g/cm)

  • from Ludlum and Warner (1965)

In [4]:
%%R -w 500 -h 350

density = seq(1.2,1.9,0.1)
B.o = c(2.04,1.55,1.33,1.22,1.17,1.14,1.12,1.12)

tbl = as.data.frame(cbind(density, B.o))
#colnames(tbl) = c('Density', 'Density-gradient proportionality constant')

p = ggplot(tbl, aes(density, B.o)) +
        geom_point(size=3) +
        geom_line() +
        labs(x='Density', y='Density-gradient\nproportionality constant') +
        theme( text = element_text(size=18)) +
        geom_vline(xintercept=1.7, linetype='dashed', alpha=0.5)
print(p)


Plotting dna fragment size as a function of time to equilibrium


In [5]:
%%R -w 800 -h 350

# rpm
R = 55000

# average particle density (DOE grant)
D = 1.70

# Beta^o
B = 1.14e9

# radius of the isoconcentration point from cfg center (AKA: r.p)
## position of the particle at equilibrium 
P = 3.78     # TLA110 rotor

# dna in bp from 0.1kb - 100kb
L = seq(100, 100000, 100)

# calculating S
S = 2.8 + (0.00834 * (L*666)^0.479)

# calculating T 
T = 1.13e14 * B * (D-1) / (R^4 * P^2 * S)

# plotting
tbl = as.data.frame(cbind(L/1000, T))
colnames(tbl) = c('DNA_length__kb', 'Time__h')

p = ggplot(tbl, aes(DNA_length__kb, Time__h)) +
        geom_point() +
        geom_line() +
        geom_hline(yintercept=66, linetype='dashed', alpha=0.5)  # DOE grant time
        


# plotting at sm
p.sub = ggplot(tbl, aes(DNA_length__kb, Time__h)) +
        geom_point() +
        geom_line() +
        scale_x_continuous(limits=c(0,5)) +
        scale_y_continuous(limits=c(0,200)) +
        geom_hline(yintercept=66, linetype='dashed', alpha=0.5)

vp = viewport(width=0.50, height=0.60, x = 0.70, y = 0.6)

print(p)
print(p.sub, vp=vp)


Assessing time to equilibrium across GC range

radius positions for density gradient spanning 1.660 - 1.760

  • using Dan's 'Centrifugal calcs.xls' file

    • 'Position at a given density'
    • assuming gradient average density of 1.7
  • radius for density of 1.660: 3.4 (cm)

  • radius for density of 1.760: 4.29 (cm)

In [9]:
%%R -w 14 -h 6 -u in
require(ggplot2)
require(reshape)

# radius top,bottom
r.top = 2.6
r.bottom = 4.85

# isoconcentration point
I = sqrt((r.top^2 + r.top * r.bottom + r.bottom^2)/3)

# rpm
R = 55000

# particle density
D = 1.70

# beta^o
B = 1.14e9

# dna in bp from 0.1kb - 100kb
L = seq(100, 100000, 100)

# angular velocity
w = ((2 * 3.14159 * R)/60)^2

# DNA GC content
G.C = seq(0.1, 0.9, 0.05)

# Molecular weight
# M.W in relation to GC content (dsDNA)
A = 313.2
T = 304.2
C = 289.2
G = 329.2
GC = G + C
AT = A + T
#GC2MW = function(x){ x*GC + (1-x)*AT + 157 }  # assuming 5' monophosphate on end of molecules
GC2MW = function(x){ x*GC + (1-x)*AT  }
M.W = sapply(G.C, GC2MW)

# buoyant density
## GC_fraction = (p - 1.66) / 0.098
GC2buoyant.density = function(x){ (x * 0.098) + 1.66 }
B.D = GC2buoyant.density(G.C)

# radius of the isoconcentration point from cfg center (AKA: r.p)
## position of the particle at equilibrium 
buoyant.density2radius = function(x){ sqrt( ((x-D)*2*B/w) + I^2 ) }
P = buoyant.density2radius(B.D)

# calculating S
S.fun = function(L){ 2.8 + (0.00834 * (L*M.W)^0.479) }
S = t(sapply( L, S.fun ))

# calculating T 
T = matrix(ncol=17, nrow=length(L))
for(i in 1:ncol(S)){
    T[,i] = 1.13e14 * B * (D-1) / (R^4 * P[i]^2 * S[,i])
}

## formating
T = as.data.frame(T)
colnames(T) = G.C
T$dna_size__kb = L / 1000
T.m = melt(T, id.vars=c('dna_size__kb'))
colnames(T.m) = c('dna_size__kb', 'GC_content', 'time__h')
#T.m$GC_content = as.numeric(as.character(T.m$GC_content))

## plotting
p = ggplot(T.m, aes(dna_size__kb, time__h, color=GC_content, group=GC_content)) +
        geom_line() +
        scale_y_continuous(limits=c(0,175)) +
        labs(x='DNA length (kb)', y='Time (h)') +
        scale_color_discrete(name='GC content') +
        #geom_hline(yintercept=66, linetype='dashed', alpha=0.5) +
        theme( 
            text = element_text(size=20),
            axis.text.x = element_text(color='black'),
            axis.text.y = element_text(color='black'),
            axis.title.x = element_text(vjust=0),
            axis.title.y = element_text(vjust=1)            
            )

#print(p)

# plotting at small scale
p.sub = ggplot(T.m, aes(dna_size__kb, time__h, color=GC_content, group=GC_content)) +
        geom_line() +
        scale_x_continuous(limits=c(0,5)) +
        scale_y_continuous(limits=c(0,175)) +
        labs(x='DNA length (kb)', y='Time (h)') +
        scale_color_discrete(name='GC content') +
        #geom_hline(yintercept=66, linetype='dashed', alpha=0.5) +
        theme( 
            text = element_text(size=16),
            axis.text.x = element_text(color='black'),
            axis.text.y = element_text(color='black'),
            axis.title.x = element_text(vjust=0),
            axis.title.y = element_text(vjust=1),            
            legend.position = 'none'
            ) 

vp = viewport(width=0.43, height=0.62, x = 0.65, y = 0.63)
print(p)
print(p.sub, vp=vp)

pdf("~/notebook/deltaGC_notes/data/CsCl_calc/time2Eq.pdf", width=14, height=6)
print(p)
print(p.sub, vp=vp)
dev.off()


png 
  2 

In [ ]: